![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: menuWidget.h,v $ $Revision: 1.29 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef QTMENUWIDGET_H 00013 #define QTMENUWIDGET_H 00014 00015 #include <QtGui/QMenuBar> 00016 00017 #include "commonWgt/commonWgtDefines.h" 00018 #include "commonWgt/popupMenu.h" 00019 00020 #include "ngutil/dtqlist.h" 00021 #include <QtCore/QHash> 00022 00023 class DtFeatureActionManager; 00024 00027 00028 const int DtAfterMenu = 0x80000000; 00029 const int DtSwapMenu = 0x40000000; 00030 const int DtReconfigureMenu = 0x20000000; 00031 const int DtByPosition = 0x10000000; 00032 00038 00039 class DT_DLL_commonWgt DtGlobalChange 00040 { 00041 public: 00042 virtual bool operator==(const DtGlobalChange&) const; 00043 00044 public: 00045 DtMainMenuType myPos; 00046 DtMainMenuType myType; 00047 DtMainMenuType myReplace; 00048 QList<DtMenuItemType> myKeepOnlyItems; 00049 DtPopupMenuCreatorFcn myFcn; 00050 }; 00051 00052 class DT_DLL_commonWgt DtPopupCreator 00053 { 00054 public: 00055 DtPopupCreator(DtPopupMenuCreatorFcn fcn) : myFcn(fcn) {}; 00056 DtPopupCreator(const DtPopupCreator& orig) : myFcn(orig.myFcn) {}; 00057 00058 DtPopupMenuCreatorFcn myFcn; 00059 }; 00060 00061 class DT_DLL_commonWgt DtMenuWidget : public QMenuBar 00062 { 00063 Q_OBJECT 00064 00065 public: 00066 00067 DtMenuWidget(QWidget* parent = NULL); 00068 00069 virtual ~DtMenuWidget(); 00070 00071 virtual bool init(DtFeatureActionManager*); 00072 virtual bool createMenuSystem(); 00073 00076 virtual DtMenuItemType typeFromAction(QAction* action); 00077 00079 virtual DtPopupMenu* menuFromAction(QAction*); 00080 00082 virtual QAction* menuItemForType(DtMenuItemType iType); 00083 00085 virtual DtPopupMenu* menuForType(DtMainMenuType iType); 00086 00088 virtual DtPopupMenu* menuThatHasMenuType(DtMenuItemType iType); 00089 00091 virtual DtPopupMenu* menuThatHasActionGroupType(DtMenuItemType iType); 00092 00095 virtual DtPopupMenu* createMenuOfType(DtMainMenuType iType, QWidget* owner); 00096 00100 virtual DtPopupMenu* initializeMenuOfType(DtMainMenuType iType, QWidget* owner); 00101 00104 virtual bool createMenu(DtPopupMenu* newMenu); 00105 00107 virtual void updateMenuItems(); 00108 00111 virtual DtPopupMenu* menuWithName(const QString&); 00112 00114 virtual DtMenuItemType uniqueId() const; 00115 00117 virtual DtMainMenuType uniqueMenuId() const; 00118 00122 virtual DtMainMenuType insertItem(DtPopupMenu* menu, int index = -1); 00123 00126 virtual QAction* addMenuItem(const QString& featureName, const QString& item, 00127 const QString& addToMenu, DtMenuItemType& retId, 00128 bool toggle = false, QObject* actionReceiver = NULL, 00129 const char* action = NULL, QObject* validationReceiver = NULL, 00130 const char* validation = NULL, const QString& tooltip = QString::null, 00131 const QString& accelerator = QString::null, bool addSep = false); 00132 00134 virtual void appendMenuValidator(const QString& menuName, const QString& itemName, 00135 QObject* validatorReceiver, char* validator); 00136 00139 virtual bool removeMenuItem(const QString& item); 00140 00143 virtual bool removeMenuGroup(const QString& group); 00144 00147 virtual void recreateMenu(DtMainMenuType menu, bool useBaseMenuIfExists = true); 00148 00150 DtFeatureActionManager* featureActionManager() const; 00151 void setFeatureActionManager(DtFeatureActionManager*); 00152 00154 virtual DtPopupMenu* menuAt(int iPos); 00155 00158 virtual QString menuTextForAction(QAction*); 00159 00160 public: 00166 virtual int insertPopupMenu(DtMainMenuType iType, DtPopupMenuCreatorFcn fcn, DtMainMenuType iPos = DtNoMenu); 00167 00170 virtual int replacePopupMenu(DtMainMenuType iType, DtPopupMenuCreatorFcn with); 00171 00175 virtual bool removePopupMenu(DtMainMenuType iType, bool permenant = true); 00176 00180 virtual DtPopupMenu* restoreMenu(DtMainMenuType type); 00181 00183 virtual void removeMenuAtPosition(int iPos, bool freeMemory = false); 00184 00186 virtual QHash<DtMainMenuType, DtPopupMenu*>& popupMenus(); 00187 00189 virtual void swapMenus(DtMainMenuType iA, DtMainMenuType iB); 00190 00191 public: 00193 00196 static void globalInsertPopupMenu(DtMainMenuType iType, DtPopupMenuCreatorFcn fcn, DtMainMenuType iAfterType = DtNoMenu); 00197 00199 static void globalReplacePopupMenu(DtMainMenuType iType, DtPopupMenuCreatorFcn with); 00200 00202 static void globalRemovePopupMenu(DtMainMenuType iType); 00203 00205 static void globalSwapMenuPositions(DtMainMenuType iA, DtMainMenuType iB); 00206 00211 static void globalCreateOnlyItemsForMenu(DtMainMenuType iType, QList<DtMenuItemType> menuItems); 00212 00213 public: 00215 static DtMenuWidget* create(QWidget* parent = NULL); 00216 00217 protected: 00220 virtual void modifyLocalMenuWithGlobalChanges(); 00221 00223 virtual DtPopupMenu* createMenu(DtPopupMenuCreatorFcn fcn, DtMainMenuType iType, int iPos = -1, bool initializeOnly = false, 00224 DtPopupMenu* menuBase = NULL); 00225 00227 virtual int positionOfCreator(DtPopupMenuCreatorFcn fcn); 00228 virtual int positionOfCreator(DtMainMenuType iType); 00229 00231 virtual DtMainMenuType typeForCreator(DtPopupMenuCreatorFcn fcn); 00232 00234 virtual void removeOrderedCreator(int iPos); 00235 00237 virtual void insertOrderedCreator(DtPopupMenuCreatorFcn, int iPos); 00238 00239 signals: 00240 00242 void validate(); 00243 00246 void menuRecreated(DtMainMenuType); 00247 00248 public slots: 00250 virtual void validateMenuItems(); 00251 00252 protected: 00253 QList<DtPopupMenuCreatorFcn> myOrderedCreators; 00254 QHash<DtMainMenuType, DtPopupCreator> myPopupMenuCreators; 00255 QHash<DtMainMenuType, DtPopupMenu*> myPopupMenus; 00256 bool myCreated; 00257 QWidget* myOwner; 00258 bool myGloballyModified; 00259 DtFeatureActionManager* myFeatureActionManager; 00260 static QList<DtGlobalChange> myGlobalPopups; 00261 }; 00262 00263 inline DtFeatureActionManager* DtMenuWidget::featureActionManager() const 00264 { 00265 return myFeatureActionManager; 00266 } 00267 00268 inline void DtMenuWidget::setFeatureActionManager(DtFeatureActionManager* m) 00269 { 00270 myFeatureActionManager = m; 00271 } 00272 00273 #endif