VR-Forces 4.0.4 Class Documentation
include/vrfGuiCoreQt/DtCreateMenu.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2008 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00008 
00010 
00011 #pragma once
00012 
00013 #include <vrfGuiCoreQt/vrfGuiCoreQt.h>
00014 #include <vrfGuiCoreQt/DtConfigurableMenu.h>
00015 #include <vrfGuiCoreQt/DtVrfScenarioManager.h>
00016 #include <vrfGuiCoreQt/createObjectAction.h>
00017 #include <vrfGuiConstants/vrfMenuIds.h>
00018 #include <vrfGuiCore/DtOrderedEntityTypeList.h>
00019 
00020 #include <vrvUtil/DtSignalConnectionManager.h>
00021 
00022 #include <vrvCoreQt/DtMenu.h> 
00023 
00024 #include <QtCore/QObject>
00025 #include <QtGui/QMenu>
00026 
00027 #include <matrix/vlVector.h>
00028 
00029 namespace makVrv
00030 {
00031    class DtDe;
00032    class DtQtMenuAssembler;
00033    class DtMenuConfiguration;
00034 };
00035 
00036 class QAction;
00037 class QActionGroup;
00038 class DtScenarioExplorer;
00039 class DtString;
00040 class DtFilename;
00041 class DtEntityType;
00042 
00043 namespace makVrf
00044 {
00045    class DtVrfBackendState;
00046    class DtMenu;
00047    class DtCreateMenu;
00048    class DtEntityMapperKey;
00049 
00050    class DT_DLL_VRFGUICOREQT DtVrfCreateMenu : public QMenu
00051    {
00052       Q_OBJECT
00053 
00054    public:
00055       typedef std::map<std::string, QAction*>  MappedActions;
00056 
00057       DtVrfCreateMenu(makVrv::DtDe&, const QString& name, QWidget* parent = 0);
00058       virtual ~DtVrfCreateMenu();
00059 
00064       virtual void setupMenu(DtMenu*, const makVrv::DtMenuConfiguration& initialCreateMenuConfiguration = makVrv::DtMenuConfiguration());
00065 
00068       virtual void setMenuBuilder(DtCreateMenu*);
00069 
00070       virtual bool signalCreation() const;
00071 
00074       boost::signal<void (const DtEntityType&, std::string, int, const std::vector<DtVector>&,double, bool, bool )> signal_createObject;
00075       virtual void slot_createObject(const DtEntityType&, std::string, int, const std::vector<DtVector>&, double, bool, bool );
00076 
00078       virtual void slot_creationStopped();
00079 
00081       virtual DtEntityType nameToType(const QString&) const;
00082 
00084       virtual bool triggerAction(const DtEntityMapperKey& key);
00085 
00086       virtual const MappedActions& mappedActions() const;
00087 
00088    protected:
00089       virtual void setupConnections();
00090 
00091       virtual void buildCreationMenu(const DtList& list,
00092          DtConfigurableMenuAssembler& assemblers, DtSubMenuConfiguration& configurations,
00093          const makVrv::DtMenuPath& rootr);
00094 
00096       virtual void addAdditionalItems(DtConfigurableMenuAssembler& assemblers, DtSubMenuConfiguration& configurations);
00097 
00098       virtual void clearMenu();
00099 
00101       virtual void enableActions(const QList<QAction*>&);
00102 
00104       virtual void destroyActions(const QList<QAction*>&);
00105 
00107       virtual void enableMenu();
00108 
00109       virtual bool canCreate() const;
00110 
00113       virtual void signal_createMenuLoaded(const DtScenarioExplorer&);
00114 
00116       virtual void recreateMenu();
00117 
00118       virtual void slot_backendUpdated(const DtVrfBackendState&, int);
00119 
00122       virtual void mergeChangesFrom(const DtSubMenuConfiguration&, DtSubMenuConfiguration&);
00123 
00125       virtual std::string cleanEntry(const std::string&) const;
00126 
00128       virtual DtCreateObjectAction* createObjectActionFor(const std::string& menuId, const QString& menuName, const DtEntityMapperKey& key) const;
00129 
00130       virtual void addMappedActionsFrom(QMenu*);
00131 
00132    protected slots:
00133       virtual void onCreateObjectFromMenu(const DtEntityMapperKey&, int);
00134 
00135    protected:
00136       makVrv::DtDe&                 myDe;
00137       QMenu*                        myCreateMenu;
00138       DtConfigurableMenuAssembler   myMenuAssembler;
00139       makVrv::DtSignalConnectionManager     myConnectionManager;
00140       DtCreateMenu* myBuilder;
00141       bool myCreating;
00142       MappedActions myMappedActions;
00143    };
00144 
00145    class DT_DLL_VRFGUICOREQT DtCreateMenu : public DtConfigurableMenu
00146    {
00147    public:
00148       struct AdditionalItem
00149       {
00150          AdditionalItem()
00151          : before(false)
00152          , path(makVrv::DtMenuPath::empty())
00153          , related(makVrv::DtMenuPath::empty())
00154          {
00155          };
00156 
00157          makVrv::DtMenuPath   path;
00158          DtEntityMapperKey    key;
00159          makVrv::DtMenuPath   related;
00160          bool                 before;
00161       };
00162 
00163       typedef std::vector<AdditionalItem> AdditionalItems;
00164       typedef DtOrderedEntityTypeList<DtCreateObjectActionCreator*>  ObjectActionCreators;
00165 
00166    public:
00167 
00169       DtCreateMenu(makVrv::DtDe&, const QString& createName = DtCreateMenuId);
00170 
00172       virtual ~DtCreateMenu();
00173 
00175       virtual QMenu* createMenu(makVrv::DtDe&, QWidget* parent);
00176 
00177       static DtCreateMenu& instance(makVrv::DtDe&);
00178 
00182       static DtCreateMenu* menuInstance(makVrv::DtDe&);
00183 
00184       virtual DtCreateMenu* newInstance();
00185 
00188       virtual DtCreateMenu* clone() const;
00189       virtual DtCreateMenu* duplicate(QMenu*&, QWidget* parent);
00190 
00191       void setTearOffsEnabled(bool b)
00192       {
00193          myTearOffsEnabled = b;
00194       }
00195 
00197       virtual DtEntityType nameToType(const QString&) const;
00198 
00200       virtual bool triggerAction(const DtEntityMapperKey& key);
00201 
00202       bool tearOffsEnabled() const
00203       {
00204          return myTearOffsEnabled;
00205       }
00206 
00208       virtual void setSignalCreation(bool);
00209       bool signalCreation() const
00210       {
00211          return mySignalCreation;
00212       }
00213 
00215       const AdditionalItems& additionalItems() const
00216       {
00217          return myAdditionalItems;
00218       }
00219 
00220       AdditionalItems& additionalItems()
00221       {
00222          return myAdditionalItems;
00223       }
00224 
00226       virtual void setCreateObjectActionCreatorFor(const DtEntityType&, DtCreateObjectActionCreator*);
00227 
00229       virtual DtCreateObjectActionCreator* createObjectActionCreatorFor(const DtEntityType&) const;
00230 
00231       const DtVrfCreateMenu::MappedActions& mappedActions() const;
00232 
00233    public:
00234       boost::signal<void (const DtEntityType&, std::string, int, const std::vector<DtVector>&)> signal_createObject;
00235 
00236    protected:
00238       virtual void createMenuConfiguration(makVrv::DtDe& de);
00239 
00240    public:
00248       virtual DtSubMenuConfiguration& menuConfiguration();
00249 
00251       virtual DtConfigurableMenuAssembler& menuAssembler();
00252 
00253    public:
00256       virtual void addItemToCreate(const makVrv::DtMenuPath& path, const DtEntityMapperKey& key);
00257 
00259       virtual void removeItemToCreate(const makVrv::DtMenuPath&);
00260 
00262       virtual void addItemToCreateBefore(const makVrv::DtMenuPath& path,
00263          const makVrv::DtMenuPath& before, const DtEntityMapperKey& key);
00264 
00266       virtual void addItemToCreateAfter(const makVrv::DtMenuPath& path,
00267          const makVrv::DtMenuPath& after, const DtEntityMapperKey& key);
00268 
00269    protected:
00270       virtual void slot_onCreateObject(const DtEntityType&, std::string, int, const std::vector<DtVector>&);
00271 
00272    protected:
00273       bool                       myTearOffsEnabled;
00274 
00275       AdditionalItems            myAdditionalItems;
00276       bool mySignalCreation;
00277       ObjectActionCreators       myObjectActionCreators;
00278 
00280       static DtConfigurableMenuAssembler* theMenuAssembler;
00281       static DtSubMenuConfiguration* theMenuConfiguration;
00282    }; 
00283 
00285    class DT_DLL_VRFGUICOREQT DtRightClickCreateMenu : public DtCreateMenu
00286    {
00287    public:
00288       DtRightClickCreateMenu(makVrv::DtDe& de);
00289 
00290    protected:
00291       virtual QMenu* createMenu( makVrv::DtDe& de, QWidget* parent );
00292    };
00293 }

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)