VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtElementIDHierarchy.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2012 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 <boost/signal.hpp>
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 
48 
49  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& uniqueId() 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 
211  protected:
213  virtual void processVisibilityState(const DtElementIDHierarchyNode*);
214 
215  virtual void processSingleNode(DtElementIDHierarchyNode* node, bool forceUpdate = false);
216  virtual void processParentedNode(DtElementIDHierarchyNode* node, bool forceUpdate = false, bool processChildren = true);
217  virtual void processNodeWithChildren(DtElementIDHierarchyNode* node, bool forceUpdate = false);
218 
219  protected:
221  virtual void hierarchyUpdated();
222 
224  virtual void aboutToBeRemovedFromHierarchy(DtElementIDHierarchyNode*);
225 
228  virtual void updateHierarchy(DtElementID id, const ElementIDs& children, bool setAsNewChildren = true);
229 
234  virtual void attachParentToChildren(DtElementID parentId, const ElementIDs& children, bool setAsNewChildren = true);
235 
236  virtual void removeAllChildrenFromParent(DtElementID);
237 
238  public:
239  boost::signal<void (DtElementIDHierarchyNode*) > signal_hierarchyItemModified;
240 
242  boost::signal<void (DtElementIDHierarchyNode*) > signal_hierarchyItemToBeRemoved;
243  boost::signal<void (DtElementIDHierarchyNode*) > signal_hierarchyItemAboutToBeRemoved;
244  boost::signal<void (DtElementIDHierarchy*) > signal_hierarchyUpdated;
245  boost::signal<void (DtElementID, const ElementIDs&)> signal_updateHierarchy;
246  boost::signal<void (DtElementID, DtElementIDHierarchyNode::DisplayState)> signal_echelonVisibilityChange;
247  boost::signal<void (VisibilityProcessingList)> signal_visibilityChanged;
248 
249  protected:
251  virtual void hierarchyItemModified(DtElementIDHierarchyNode*);
252 
253  protected:
254  typedef boost::unordered_map<DtElementID, DtElementIDHierarchyNode*> HierarchyNodeMap;
255 
259 
261  };
262 }

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)