VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtElementDefinitionManager.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2011 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00007 
00008 #pragma once
00009 #include <boost/unordered_map.hpp>
00010 #include <vrvUtil/DtUnicode.h>
00011 #include <vrvCore/vrvCore.h>
00012 #include <vrvUtil/DtVirtualBaseClass.h>
00013 #include <vrvUtil/DtSignalConnectionManager.h>
00014 #include <vrvCore/DtVisualizerAttribute.h>
00015 #include <vrvCore/DtElementDefinitionSettings.h>
00016 #include <vrvCore/DtRecordSettingsBackup.h>
00017 
00018 #include <makArchives/DtElementsRecord.h>
00019 
00020 #include <boost/signal.hpp>
00021 
00022 namespace makArchives
00023 {
00024    class DtElementDefinitionRecord;
00025    class DtElementsRecord;
00026 
00027    namespace oldRecords
00028    {
00029       class DtElementDefinition;
00030       class DtElementDefinitionHierarchy;
00031       class DtElementDefinitionNode;
00032       class DtVisualAttributeInterface;
00033    };
00034 }
00035 
00036 namespace makVrv
00037 {
00038    class DtDe;
00039    class DtBaseConnection;
00040    class DtElementDefinitionNew;
00041    class DtDeSettings;
00042 
00047    class DT_DLL_VRVCORE DtElementDefinitionManager
00048    {
00049    public:
00051       typedef boost::unordered_map<DtUnicode,DtElementDefinitionNew*> 
00052          DefinitionMap;
00053 
00055       typedef std::vector<const DtElementDefinitionNew*> ElementDefinitions;
00056 
00058       static const DtElementDefinitionManager* createConstCopy(
00059          const DtElementDefinitionManager& orig);
00060 
00062       ~DtElementDefinitionManager();
00063 
00066       const std::string& name() const;
00067 
00070       const DtUnicode& screenName() const;
00071 
00073       unsigned int numberOfElementDefinitions() const;
00074 
00078       const DefinitionMap& elementDefinitions() const;
00079 
00082       DtElementDefinitionNew* findElementDefinition(
00083          const DtUnicode& definitionName);
00084 
00087       const DtElementDefinitionNew* findElementDefinition(
00088          const DtUnicode& definitionName) const;
00089 
00092       DtElementDefinitionNew* createElementDefinition(
00093          const DtUnicode& definitionName);
00094       
00098       DtElementDefinitionNew* createElementDefinition( 
00099          const DtUnicode& definitionName, 
00100          DtElementDefinitionNew* parentDefinition);
00101 
00104       void destroyElementDefinition(DtElementDefinitionNew*);
00105 
00107       void destroyElementDefinitionAndChildren(DtElementDefinitionNew*);
00108 
00113       DtElementDefinitionNew* copyElementDefinition(DtElementDefinitionNew& def,
00114          const DtUnicode& newName);
00115 
00117       DtBackupInterface* backup();
00118 
00123       bool renameElementDefinition(const DtUnicode& oldName, 
00124          const DtUnicode& newName);
00125 
00127       void loadDefaults();
00128 
00130       void loadDefaults(bool loadOnlyFactory);
00131 
00133       void revertSettings();
00134 
00136       virtual void saveAsDefaults();
00137 
00139       virtual void exportSettings(const std::string& fileName);
00140 
00145       virtual void importSettings(const std::string& fileName,
00146          ElementDefinitions& addedDefinitions,
00147          ElementDefinitions& skippedDefinitions);
00148 
00150       virtual void importSettings(const std::string& fileName);
00151 
00156       virtual void mergeSettings(const std::string& fileName,
00157          ElementDefinitions& addedDefinitions,
00158          ElementDefinitions& skippedDefinitions);
00159 
00161       virtual DtDeSettings* settings();
00162 
00164       virtual void setFromRecord(const makArchives::DtElementsRecord& rec);
00165 
00170       virtual void setFromRecord(const makArchives::DtElementsRecord& rec,
00171          ElementDefinitions& addedDefinitions,
00172          ElementDefinitions& skippedDefinitions);
00173 
00176       virtual void mergeRecord(
00177          const makArchives::DtElementsRecord& rec,
00178          ElementDefinitions& addedDefinitions,
00179          ElementDefinitions& skippedDefinitions);
00180 
00182       virtual void getRecord(makArchives::DtElementsRecord& rec);
00183 
00185       virtual void setAutoSave(bool enabled);
00186 
00187    protected:
00188 
00189       friend class DtElementDefinitionTypeManager;
00190 
00192       DtElementDefinitionManager(const std::string& name, 
00193          const DtUnicode& screenName, DtDe& de, bool procedural);
00194 
00196       DtElementDefinitionManager(const DtElementDefinitionManager& rhs);
00197 
00199       void registerDefinitionHierarchy(DtElementDefinitionNew* root);
00200 
00202       static DtVisualizerAttribute* attributeFromOldRecord(
00203          const makArchives::oldRecords::DtVisualAttributeInterface* attributeRecord);
00204 
00208       void setFromOldRecord(
00209          const makArchives::oldRecords::DtElementDefinitionHierarchy& oldRe,
00210          ElementDefinitions& addedDefinitions,
00211          ElementDefinitions& skippedDefinitions);
00212 
00218       void loadOldDefinitionNode(DtElementDefinitionNew* parent,
00219          const makArchives::oldRecords::DtElementDefinitionNode& oldDef,
00220          ElementDefinitions& addedDefinitions,
00221          ElementDefinitions& skippedDefinitions);
00222 
00225       void buildDefinitionSetsFromOldRecord(DtElementDefinitionNew& newElem, 
00226          const makArchives::oldRecords::DtElementDefinition& oldElem);
00227 
00229       typedef std::vector<const makArchives::DtElementDefinitionRecord*> ElementGroup;
00230 
00234       typedef std::map<DtUnicode, ElementGroup> ParentToElementsMap;
00235 
00237       virtual void buildElementVisualizers(DtElementDefinitionNew& ed,
00238          const makArchives::DtElementDefinitionRecord& rec);
00239 
00242       virtual void buildElementChildren(
00243          DtElementDefinitionNew& ed, ParentToElementsMap& parentToElementsMap,
00244          ElementDefinitions& addedDefinitions,
00245          ElementDefinitions& skippedDefinitions);
00246 
00249       static makArchives::DtElementDefinitionRecord buildElementDefinitionRecord(
00250          DtElementDefinitionNew& elementDef);
00251 
00254       virtual void registerBackup();
00255 
00256       virtual bool recordMatchesDefinition(
00257          const makArchives::DtElementDefinitionRecord* childRec,
00258          const DtElementDefinitionNew* existingChildDef) const;
00259 
00260    protected:
00261       typedef DtRecordSettingsBackup<DtElementDefinitionManager, makArchives::DtElementsRecord>
00262          ElementDefinitionsBackup;
00263 
00264       std::string myName;
00265       DtUnicode myScreenName;
00266 
00267       DtDe* myOptionalDe;
00268       DefinitionMap myDefinitions;
00269       bool myProceduralFlag;
00270       bool myAutoSave;
00271 
00272       ElementDefinitionsBackup* myBackup;
00273    };
00274 
00278    class DT_DLL_VRVCORE DtElementDefinitionTypeManager :
00279       public DtVirtualBaseClass
00280    {
00281    public:
00282 
00284       typedef unsigned int ElementDefinitionType;
00285 
00288       enum BuiltInElementTypes
00289       {
00290          Entity,
00291          TacticalGraphics,
00292          Interaction,
00293          Aggregate,                
00294          Intervisibility,
00295          BuiltInElementTypes_End,
00296       };
00297 
00302       static DtElementDefinitionTypeManager& instance(DtDe& de);
00303 
00306       static DtElementDefinitionTypeManager& instance(DtBaseConnection& con);
00307 
00310       static void copyInstance(DtBaseConnection& con, DtDe&);
00311 
00313       static const DtElementDefinitionTypeManager* createConstCopy(DtDe& de);
00314 
00316       virtual ~DtElementDefinitionTypeManager();
00317 
00328       void registerElementType(ElementDefinitionType type,
00329          const std::string& name, const DtUnicode& typeScreenName, 
00330          bool proceduralOnly);
00331 
00334       DtElementDefinitionManager* findElementManager(ElementDefinitionType type);
00335 
00338       DtElementDefinitionManager& elementManager(ElementDefinitionType type);
00339 
00343       const DtElementDefinitionManager& elementManager(
00344          ElementDefinitionType type) const;
00345 
00347       void loadDefaults();
00348 
00349    protected:
00350 
00352       template <typename ManagerClass>
00353       friend ManagerClass& defaultManagerInstanceFunction(DtDe&,bool);
00354 
00356       template <typename ManagerClass>
00357       friend void defaultManagerRegisterInstanceFunction(DtDe&, ManagerClass*);
00358 
00360       DtElementDefinitionTypeManager();
00361 
00363       DtElementDefinitionTypeManager(DtDe&);
00364 
00366       DtElementDefinitionTypeManager(const DtElementDefinitionTypeManager&);
00367 
00368    protected:
00369 
00370       typedef boost::unordered_map<unsigned int, DtElementDefinitionManager*>
00371          ManagerMap;
00372 
00373       DtDe* myOptionalDe;
00374       DtSignalConnectionManager myConnections;
00375       ManagerMap myManagers;
00376    };
00377 
00381    class DT_DLL_VRVCORE DtElementDefinitionSignaler : public DtVirtualBaseClass
00382    {
00383    public:
00385       static DtElementDefinitionSignaler& instance(DtDe&);
00386 
00388       virtual ~DtElementDefinitionSignaler();
00389 
00390       //Signals.
00391       boost::signal<void (const DtUnicode& oldName, const DtUnicode& newName)>
00392          signal_elementRenamed;
00393 
00394    protected:
00396       DtElementDefinitionSignaler();
00397    };
00398 }

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)