VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtElementIDHierarchy.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2010 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: DtElementIDHierarchy.h,v $ $Revision: 1.2 $ $State: Exp $
00007 ******************************************************************************/
00008 
00016 
00017 #pragma once
00018 
00019 #include <vrvCore/vrvCore.h>
00020 
00021 #include <vrvCore/DtUniqueID.h>
00022 
00023 #include <boost/signal.hpp>
00024 #include <boost/unordered_map.hpp>
00025 #include <boost/function.hpp>
00026 
00027 #include <set>
00028 
00029 namespace makVrv
00030 {
00031    class DtElementIDHierarchyState;
00032 
00036    class DT_DLL_VRVCORE DtElementIDHierarchyNode
00037    {
00038    public:
00039       typedef std::vector<DtElementIDHierarchyNode*> ChildHierarchyNodes;
00040 
00042       enum DisplayState
00043       {
00044          Unknown = -1,
00045          Collapsed = 0,
00046          Shown = 1,
00047          Ghosted = 2,
00048          Expanded = 3,
00049          InitiallyShown = 4,        
00050 
00051 
00052          InitiallyExpanded = 5,     
00053          Hidden = 6,
00054       };
00055 
00056       enum Flags
00057       {
00058          ShouldHaveChildren = 0x00000001, 
00059          CollapseIfNoChildren = 0x00000002, 
00060       };
00061       
00062       DtElementIDHierarchyNode();
00063 
00065       DtElementIDHierarchyNode(DtElementID id, const DtElementIDHierarchyState&);
00066 
00067       DtElementIDHierarchyNode(DtElementID);
00068       DtElementIDHierarchyNode(const DtElementIDHierarchyNode& orig);
00069 
00070       virtual ~DtElementIDHierarchyNode();
00071 
00072       DtElementIDHierarchyNode& operator=(const DtElementIDHierarchyNode&);
00073       bool operator==(const DtElementIDHierarchyNode&) const;
00074       bool operator!=(const DtElementIDHierarchyNode& rhs) const
00075       {
00076          return !(*this == rhs);
00077       }
00078 
00079       bool hasChild(DtElementID child) const;
00080       bool addChild(DtElementIDHierarchyNode*);
00081       void removeChild(DtElementID child);
00082       void copyOriginal(const DtElementIDHierarchyNode& orig);
00083 
00084       const makVrv::DtElementID& uniqueId() const;
00085       const ChildHierarchyNodes& children() const;
00086 
00087       void removeAllChildren();
00088       void setParent(DtElementIDHierarchyNode* p);
00089 
00090       DtElementIDHierarchyNode* parent();
00091       const DtElementIDHierarchyNode* parent() const;
00092 
00094       virtual bool childInHierarchy(DtElementID id) const;
00095 
00096       void setFlags(int flags);
00097       int flags() const;
00098 
00099       void setDisplayState(DisplayState);
00100       DisplayState displayState() const;
00101 
00102    protected:
00103       DtElementIDHierarchyNode*  myParent;
00104       ChildHierarchyNodes        myChildren;
00105       DtElementID                myId;
00106       bool                       myCleanupChildren;
00107       int                        myFlags;
00108       DisplayState               myDisplayState;
00109    };
00110 
00114    class DT_DLL_VRVCORE DtElementIDHierarchy
00115    {
00116    public:
00117       typedef std::vector<DtElementID> ElementIDs;
00118       typedef std::set<const DtElementIDHierarchyNode*>  VisibilityProcessingList;
00119       typedef boost::function<DtElementIDHierarchyNode::DisplayState (const DtElementIDHierarchyNode*)> ExpectedDisplayState;
00120 
00121    public:
00122       DtElementIDHierarchy();
00123       virtual ~DtElementIDHierarchy();
00124 
00125    public:
00129       virtual void addToHierarchy(DtElementID elementID, DtElementID child, int flags = 0, bool setAsNewChildren = true,
00130          bool processList = true);
00131       virtual void addToHierarchy(DtElementID elementID, const ElementIDs& children = ElementIDs(),
00132          int flags = 0, bool setAsNewChildren = true, bool processList = true);
00133 
00135       void setFlags(DtElementID id, int flags);
00136 
00138       int flags(DtElementID id) const;
00139 
00141       virtual void removeFromHierarchy(DtElementID id);
00142 
00143    public:
00146       virtual bool isChild(DtElementID parentId, DtElementID childId, bool recurse = false) const;
00147 
00149       bool isInHierarchy(DtElementID id) const;
00150 
00151       DtElementIDHierarchyNode* parentOf(DtElementID id);
00152       const DtElementIDHierarchyNode* parentOf(DtElementID id) const;
00153 
00154       DtElementIDHierarchyNode* hierarchyNode(DtElementID id);
00155       const DtElementIDHierarchyNode* hierarchyNode(DtElementID elementID) const;
00156 
00157       bool hasChildren(DtElementID id) const;
00158 
00160       int level(const DtElementIDHierarchyNode* node) const;
00161 
00163       virtual DtElementIDHierarchyNode::DisplayState displayState(DtElementID elementID) const;
00164 
00166       virtual void detachChildFromParent(DtElementID child);
00167 
00169       virtual void attachChildToParent(DtElementID child, DtElementID parent, bool processList = true);
00170 
00171    public:
00172 
00177       virtual void expand(DtElementID elementID, bool processList = true);
00178 
00180       virtual void expandAll(DtElementID elementID, bool processList = true);
00181 
00183       virtual void collapseAll(DtElementID elementID, bool processList = true);
00184 
00187       virtual void collapse(DtElementID elementID, bool processList = true);
00188 
00190       virtual void processVisibilityList();
00191 
00193       void setInitiallyExpanded(bool);
00194       virtual bool initiallyExpanded() const;
00195 
00197       virtual void processNode(DtElementIDHierarchyNode* node, bool forceUpdate = false);
00198 
00200       void setExpectedDisplayStateFunction(ExpectedDisplayState);
00201 
00203       virtual DtElementIDHierarchyNode::DisplayState expectedDisplayStateFor(const DtElementIDHierarchyNode* node); 
00204 
00206       virtual void reprocessAllNodes();
00207 
00208    protected:
00210       virtual void processVisibilityState(const DtElementIDHierarchyNode*);
00211 
00212       virtual void processSingleNode(DtElementIDHierarchyNode* node, bool forceUpdate = false);
00213       virtual void processParentedNode(DtElementIDHierarchyNode* node, bool forceUpdate = false, bool processChildren = true);
00214       virtual void processNodeWithChildren(DtElementIDHierarchyNode* node, bool forceUpdate = false);
00215 
00216    protected:
00218       virtual void hierarchyUpdated();
00219 
00221       virtual void aboutToBeRemovedFromHierarchy(DtElementIDHierarchyNode*);
00222 
00225       virtual void updateHierarchy(DtElementID id, const ElementIDs& children, bool setAsNewChildren = true);
00226 
00231       virtual void attachParentToChildren(DtElementID parentId, const ElementIDs& children, bool setAsNewChildren = true);
00232 
00233       virtual void removeAllChildrenFromParent(DtElementID);
00234 
00235    public:
00236       boost::signal<void (DtElementIDHierarchyNode*)   > signal_hierarchyItemModified;
00237 
00239       boost::signal<void (DtElementIDHierarchyNode*)   > signal_hierarchyItemToBeRemoved;
00240       boost::signal<void (DtElementIDHierarchyNode*)   > signal_hierarchyItemAboutToBeRemoved;
00241       boost::signal<void (DtElementIDHierarchy*)   > signal_hierarchyUpdated;
00242       boost::signal<void (DtElementID, const ElementIDs&)> signal_updateHierarchy;
00243       boost::signal<void (DtElementID, DtElementIDHierarchyNode::DisplayState)> signal_echelonVisibilityChange;
00244       boost::signal<void (VisibilityProcessingList)> signal_visibilityChanged;
00245 
00246    protected:
00248       virtual void hierarchyItemModified(DtElementIDHierarchyNode*);
00249 
00250    protected:
00251       typedef boost::unordered_map<DtElementID, DtElementIDHierarchyNode*> HierarchyNodeMap;
00252 
00253       HierarchyNodeMap myFlatHierarchy;
00254       VisibilityProcessingList myVisibilityProcessingList;
00255       ExpectedDisplayState     myExpectedDisplayState;
00256 
00257       bool myInitiallyExpanded;
00258    };
00259 }

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)