![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2002 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: echHierarchy.h,v $ $Revision: 1.16 $ $State: Exp $ 00007 *********************************************************************/ 00008 00011 00012 #ifndef DtEchelonHierarchy_H_ 00013 #define DtEchelonHierarchy_H_ 00014 00015 #include "tmqt/echHierNode.h" 00016 #include "ngutil/dtqlist.h" 00017 #include <QtCore/QHash> 00018 #include <QtCore/QVector> 00019 00020 class DtModelDataDict; 00021 00027 #include "tmqt/tmqtDefines.h" 00028 class DT_DLL_tmqt DtEchelonHierarchy : public QObject 00029 { 00030 Q_OBJECT 00031 public: 00032 00034 DtEchelonHierarchy(QObject *parent = NULL); 00035 00037 virtual ~DtEchelonHierarchy(); 00038 00040 virtual void init(const DtModelDataDict* dict); 00041 00043 virtual DtEchelonHierarchyNode* node(const QString& strKey) const; 00044 00047 virtual void allDecendentsOf(const DtModelKey& key, 00048 QVector<DtModelKey>& resultList) const; 00049 00051 virtual void allImmediateDecendentsOf(const DtModelKey& key, 00052 QVector<DtModelKey>& resultList) const; 00053 00056 virtual bool isSuperiorOf(const DtModelKey& superior, 00057 const DtModelKey& subordinate) const; 00058 00059 virtual const DtPtrQList<DtEchelonHierarchyNode*>& nodeList() const; 00060 00061 virtual const DtModelDataDict* modelDataDict() const; 00062 00066 virtual void setAlwaysReconnectAllNodes(bool value); 00067 virtual bool alwaysReconnectAllNodes() const; 00068 00070 virtual void tick(); 00071 00072 public: 00073 00075 static DtEchelonHierarchy* create(QObject *parent); 00076 00077 public slots: 00079 virtual void addModelData(const DtModelKey& key); 00081 virtual void removeModelData(const DtModelKey& key); 00084 virtual void updateModelData(const DtModelKey& key, int changed); 00085 00088 virtual void reconnectAllNodes(); 00089 00090 signals: 00092 void nodeAdded(const DtModelKey&); 00094 void nodeAboutToBeRemoved(const DtModelKey&); 00096 void nodeReparented(const DtModelKey&); 00097 00098 protected: 00102 virtual bool shouldBeAdded(const DtModelKey& key); 00103 00107 virtual DtEchelonHierarchyNode* addModelNode(const DtModelKey& key); 00108 00112 virtual void removeModelNode(const DtModelKey& key); 00113 00117 virtual void updateModelNode(const DtModelKey& key); 00118 00121 virtual void connectNode(DtEchelonHierarchyNode* node); 00122 00124 virtual void reconnectNode(DtEchelonHierarchyNode* node); 00125 00128 virtual void connectChild(DtEchelonHierarchyNode* parentNode, 00129 DtEchelonHierarchyNode* childNode); 00130 00136 virtual void disconnectNode(DtEchelonHierarchyNode* node); 00137 00140 virtual int calculateLevelsFromNode(DtEchelonHierarchyNode* node); 00141 00143 virtual void calculateAllLevels(); 00144 00145 protected slots: 00150 virtual void queueNodeReparentedSignal(const DtModelKey& key); 00151 00152 protected: 00154 virtual void sendQueuedNodeReparentedSignals(); 00155 00156 protected: 00157 QHash<DtModelKey, DtEchelonHierarchyNode*> myNodeDict; 00158 DtPtrQList<DtEchelonHierarchyNode*> myNodeList; 00159 00160 const DtModelDataDict *myModelDataDict; 00161 bool myAlwaysReconnectAllNodes; 00162 00163 QVector<DtModelKey> myNodeReparentedQueue; 00164 00165 private: 00167 DtEchelonHierarchy(const DtEchelonHierarchy& orig); 00168 00170 DtEchelonHierarchy& operator=(const DtEchelonHierarchy& orig); 00171 00172 }; 00173 00174 #endif