VR-Forces 4.8 Class Documentation
 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) 2020 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::vector<const DtElementDefinitionNew*> ElementDefinitions;
53 
55  typedef std::vector<std::string>::const_iterator ParentToElementIter;
56 
58  static const DtElementDefinitionManager* createConstCopy(
59  const DtElementDefinitionManager& orig);
60 
62  virtual ~DtElementDefinitionManager();
63 
66  const std::string& name() const;
67 
70  const DtUnicode& screenName() const;
71 
73  unsigned int numberOfElementDefinitions() const;
74 
78  const DefinitionMap& elementDefinitions() const;
79 
82  DtElementDefinitionNew* findElementDefinition(
83  const DtUnicode& definitionName);
84 
87  const DtElementDefinitionNew* findElementDefinition(
88  const DtUnicode& definitionName) const;
89 
92  DtElementDefinitionNew* createElementDefinition(
93  const DtUnicode& definitionName);
94 
98  DtElementDefinitionNew* createElementDefinition(
99  const DtUnicode& definitionName,
100  DtElementDefinitionNew* parentDefinition);
101 
104  void destroyElementDefinition(DtElementDefinitionNew*);
105 
107  void destroyElementDefinitionAndChildren(DtElementDefinitionNew*);
108 
113  DtElementDefinitionNew* copyElementDefinition(DtElementDefinitionNew& def,
114  const DtUnicode& newName);
115 
117  DtBackupInterface* backup();
118 
123  bool renameElementDefinition(const DtUnicode& oldName,
124  const DtUnicode& newName);
125 
127  void loadDefaults();
128 
130  void loadDefaults(bool loadOnlyFactory);
131 
135  virtual std::vector<std::string> retrieveHierFilesToMerge(const std::string& type);
136 
140  virtual std::vector<std::string> retrieveLeafFilesToMerge(const std::string& type);
141 
145  virtual bool shouldSkipDefLoading();
146 
148  void revertSettings();
149 
151  virtual void saveAsDefaults();
152 
154  virtual void splitAndWriteToDir(makArchives::DtElementsRecord& elementsRec,
155  const std::string& existingDirName);
156 
158  virtual void exportSettings(const std::string& fileOrDirName);
159 
161  virtual void exportSelectedSettings(const std::vector<std::string>& names, const std::string& fileName);
162 
164  virtual void exportHierSettings(const std::string& fileName);
165 
170  virtual void exportLeafSettings(const std::string& fileName, std::vector<std::string>& fileList);
171 
173  virtual void exportSelectedLeafSettings(const std::vector<std::string>& names, const std::string& fileName);
174 
178  void createFolderFromPathAndSplit(const std::string &fileOrDirName,
179  std::string& newPath, std::string& dirName);
180 
185  virtual void importSettings(const std::string& fileName,
186  ElementDefinitions& addedDefinitions,
187  ElementDefinitions& skippedDefinitions);
188 
190  virtual void importSettings(const std::string& fileName);
191 
193  virtual void mergeHierSettings(const std::string& hierFileOrDirName);
194 
196  virtual void mergeHierSettings(const std::string& hierFileOrDirName,
197  ElementDefinitions& addedDefinitions,
198  ElementDefinitions& skippedDefinitions);
199 
202  virtual void mergeLeafSettings(const std::string& leafFileOrDirName);
203 
205  virtual void mergeLeafSettings(const std::string& fileOrDirName,
206  ElementDefinitions& addedDefinitions,
207  ElementDefinitions& skippedDefinitions);
208 
210  virtual void mergeSettings(const std::string& fileName,
211  ElementDefinitions& addedDefinitions,
212  ElementDefinitions& skippedDefinitions);
213 
218  virtual void markRecordsAsHier(makArchives::DtElementsRecord& rec);
219 
221  virtual DtDeSettings* settings();
222 
227  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord);
228 
237  virtual void setFromRecord(const makArchives::DtElementsRecord& elemRecord,
238  ElementDefinitions& addedDefinitions,
239  ElementDefinitions& skippedDefinitions);
240 
247  virtual void setFromRecords(std::map<std::string, makArchives::DtElementsRecord>& elemRecords,
248  ElementDefinitions& addedDefinitions,
249  ElementDefinitions& skippedDefinitions);
250 
255  virtual void mergeRecords(
256  std::map<std::string, makArchives::DtElementsRecord>& recordMap,
257  ElementDefinitions& addedDefinitions,
258  ElementDefinitions& skippedDefinitions);
259 
262  virtual void mergeHierRecord(
263  const makArchives::DtElementsRecord& hierRecord,
264  ElementDefinitions& addedDefinitions,
265  ElementDefinitions& skippedDefinitions);
266 
269  virtual void mergeLeafRecords(
270  std::map<std::string, makArchives::DtElementsRecord>& recordMap,
271  ElementDefinitions& addedDefinitions,
272  ElementDefinitions& skippedDefinitions);
273 
276  virtual void mergeLeafRecord(
277  const makArchives::DtElementsRecord& leafRecord,
278  ElementDefinitions& addedDefinitions,
279  ElementDefinitions& skippedDefinitions);
280 
282  virtual void getRecord(makArchives::DtElementsRecord& rec);
283 
285  virtual void getRecord(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec);
286 
288  virtual void getRecordIncludingParent(const std::vector<std::string>& elementDefinitions, makArchives::DtElementsRecord& rec);
289 
293  virtual void getSplitRecord(std::vector<makArchives::DtElementsRecord>& rec,
294  std::vector<std::string>& fileNames);
295 
298  virtual void addRecords(makArchives::DtElementsRecord& recs,
299  makArchives::DtElementsRecord& combinedRec);
300 
305  virtual void splitRecordElemMgr(makArchives::DtElementsRecord& rec,
307  makArchives::DtElementsRecord& recLeaves);
308 
310  virtual void setAutoSave(bool enabled);
311 
313  virtual bool validateElementDefinition(const DtElementDefinitionNew& def);
314 
316  virtual bool validateElementAttribute(const DtVisualizerDefinition::SortedAttributeMap::iterator& attr);
317 
319  virtual DtUnicode getElementDefinitionError(const DtElementDefinitionNew& def);
320 
324  buildElementDefinitionRecord(DtElementDefinitionNew& elementDef);
325 
327  virtual bool canUseHierLeaf();
328 
330  virtual bool modifiedSinceStartup();
331 
333  virtual void resetModifiedSinceStartupFlag();
334 
336  virtual void addToModifiedDefinitionsMap(DtElementDefinitionNew* modelDefinition);
337 
339  virtual void addToAddedDefinitionsMap(DtElementDefinitionNew* modelDefinition);
340 
342  DefinitionMap getDeletedDefinitionsMap();
343 
345  virtual void addToDeletedDefinitionsMap(DtElementDefinitionNew* modelDefinition);
346 
348  virtual void resetModifiedFlags();
349 
352  DtUnicode findFirstDefWithAttribPair(const DtUnicode& attributeName, const DtUnicode& attributeValue);
353 
357  const DtUnicode& elementDefName, const DtUnicode& attributeName);
358 
361  virtual std::string getModelSetDisplayName(int modelSet) const;
362 
363  public:
366  boost::signal<void()> signal_managerAboutTobeDeleted;
367 
368  protected:
369 
371 
373  DtElementDefinitionManager(const std::string& name,
374  const DtUnicode& screenName, DtDe& de, bool procedural);
375 
378 
380  void registerDefinitionHierarchy(DtElementDefinitionNew* root);
381 
384  typedef std::pair < std::string, const makArchives::DtElementDefinitionRecord*> ElementPair;
385 
387  typedef std::vector<ElementPair> ElementGroup;
388 
392  typedef std::map<DtUnicode, ElementGroup> ParentToElementsMap;
393 
395  virtual void buildElementVisualizers(DtElementDefinitionNew& newDef,
396  const makArchives::DtElementDefinitionRecord& defRecord);
397 
399  virtual void buildElementVisualizersForModelSet(
401  DtElementDefinitionNew &newDef, int modelSet);
402 
405  virtual void buildElementChildren(
406  DtElementDefinitionNew& ed, ParentToElementsMap& parentToElementsMap,
407  ElementDefinitions& addedDefinitions,
408  ElementDefinitions& skippedDefinitions);
409 
412  static void setupVisualizerDefs(makArchives::DtElementDefinitionRecord &elementRec,
413  DtElementDefinitionNew &elementDef, unsigned int modelSet);
414 
417  virtual void registerBackup();
418 
420  virtual bool recordMatchesDefinition(
422  const DtElementDefinitionNew* existingChildDef) const;
423 
425  virtual bool recordMatchesDefinitionModelSet(
427  const DtElementDefinitionNew* existingChildDef,
428  int modelSet) const;
429 
431  virtual void generateParentToElement(ParentToElementsMap& parentToElements,
432  std::map<std::string, makArchives::DtElementsRecord>& rec);
433 
435  virtual bool checkRecordsAreLeavesInHier(ParentToElementsMap& parentToElements,
436  std::map<std::string, makArchives::DtElementsRecord>& recordMap,
437  std::vector<std::string>& leafFiles);
438 
440  virtual bool replaceMergeLeaves(
441  std::map<std::string, makArchives::DtElementsRecord>& firstRecMap,
442  std::map<std::string, makArchives::DtElementsRecord>& secondRecMap,
443  const std::vector<std::string>& leafFiles);
444 
446  virtual bool loadDefaultsFromHierLeafDir(std::map<std::string, makArchives::DtElementsRecord>& recordMap);
447 
450  virtual bool isEntityDefinitions();
451 
454  virtual void checkDefinitionName(const DtUnicode& definitionName);
455 
456  private:
460 
464 
465  protected:
466  typedef std::map<std::string, DtVisualizerDefinitionValidator*> VisualizerDefinitionValidatorMap;
469 
471 
472  std::string myName;
473  std::string myHierName;
474  std::string myLeafName;
476 
479  boost::unordered_map<std::string, std::string> myDefinitionNameCheck;
482 
488  };
489 
490 
495  public DtVirtualBaseClass
496  {
497  public:
498 
500  typedef unsigned int ElementDefinitionType;
501 
506  {
514  };
515 
520  static DtElementDefinitionTypeManager& instance(DtDe& de);
521 
524  static DtElementDefinitionTypeManager& instance(DtBaseConnection& con);
525 
527  virtual DtElementDefinitionTypeManager* clone();
528 
531  static void copyInstance(DtBaseConnection& con, DtDe&);
532 
534  static const DtElementDefinitionTypeManager* createConstCopy(DtDe& de);
535 
538 
549  virtual void registerElementType(ElementDefinitionType type,
550  const std::string& name, const DtUnicode& typeScreenName,
551  bool proceduralOnly);
552 
555  virtual DtElementDefinitionManager* findElementManager(ElementDefinitionType type);
556 
559  virtual DtElementDefinitionManager& elementManager(ElementDefinitionType type);
560 
564  virtual const DtElementDefinitionManager& elementManager(
565  ElementDefinitionType type) const;
566 
568  virtual void loadDefaults();
569 
571  virtual DtElementDefinitionTypeManager::ElementDefinitionType getElementDefinitionType(const DtElementDefinitionManager& element);
572 
573  protected:
574 
576  template <typename ManagerClass>
577  friend ManagerClass& defaultManagerInstanceFunction(DtDe&, bool);
578 
580  template <typename ManagerClass>
581  friend void defaultManagerRegisterInstanceFunction(DtDe&, ManagerClass*);
582 
585 
588 
591 
592  private:
596  operator=(const DtElementDefinitionTypeManager&);
597 
598  protected:
599 
600  typedef boost::unordered_map<unsigned int, DtElementDefinitionManager*>
602 
606  };
607 
608 
613  {
614  public:
616  static DtElementDefinitionSignaler& instance(DtDe&);
617 
619  virtual ~DtElementDefinitionSignaler();
620 
621  //Signals.
622  boost::signal<void(const DtUnicode& oldName, const DtUnicode& newName)>
624 
625  protected:
628 
629  private:
633 
637  };
638 }
std::vector< DtUnicode > StringVector
Definition: DtVisualizerAttribute.h:110
BuiltInElementTypes
These types are all automatically registered when the manager is created.
Definition: DtElementDefinitionManager.h:505
ElementDefinitionsBackup * myBackup
Definition: DtElementDefinitionManager.h:483
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:477
std::string myHierName
Definition: DtElementDefinitionManager.h:473
Virtual base class.
Definition: DtVirtualBaseClass.h:22
A unicode string.
Definition: DtUnicode.h:33
A signaler class which emits signals when element definitions change.
Definition: DtElementDefinitionManager.h:612
Definition: DtElementDefinitionManager.h:512
std::string myName
Definition: DtElementDefinitionManager.h:472
boost::signal< void(const DtUnicode &oldName, const DtUnicode &newName)> signal_elementRenamed
Definition: DtElementDefinitionManager.h:623
std::vector< std::string >::const_iterator ParentToElementIter
Iterator for parent to element names.
Definition: DtElementDefinitionManager.h:55
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:392
int myStartupNumOfDefinition
Definition: DtElementDefinitionManager.h:484
boost::signal< void()> signal_managerAboutTobeDeleted
Signals Signal sent when this manager is about to be deleted.
Definition: DtElementDefinitionManager.h:366
DtSignalConnectionManager myConnections
Definition: DtElementDefinitionManager.h:604
Manager which owns element definitions.for one type of element Use the makVrv::DtElementDefinitionTyp...
Definition: DtElementDefinitionManager.h:44
DefinitionMap myAddedDefinitions
Definition: DtElementDefinitionManager.h:486
The makVrv::DtRecordSettingsBackup is a templaced class that settings records will use in order to ba...
Definition: DtRecordSettingsBackup.h:103
Definition: DtElementDefinitionManager.h:508
The element type manager is responsible for knowing about the types of elements as well as owning the...
Definition: DtElementDefinitionManager.h:494
unsigned int ElementDefinitionType
Identifier for a type of element definition.
Definition: DtElementDefinitionManager.h:500
Definition: DtElementDefinitionManager.h:510
boost::unordered_map< unsigned int, DtElementDefinitionManager * > ManagerMap
Definition: DtElementDefinitionManager.h:601
The DtBaseConnection is an abstract class.
Definition: DtBaseConnection.h:37
Definition: DtElementDefinitionManager.h:511
std::vector< const DtElementDefinitionNew * > ElementDefinitions
List of new element definitions.
Definition: DtElementDefinitionManager.h:52
Definition: DtElementDefinitionManager.h:507
VisualizerDefinitionValidatorMap myValidators
Definition: DtElementDefinitionManager.h:470
std::string myLeafName
Definition: DtElementDefinitionManager.h:474
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
DtDe * myOptionalDe
Definition: DtElementDefinitionManager.h:603
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:24
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.
Definition: DtElementDefinitionNew.h:25
DefinitionMap myModifiedDefinitions
Definition: DtElementDefinitionManager.h:485
void defaultManagerRegisterInstanceFunction(DtDe &de, ManagerClass *mgr)
Default implementation of how to register a manager, especially necessary when overriding the manager...
Definition: DtDe.h:840
Definition: DtElementDefinitionManager.h:509
bool myAutoSave
Definition: DtElementDefinitionManager.h:481
ManagerMap myManagers
Definition: DtElementDefinitionManager.h:605
DefinitionMap myDefinitions
Definition: DtElementDefinitionManager.h:478
Record containing a collection of element definition records.
Definition: DtElementsRecord.h:16
bool myProceduralFlag
Definition: DtElementDefinitionManager.h:480
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:466
ManagerClass & defaultManagerInstanceFunction(DtDe &de, bool allowedInSlave)
default Manager instance function.
Definition: DtDe.h:802
boost::unordered_map< std::string, std::string > myDefinitionNameCheck
Definition: DtElementDefinitionManager.h:479
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:384
The DtDe is the core component of any VR-Vantage application.
Definition: DtDe.h:69
Definition: DtElementDefinitionManager.h:513
DefinitionMap myDeletedDefinitions
Definition: DtElementDefinitionManager.h:487
DtUnicode myScreenName
Definition: DtElementDefinitionManager.h:475
Record for an element definition (new type)
Definition: DtElementDefinitionRecord.h:90
DtRecordSettingsBackup< DtElementDefinitionManager, makArchives::DtElementsRecord > ElementDefinitionsBackup
Definition: DtElementDefinitionManager.h:468
The backup interface, is used by components to control backups of a state.
Definition: DtBackupInterface.h:22
std::vector< ElementPair > ElementGroup
A group of element definition records, used for the following map.
Definition: DtElementDefinitionManager.h:387

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)