VR-Forces 4.0.4 Class Documentation
include/commonWgt/popupMenu.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)