VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtElementIDHierarchy.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
13 
14 #pragma once
15 
16 #include <vrvCore/vrvCore.h>
17 
18 #include <vrvCore/DtUniqueID.h>
19 
20 #include <vrvUtil/signalslib.h>
21 #include <boost/unordered_map.hpp>
22 #include <boost/function.hpp>
23 
24 #include <set>
25 
26 namespace makVrv
27 {
28  class DtElementIDHierarchyState;
29 
34  {
35  public:
36  typedef std::vector<DtElementIDHierarchyNode*> ChildHierarchyNodes;
37 
40  {
41  Unknown = -1,
42  Collapsed = 0,
43  Shown = 1,
44  Ghosted = 2,
45  Expanded = 3,
46  InitiallyShown = 4,
47  InitiallyExpanded = 5,
50  Hidden = 6,
51  };
52 
53  enum Flags
54  {
55  ShouldHaveChildren = 0x00000001,
56  CollapseIfNoChildren = 0x00000002,
57  };
58 
60 
63 
66 
67  virtual ~DtElementIDHierarchyNode();
68 
70  bool operator==(const DtElementIDHierarchyNode&) const;
71  bool operator!=(const DtElementIDHierarchyNode& rhs) const
72  {
73  return !(*this == rhs);
74  }
75 
76  bool hasChild(DtElementID child) const;
77  bool addChild(DtElementIDHierarchyNode*);
78  void removeChild(DtElementID child);
79  void copyOriginal(const DtElementIDHierarchyNode& orig);
80 
81  const makVrv::DtElementID& elementId() const;
82  const ChildHierarchyNodes& children() const;
83 
84  void removeAllChildren();
85  void setParent(DtElementIDHierarchyNode* p);
86 
87  DtElementIDHierarchyNode* parent();
88  const DtElementIDHierarchyNode* parent() const;
89 
91  virtual bool childInHierarchy(DtElementID id) const;
92 
93  void setFlags(int flags);
94  int flags() const;
95 
96  void setDisplayState(DisplayState);
97  DisplayState displayState() const;
98 
99  protected:
104  int myFlags;
106  };
107 
112  {
113  public:
114  typedef std::vector<DtElementID> ElementIDs;
115  typedef std::set<const DtElementIDHierarchyNode*> VisibilityProcessingList;
116  typedef boost::function<DtElementIDHierarchyNode::DisplayState (const DtElementIDHierarchyNode*)> ExpectedDisplayState;
117 
118  public:
120  virtual ~DtElementIDHierarchy();
121 
122  public:
126  virtual void addToHierarchy(DtElementID elementID, DtElementID child, int flags = 0, bool setAsNewChildren = true,
127  bool processList = true);
128  virtual void addToHierarchy(DtElementID elementID, const ElementIDs& children = ElementIDs(),
129  int flags = 0, bool setAsNewChildren = true, bool processList = true);
130 
132  void setFlags(DtElementID id, int flags);
133 
135  int flags(DtElementID id) const;
136 
138  virtual void removeFromHierarchy(DtElementID id);
139 
140  public:
143  virtual bool isChild(DtElementID parentId, DtElementID childId, bool recurse = false) const;
144 
146  bool isInHierarchy(DtElementID id) const;
147 
149  const DtElementIDHierarchyNode* parentOf(DtElementID id) const;
150 
151  DtElementIDHierarchyNode* hierarchyNode(DtElementID id);
152  const DtElementIDHierarchyNode* hierarchyNode(DtElementID elementID) const;
153 
154  bool hasChildren(DtElementID id) const;
155 
157  int level(const DtElementIDHierarchyNode* node) const;
158 
160  virtual DtElementIDHierarchyNode::DisplayState displayState(DtElementID elementID) const;
161 
163  virtual void detachChildFromParent(DtElementID child);
164 
166  virtual void attachChildToParent(DtElementID child, DtElementID parent, bool processList = true);
167 
168  public:
169 
174  virtual void expand(DtElementID elementID, bool processList = true);
175 
177  virtual void expandAll(DtElementID elementID, bool processList = true);
178 
183  virtual void expandDown(DtElementID elementID, int numLevels = -1, bool processList = true);
184 
186  virtual void collapseAll(DtElementID elementID, bool processList = true);
187 
190  virtual void collapse(DtElementID elementID, bool processList = true);
191 
193  virtual void processVisibilityList();
194 
196  void setInitiallyExpanded(bool);
197  virtual bool initiallyExpanded() const;
198 
200  virtual void processNode(DtElementIDHierarchyNode* node, bool forceUpdate = false);
201 
203  void setExpectedDisplayStateFunction(ExpectedDisplayState);
204 
206  virtual DtElementIDHierarchyNode::DisplayState expectedDisplayStateFor(const DtElementIDHierarchyNode* node);
207 
209  virtual void reprocessAllNodes();
210 
212  virtual void updateHierarchyToMatch(DtElementID id, const ElementIDs& children, int flags);
213 
214  public:
215  //Comparison of two DtElementIDHierarchyNode's uniqueIds. Return true if a->uniqueId() < b->uniqueId()
216  static bool nodeElementIdSort(DtElementIDHierarchyNode* a, DtElementIDHierarchyNode* b);
217 
218 
219  protected:
221  virtual void processVisibilityState(const DtElementIDHierarchyNode*);
222 
223  virtual void processSingleNode(DtElementIDHierarchyNode* node, bool forceUpdate = false);
224  virtual void processParentedNode(DtElementIDHierarchyNode* node, bool forceUpdate = false, bool processChildren = true);
225  virtual void processNodeWithChildren(DtElementIDHierarchyNode* node, bool forceUpdate = false);
226 
228  virtual void attachParentToChildrenAndRemoveMissingChildren(DtElementID parentId, ElementIDs newChildren);
229 
230  protected:
232  virtual void hierarchyUpdated();
233 
235  virtual void aboutToBeRemovedFromHierarchy(DtElementIDHierarchyNode*);
236 
239  virtual void updateHierarchy(DtElementID id, const ElementIDs& children, bool setAsNewChildren = true);
240 
245  virtual void attachParentToChildren(DtElementID parentId, const ElementIDs& children, bool setAsNewChildren = true);
246 
247  virtual void removeAllChildrenFromParent(DtElementID);
248 
249  public:
250  boost::signalslib::signal<void (DtElementIDHierarchyNode*) > signal_hierarchyItemModified;
251 
253  boost::signalslib::signal<void (DtElementIDHierarchyNode*) > signal_hierarchyItemToBeRemoved;
254  boost::signalslib::signal<void (DtElementIDHierarchyNode*) > signal_hierarchyItemAboutToBeRemoved;
255  boost::signalslib::signal<void (DtElementIDHierarchy*) > signal_hierarchyUpdated;
256  boost::signalslib::signal<void (DtElementID, const ElementIDs&)> signal_updateHierarchy;
257  boost::signalslib::signal<void (DtElementID, DtElementIDHierarchyNode::DisplayState)> signal_echelonVisibilityChange;
258  boost::signalslib::signal<void (VisibilityProcessingList)> signal_visibilityChanged;
259 
260  protected:
262  virtual void hierarchyItemModified(DtElementIDHierarchyNode*);
263 
264  protected:
265  typedef boost::unordered_map<DtElementID, DtElementIDHierarchyNode*> HierarchyNodeMap;
266 
270 
272  };
273 }
VisibilityProcessingList myVisibilityProcessingList
Definition: DtElementIDHierarchy.h:268
boost::signalslib::signal< void(DtElementIDHierarchyNode *) > signal_hierarchyItemAboutToBeRemoved
Definition: DtElementIDHierarchy.h:254
boost::signalslib::signal< void(DtElementIDHierarchyNode *) > signal_hierarchyItemModified
Definition: DtElementIDHierarchy.h:250
std::vector< DtElementID > ElementIDs
Definition: DtElementIDHierarchy.h:114
DT_DLL_VRVCORE DtTaitBryan level(const DtCoordinateSystem &cs, const DtVector &localOrigin, double topoHeading)
Returns a level orientation with the topographic heading.
boost::signalslib::signal< void(VisibilityProcessingList)> signal_visibilityChanged
Definition: DtElementIDHierarchy.h:258
DtElementIDHierarchyNode * myParent
Definition: DtElementIDHierarchy.h:100
ExpectedDisplayState myExpectedDisplayState
Definition: DtElementIDHierarchy.h:269
std::set< const DtElementIDHierarchyNode * > VisibilityProcessingList
Definition: DtElementIDHierarchy.h:115
boost::unordered_map< DtElementID, DtElementIDHierarchyNode * > HierarchyNodeMap
Definition: DtElementIDHierarchy.h:265
The DtElementIDHierarchyState class contains information about the element and its place in the eleme...
Definition: DtElementIDHierarchyState.h:20
Hierarchy that will keep track of parent/child element id relationships. Will emit signals when the t...
Definition: DtElementIDHierarchy.h:111
DtElementID myId
Definition: DtElementIDHierarchy.h:102
ChildHierarchyNodes myChildren
Definition: DtElementIDHierarchy.h:101
boost::signalslib::signal< void(DtElementID, const ElementIDs &)> signal_updateHierarchy
Definition: DtElementIDHierarchy.h:256
boost::signalslib::signal< void(DtElementID, DtElementIDHierarchyNode::DisplayState)> signal_echelonVisibilityChange
Definition: DtElementIDHierarchy.h:257
DisplayState
Used to keep track of state of item as it should appear visually in the hierarchy.
Definition: DtElementIDHierarchy.h:39
DisplayState myDisplayState
Definition: DtElementIDHierarchy.h:105
std::vector< DtElementIDHierarchyNode * > ChildHierarchyNodes
Definition: DtElementIDHierarchy.h:36
bool myCleanupChildren
Definition: DtElementIDHierarchy.h:103
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
bool operator!=(const DtElementIDHierarchyNode &rhs) const
Definition: DtElementIDHierarchy.h:71
The DtElementIDHierarchyNode class will contain information about an element, its children and its pa...
Definition: DtElementIDHierarchy.h:33
boost::function< DtElementIDHierarchyNode::DisplayState(const DtElementIDHierarchyNode *)> ExpectedDisplayState
Definition: DtElementIDHierarchy.h:116
int myFlags
Definition: DtElementIDHierarchy.h:104
bool operator==(const DtTextureAtlasIndexParser::StringOrFloatAttrib &lhs, const DtTextureAtlasIndexParser::StringOrFloatAttrib &rhs)
needed for search comparison code
Definition: DtTextureAtlasIndexParser.h:153
boost::signalslib::signal< void(DtElementIDHierarchyNode *) > signal_hierarchyItemToBeRemoved
Called before disconnecting from tree and before signal_hierarchyItemAboutToBeRemoved.
Definition: DtElementIDHierarchy.h:253
Contains makVrv::DtUniqueID type.
Flags
Definition: DtElementIDHierarchy.h:53
bool myInitiallyExpanded
Definition: DtElementIDHierarchy.h:271
boost::signalslib::signal< void(DtElementIDHierarchy *) > signal_hierarchyUpdated
Definition: DtElementIDHierarchy.h:255
HierarchyNodeMap myFlatHierarchy
Definition: DtElementIDHierarchy.h:267
Contains DLL export macros.

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)