![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: popupMenu.h,v $ $Revision: 1.42 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DTPOPUPMENU_H 00013 #define DTPOPUPMENU_H 00014 00015 #include "commonWgt/commonWgtDefines.h" 00016 #include "vrfGuiCore/menuItems.h" 00017 00018 #include <QtGui/QMenu> 00019 #include <QtGui/QAction> 00020 #include <QtCore/QList> 00021 #include <QtCore/QHash> 00022 00023 class DtMenuWidget; 00024 class DtFeatureActionManager; 00025 00028 00030 class DT_DLL_commonWgt DtPopupMenuItem 00031 { 00032 public: 00033 DtPopupMenuItem() : myPos(-1), myIsSeparator(false), myAddSeparator(false), myIsToggle(false), myIsOn(false), 00034 myType(DtNoMenuItem), myGroup(DtNoMenuItem), myIsActionItem(false), myProcessed(false), myMenu(DtNoMenu) {}; 00035 00036 DtPopupMenuItem(const DtPopupMenuItem& orig) : 00037 myText(orig.myText), 00038 myToolTip(orig.myToolTip), 00039 myAccel(orig.myAccel), 00040 myName(orig.myName), 00041 myObjectName(orig.myObjectName), 00042 myPos(orig.myPos), 00043 myIsSeparator(orig.myIsSeparator), 00044 myAddSeparator(orig.myAddSeparator), 00045 myIsToggle(orig.myIsToggle), 00046 myIsOn(orig.myIsOn), 00047 myIsActionItem(orig.myIsActionItem), 00048 myType(orig.myType), 00049 myGroup(orig.myGroup), 00050 myMenu(orig.myMenu), 00051 myProcessed(false) 00052 { 00053 } 00054 00055 bool operator==(const DtPopupMenuItem& orig) const 00056 { 00057 return ((myText == orig.myText) && 00058 (myToolTip == orig.myToolTip) && 00059 (myAccel == orig.myAccel) && 00060 (myName == orig.myName) && 00061 (myObjectName == orig.myObjectName) && 00062 (myIsSeparator == orig.myIsSeparator) && 00063 (myAddSeparator == orig.myAddSeparator) && 00064 (myIsToggle == orig.myIsToggle) && 00065 (myIsOn == orig.myIsOn) && 00066 (myIsActionItem == orig.myIsActionItem) && 00067 (myType == orig.myType) && 00068 (myMenu == orig.myMenu) && 00069 (myGroup == orig.myGroup)); 00070 } 00071 00072 public: 00073 QString myText; 00074 QString myToolTip; 00075 QString myAccel; 00076 QString myName; 00077 QString myObjectName; 00078 int myPos; 00079 bool myIsSeparator; 00080 bool myAddSeparator; 00081 bool myIsToggle; 00082 bool myIsOn; 00083 bool myIsActionItem; 00084 DtMenuItemType myType; 00085 DtMenuItemType myGroup; 00086 DtMainMenuType myMenu; 00087 bool myProcessed; 00088 }; 00089 00090 class DT_DLL_commonWgt DtMenuItemValidator 00091 { 00092 public: 00093 DtMenuItemValidator(QObject* vc, const char* v) : myValidatorCall(vc), myValidator(v) {}; 00094 DtMenuItemValidator(const DtMenuItemValidator& orig) : 00095 myValidatorCall(orig.myValidatorCall), myValidator(orig.myValidator) {} 00096 QObject* myValidatorCall; 00097 const char* myValidator; 00098 }; 00099 00100 class DT_DLL_commonWgt DtActionValidatorMap 00101 { 00102 public: 00103 DtActionValidatorMap() { }; 00104 DtActionValidatorMap(const DtActionValidatorMap& orig) : 00105 myActionCall(orig.myActionCall), 00106 myAction(orig.myAction), 00107 myValidators(orig.myValidators) 00108 { 00109 } 00110 00111 public: 00112 QObject* myActionCall; 00113 const char* myAction; 00114 QList<DtMenuItemValidator> myValidators; 00115 }; 00116 00121 class DT_DLL_commonWgt DtActionGroup : public QActionGroup 00122 { 00123 Q_OBJECT 00124 00125 public: 00126 DtActionGroup(QMenu* parent); 00127 virtual ~DtActionGroup(); 00128 00129 void setUsesDropDown(bool b) { myUsesDropDown = b; }; 00130 bool usesDropDown() const { return myUsesDropDown; }; 00131 00132 void setTitle(const QString& t); 00133 const QString& title() const { return myTitle; }; 00134 00136 void setTearOffEnabled(bool); 00137 00138 QMenu* menu(); 00139 QMenu* menuParent(); 00140 00144 QAction* addAction(QAction* action, QString addBefore = ""); 00145 QAction* addAction(const QString& text, QString addBefore = ""); 00146 QAction* addAction(const QIcon& icon, const QString& text, QString addBefore = ""); 00147 00149 virtual QMenu* createMenu(); 00150 00152 void addActions(const QList<QAction*>&); 00153 00154 void removeAttachment(); 00155 void linkTo(DtActionGroup*, int); 00156 00159 void attach(); 00160 00161 QAction* action(int); 00162 00163 int numActions() const; 00164 00165 protected slots: 00166 virtual void actionDestroyed(); 00167 00168 protected: 00170 virtual QAction* addActionInternal(QAction*, QString addBefore); 00171 00172 protected: 00173 QMenu* myDropDownMenu; 00174 QMenu* myMenuParent; 00175 bool myUsesDropDown; 00176 QString myTitle; 00177 DtActionGroup* myLinkTo; 00178 int myInsertAtIndex; 00179 00180 QList<QAction*> myActions; 00181 }; 00182 00183 const int DtSeparatorType = 0x80000000; 00184 const int DtGroupAddType = 0x40000000; 00185 00187 const int DtMapDoNotValidate = 0x00000001; 00188 const int DtMapCreateMenuItems = 0x00000002; 00189 00190 class DT_DLL_commonWgt DtPopupMenu : public QMenu 00191 { 00192 Q_OBJECT 00193 00194 public: 00198 DtPopupMenu ( QWidget * parent, bool display = true); 00199 virtual ~DtPopupMenu(); 00200 00204 virtual bool init(DtMainMenuType iType, DtMenuWidget* menu, QWidget* owner, int iPos = -1, int iID = -1); 00205 virtual void insertMenu(DtMenuWidget* menuWidget, int iPos = -1, int iID = -1); 00206 00208 virtual bool setup(DtMenuWidget* menuWidget); 00209 00210 virtual void preCreateMenuItems(); 00211 00212 virtual bool createMenuItems(); 00213 00214 virtual int id() const; 00215 00217 virtual DtMenuItemType typeFromAction(QAction*); 00218 00220 virtual DtMenuItemType typeFromName(const QString&); 00221 00223 virtual QAction* menuItemForType(DtMenuItemType iType); 00224 00226 virtual bool hasType(DtMenuItemType iType); 00227 00230 virtual int positionOfMenuItem(const DtPopupMenuItem& item); 00231 virtual int positionOfMenuItem(DtMenuItemType iType); 00232 00236 virtual int menuItemPositionOf(QAction* action); 00237 00239 virtual DtActionGroup* getActionGroupForType(DtMenuItemType iType); 00240 00241 virtual DtMainMenuType type() const; 00242 00244 virtual void setOwner(QWidget* owner); 00245 virtual QWidget* owner() const; 00246 00248 virtual void setEnableValidations(bool b); 00249 00252 virtual void reconfigureMenu(QList<DtMenuItemType>& items, bool keep); 00253 00255 virtual void updateMenuItems(); 00256 00258 virtual void seedActionGroups(); 00259 00265 virtual bool attachMenu(const QString& title, DtPopupMenu*, int iIndex = -1); 00266 00267 bool initialized() const; 00268 00270 DtFeatureActionManager* featureActionManager() const; 00271 virtual void setFeatureActionManager(DtFeatureActionManager*); 00272 00273 void setAddFeatures(bool); 00274 bool addFeatures() const; 00275 00277 virtual QString shortcutFor(const QString& feature) const; 00278 virtual void addShortcut(const QString& feature, const QString& shortcut); 00279 virtual void replaceShortcut(const QString& feature, const QString& shortcut); 00280 virtual bool hasShortcutOverride(const QString& feature) const; 00281 virtual bool hasShortcut(const QString& feature) const; 00282 00284 virtual QString iconFor(const QString& feature, QIcon::Mode mode = QIcon::Normal, QIcon::State = QIcon::Off, 00285 bool useDefault = false); 00286 00288 virtual QString menuTextForAction(QAction*); 00289 00290 public: 00291 virtual QHash<DtMenuItemType, QAction*>& actions(); 00292 virtual QList<QAction*> menuActions(); 00293 virtual const QList<DtPopupMenu*>& attachedMenus() const; 00294 00295 public: 00299 00305 virtual DtPopupMenuItem* insertMenuItem(DtMenuItemType iPos, const QString& featureName, DtMenuItemType iType, QString text, 00306 QString toolTip = QString::null, QString accel = QString::null, bool addSeparator = false, 00307 bool toggle = false, bool isOn = false, const QString& objectName = ""); 00308 00310 virtual DtPopupMenuItem* insertMenuItem(DtMenuItemType iPos, DtMenuItemType iType, QString text, 00311 QString toolTip = QString::null, QString accel = QString::null, bool addSeparator = false, 00312 bool toggle = false, bool isOn = false, const QString& objectName = ""); 00313 00316 virtual DtPopupMenuItem* insertToggleMenuItem(DtMenuItemType iBefore, const QString& featureName, DtMenuItemType iType, 00317 QString text, QString toolTip = QString::null, QString accel = QString::null, bool addSeparator = false, 00318 bool isOn = false, const QString& objectName = ""); 00319 00321 virtual DtPopupMenuItem* insertToggleMenuItem(DtMenuItemType iBefore, DtMenuItemType iType, 00322 QString text, QString toolTip = QString::null, QString accel = QString::null, bool addSeparator = false, 00323 bool isOn = false, const QString& objectName = ""); 00324 00326 virtual void addMenuItemSeparator(DtMenuItemType iGroup); 00327 00329 virtual void removeMenuItem(DtMenuItemType iType); 00330 00333 virtual bool removeMenuGroup(const QString& gr); 00334 00336 virtual void removeItemAtPosition(int iPos); 00337 00340 virtual void addIcon(DtMenuItemType iType, QString icon, QIcon::Mode mode = QIcon::Normal, QIcon::State = QIcon::Off); 00341 00343 virtual void removeIcon(DtMenuItemType iType, QIcon::Mode mode = (QIcon::Mode)-1, QIcon::State = QIcon::Off); 00344 00348 virtual void addGroup(DtMenuItemType iToGroup, DtMenuItemType iGroup, int iPos, bool addSep = false); 00349 00351 virtual void removeGroup(DtMenuItemType iGroup); 00352 00355 virtual void addMenu(DtMainMenuType, int iPos, bool addSep); 00356 00358 virtual void removeMenu(DtMainMenuType iGroup); 00359 00362 virtual void mappingMenu(DtPopupMenu* menu, int iFlags = 0); 00363 00367 virtual void mapMenuItem(DtMenuItemType iType, DtPopupMenu& popupMenu, int iPos = -1, bool addSeparator = false); 00368 00370 virtual void setPosition(int iPos); 00371 00373 virtual bool matchesName(QString name); 00374 00376 virtual DtMenuItemType uniqueId() const; 00377 00389 virtual QAction* addMenuItem(DtMenuItemType& retId, 00390 const QString& featureName, const QString& item, const QString& addToMenu, 00391 bool toggle = false, QObject* actionReceiver = NULL, 00392 const char* action = NULL, QObject* validationReceiver = NULL, 00393 const char* validation = NULL, const QString& tooltip = QString::null, 00394 const QString& accelerator = QString::null, bool addSep = false); 00395 00397 virtual void appendMenuValidator(DtMenuItemType iType, QObject* vCall, const char* validator); 00398 virtual void appendMenuValidator(const QString& menu, QObject* vCall, const char* validator); 00399 00401 virtual bool removeMenuItem(const QString& item); 00402 00405 virtual void setupFrom(DtMainMenuType iType, DtPopupMenu*, QWidget*, DtMenuWidget* w); 00406 00407 public: 00410 virtual void renameMenuItem(DtMenuItemType iType, QString text = QString::null, 00411 QString toolTip = QString::null, QString accel = QString::null); 00412 00414 virtual void positionBefore(DtMenuItemType iType, DtMenuItemType iBefore); 00415 virtual void positionAfter(DtMenuItemType iType, DtMenuItemType iAfter); 00416 00417 public: 00419 virtual QString menuName(); 00420 00425 virtual void addActionAndValidatorForType(DtMenuItemType iType, QObject* aCall, const char* action, 00426 QObject* vCall = NULL, const char* validator = NULL); 00427 virtual void addActionForType(DtMenuItemType iType, QObject* aCall, const char* action); 00428 virtual void addValidatorForType(DtMenuItemType iType, QObject* vCall, const char* validator); 00429 00431 virtual void addGlobalActionAndValidatorForType(DtMenuItemType iType, QObject* aCall, const char* action, 00432 QObject* vCall = NULL, const char* validator = NULL); 00433 00436 virtual DtActionGroup* actionGroupWithName(const QString&) const; 00437 virtual QAction* actionWithName(const QString&) const; 00438 00440 virtual void clearMenuItems(); 00441 00442 virtual void removeFeatureActions(); 00443 00444 signals: 00446 void validateItems(); 00447 00448 public slots: 00449 virtual void validate(); 00450 virtual void menuItemDestroyed(QAction*); 00451 virtual void actionGroupDestroyed(DtActionGroup*); 00452 virtual void featureActionManagerDestroyed(); 00453 00454 protected slots: 00455 virtual void popupRemoved(QObject*); 00456 virtual void menuItemDestroyed(); 00457 virtual void actionGroupDestroyed(); 00458 00459 protected: 00462 virtual bool initMenuItems(); 00463 00465 virtual bool initActionGroups(); 00466 00471 virtual bool removeMenuItemAtPosition(int iPos); 00472 00476 virtual void addNewMenuItem(DtPopupMenuItem& item, int iPos); 00477 00480 virtual QAction* createMenuItem(const DtPopupMenuItem& item); 00481 00484 virtual void attachMenuItems(); 00485 00487 virtual void attachMenuItem(const DtPopupMenuItem& item); 00488 00491 virtual void addCompletedItemsToMenu(); 00492 00494 virtual void addAttachedMenus(); 00495 00497 virtual void setIcon(DtMenuItemType iType); 00498 00501 virtual void attachValidators(bool b); 00502 00504 virtual void initConnections(); 00505 00508 virtual DtPopupMenuItem* popupMenuItem(DtMenuItemType iType, bool actionable = false); 00509 00511 virtual DtActionValidatorMap* actionValidatorMapEntry(DtMenuItemType iType); 00512 00514 virtual void removeOrderedMenuItem(int iPos); 00515 00517 virtual int addOrderedItem(const DtPopupMenuItem& item, int iPos); 00518 00520 virtual void setMapMenuItemsTo(DtPopupMenu* menu); 00521 00523 virtual void addActionGroup(DtActionGroup*); 00524 virtual bool matchesName(QString menu, QString name) const; 00525 00527 virtual DtActionGroup* internalGetActionGroupForType(DtMenuItemType type); 00528 00530 virtual QAction* addNewActionToActionGroup(const DtPopupMenuItem& item); 00531 00534 virtual void addAllActionsFor(DtActionGroup*); 00535 00536 protected: 00537 QHash<DtMenuItemType, QAction*> myActions; 00538 QHash<DtMenuItemType, DtPopupMenuItem> myMenuItems; 00539 QHash<DtMenuItemType, DtActionValidatorMap> myActionValidators; 00540 QList<DtPopupMenuItem> myOrderedMenuItems; 00541 QHash<DtMenuItemType, QIcon> myIcons; 00542 int myId; 00543 bool myCreated; 00544 bool myInited; 00545 QWidget* myOwner; 00546 DtMainMenuType myType; 00547 bool myEnableValidations; 00548 DtMenuWidget* myMenuWidget; 00549 bool myDisplay; 00550 00551 QHash<DtPopupMenu*, int> myMenuMappingList; 00552 00555 DtPopupMenu* myMenuItemProxy; 00556 00557 static QHash<DtMenuItemType, DtActionValidatorMap> myGlobalActionValidators; 00558 00560 QList<DtActionGroup*> myActionGroups; 00561 00562 QHash<DtMenuItemType, DtActionGroup*> myInternalGroupMappings; 00563 00565 QList<DtPopupMenu*> myAttachedMenus; 00566 00568 QList<DtActionGroup*> myPendingActionGroups; 00569 00571 QVector<QString> myRemovedActionGroups; 00572 00573 DtFeatureActionManager* myFeatureActionManager; 00574 00575 bool myAddFeatures; 00576 }; 00577 00578 typedef DtPopupMenu* (*DtPopupMenuCreatorFcn)(QWidget* parent, bool display); 00579 00580 inline bool DtPopupMenu::initialized() const 00581 { 00582 return myInited; 00583 } 00584 00585 inline DtFeatureActionManager* DtPopupMenu::featureActionManager() const 00586 { 00587 return myFeatureActionManager; 00588 } 00589 00590 inline void DtPopupMenu::setAddFeatures(bool b) 00591 { 00592 myAddFeatures = b; 00593 } 00594 00595 inline bool DtPopupMenu::addFeatures() const 00596 { 00597 return myAddFeatures; 00598 } 00599 00600 #endif