VR-Forces 5.0.2 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) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
7 
8 #pragma once
9 
14 
15 #include <boost/unordered_map.hpp>
16 
17 namespace makArchives
18 {
19  class DtElementDefinitionRecord;
20  class DtElementsRecord;
21 
22  namespace oldRecords
23  {
24  class DtElementDefinition;
25  class DtElementDefinitionHierarchy;
26  class DtElementDefinitionNode;
27  class DtVisualAttributeInterface;
28  };
29 }
30 
31 namespace makVrv
32 {
33  class DtDe;
34  class DtBaseConnection;
35  class DtElementDefinitionNew;
36  class DtDeSettings;
37  class DtBackupInterface;
38  class DtVisualizerDefinitionValidator;
39 
45  {
46  public:
48  typedef std::map<DtUnicode, DtElementDefinitionNew*>
50 
52  typedef std::map<std::string, makArchives::DtElementsRecord> StringToElementsRecordMap;
53 
55  typedef std::vector<const DtElementDefinitionNew*> ElementDefinitions;
56 
58  typedef std::vector<std::string>::const_iterator ParentToElementIter;
59 
61  static const DtElementDefinitionManager* createConstCopy(
62  const DtElementDefinitionManager& orig);
63 
65  virtual ~DtElementDefinitionManager();
66 
69  const std::string& name() const;
70 
73  const DtUnicode& screenName() const;
74 
76  unsigned int numberOfElementDefinitions() const;
77 
81  const DefinitionMap& elementDefinitions() const;
82 
85  DtElementDefinitionNew* findElementDefinition(
86  const DtUnicode& definitionName);
87 
90  const DtElementDefinitionNew* findElementDefinition(
91  const DtUnicode& definitionName) const;
92 
95  DtElementDefinitionNew* createElementDefinition(
96  const DtUnicode& definitionName);
97 
101  DtElementDefinitionNew* createElementDefinition(
102  const DtUnicode& definitionName,
103  DtElementDefinitionNew* parentDefinition);
104 
107  void destroyElementDefinition(DtElementDefinitionNew*);
108 
110  void destroyElementDefinitionAndChildren(DtElementDefinitionNew*);
111 
116  DtElementDefinitionNew* copyElementDefinition(DtElementDefinitionNew& def,
117  const DtUnicode& newName);
118 
120  DtBackupInterface* backup();
121 
126  bool renameElementDefinition(const DtUnicode& oldName,
127  const DtUnicode& newName);
128 
130  void loadDefaults();
131 
133  void loadDefaults(bool loadOnlyFactory);
134 
136  DefinitionMap& modifiedDefinitions();
137 
141  virtual std::vector<std::string> retrieveHierFilesToMerge(const std::string& type);
142 
146  virtual std::vector<std::string> retrieveLeafFilesToMerge(const std::string& type);
147 
151  virtual bool shouldSkipDefLoading();
152 
154  void revertSettings();
155 
157  virtual void saveAsDefaults();
158 
160  virtual void splitAndWriteToDir(makArchives::DtElementsRecord& elementsRec,
161  const std::string& existingDirName);
162 
164  virtual void exportSettings(const std::string& fileOrDirName);
165 
167  virtual void exportSelectedSettings(const std::vector<std::string>& names, const std::string& fileName);
168 
170  virtual void exportHierSettings(const std::string& fileName);
171 
176  virtual void exportLeafSettings(std::vector<std::string>& fileList);
177 
179  virtual void exportSelectedLeafSettings(const std::vector<std::string>& names, const std::string& fileName);
180 
184  void createFolderFromPathAndSplit(const std::string &fileOrDirName,
185  std::string& newPath, std::string& dirName);
186 
191  virtual void importSettings(const std::string& fileName,
192  ElementDefinitions& addedDefinitions,
193  ElementDefinitions& skippedDefinitions);
194 
196  virtual void importSettings(const std::string& fileName);
197 
199  virtual void mergeHierSettings(const std::string& hierFileOrDirName);
200 
202  virtual void mergeHierSettings(const std::string& hierFileOrDirName,
203  ElementDefinitions& addedDefinitions,
204  ElementDefinitions& skippedDefinitions);
205 
208  virtual void mergeLeafSettings(const std::string& leafFileOrDirName);
209 
211  virtual void mergeLeafSettings(const std::string& fileOrDirName,
212  ElementDefinitions& addedDefinitions,
213  ElementDefinitions& skippedDefinitions);
214 
216  virtual void mergeSettings(const std::string& fileName,
217  ElementDefinitions& addedDefinitions,
218  ElementDefinitions& skippedDefinitions);
219 
224  virtual void markRecordsAsHier(makArchives::DtElementsRecord& rec);
225 
227  virtual DtDeSettings* settings();
228 
233  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord);
234 
243  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord,
244  ElementDefinitions& addedDefinitions,
245  ElementDefinitions& skippedDefinitions);
246 
253  virtual void setFromRecords(StringToElementsRecordMap& elemRecords,
254  ElementDefinitions& addedDefinitions,
255  ElementDefinitions& skippedDefinitions);
256 
261  virtual void mergeRecords(
262  StringToElementsRecordMap& recordMap,
263  ElementDefinitions& addedDefinitions,
264  ElementDefinitions& skippedDefinitions);
265 
268  virtual void mergeHierRecord(
269  const makArchives::DtElementsRecord& hierRecord,
270  ElementDefinitions& addedDefinitions,
271  ElementDefinitions& skippedDefinitions);
272 
275  virtual void mergeLeafRecords(
276  StringToElementsRecordMap& recordMap,
277  ElementDefinitions& addedDefinitions,
278  ElementDefinitions& skippedDefinitions);
279 
282  virtual void mergeLeafRecord(
283  const makArchives::DtElementsRecord& leafRecord,
284  ElementDefinitions& addedDefinitions,
285  ElementDefinitions& skippedDefinitions);
286 
288  virtual void getRecord(makArchives::DtElementsRecord& rec);
289 
291  virtual void getRecord(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec);
292 
294  virtual void getRecordIncludingParent(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec);
295 
299  virtual void getSplitRecord(std::vector<makArchives::DtElementsRecord>& rec,
300  std::vector<std::string>& fileNames);
301 
304  virtual void addRecords(makArchives::DtElementsRecord& recs,
305  makArchives::DtElementsRecord& combinedRec);
306 
311  virtual void splitRecordElemMgr(makArchives::DtElementsRecord& rec,
313  makArchives::DtElementsRecord& recLeaves);
314 
316  virtual void setAutoSave(bool enabled);
317 
319  virtual bool validateElementDefinition(const DtElementDefinitionNew& def);
320 
322  virtual bool validateElementAttribute(const DtVisualizerDefinition::SortedAttributeMap::iterator& attr);
323 
325  virtual DtUnicode getElementDefinitionError(const DtElementDefinitionNew& def);
326 
330  buildElementDefinitionRecord(DtElementDefinitionNew& elementDef);
331 
333  virtual bool canUseHierLeaf();
334 
336  virtual bool modifiedSinceStartup();
337 
339  virtual void resetModifiedSinceStartupFlag();
340 
342  virtual void addToModifiedDefinitionsMap(DtElementDefinitionNew* modelDefinition);
343 
345  virtual void addToAddedDefinitionsMap(DtElementDefinitionNew* modelDefinition);
346 
348  DefinitionMap getDeletedDefinitionsMap();
349 
351  virtual void addToDeletedDefinitionsMap(DtElementDefinitionNew* modelDefinition);
352 
354  virtual void resetModifiedFlags();
355 
358  DtUnicode findFirstDefWithAttribPair(const DtUnicode& attributeName, const DtUnicode& attributeValue);
359 
363  const DtUnicode& elementDefName, const DtUnicode& attributeName);
364 
367  virtual std::string getModelSetDisplayName(int modelSet) const;
368 
369  public:
372  boost::signalslib::signal<void()> signal_managerAboutTobeDeleted;
373 
374  protected:
375 
377 
379  DtElementDefinitionManager(const std::string& name,
380  const DtUnicode& screenName, DtDe& de, bool procedural);
381 
384 
386  void registerDefinitionHierarchy(DtElementDefinitionNew* root);
387 
390  typedef std::pair < std::string, const makArchives::DtElementDefinitionRecord*> ElementPair;
391 
393  typedef std::vector<ElementPair> ElementGroup;
394 
398  typedef std::map<DtUnicode, ElementGroup> ParentToElementsMap;
399 
401  virtual void buildElementVisualizers(DtElementDefinitionNew& newDef,
402  const makArchives::DtElementDefinitionRecord& defRecord);
403 
405  virtual void buildElementVisualizersForModelSet(
407  DtElementDefinitionNew &newDef, int modelSet);
408 
411  virtual void buildElementChildren(
412  DtElementDefinitionNew& ed, ParentToElementsMap& parentToElementsMap,
413  ElementDefinitions& addedDefinitions,
414  ElementDefinitions& skippedDefinitions);
415 
418  static void setupVisualizerDefs(makArchives::DtElementDefinitionRecord &elementRec,
419  DtElementDefinitionNew &elementDef, unsigned int modelSet);
420 
423  virtual void registerBackup();
424 
426  virtual bool recordMatchesDefinition(
428  const DtElementDefinitionNew* existingChildDef) const;
429 
431  virtual bool recordMatchesDefinitionModelSet(
433  const DtElementDefinitionNew* existingChildDef,
434  int modelSet) const;
435 
437  virtual void generateParentToElement(ParentToElementsMap& parentToElements,
439 
441  virtual bool checkRecordsAreLeavesInHier(ParentToElementsMap& parentToElements,
442  StringToElementsRecordMap& recordMap,
443  std::vector<std::string>& leafFiles);
444 
446  virtual bool replaceMergeLeaves(
447  StringToElementsRecordMap& firstRecMap,
448  StringToElementsRecordMap& secondRecMap,
449  const std::vector<std::string>& leafFiles);
450 
452  virtual bool loadDefaultsFromHierLeafDir(StringToElementsRecordMap& recordMap);
453 
456  virtual bool isEntityDefinitions();
457 
460  virtual void checkDefinitionName(const DtUnicode& definitionName);
461 
462  private:
466 
470 
471  protected:
472  typedef std::map<std::string, DtVisualizerDefinitionValidator*> VisualizerDefinitionValidatorMap;
475 
477 
478  std::string myName;
479  std::string myHierName;
480  std::string myLeafName;
482 
485  boost::unordered_map<std::string, std::string> myDefinitionNameCheck;
488 
494  };
495 
496 
501  public DtVirtualBaseClass
502  {
503  public:
504 
506  typedef unsigned int ElementDefinitionType;
507 
512  {
520  };
521 
526  static DtElementDefinitionTypeManager& instance(DtDe& de);
527 
530  static DtElementDefinitionTypeManager& instance(DtBaseConnection& con);
531 
533  virtual DtElementDefinitionTypeManager* clone();
534 
537  static void copyInstance(DtBaseConnection& con, DtDe&);
538 
540  static const DtElementDefinitionTypeManager* createConstCopy(DtDe& de);
541 
544 
555  virtual void registerElementType(ElementDefinitionType type,
556  const std::string& name, const DtUnicode& typeScreenName,
557  bool proceduralOnly);
558 
561  virtual DtElementDefinitionManager* findElementManager(ElementDefinitionType type);
562 
565  virtual DtElementDefinitionManager& elementManager(ElementDefinitionType type);
566 
570  virtual const DtElementDefinitionManager& elementManager(
571  ElementDefinitionType type) const;
572 
574  virtual void loadDefaults();
575 
577  virtual DtElementDefinitionTypeManager::ElementDefinitionType getElementDefinitionType(const DtElementDefinitionManager& element);
578 
579  protected:
580 
582  template <typename ManagerClass>
583  friend ManagerClass& defaultManagerInstanceFunction(DtDe&, bool);
584 
586  template <typename ManagerClass>
587  friend void defaultManagerRegisterInstanceFunction(DtDe&, ManagerClass*);
588 
591 
594 
597 
598  private:
602  operator=(const DtElementDefinitionTypeManager&);
603 
604  protected:
605 
606  typedef boost::unordered_map<unsigned int, DtElementDefinitionManager*>
608 
612  };
613 
614 
619  {
620  public:
622  static DtElementDefinitionSignaler& instance(DtDe&);
623 
625  virtual ~DtElementDefinitionSignaler();
626 
627  //Signals.
628  boost::signalslib::signal<void(const DtUnicode& oldName, const DtUnicode& newName)>
630 
631  protected:
634 
635  private:
639 
643  };
644 }
boost::signalslib::signal< void()> signal_managerAboutTobeDeleted
Signals Signal sent when this manager is about to be deleted.
Definition: DtElementDefinitionManager.h:372
std::vector< DtUnicode > StringVector
Definition: DtVisualizerAttribute.h:112
BuiltInElementTypes
These types are all automatically registered when the manager is created. This enum is linked with Dt...
Definition: DtElementDefinitionManager.h:511
ElementDefinitionsBackup * myBackup
Definition: DtElementDefinitionManager.h:489
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:483
std::string myHierName
Definition: DtElementDefinitionManager.h:479
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:618
Definition: DtElementDefinitionManager.h:518
std::string myName
Definition: DtElementDefinitionManager.h:478
std::vector< std::string >::const_iterator ParentToElementIter
Iterator for parent to element names.
Definition: DtElementDefinitionManager.h:58
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:398
int myStartupNumOfDefinition
Definition: DtElementDefinitionManager.h:490
std::map< std::string, makArchives::DtElementsRecord > StringToElementsRecordMap
Ordered map from a string (filename) to a DtElementsRecord.
Definition: DtElementDefinitionManager.h:52
DtSignalConnectionManager myConnections
Definition: DtElementDefinitionManager.h:610
Manager which owns element definitions.for one type of element Use the makVrv::DtElementDefinitionTyp...
Definition: DtElementDefinitionManager.h:44
DefinitionMap myAddedDefinitions
Definition: DtElementDefinitionManager.h:492
The makVrv::DtRecordSettingsBackup is a templaced class that settings records will use in order to ba...
Definition: DtRecordSettingsBackup.h:100
Definition: DtElementDefinitionManager.h:514
The element type manager is responsible for knowing about the types of elements as well as owning the...
Definition: DtElementDefinitionManager.h:500
unsigned int ElementDefinitionType
Identifier for a type of element definition.
Definition: DtElementDefinitionManager.h:506
Definition: DtElementDefinitionManager.h:516
boost::unordered_map< unsigned int, DtElementDefinitionManager * > ManagerMap
Definition: DtElementDefinitionManager.h:607
The DtBaseConnection is an abstract class.
Definition: DtBaseConnection.h:38
Definition: DtElementDefinitionManager.h:517
std::vector< const DtElementDefinitionNew * > ElementDefinitions
List of new element definitions.
Definition: DtElementDefinitionManager.h:55
Definition: DtElementDefinitionManager.h:513
VisualizerDefinitionValidatorMap myValidators
Definition: DtElementDefinitionManager.h:476
std::string myLeafName
Definition: DtElementDefinitionManager.h:480
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:609
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
std::map< DtUnicode, DtElementDefinitionNew * > DefinitionMap
Ordered map from element definition name to definition object.
Definition: DtElementDefinitionManager.h:49
The element definition class contains the element definition information. The makVrv::DtElementDefini...
Definition: DtElementDefinitionNew.h:25
DefinitionMap myModifiedDefinitions
Definition: DtElementDefinitionManager.h:491
void defaultManagerRegisterInstanceFunction(DtDe &de, ManagerClass *mgr)
Default implementation of how to register a manager, especially necessary when overriding the manager...
Definition: DtDe.h:866
Definition: DtElementDefinitionManager.h:515
bool myAutoSave
Definition: DtElementDefinitionManager.h:487
ManagerMap myManagers
Definition: DtElementDefinitionManager.h:611
DefinitionMap myDefinitions
Definition: DtElementDefinitionManager.h:484
boost::signalslib::signal< void(const DtUnicode &oldName, const DtUnicode &newName)> signal_elementRenamed
Definition: DtElementDefinitionManager.h:629
Record containing a collection of element definition records.
Definition: DtElementsRecord.h:16
bool myProceduralFlag
Definition: DtElementDefinitionManager.h:486
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:472
ManagerClass & defaultManagerInstanceFunction(DtDe &de, bool allowedInSlave)
default Manager instance function. Manager requirements: 1) Static instance function 2) Protected DtS...
Definition: DtDe.h:828
boost::unordered_map< std::string, std::string > myDefinitionNameCheck
Definition: DtElementDefinitionManager.h:485
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:390
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:70
Definition: DtElementDefinitionManager.h:519
DefinitionMap myDeletedDefinitions
Definition: DtElementDefinitionManager.h:493
DtUnicode myScreenName
Definition: DtElementDefinitionManager.h:481
Record for an element definition (new type)
Definition: DtElementDefinitionRecord.h:90
DtRecordSettingsBackup< DtElementDefinitionManager, makArchives::DtElementsRecord > ElementDefinitionsBackup
Definition: DtElementDefinitionManager.h:474
The backup interface, is used by components to control backups of a state.
Definition: DtBackupInterface.h:19
std::vector< ElementPair > ElementGroup
A group of element definition records, used for the following map.
Definition: DtElementDefinitionManager.h:393

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)