VR-Forces 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 
105  virtual ~DtConfigurationMenuManager() override
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 
125  virtual ~DtConfigurableMenuAssembler() override
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) override;
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 
175  virtual makVrv::DtMenuManager& menuManager() override
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  virtual void unregisterMenu(const std::string&);
216  virtual void unregisterMenuItem(const std::string&);
217 
219  virtual void registerMenu(makVrv::DtMenuItem*);
220 
222  virtual void unregisterMenu(makVrv::DtMenuItem*, bool deleteBuilder = true);
223 
226  virtual void merge(const DtQtMenuAssembler::MenuBuilderMap&) override;
227 
230  virtual void merge(const DtQtMenuAssembler::MenuItemBuilderMap&) override;
231 
233  {
234  myMakeChangesTo.push_back(c);
235  }
236 
238  {
239  myMakeChangesTo.clear();
240  }
241 
242  virtual QMenuBar* menuBar() override
243  {
244  if (myLocalOnly) return 0;
246  }
247 
248  virtual QWidget* menuWindow() override
249  {
250  if (myLocalOnly) return 0;
252  }
253 
256  {
257  myCreateSubMenusForMissingMenus = b;
258  }
259 
260  virtual void assembleMenu(const makVrv::DtMenuPath& menuPath) override;
261 
262  protected:
264  virtual bool fixMenuPath(const makVrv::DtMenuPath& menuPath, DtSubMenuConfiguration& configuration, bool checkOnly = false) const;
265 
266  protected:
268  std::vector<makVrv::DtQtMenuAssembler*> myMakeChangesTo;
273  };
274 
277  {
278  public:
279 
281  DtConfigurableMenu(makVrv::DtDe&, const std::string& className);
282 
284  virtual ~DtConfigurableMenu() override;
285 
288  {
289  return myConfiguration;
290  }
291 
294  {
295  return myAssembler;
296  }
297 
301  virtual void registerMenu(makVrv::DtMenu* customMenu);
302 
306  virtual void registerMenuItem(makVrv::DtMenuItem* customMenuItem);
307 
308  virtual void createSimpleMenu(std::string menuText, makVrv::DtMenuPath menuIdPath, const makVrv::DtMenuConfiguration::MenuSortFlags& sortFlagsIfMenu =
311  virtual void createSimpleMenuAfter(std::string menuText, makVrv::DtMenuPath menuIdPath, makVrv::DtMenuPath afterIdPath);
312  virtual void createSimpleMenuBefore(std::string menuText, makVrv::DtMenuPath menuIdPath, makVrv::DtMenuPath beforeIdPath);
313 
314  virtual void createSimpleMenuItem(std::string itemText, makVrv::DtMenuPath itemIdPath,
315  DtSimpleMenuItemAction* action, void* usr = NULL, const makVrv::DtMenuConfiguration::MenuSortFlags& sortFlagsIfMenu =
318  virtual void createSimpleMenuItemAfter(std::string itemText, makVrv::DtMenuPath itemIdPath, makVrv::DtMenuPath afterIdPath,
319  DtSimpleMenuItemAction* action, void* usr = NULL);
320  virtual void createSimpleMenuItemBefore(std::string itemText, makVrv::DtMenuPath itemIdPath, makVrv::DtMenuPath beforeIdPath,
321  DtSimpleMenuItemAction* action, void* usr = NULL);
322 
325  virtual void mergeMenu(makVrv::DtQtMenuAssembler& assembler, makVrv::DtMenuConfiguration& configuration);
326 
329  virtual void mergeMenu(makVrv::DtQtMenuAssembler& assembler);
330 
332  virtual void mergeMenu(makVrv::DtMenuConfiguration& configuration);
333 
334  static bool hasMenuPath(const makVrv::DtMenuConfiguration& menus, const makVrv::DtMenuPath& sourcePath, const std::string& item, makVrv::DtMenuPath& foundPath);
335 
337  boost::signals2::signal<void (DtConfigurableMenu*)> signal_menuRecreated;
338 
339  protected:
340  virtual void initMenuItems(makVrv::DtDe& de);
341 
343  {
344  return myAssembler;
345  }
346 
348  {
349  return myConfiguration;
350  }
351 
353  virtual void createMenuConfiguration(makVrv::DtDe&) {};
354 
355  protected:
356  DtConfigurableMenuAssembler myAssembler;
360 
361  public:
362  boost::signals2::signal<void (QAction*)> signal_validateMenuItem;
363 
364  };
365 }
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:347
Definition: DtMenuConfiguration.h:59
const std::string & path() const
Definition: DtToolbarPath.h:136
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
void clear()
Definition: configurableMenu.h:89
virtual makVrv::DtMenuManager & menuManager() override
Returns menu manager.
Definition: configurableMenu.h:175
virtual DtConfigurableMenuAssembler & menuAssembler()
Returns the assembler for the menu to be used. May be effected directly.
Definition: configurableMenu.h:293
void setLocalOnly(bool b)
Definition: configurableMenu.h:150
boost::signals2::signal< void(QAction *)> signal_validateMenuItem
Definition: configurableMenu.h:362
virtual ~DtConfigurableMenuAssembler() override
Definition: configurableMenu.h:125
Subclass for additional functionality needed by VRF.
Definition: subMenuConfiguration.h:73
bool myInitialized
Definition: configurableMenu.h:358
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:269
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:255
Contains makVrv::DtVirtualBaseClass class.
bool myCreateSubMenusForMissingMenus
Definition: configurableMenu.h:271
static DtMenuManager & instance(DtDe &de)
Get an instance of the Menu manager.
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:337
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.
virtual QWidget * menuWindow() override
Definition: configurableMenu.h:248
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
makVrv::DtSignalConnectionManager myConnections
Definition: configurableMenu.h:359
std::vector< makVrv::DtQtMenuAssembler * > myMakeChangesTo
Definition: configurableMenu.h:268
virtual ~DtConfigurationMenuManager() override
Definition: configurableMenu.h:105
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:287
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:76
DtConfigurableMenuAssembler & assembler()
Definition: configurableMenu.h:342
const std::string & path() const
Definition: configurableMenu.h:64
void makeChangesTo(makVrv::DtQtMenuAssembler *c)
Definition: configurableMenu.h:232
const makVrv::DtMenuManager & menuManager() const
Definition: configurableMenu.h:187
Definition: configurableMenu.h:275
Definition: DtMenuConfiguration.h:60
DtSubMenuConfiguration myConfiguration
Definition: configurableMenu.h:357
QMenu * findMenu(const makVrv::DtMenuPath &path)
Returns the QMenu object for the given path.
Definition: configurableMenu.h:200
bool myLocalMenuManager
Definition: configurableMenu.h:272
DtConfigurationMenuManager myMenuManager
Definition: configurableMenu.h:267
bool localOnly() const
Definition: configurableMenu.h:167
bool myLocalOnly
Definition: configurableMenu.h:270
MenuSortFlags
The SortAllAlphabetically, SortWithinSubmenus, SortBetweenSeparators, and SortBetweenSubMenus flags c...
Definition: DtMenuConfiguration.h:55
void clearMakeChangesTo()
Definition: configurableMenu.h:237
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
virtual QMenuBar * menuBar() override
Definition: configurableMenu.h:242

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)