![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtModelDefinitionManager.h,v $ $Revision: 1.16 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00011 00012 #pragma once 00013 00014 #include <vrvCore/vrvCore.h> 00015 #include <vrvCore/DtModelDefinition.h> 00016 #include <vrvUtil/DtVirtualBaseClass.h> 00017 #include <vrvCore/DtSettingsBackupManager.h> 00018 #include <vrvCore/DtSettingsBackup.h> 00019 #include <string> 00020 #include <boost/signal.hpp> 00021 00022 namespace makVrv 00023 { 00024 class DtDe; 00025 class DtModelDefinitionManagerSignaler; 00026 class DtModelDefinitionBackup; 00027 class DtModelDefinitionManager; 00028 00032 class DT_DLL_VRVCORE DtModelDefinitionManagerBackup : public DtSettingsBackup 00033 { 00034 public: 00035 DtModelDefinitionManagerBackup(DtModelDefinitionManager& manager, DtDe& de); 00036 virtual ~DtModelDefinitionManagerBackup(); 00037 00038 protected: 00041 virtual void restore(const DtSettingsBackup* from); 00042 00045 virtual std::string backupClassType() const; 00046 virtual std::string backupName() const; 00047 00050 virtual DtSettingsBackup* create() const; 00051 00054 virtual void write(boost::archive::xml_oarchive& ar); 00055 00058 virtual void read(boost::archive::xml_iarchive& ar); 00059 00060 const DtModelDefinitionManager* restoredManager() const 00061 { 00062 return myRestoredManager; 00063 } 00064 00065 protected: 00066 DtModelDefinitionManager& mySourceManager; 00067 DtDe& myDe; 00068 DtModelDefinitionManager* myRestoredManager; 00069 }; 00070 00075 class DT_DLL_VRVCORE DtModelDefinitionManager 00076 { 00077 public: 00078 friend class DtModelDefinitionManagerCreator; 00079 00080 typedef std::map<std::string,DtModelDefinition> DefinitionMap; 00081 00083 virtual ~DtModelDefinitionManager(); 00084 00086 virtual void loadDefinitions(); 00087 00089 virtual void saveDefinitions(); 00090 virtual void saveDefinitions(const std::string&); 00091 00095 virtual void addDefinition(const DtModelDefinition& definition, bool autoSave = true); 00096 00100 virtual void destroyDefinition(const DtModelDefinition& def); 00101 00105 DtModelDefinition* findDefinition(const std::string& modelName) const; 00106 00108 const DefinitionMap& definitions() const; 00109 DefinitionMap& definitions(); 00110 00112 const std::string& modelFilename() const; 00113 00115 void setModelFilename(const std::string& extension); 00116 00118 bool modelInstancingEnabled() const; 00119 00121 void setModelInstancingEnabled(bool enabled); 00122 00124 void clearModelInstancingCache(); 00125 00127 void clear(); 00128 00132 virtual void merge(const DtModelDefinitionManager&); 00133 00139 virtual bool loadModelDefinitions(const std::string& filename, bool merge = true); 00140 00145 virtual bool loadModelDefinition(const std::string& filename); 00146 00149 virtual bool exportToFile(const std::vector<std::string>& defs, const std::string& filename) const; 00150 00152 virtual bool schemaInUse(const std::string&) const; 00153 00155 virtual bool schemaInUse(const std::string&, std::vector<std::string>&) const; 00156 00158 virtual void backup(); 00159 00160 const DtSettingsBackup* settingsBackup() const 00161 { 00162 return myBackup; 00163 } 00164 00165 DtSettingsBackup* settingsBackup() 00166 { 00167 return myBackup; 00168 } 00169 00171 virtual DtModelDefinitionManager& operator=(const DtModelDefinitionManager&); 00172 00174 void setAutoSave(bool b) 00175 { 00176 myAutoSave = b; 00177 } 00178 00179 bool autoSave() const 00180 { 00181 return myAutoSave; 00182 } 00183 00185 virtual void removeNonPersistentItems(); 00186 00187 protected: 00188 00189 friend class DtModelDefinitionManagerBackup; 00190 00192 DtModelDefinitionManager(DtDe&); 00193 DtModelDefinitionManager(const DtModelDefinitionManager&); 00194 00195 protected: 00196 friend class boost::serialization::access; 00197 00198 template <typename Archive> 00199 void serialize(Archive& ar,unsigned int version) 00200 { 00201 ar & BOOST_SERIALIZATION_NVP(myDefinitions); 00202 } 00203 00204 protected: 00205 00206 DtDe& myDe; 00207 DefinitionMap myDefinitions; 00208 std::string myModelFileName; 00209 bool myAutoSave; 00210 00211 bool myModelInstancingFlag; 00212 DtModelDefinitionManagerSignaler& mySignaler; 00213 DtModelDefinitionManagerBackup* myBackup; 00214 }; 00215 00218 class DT_DLL_VRVCORE DtModelDefinitionManagerSignaler : public DtVirtualBaseClass 00219 { 00220 public: 00221 00223 static DtModelDefinitionManagerSignaler& instance(DtDe& de); 00224 00226 virtual ~DtModelDefinitionManagerSignaler(); 00227 00229 boost::signal<void ()> signal_modelDefinitionManagerReset; 00230 00232 boost::signal<void (const DtModelDefinition&)> signal_modelDefinitionAdded; 00233 00235 boost::signal<void (const DtModelDefinition&)> signal_modelDefinitionToBeRemoved; 00236 00237 protected: 00238 00239 DtModelDefinitionManagerSignaler(); 00240 00241 }; 00242 00245 class DT_DLL_VRVCORE DtModelDefinitionManagerCreator : public DtVirtualBaseClass 00246 { 00247 public: 00249 DtModelDefinitionManagerCreator(); 00250 00252 virtual ~DtModelDefinitionManagerCreator(); 00253 00257 static DtModelDefinitionManagerCreator& instance(DtDe& de); 00258 00260 virtual DtModelDefinitionManager* create(DtDe&); 00261 }; 00262 } 00263 00264 BOOST_CLASS_VERSION(makVrv::DtModelDefinitionManager, 1) 00265