VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtElementDefinitionManager.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2025 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
7 
8 #pragma once
9 #include <vrvCore/vrvCore.h>
10 
14 
16 #include <vrvUtil/DtDebugLog.h>
17 #include <vlutil/vlPrint.h>
18 
19 #include <unordered_map>
20 
21 namespace makArchives
22 {
23  class DtElementDefinitionRecord;
24  class DtElementsRecord;
25 }
26 
27 namespace makVrv
28 {
29  class DtDe;
30  class DtBaseConnection;
31  class DtElementDefinition;
32  class DtDeSettings;
33  class DtBackupInterface;
34  class DtVisualizerDefinitionValidator;
35 
74  {
75  public:
76  enum class DefinitionFileType
77  {
78  FileTypeHierarchy,
79  FileTypeLeaf,
80  FileTypeBoth
81  };
82 
83  public:
85  typedef std::map<DtUnicode, DtElementDefinition*>
87 
89  typedef std::map<std::string, makArchives::DtElementsRecord> StringToElementsRecordMap;
90 
92  typedef std::vector<const DtElementDefinition*> ElementDefinitions;
93 
95  typedef std::vector<std::string>::const_iterator ParentToElementIter;
96 
97  public:
98 
100  static const DtElementDefinitionManager* createConstCopy(const DtElementDefinitionManager& orig);
101 
104  static makArchives::DtElementDefinitionRecord buildElementDefinitionRecord(const DtElementDefinition& elementDef);
105 
108  static void setupVisualizerDefs(makArchives::DtElementDefinitionRecord &elementRec,
109  const DtElementDefinition &elementDef, DtModelSetId modelSet);
110 
112  static bool isHierFileName(const std::string& fileName);
113 
114  public:
115 
117  DtElementDefinitionManager() = delete;
118 
120  DtElementDefinitionManager& operator=(const DtElementDefinitionManager&) = delete;
121 
123  virtual ~DtElementDefinitionManager();
124 
127  virtual const std::string& name() const;
128 
131  virtual const DtUnicode& screenName() const;
132 
135  virtual const std::string& rootsFilesname() const;
136 
138  virtual unsigned int numberOfElementDefinitions() const;
139 
143  virtual const DefinitionMap& elementDefinitions() const;
144 
147  virtual DtElementDefinition* findElementDefinition(const DtUnicode& definitionName);
148 
151  virtual const DtElementDefinition* findElementDefinition(const DtUnicode& definitionName) const;
152 
155  virtual DtElementDefinition* createElementDefinition(const DtUnicode& definitionName);
156 
160  virtual DtElementDefinition* createElementDefinition(const DtUnicode& definitionName, DtElementDefinition* parentDefinition);
161 
164  virtual void destroyElementDefinition(DtElementDefinition*);
165 
167  virtual void destroyElementDefinitionAndChildren(DtElementDefinition*);
168 
173  virtual DtElementDefinition* copyElementDefinition(DtElementDefinition& def, const DtUnicode& newName);
174 
176  virtual DtBackupInterface* backup();
177 
182  virtual bool renameElementDefinition(const DtUnicode& oldName, const DtUnicode& newName);
183 
185  virtual void loadDefaults();
186 
188  virtual void loadDefaults(bool loadOnlyFactory);
189 
191  virtual DefinitionMap& modifiedDefinitions();
192 
196  virtual std::vector<std::string> retrieveHierFilesToMerge(const std::string& type);
197 
201  virtual std::vector<std::string> retrieveLeafFilesToMerge(const std::string& type);
202 
206  virtual bool shouldSkipDefLoading();
207 
209  virtual void revertSettings();
210 
212  virtual void saveAsDefaults();
213 
215  virtual void splitAndWriteToDir(makArchives::DtElementsRecord& elementsRec, const std::string& existingDirName);
216 
218  virtual void exportSettings(const std::string& fileOrDirName);
219 
221  virtual void exportSelectedSettings(const std::vector<std::string>& names, const std::string& fileName);
222 
224  virtual void exportHierSettings(const std::string& fileName);
225 
227  virtual void exportHierSettings(std::vector<std::string>& fileList);
228 
233  virtual void exportLeafSettings(std::vector<std::string>& fileList);
234 
236  virtual void exportSelectedLeafSetting(const std::string& name, const std::string& fileName);
237 
239  virtual void exportSelectedHierSetting(const std::string& name, const std::string& fileName, bool allLevels=true);
240 
244  virtual void createFolderFromPathAndSplit(const std::string &fileOrDirName,
245  std::string& newPath, std::string& dirName);
246 
248  virtual bool importAndReplaceSettings(const std::string& fileName);
249 
250  virtual bool importAndReplaceHierRecords(StringToElementsRecordMap& recordMap, const std::string& importFileName);
251 
253  virtual void mergeHierSettings(const std::string& hierFileOrDirName);
254 
256  virtual void mergeHierSettings(const std::string& hierFileOrDirName, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
257 
260  virtual void mergeLeafSettings(const std::string& leafFileOrDirName);
261 
263  virtual void mergeLeafSettings(const std::string& fileOrDirName, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
264 
266  virtual void mergeSettings(const std::string& fileName, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
267 
272  virtual void markRecordsAsHier(makArchives::DtElementsRecord& rec);
273 
275  virtual DtDeSettings* settings();
276 
281  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord);
282 
291  // TDL - This method is called on backup restore, which is currently
292  // disabled. If we come up with way to use this sensibly it needs to be
293  // modified with the changes made to setFromRecords...
294 
295  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
296 
303  virtual void setFromRecords(StringToElementsRecordMap& elemRecords, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions, bool& forceSaveAfterLoad);
304 
309  virtual void mergeRecords(StringToElementsRecordMap& recordMap, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
310 
313  virtual void mergeHierRecord(const makArchives::DtElementsRecord& hierRecord, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
314 
317  virtual void mergeLeafRecords( StringToElementsRecordMap& recordMap, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
318 
321  virtual void mergeLeafRecord(const makArchives::DtElementsRecord& leafRecord, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
322 
324  virtual void getRecord(makArchives::DtElementsRecord& rec) const;
325 
327  virtual void getRecord(makArchives::DtElementsRecord& rec, const std::string& fileName) const;
328 
330  virtual void getRecord(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec) const;
331 
333  virtual void getRecordIncludingParent(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec) const;
334 
337 
341  virtual void getSplitRecord(std::vector<makArchives::DtElementsRecord>& rec, std::vector<std::string>& fileNames);
342 
345  virtual void addRecords(makArchives::DtElementsRecord& recs, makArchives::DtElementsRecord& combinedRec);
346 
351  virtual void enableFilePathReadWriteOnRecord( makArchives::DtElementsRecord& recs );
353 
358  virtual void splitRecordElemMgr(makArchives::DtElementsRecord& rec, makArchives::DtElementsRecord& recHier, makArchives::DtElementsRecord& recLeaves);
359 
361  virtual void setAutoSave(bool enabled);
362 
364  virtual bool validateElementDefinition(const DtElementDefinition& def);
365 
367  virtual bool validateElementAttribute(const DtVisualizerDefinition::SortedAttributeMap::iterator& attr);
368 
370  virtual DtUnicode getElementDefinitionError(const DtElementDefinition& def);
371 
373  virtual bool canUseHierLeaf();
374 
376  virtual bool modifiedSinceStartup();
377 
379  virtual void resetModifiedSinceStartupFlag();
380 
382  virtual void addToModifiedDefinitionsMap(DtElementDefinition* modelDefinition);
383 
385  virtual void addToAddedDefinitionsMap(DtElementDefinition* modelDefinition);
386 
388  virtual DefinitionMap getDeletedDefinitionsMap();
389 
391  virtual void addToDeletedDefinitionsMap(DtElementDefinition* modelDefinition);
392 
394  virtual void resetModifiedFlags();
395 
398  virtual DtUnicode findFirstDefWithAttribPair(const DtUnicode& attributeName, const DtUnicode& attributeValue);
399 
402  virtual DtVisualizerAttributeStringVector::StringVector findAllAttributeValues( const DtUnicode& elementDefName, const DtUnicode& attributeName);
403 
406  virtual std::string getModelSetDisplayName(DtModelSetId modelSet) const;
407 
409  virtual void removeElementFromChangeMaps(const DtUnicode& definitionName);
410 
412  virtual void removeElementsFromChangeMaps(DefinitionFileType fileType);
413 
415  virtual void getChangedFiles(std::vector<std::string>& changedFiles, DefinitionFileType fileType);
416 
417  public:
420  boost::signalslib::signal<void()> signal_managerAboutTobeDeleted;
421 
422  protected:
423 
425 
427  DtElementDefinitionManager(const std::string& name, const DtUnicode& screenName, DtDe& de, bool procedural);
428 
431 
433  virtual void registerDefinitionHierarchy(DtElementDefinition* root);
434 
437  typedef std::pair < std::string, const makArchives::DtElementDefinitionRecord*> ElementPair;
438 
440  typedef std::vector<ElementPair> ElementGroup;
441 
445  typedef std::map<DtUnicode, ElementGroup> ParentToElementsMap;
446 
448  virtual void buildElementVisualizerDefinitions(DtElementDefinition& newDef,
449  const makArchives::DtElementDefinitionRecord& defRecord);
450 
452  virtual void buildElementVisualizerDefinitionsForModelSet(const makArchives::DtElementDefinitionRecord &defRecord, DtElementDefinition &newDef, DtModelSetId modelSet);
453 
456  virtual void buildElementChildren(DtElementDefinition& ed, ParentToElementsMap& parentToElementsMap, ElementDefinitions& addedDefinitions, ElementDefinitions& skippedDefinitions);
457 
460  virtual void registerBackup();
461 
463  virtual bool recordMatchesDefinition(const makArchives::DtElementDefinitionRecord* childRec, const DtElementDefinition* existingChildDef) const;
464 
466  virtual bool recordMatchesDefinitionModelSet(const makArchives::DtElementDefinitionRecord* childRec, const DtElementDefinition* existingChildDef, DtModelSetId modelSet) const;
467 
469  virtual void generateParentToElement(ParentToElementsMap& parentToElements, StringToElementsRecordMap& rec);
470 
472  virtual bool checkRecordsAreLeavesInHier(ParentToElementsMap& parentToElements, StringToElementsRecordMap& recordMap, std::vector<std::string>& leafFiles);
473 
475  virtual bool replaceMergeLeaves(StringToElementsRecordMap& firstRecMap, StringToElementsRecordMap& secondRecMap, const std::vector<std::string>& leafFiles);
476 
478  virtual bool loadDefaultsFromHierLeafDir(StringToElementsRecordMap& recordMap);
479 
481  virtual bool isEntityDefinitions() const;
482 
484  virtual bool isTacticalGraphicsDefinitions() const;
485 
487  virtual bool isUnitDefinitions() const;
488 
491  virtual void checkDefinitionName(const DtUnicode& definitionName);
492 
493  virtual void processVisualizerDefinitionAttributes(DtVisualizerDefinition* vd, const makArchives::DtVisualizerDefinitionRecord& vdRecord,
494  const std::string& defName, DtModelSetId modelSet);
495 
497  virtual void logWarning(const std::string& message);
498 
500  virtual void getFilesFromDefinitionMap(const DefinitionMap& defMap, std::set<std::string>& changedFiles);
501 
503  virtual void removeElementsFromDefnitionMap(DefinitionMap& defMap, DefinitionFileType fileType);
504 
506  virtual DtVisualizerDefinition* convertLoadedVisualizerDefinition(const makArchives::DtVisualizerDefinitionRecord& vdRecord,
508  DtVisualizerDefinitionSet& vdSet, int visualizerIndex, DtElementDefinition* ancestor);
509 
510  virtual bool hierarchyNeedsConversion(const makArchives::DtElementDefinitionRecord* elemRec) const;
511 
513  virtual void clearDefinitionMap(DefinitionMap& map);
514 
515  virtual bool validateVisualizerDefinitionSet(const DtElementDefinition& newDef, const DtVisualizerDefinitionSet& vdSet,
517 
519  virtual void convertLeafToUuid(const std::vector<makArchives::DtVisualizerDefinitionRecord>& visualizerDefinitionRecords,
520  const Utf8String& elementName, const Utf8String& parentName, DtVisualizerDefinitionSet& vdSet);
521 
522  typedef std::multimap<const std::string, DtVisualizerDefinition*> ParentSchemaDataMap;
523  typedef std::multimap<const std::string, DtVisualizerDefinition*>::iterator ParentSchemaDataInterator;
524  typedef std::multimap<const std::string, DtVisualizerDefinition*>::const_iterator ConstParentSchemaDataInterator;
525 
526  virtual DtVisualizerDefinition* findAncestorVisualizerDefinition(const std::string& schemaName, ParentSchemaDataMap& schemaDataMap);
528 
529  protected:
530  typedef std::map<std::string, DtVisualizerDefinitionValidator*> VisualizerDefinitionValidatorMap;
533 
535 
536  std::string myName;
537  std::string myRootsFilename;
538  std::string myHierName;
539  std::string myLeafName;
541 
544  boost::unordered_map<std::string, std::string> myDefinitionNameCheck;
547 
553 
554  bool myConvertWarningsToInfo = false;
555  };
556 
557 
562  public DtVirtualBaseClass
563  {
564  public:
565 
567  typedef unsigned int ElementDefinitionType;
568 
573  {
581  };
582 
587  static DtElementDefinitionTypeManager& instance(DtDe& de);
588 
591  static DtElementDefinitionTypeManager& instance(DtBaseConnection& con);
592 
594  virtual DtElementDefinitionTypeManager* clone();
595 
598  static void copyInstance(DtBaseConnection& con, DtDe&);
599 
601  static const DtElementDefinitionTypeManager* createConstCopy(DtDe& de);
602 
605 
616  virtual void registerElementType(ElementDefinitionType type,
617  const std::string& name, const DtUnicode& typeScreenName,
618  bool proceduralOnly);
619 
622  virtual DtElementDefinitionManager* findElementManager(ElementDefinitionType type);
623 
626  virtual DtElementDefinitionManager& elementManager(ElementDefinitionType type);
627 
631  virtual const DtElementDefinitionManager& elementManager(
632  ElementDefinitionType type) const;
633 
635  virtual void loadDefaults();
636 
638  virtual DtElementDefinitionTypeManager::ElementDefinitionType getElementDefinitionType(const DtElementDefinitionManager& element);
639 
640  protected:
641 
643  template <typename ManagerClass>
644  friend ManagerClass& defaultManagerInstanceFunction(DtDe&, bool);
645 
647  template <typename ManagerClass>
648  friend void defaultManagerRegisterInstanceFunction(DtDe&, ManagerClass*);
649 
652 
655 
658 
659  private:
663  operator=(const DtElementDefinitionTypeManager&);
664 
665  protected:
666 
667  typedef std::unordered_map<unsigned int, DtElementDefinitionManager*>
669 
673  };
674 
675 
680  {
681  public:
683  static DtElementDefinitionSignaler& instance(DtDe&);
684 
686  virtual ~DtElementDefinitionSignaler();
687 
688  //Signals.
689  boost::signalslib::signal<void(const DtUnicode& oldName, const DtUnicode& newName)>
691 
692  protected:
695 
696  private:
700 
704  };
705 }
boost::signalslib::signal< void()> signal_managerAboutTobeDeleted
Signals Signal sent when this manager is about to be deleted.
Definition: DtElementDefinitionManager.h:420
std::vector< DtUnicode > StringVector
Definition: DtVisualizerAttribute.h:113
BuiltInElementTypes
These types are all automatically registered when the manager is created. This enum is linked with Dt...
Definition: DtElementDefinitionManager.h:572
ElementDefinitionsBackup * myBackup
Definition: DtElementDefinitionManager.h:548
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:542
std::string myHierName
Definition: DtElementDefinitionManager.h:538
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
A signaler class which emits signals when element definitions change.
Definition: DtElementDefinitionManager.h:679
DefinitionFileType
Definition: DtElementDefinitionManager.h:76
Definition: DtElementDefinitionManager.h:579
std::string myName
Definition: DtElementDefinitionManager.h:536
std::vector< std::string >::const_iterator ParentToElementIter
Iterator for parent to element names.
Definition: DtElementDefinitionManager.h:95
std::map< DtUnicode, ElementGroup > ParentToElementsMap
Map from parent element definition name to a group of elements Used to reconstruct the element hierar...
Definition: DtElementDefinitionManager.h:445
bool myConvertingHierarchy
Definition: DtElementDefinitionManager.h:551
std::multimap< const std::string, DtVisualizerDefinition * >::const_iterator ConstParentSchemaDataInterator
Remove all elements from a definition map.
Definition: DtElementDefinitionManager.h:524
The makVrv::DtVisualizerDefinitionSet is a collection of makVrv::DtVisualizerDefinition instances...
Definition: DtVisualizerDefinitionSet.h:28
std::string Utf8String
Typedef&#39;d string used to indicate that a std::string must use utf8.
Definition: UnicodeStringRecord.h:11
std::map< std::string, makArchives::DtElementsRecord > StringToElementsRecordMap
Ordered map from a string (fileName) to a DtElementsRecord.
Definition: DtElementDefinitionManager.h:89
DtSignalConnectionManager myConnections
Definition: DtElementDefinitionManager.h:671
Manager which owns element definitions.for one type of element Use the makVrv::DtElementDefinitionTyp...
Definition: DtElementDefinitionManager.h:73
DefinitionMap myAddedDefinitions
Definition: DtElementDefinitionManager.h:550
The makVrv::DtRecordSettingsBackup is a templaced class that settings records will use in order to ba...
Definition: DtRecordSettingsBackup.h:101
Definition: DtElementDefinitionManager.h:575
The element type manager is responsible for knowing about the types of elements as well as owning the...
Definition: DtElementDefinitionManager.h:561
std::map< DtUnicode, DtElementDefinition * > DefinitionMap
Ordered map from element definition name to definition object.
Definition: DtElementDefinitionManager.h:86
unsigned int ElementDefinitionType
Identifier for a type of element definition.
Definition: DtElementDefinitionManager.h:567
Definition: DtElementDefinitionManager.h:577
Record for a visualization definition.
Definition: DtElementDefinitionRecord.h:23
The DtBaseConnection is an abstract class.
Definition: DtBaseConnection.h:35
std::string myRootsFilename
Definition: DtElementDefinitionManager.h:537
Definition: DtElementDefinitionManager.h:578
std::unordered_map< unsigned int, DtElementDefinitionManager * > ManagerMap
Definition: DtElementDefinitionManager.h:668
Definition: DtElementDefinitionManager.h:574
VisualizerDefinitionValidatorMap myValidators
Definition: DtElementDefinitionManager.h:534
std::string myLeafName
Definition: DtElementDefinitionManager.h:539
std::multimap< const std::string, DtVisualizerDefinition * > ParentSchemaDataMap
Remove all elements from a definition map.
Definition: DtElementDefinitionManager.h:522
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
The element definition class contains the element definition information. The makVrv::DtElementDefini...
Definition: DtElementDefinition.h:26
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:670
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
DefinitionMap myModifiedDefinitions
Definition: DtElementDefinitionManager.h:549
void defaultManagerRegisterInstanceFunction(DtDe &de, ManagerClass *mgr)
Default implementation of how to register a manager, especially necessary when overriding the manager...
Definition: DtDe.h:887
Definition: DtElementDefinitionManager.h:576
bool myAutoSave
Definition: DtElementDefinitionManager.h:546
ManagerMap myManagers
Definition: DtElementDefinitionManager.h:672
DefinitionMap myDefinitions
Definition: DtElementDefinitionManager.h:543
boost::signalslib::signal< void(const DtUnicode &oldName, const DtUnicode &newName)> signal_elementRenamed
Definition: DtElementDefinitionManager.h:690
Record containing a collection of element definition records.
Definition: DtElementsRecord.h:22
bool myProceduralFlag
Definition: DtElementDefinitionManager.h:545
Base class to provide boost signal/slot management.
Settings class for reading and writing settings to/from files.
Definition: DtDeSettings.h:29
std::map< std::string, DtVisualizerDefinitionValidator * > VisualizerDefinitionValidatorMap
Definition: DtElementDefinitionManager.h:530
A definition of a visualizer. Visualizer definition are always members of a visualizer definition set...
Definition: DtVisualizerDefinition.h:26
ManagerClass & defaultManagerInstanceFunction(DtDe &de, bool allowedInSlave)
default Manager instance function. Manager requirements: 1) Static instance function 2) Protected DtS...
Definition: DtDe.h:849
std::multimap< const std::string, DtVisualizerDefinition * >::iterator ParentSchemaDataInterator
Remove all elements from a definition map.
Definition: DtElementDefinitionManager.h:523
boost::unordered_map< std::string, std::string > myDefinitionNameCheck
Definition: DtElementDefinitionManager.h:544
std::pair< std::string, const makArchives::DtElementDefinitionRecord * > ElementPair
a pair, holding the definition file name in the key and the element definition record in the value ...
Definition: DtElementDefinitionManager.h:437
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
Definition: DtElementDefinitionManager.h:580
Record for a visualizer definition Designed to fit into a visualizer definition set record...
Definition: DtVisualizerDefinitionRecord.h:18
DefinitionMap myDeletedDefinitions
Definition: DtElementDefinitionManager.h:552
DtUnicode myScreenName
Definition: DtElementDefinitionManager.h:540
Record for an element definition (new type)
Definition: DtElementDefinitionRecord.h:90
std::vector< const DtElementDefinition * > ElementDefinitions
List of new element definitions.
Definition: DtElementDefinitionManager.h:92
DtModelSetId
Definition: DtModelSetEnums.h:19
Contains makVrv::DtIGLogger class.
DtRecordSettingsBackup< DtElementDefinitionManager, makArchives::DtElementsRecord > ElementDefinitionsBackup
Definition: DtElementDefinitionManager.h:532
The backup interface, is used by components to control backups of a state.
Definition: DtBackupInterface.h:19
Contains DLL export macros.
std::vector< ElementPair > ElementGroup
A group of element definition records, used for the following map.
Definition: DtElementDefinitionManager.h:440

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)