VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
configurableMenu.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
7 
8 #pragma once
9 
16 #include <vrvCoreQt/DtMenuItem.h>
17 #include <vrvCoreQt/DtMenu.h>
19 #include <vrvCoreQt/DtMenuManager.h>
20 
21 #include <QtCore/QString>
22 
23 
24 namespace makVrv
25 {
26  class DtDe;
27 };
28 
29 namespace makVrf
30 {
32  {
33  public:
35  {
36  public:
37  SubToolbarPathBuilder(const std::string& path)
38  : ToolbarPathBuilder(path)
39  {
40  }
41  };
42 
43  DtSubToolbarPath(const makVrv::DtToolbarPath& p) : makVrv::DtToolbarPath(p) {};
44  DtSubToolbarPath(const std::string& p) : makVrv::DtToolbarPath(SubToolbarPathBuilder(p)) {};
45 
47  {
48  makVrv::DtToolbarPath::operator=(rhs);
49  return *this;
50  }
51 
53  {
54  makVrv::DtToolbarPath::operator=(rhs);
55  return *this;
56  }
57 
58  DtSubToolbarPath& operator=(const std::string& rhs)
59  {
60  myPath = rhs;
61  return *this;
62  }
63 
64  const std::string& path() const
65  {
67  }
68 
70  {
71  return SubToolbarPathBuilder(p.path());
72  }
73 
74  static SubToolbarPathBuilder path(const std::string& p)
75  {
76  return SubToolbarPathBuilder(p);
77  }
78  };
79 
81  {
82  public:
84  : makVrv::DtMenuManager()
85  , myDeleteMenus(false)
86  {
87  }
88 
89  void clear()
90  {
91  myMenuItems.clear();
92  myMenus.clear();
93  }
94 
95  void setDeleteMenus(bool b)
96  {
97  myDeleteMenus = b;
98  }
99 
100  bool deleteMenus() const
101  {
102  return myDeleteMenus;
103  }
104 
106  {
107  if (myDeleteMenus) cleanup();
108  }
109 
110  void cleanup();
111 
112  std::string findMenuPath(QMenu*) const;
113  std::string findItemPath(QAction*) const;
114 
115  protected:
117  };
118 
121  {
122  public:
124 
126  {
127  myMenuManager.clear();
128 
129  if (!myDeleteReferences)
130  {
131  myMenuBuilders.clear();
132  myMenuItemBuilders.clear();
133  }
134  else
135  {
136  cleanup();
137  }
138  }
139 
140  void setDeleteReferences(bool b)
141  {
142  myDeleteReferences = b;
143  }
144 
145  bool deleteReferences() const
146  {
147  return myDeleteReferences;
148  }
149 
150  void setLocalOnly(bool b)
151  {
152  myLocalOnly = b;
153  }
154 
155  void setLocalMenuManager(bool b)
156  {
157  myLocalMenuManager = b;
158  }
159 
161  virtual void assemble(const makVrv::DtMenuConfiguration& configuration);
162  virtual void fixCircularDependencies(DtSubMenuConfiguration& configuration) const;
163 
165  virtual bool hasCircularDependency(DtSubMenuConfiguration& configuration) const;
166 
167  bool localOnly() const
168  {
169  return myLocalOnly;
170  }
171 
172  void cleanup();
173 
176  {
177  if (myLocalMenuManager)
178  {
179  return myMenuManager;
180  }
181  else
182  {
183  return DtQtMenuAssembler::menuManager();
184  }
185  }
186 
188  {
189  if (myLocalMenuManager)
190  {
191  return myMenuManager;
192  }
193  else
194  {
195  return makVrv::DtMenuManager::instance(myDe);
196  }
197  }
198 
201  {
202  return menuManager().findMenu(path);
203  }
204 
206  {
207  return menuManager().findMenuItem(path);
208  }
209 
211  virtual void registerMenu(makVrv::DtMenu*);
212 
214  virtual void unregisterMenu(makVrv::DtMenu*, bool deleteBuilder = true);
215 
217  virtual void registerMenu(makVrv::DtMenuItem*);
218 
220  virtual void unregisterMenu(makVrv::DtMenuItem*, bool deleteBuilder = true);
221 
224  virtual void merge(const DtQtMenuAssembler::MenuBuilderMap&);
225 
228  virtual void merge(const DtQtMenuAssembler::MenuItemBuilderMap&);
229 
231  {
232  myMakeChangesTo.push_back(c);
233  }
234 
236  {
237  myMakeChangesTo.clear();
238  }
239 
240  virtual QMenuBar* menuBar()
241  {
242  if (myLocalOnly) return 0;
244  }
245 
246  virtual QWidget* menuWindow()
247  {
248  if (myLocalOnly) return 0;
250  }
251 
254  {
255  myCreateSubMenusForMissingMenus = b;
256  }
257 
258  virtual void assembleMenu(const makVrv::DtMenuPath& menuPath);
259 
260  protected:
262  virtual bool fixMenuPath(const makVrv::DtMenuPath& menuPath, DtSubMenuConfiguration& configuration, bool checkOnly = false) const;
263 
264  protected:
266  std::vector<makVrv::DtQtMenuAssembler*> myMakeChangesTo;
271  };
272 
275  {
276  public:
277 
279  DtConfigurableMenu(makVrv::DtDe&, const std::string& className);
280 
282  virtual ~DtConfigurableMenu();
283 
286  {
287  return myConfiguration;
288  }
289 
292  {
293  return myAssembler;
294  }
295 
299  virtual void registerMenu(makVrv::DtMenu* customMenu);
300 
304  virtual void registerMenuItem(makVrv::DtMenuItem* customMenuItem);
305 
306  virtual void createSimpleMenu(std::string menuText, makVrv::DtMenuPath menuIdPath, const makVrv::DtMenuConfiguration::MenuSortFlags& sortFlagsIfMenu =
309  virtual void createSimpleMenuAfter(std::string menuText, makVrv::DtMenuPath menuIdPath, makVrv::DtMenuPath afterIdPath);
310  virtual void createSimpleMenuBefore(std::string menuText, makVrv::DtMenuPath menuIdPath, makVrv::DtMenuPath beforeIdPath);
311 
312  virtual void createSimpleMenuItem(std::string itemText, makVrv::DtMenuPath itemIdPath,
313  DtSimpleMenuItemAction* action, void* usr = NULL, const makVrv::DtMenuConfiguration::MenuSortFlags& sortFlagsIfMenu =
316  virtual void createSimpleMenuItemAfter(std::string itemText, makVrv::DtMenuPath itemIdPath, makVrv::DtMenuPath afterIdPath,
317  DtSimpleMenuItemAction* action, void* usr = NULL);
318  virtual void createSimpleMenuItemBefore(std::string itemText, makVrv::DtMenuPath itemIdPath, makVrv::DtMenuPath beforeIdPath,
319  DtSimpleMenuItemAction* action, void* usr = NULL);
320 
323  virtual void mergeMenu(makVrv::DtQtMenuAssembler& assembler, makVrv::DtMenuConfiguration& configuration);
324 
327  virtual void mergeMenu(makVrv::DtQtMenuAssembler& assembler);
328 
330  virtual void mergeMenu(makVrv::DtMenuConfiguration& configuration);
331 
332  static bool hasMenuPath(const makVrv::DtMenuConfiguration& menus, const makVrv::DtMenuPath& sourcePath, const std::string& item, makVrv::DtMenuPath& foundPath);
333 
335  boost::signals2::signal<void (DtConfigurableMenu*)> signal_menuRecreated;
336 
337  protected:
338  virtual void initMenuItems(makVrv::DtDe& de);
339 
341  {
342  return myAssembler;
343  }
344 
346  {
347  return myConfiguration;
348  }
349 
351  virtual void createMenuConfiguration(makVrv::DtDe&) {};
352 
353  protected:
354  DtConfigurableMenuAssembler myAssembler;
358 
359  public:
360  boost::signals2::signal<void (QAction*)> signal_validateMenuItem;
361 
362  };
363 }
DtSubToolbarPath & operator=(const DtSubToolbarPath &rhs)
Definition: configurableMenu.h:46
DtSubToolbarPath & operator=(const std::string &rhs)
Definition: configurableMenu.h:58
Definition: DtToolbarPath.h:46
DtSubToolbarPath & operator=(const SubToolbarPathBuilder &rhs)
Definition: configurableMenu.h:52
DtSubMenuConfiguration & configuration()
Definition: configurableMenu.h:345
Definition: DtMenuConfiguration.h:59
const std::string & path() const
Definition: DtToolbarPath.h:136
virtual ~DtConfigurableMenuAssembler()
Definition: configurableMenu.h:125
Builder for menu items.
Definition: DtMenuItem.h:23
virtual QWidget * menuWindow()
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
bool deleteMenus() const
Definition: configurableMenu.h:100
void setLocalMenuManager(bool b)
Definition: configurableMenu.h:155
void setDeleteMenus(bool b)
Definition: configurableMenu.h:95
DtConfigurationMenuManager()
Definition: configurableMenu.h:83
bool myDeleteMenus
Definition: configurableMenu.h:116
virtual QWidget * menuWindow()
Definition: configurableMenu.h:246
void clear()
Definition: configurableMenu.h:89
virtual DtConfigurableMenuAssembler & menuAssembler()
Returns the assembler for the menu to be used. May be effected directly.
Definition: configurableMenu.h:291
void setLocalOnly(bool b)
Definition: configurableMenu.h:150
boost::signals2::signal< void(QAction *)> signal_validateMenuItem
Definition: configurableMenu.h:360
Subclass for additional functionality needed by VRF.
Definition: subMenuConfiguration.h:73
bool myInitialized
Definition: configurableMenu.h:356
A Qt implementation of a DtMenuAssembler.
Definition: DtQtMenuAssembler.h:26
static SubToolbarPathBuilder path(const std::string &p)
Definition: configurableMenu.h:74
bool myDeleteReferences
Definition: configurableMenu.h:267
Contains makVrv::DtMenuManager class.
DtSubToolbarPath(const makVrv::DtToolbarPath &p)
Definition: configurableMenu.h:43
Contains makVrv::DtQtMenuAssembler class.
void setCreateSubMenusForMissingMenus(bool b)
If true, for any missing sub-menu item, create a menu builder and add it. Default is false...
Definition: configurableMenu.h:253
virtual QMenuBar * menuBar()
Definition: configurableMenu.h:240
Contains makVrv::DtVirtualBaseClass class.
bool myCreateSubMenusForMissingMenus
Definition: configurableMenu.h:269
static DtMenuManager & instance(DtDe &de)
Get an instance of the Menu manager.
makVrv::DtMenuManager & menuManager()
Returns menu manager.
Definition: configurableMenu.h:175
The menu manager can be used to lookup registered QMenu and QAction objects based on their menu paths...
Definition: DtMenuManager.h:38
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
SubToolbarPathBuilder(const std::string &path)
Definition: configurableMenu.h:37
Definition: configurableMenu.h:34
a Class which represents a menu path. The specific strings are not menu text, but the names used when...
Definition: DtMenuPath.h:27
#define DT_DLL_VRFGUICOMMONQT
Definition: vrfGuiCommonQt.h:20
bool deleteReferences() const
Definition: configurableMenu.h:145
void( DtSimpleMenuItemAction)(makVrv::DtDe &de, void *usr)
Function that can be called by a DtSimpleMenuItem. Gives the de and a pointer to the object that was ...
Definition: simpleMenu.h:23
boost::signals2::signal< void(DtConfigurableMenu *)> signal_menuRecreated
Signal sent when this menu is recreated from it&#39;s original creation.
Definition: configurableMenu.h:335
void setDeleteReferences(bool b)
Definition: configurableMenu.h:140
The abstract base menu class.
Definition: DtMenu.h:23
Definition: configurableMenu.h:80
Base class to provide boost signal/slot management.
Definition: DtMenuConfiguration.h:58
Contains makVrv::DtToolbarConfiguration class.
a Class which represents a toolbar path. The specific strings are not toolbar text, but the names used when registering toolbarBuilder, menuBuilder and menuItemBuilder instances.
Definition: DtToolbarPath.h:40
virtual QMenuBar * menuBar()
DtSubToolbarPath(const std::string &p)
Definition: configurableMenu.h:44
virtual ~DtConfigurationMenuManager()
Definition: configurableMenu.h:105
makVrv::DtSignalConnectionManager myConnections
Definition: configurableMenu.h:357
std::vector< makVrv::DtQtMenuAssembler * > myMakeChangesTo
Definition: configurableMenu.h:266
A configuration of a menu layout. A menu configuration manages an ordered collection of menu paths th...
Definition: DtMenuConfiguration.h:43
virtual DtSubMenuConfiguration & menuConfiguration()
Returns the configuration for the menu to be used. May be effected directly.
Definition: configurableMenu.h:285
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:70
DtConfigurableMenuAssembler & assembler()
Definition: configurableMenu.h:340
const std::string & path() const
Definition: configurableMenu.h:64
void makeChangesTo(makVrv::DtQtMenuAssembler *c)
Definition: configurableMenu.h:230
const makVrv::DtMenuManager & menuManager() const
Definition: configurableMenu.h:187
Definition: configurableMenu.h:273
Definition: DtMenuConfiguration.h:60
DtSubMenuConfiguration myConfiguration
Definition: configurableMenu.h:355
QMenu * findMenu(const makVrv::DtMenuPath &path)
Returns the QMenu object for the given path.
Definition: configurableMenu.h:200
bool myLocalMenuManager
Definition: configurableMenu.h:270
DtConfigurationMenuManager myMenuManager
Definition: configurableMenu.h:265
bool localOnly() const
Definition: configurableMenu.h:167
bool myLocalOnly
Definition: configurableMenu.h:268
MenuSortFlags
The SortAllAlphabetically, SortWithinSubmenus, SortBetweenSeparators, and SortBetweenSubMenus flags c...
Definition: DtMenuConfiguration.h:55
void clearMakeChangesTo()
Definition: configurableMenu.h:235
QAction * findMenuItem(const makVrv::DtMenuPath &path)
Definition: configurableMenu.h:205
static SubToolbarPathBuilder path(const makVrv::DtToolbarPath &p)
Definition: configurableMenu.h:69
Definition: configurableMenu.h:31
Used by menu classes to modify menu registrations in a menu.
Definition: configurableMenu.h:120

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)