VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfTaskSetMenu.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 #pragma once
7 
8 #if !defined(Q_MOC_RUN)
12 #include <vrfutil/rwUUID.h>
16 #include <vrvCoreQt/DtMenuItem.h>
20 #include <vrvCore/DtStateView.h>
21 #include <vrvCore/DtEntityState.h>
22 #endif
23 #include <boost/signals2.hpp>
24 
25 #include <QtWidgets/QAction>
26 
27 class QEvent;
28 class DtSimTask;
29 class QToolBar;
30 
31 namespace makVrv
32 {
33  class DtSimEntry;
34 }
35 
36 namespace makVrf
37 {
38  class DtVrfBackendState;
39  class DtVrfTaskSetMenu;
40  class DtScriptedTaskConfigurableMenu;
41  class DtTaskSetDialogInterface;
42  class DtVrfTaskSetAction;
43  class DtCommandAssignmentWidgetInterface;
44 
52  {
53  Q_OBJECT
54 
55  public:
56  enum MenuType
57  {
58  TaskMenu = 1,
59  SetMenu = 2
60  };
61 
63  DtVrfTaskSetMenu(const std::string& className, const QString& title, int flags, QWidget* parent, makVrv::DtDe&,
64  const DtSubMenuConfiguration& c);
65 
67  virtual ~DtVrfTaskSetMenu();
68 
69  virtual void setValidate(bool b);
70 
72  virtual void setShowAllItems(bool b);
73 
80  virtual void setPartOfPlanDialog(int b);
81  virtual void setEntitySet(const makVrv::DtSelectionManager::IdSet& set);
82  virtual void setMenuItemValidation(bool b);
83 
86  virtual void setHideDisabledItem(bool yesNo);
87 
89  virtual void setSignalDialogCreation(bool b);
90 
91  virtual void setFlags(int flags);
92 
93  bool signalDialogCreation() const
94  {
95  return mySignalDialogCreation;
96  }
97 
98  virtual void setValidationsDisabled(bool);
99  bool validationsDisabled() const
100  {
101  return myValidationsDisabled;
102  }
103 
106  virtual void setSignalTaskSetRequests(bool b);
107 
109  {
110  return mySignalTaskSetRequests;
111  }
112 
113  int partOfPlanDialog() const
114  {
115  return myPartOfPlanDialog;
116  }
117 
118  virtual bool hasPendingRequests() const;
119 
121  {
122  return myEntitySet;
123  }
124 
126  virtual MenuType menuType() const = 0;
127 
129  virtual void setAlwaysStartAsEnabled(bool b);
130 
131  bool alwaysStartAsEnabled() const
132  {
133  return myAlwaysStartAsEnabled;
134  }
135 
138  {
139  myValidateIfNoPendingRequests = b;
140  }
141 
143  {
144  return myValidateIfNoPendingRequests;
145  }
146 
148  virtual makVrv::DtSelectionManager::IdSet selectionsToUseForTaskSetDialog() const;
149 
151  {
152  myParentMenu = p;
153  }
154 
156  {
157  return myParentMenu;
158  }
159 
161  virtual void clearMenu();
162 
166  virtual bool updateSubMenuVisibilityState(QMenu*, bool hasRadio = true, bool* anyEnabled = nullptr);
167 
168  typedef std::map<int, std::set<QAction*> > TaskActions;
169 
170  const TaskActions& taskActions() { return myTaskSetActions; };
171 
172  virtual void filterByTaskCategory(const DtString&);
173  virtual void removeFilterByTaskCategory(const DtString&);
174  const std::set<DtString>& filterByTaskCategories() const
175  {
176  return myFilterByTaskCategories;
177  }
178 
179  virtual std::set<QAction*> actionsThatSupport(int) const;
180 
183  virtual void setMenuProxy(DtScriptedTaskConfigurableMenu*);
184  virtual DtScriptedTaskConfigurableMenu* menuProxy();
185 
186  virtual const char* supportedToolbar() const = 0;
187  virtual const char* supportedMenu() const = 0;
188  virtual const DtSubMenuConfiguration& defaultMenuConfiguration() const = 0;
189  virtual const makVrv::DtQtMenuAssembler::MenuBuilderMap& defaultMenuBuilderMap() const = 0;
190  virtual const makVrv::DtQtMenuAssembler::MenuItemBuilderMap& defaultMenuItemBuilderMap() const = 0;
191  virtual void recreateMenu() = 0;
192  virtual DtScriptedTaskConfigurableMenu* mainMenuInstance() = 0;
193 
194  virtual void sortMenu();
195 
197  virtual void editingDialog(DtTaskSetDialogInterface*);
198 
199  DtTaskSetDialogInterface* currentDialog() { return myCurrentDialog; };
200 
202  virtual bool hasSupportFor(const DtSetMessageType&) const;
203 
205  virtual bool hasSupportFor(const DtSimTaskMessageType&) const;
206 
208  virtual bool hasSupportForActionType(int) const;
209  virtual void validateMenuItems(int terrainPatchOffset);
210 
211  public:
212  boost::signals2::signal<void (std::vector<DtUUID> names, const DtSetDataRequest&)> signal_sendSetRequest;
213  boost::signals2::signal<void (std::vector<DtUUID> names, const DtSimTask&)> signal_sendTaskRequest;
214  boost::signals2::signal<void (QAction*)> signal_validateMenuItem;
215  boost::signals2::signal<void ()> signal_menuValidated;
216  boost::signals2::signal<void ()> signal_menuCleared;
217 
219  boost::signals2::signal<void (DtTaskSetDialogInterface*)> signal_dialogCreated;
220 
223  boost::signals2::signal<void (DtTaskSetDialogInterface*)> signal_dialogDestroyed;
224  boost::signals2::signal<void (DtCommandAssignmentWidgetInterface*)> signal_commandDialogDestroyed;
225 
226  virtual void slot_sendSetRequest(std::vector<DtUUID> names, const DtSetDataRequest& s);
227  virtual void slot_sendTaskRequest(std::vector<DtUUID> names, const DtSimTask& s);
228 
230  virtual void slot_createTaskSetDialog(int menuItemType, QWidget*, DtVrfTaskSetAction*,
231  const std::vector<makVrv::DtSimEntry*>&, int);
232  boost::signals2::signal<void (int menuItemType, QWidget*, DtVrfTaskSetAction*,
233  const std::vector<makVrv::DtSimEntry*>&, int, DtVrfTaskSetMenu*)> signal_createTaskSetDialog;
234 
236  virtual void signalCommandDialogCreation(int menuItemType, QWidget* parent, DtVrfTaskSetAction* forAction,
237  const std::vector<makVrv::DtSimEntry*>& data, int partOfPlan);
238  boost::signals2::signal<void (int menuItemType, QWidget*, DtVrfTaskSetAction*,
239  const std::vector<makVrv::DtSimEntry*>&, int, DtVrfTaskSetMenu*)> signal_createCommandDialog;
240 
243  virtual void mergeChangesFrom(const std::string& menu, const DtSubMenuConfiguration&, DtSubMenuConfiguration&,
244  bool maintainOriginalOrder = false);
245  virtual makVrv::DtSelectionManager::IdSet selectionToUseToValidate() const;
246 
247  public slots:
248  virtual void validate();
249 
250  protected slots:
251  virtual void radioMenuDestroyed();
252  virtual void dialogDestroyed();
253 
254  protected:
257  virtual void renameIfDuplicate(QAction*);
258 
261  virtual QString alternateName(QAction*) const;
262 
265  virtual void revalidate(makVrv::DtUniqueID);
266 
267  virtual bool eventFilter(QObject *, QEvent *);
268  virtual void actionAdded(QEvent*);
269  virtual void addTaskAction(QAction*);
270  virtual void rebuildToolbar(const std::string&);
271 
272  virtual void slot_taskSetMenuSortChanged(bool);
273 
274  virtual void slot_backendUpdated(const DtVrfBackendState&, int);
275  virtual bool available(int menu, std::set<int>& l) const;
276 
277  virtual bool needsValidation() const;
278 
281  virtual void availableMenuItems(
282  const makVrv::DtSelectionManager::IdSet& selections,
283  std::set<int>& available,
284  bool noTaskSetValueMeansAll);
285 
287  virtual bool isFilteredByTaskCategories(const DtEntityType&, int) const;
288 
289  virtual bool shouldAddAsPartOfMenu(const QList<QAction*>& acts, QAction* toMatch) const;
290 
291  virtual void destroyActions(const QList<QAction*>& actions);
292 
293  virtual void stateRemoved(const makVrv::DtStateView<makVrv::DtVrlinkSimulatedBaseState>* state);
294 
296  //
299  virtual void setupMenu(const makVrv::DtMenuConfiguration& initialCreateMenuConfiguration = makVrv::DtMenuConfiguration(),
300  const makVrv::DtToolbarConfiguration& initialCreateToolbarConfiguration = makVrv::DtToolbarConfiguration(),
301  bool useGlobalMenuManager = false, bool recreateToolbars = false);
302 
303  protected:
313  std::vector<DtVrfTaskSetMenu*> myRadioMenus;
315  std::string myClassName;
327  std::set<DtString> myFilterByTaskCategories;
328  int myFlags;
329  };
330 
332  {
333  public:
334  DtMenuReadyMenuManager() : makVrv::DtMenuManager()
335  {
336  }
337 
338  void clear()
339  {
340  myMenuItems.clear();
341  myMenus.clear();
342  }
343  };
344 
347  {
348  public:
349  DtMenuReadyMenuAssembler(makVrv::DtDe&, QWidget*, QMenuBar*);
350 
352  {
353  myMenuManager.clear();
354 
355  myMenuBuilders.clear();
356  myMenuItemBuilders.clear();
357  }
358 
359  virtual void unregisterMenu(const std::string& s)
360  {
361  makVrv::DtMenu* b = menuBuilder(s);
362 
363  if (b)
364  {
365  MenuBuilderMap::iterator iter = myMenuBuilders.begin();
366 
367  while (iter != myMenuBuilders.end())
368  {
369  if (iter->second == b)
370  {
371  myMenuBuilders.erase(iter);
372  }
373  ++iter;
374  }
375  }
376  }
377 
379  QMenuBar* menuBar()
380  {
381  return myMenuBar;
382  }
383 
385  virtual QWidget* menuWindow();
386 
388  virtual makVrv::DtMenuManager& menuManager();
389 
392  {
393  return myMenuManager.findMenu(path);
394  }
395 
396  protected:
397  QWidget* myMainWindow;
398  QMenuBar* myMenuBar;
400  };
401 }
bool myConnectedForValidate
Definition: vrfTaskSetMenu.h:317
Definition: vrfBackendState.h:69
bool myHideDisabledItems
Definition: vrfTaskSetMenu.h:316
Definition: vrfTaskSetMenu.h:51
bool mySignalDialogCreation
Definition: vrfTaskSetMenu.h:312
boost::unordered_map< std::string, DtMenuItem * > MenuItemBuilderMap
Definition: DtQtMenuAssembler.h:31
TaskActions myTaskSetActions
Definition: vrfTaskSetMenu.h:304
boost::signals2::signal< void()> signal_menuCleared
Definition: vrfTaskSetMenu.h:216
boost::signals2::signal< void(DtTaskSetDialogInterface *)> signal_dialogDestroyed
Signal sent when the current editing dialog is destroyed. Will not be sent if this menu is being dest...
Definition: vrfTaskSetMenu.h:223
int myFlags
Definition: vrfTaskSetMenu.h:328
int partOfPlanDialog() const
Definition: vrfTaskSetMenu.h:113
Definition: vrfTaskSetMenu.h:331
QWidget * myMainWindow
Definition: vrfTaskSetMenu.h:397
boost::signals2::signal< void(QAction *)> signal_validateMenuItem
Definition: vrfTaskSetMenu.h:214
bool alwaysStartAsEnabled() const
Definition: vrfTaskSetMenu.h:131
bool myRecreateMenuOnSelectionChange
Definition: vrfTaskSetMenu.h:321
bool signalTaskSetRequests() const
Definition: vrfTaskSetMenu.h:108
const TaskActions & taskActions()
Definition: vrfTaskSetMenu.h:170
Definition: taskSetDialogInterface.h:84
Contains makVrv:DtSelectionManager class.
Contains makVrv::DtStateView class.
std::map< int, std::set< QAction * > > TaskActions
Definition: vrfTaskSetMenu.h:168
Subclass for additional functionality needed by VRF.
Definition: subMenuConfiguration.h:73
Contains the DtUUID class declaration.
boost::signals2::signal< void(DtTaskSetDialogInterface *)> signal_dialogCreated
Signal emitted when task/set dialog is created the myCurrentDialog will hold this dialog...
Definition: vrfTaskSetMenu.h:219
A Qt implementation of a DtMenuAssembler.
Definition: DtQtMenuAssembler.h:26
makVrv::DtSelectionManager::IdSet myEntitySet
Definition: vrfTaskSetMenu.h:305
void clear()
Definition: vrfTaskSetMenu.h:338
std::set< DtString > myFilterByTaskCategories
Definition: vrfTaskSetMenu.h:327
void setValidateIfNoPendingRequests(bool b)
Validate even if there are prending requests. Default is true.
Definition: vrfTaskSetMenu.h:137
QMenuBar * myMenuBar
Definition: vrfTaskSetMenu.h:398
QMenuBar * menuBar()
If main menu, returns menu bar to add menu to.
Definition: vrfTaskSetMenu.h:379
DtTaskSetDialogInterface * myCurrentDialog
Definition: vrfTaskSetMenu.h:323
Contains makVrv::DtMenuManager class.
bool validateIfNoPendingRequests() const
Definition: vrfTaskSetMenu.h:142
DtSubMenuConfiguration myConfiguration
Definition: vrfTaskSetMenu.h:322
bool myValidateIfNoPendingRequests
Definition: vrfTaskSetMenu.h:325
Contains makVrv::DtQtMenuAssembler class.
bool myHasBeenValidatedOnce
Definition: vrfTaskSetMenu.h:326
const makVrv::DtSelectionManager::IdSet & entitySet() const
Definition: vrfTaskSetMenu.h:120
boost::signals2::signal< void(int menuItemType, QWidget *, DtVrfTaskSetAction *, const std::vector< makVrv::DtSimEntry * > &, int, DtVrfTaskSetMenu *)> signal_createTaskSetDialog
Definition: vrfTaskSetMenu.h:233
DtSetDataRequest is an abstract base class from which real setDataRequests can derive. It manages the read/write capability; derived classes need only use and register read/writatble data types for derived information.
Definition: setDataRequest.h:41
bool myMenuItemValidation
Definition: vrfTaskSetMenu.h:309
Contains makVrv::DtVirtualBaseClass class.
bool myAlwaysStartAsEnabled
Definition: vrfTaskSetMenu.h:324
DtMenuReadyMenuManager()
Definition: vrfTaskSetMenu.h:334
bool myUseGlobalMenuManager
Definition: vrfTaskSetMenu.h:320
bool mySignalTaskSetRequests
Definition: vrfTaskSetMenu.h:311
int myPartOfPlanDialog
Definition: vrfTaskSetMenu.h:310
Container class that will create instances of scripted task configurable menu.
Definition: scriptedTaskConfigurableMenu.h:38
boost::unordered_map< std::string, DtMenu * > MenuBuilderMap
Definition: DtQtMenuAssembler.h:30
boost::signals2::signal< void(int menuItemType, QWidget *, DtVrfTaskSetAction *, const std::vector< makVrv::DtSimEntry * > &, int, DtVrfTaskSetMenu *)> signal_createCommandDialog
Definition: vrfTaskSetMenu.h:239
The menu manager can be used to lookup registered QMenu and QAction objects based on their menu paths...
Definition: DtMenuManager.h:38
A menu that validates itself on selection.
Definition: selectionEnabledMenu.h:57
Contains makVrv::DtVrlinkSimulatedEntityState class.
virtual void unregisterMenu(const std::string &s)
Definition: vrfTaskSetMenu.h:359
boost::signals2::signal< void()> signal_menuValidated
Definition: vrfTaskSetMenu.h:215
bool validationsDisabled() const
Definition: vrfTaskSetMenu.h:99
a Class which represents a menu path. The specific strings are not menu text, but the names used when...
Definition: DtMenuPath.h:27
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
DtVrfTaskSetMenu * myParentMenu
Definition: vrfTaskSetMenu.h:314
virtual ~DtMenuReadyMenuAssembler()
Definition: vrfTaskSetMenu.h:351
std::vector< DtVrfTaskSetMenu * > myRadioMenus
Definition: vrfTaskSetMenu.h:313
DtVrfTaskSetMenu * parentMenu()
Definition: vrfTaskSetMenu.h:155
The abstract base menu class.
Definition: DtMenu.h:23
const std::set< DtString > & filterByTaskCategories() const
Definition: vrfTaskSetMenu.h:174
bool myValidate
Definition: vrfTaskSetMenu.h:306
DtSimTask is an abstract base class from which real tasks can derive. It manages the read/write capab...
Definition: simTask.h:30
MenuType
Definition: vrfTaskSetMenu.h:56
Assembler to use specifically for putting into a widget (not the main menu)
Definition: vrfTaskSetMenu.h:346
DtMenuReadyMenuManager myMenuManager
Definition: vrfTaskSetMenu.h:399
A configuration of the toolbar layout.
Definition: DtToolbarConfiguration.h:25
DtTaskSetDialogInterface * currentDialog()
Definition: vrfTaskSetMenu.h:199
boost::signals2::signal< void(DtCommandAssignmentWidgetInterface *)> signal_commandDialogDestroyed
Definition: vrfTaskSetMenu.h:224
Definition: translator.h:58
A configuration of a menu layout. A menu configuration manages an ordered collection of menu paths th...
Definition: DtMenuConfiguration.h:43
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
Contains makVrf::DtTaskSetMenu, makVrf::DtVrfTaskSetAction, and makVrf::DtTaskSetMenuItem class...
Definition: vrfTaskSetAction.h:106
QMenu * findMenu(const makVrv::DtMenuPath &path)
Returns the QMenu for the given path.
Definition: vrfTaskSetMenu.h:391
bool myRecreateToolbars
Definition: vrfTaskSetMenu.h:319
bool myShowAllItems
Definition: vrfTaskSetMenu.h:308
#define DT_DLL_VRFGUITASKSETQT
Definition: vrfGuiTaskSetQt.h:22
std::set< DtUniqueID > IdSet
Definition: DtSelectionManager.h:32
bool myValidationsDisabled
Definition: vrfTaskSetMenu.h:307
DtScriptedTaskConfigurableMenu * myMenuProxy
Definition: vrfTaskSetMenu.h:318
bool signalDialogCreation() const
Definition: vrfTaskSetMenu.h:93
std::string myClassName
Definition: vrfTaskSetMenu.h:315
void setParentMenu(DtVrfTaskSetMenu *p)
Definition: vrfTaskSetMenu.h:150

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)