![]() |
VR-Forces 4.0.4 Class Documentation
|
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 }