![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2000 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: tmEchelonTree.h,v $ $Revision: 1.28 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DtTMEchelonTree_H 00013 #define DtTMEchelonTree_H 00014 00015 #include "symbolMapper/modelKey.h" 00016 00017 #include <QtGui/QFrame> 00018 #include <QtCore/QList> 00019 #include <QtCore/QHash> 00020 #include <QtGui/QPushButton> 00021 #include <QtGui/QPixmap> 00022 #include <QtGui/QScrollArea> 00023 #include "tmqt/dtTreeWidget.h" 00024 00025 class DtEchelonView; 00026 class DtEchelonHierarchy; 00027 class QBoxLayout; 00028 class DtExpandCollapseButton; 00029 class DtModelData; 00030 class QModelIndex; 00031 00032 #include "tmqt/tmqtDefines.h" 00033 00034 00035 class DT_DLL_tmqt DtEchelonTreeItem : public QTreeWidgetItem 00036 { 00037 public: 00038 DtEchelonTreeItem(QTreeWidget* p) : QTreeWidgetItem(p) {}; 00039 DtEchelonTreeItem(QTreeWidgetItem* p) : QTreeWidgetItem(p) {}; 00040 bool operator<(const QTreeWidgetItem & other ) const; 00041 virtual QVariant data(int iColumn, int iRole) const; 00042 }; 00043 00044 class DT_DLL_tmqt DtScrollButtonArea : public QWidget 00045 { 00046 public: 00047 DtScrollButtonArea(QWidget* parent); 00048 00049 virtual void scrollContentsBy(int x); 00050 00051 QWidget* widget() { return myCanvas; }; 00052 00053 protected: 00054 virtual void paintEvent(QPaintEvent* e); 00055 virtual void resizeEvent(QResizeEvent* e); 00056 00057 protected: 00058 QWidget* myCanvas; 00059 }; 00060 00061 class DT_DLL_tmqt DtTMEchelonTree : public QFrame 00062 { 00063 00064 Q_OBJECT 00065 00066 public: 00067 00069 DtTMEchelonTree (QWidget* parent = NULL, const Qt::WindowFlags& f = 0); 00070 00072 virtual ~DtTMEchelonTree(); 00073 00076 virtual void init(const DtEchelonHierarchy *hierarchy); 00077 00081 virtual void init(DtEchelonView *view); 00082 00085 virtual void setListViewEventFilter(QWidget* filter); 00086 virtual void removeListViewEventFilter(QWidget* filter); 00087 00088 virtual void setSelectionModeEnabled(bool b); 00089 00090 DtTreeWidget* listView(); 00091 00092 protected: 00095 virtual void commonInit(); 00096 00098 virtual void initColumnHeadings(DtTreeWidget& listView); 00099 00101 virtual DtTreeWidget* createListView(QWidget* parent); 00102 00104 virtual DtScrollButtonArea* createCollapseButtonConainer(QWidget* parent); 00105 00106 virtual void initListItem(QTreeWidgetItem*, const DtModelKey&); 00107 00108 public: 00109 virtual bool maintainEchelonSync() const; 00110 00111 protected: 00112 virtual QTreeWidgetItem* addListItem(const DtModelKey&); 00113 virtual QTreeWidgetItem* createListItem(QTreeWidgetItem* parent, const DtModelKey& key); 00114 virtual void moveItemInListHierarchy(QTreeWidgetItem* item, QTreeWidgetItem* newParent); 00115 00116 signals: 00117 00118 void selectionChanged(const QVector<DtModelKey>&); 00119 00120 void selectionAdded(const QVector<DtModelKey>&); 00121 void clearSelection(bool); 00122 00123 void symbolExpanded(const DtModelKey&); 00124 void symbolCollapsed(const DtModelKey&); 00125 00126 void showInformationClicked(const DtModelData&); 00127 00128 public slots: 00129 00130 virtual void addSymbol(const DtModelKey&); 00131 virtual void removeSymbol(const DtModelKey&); 00132 virtual void updateSymbol(const DtModelKey& key, int changed); 00133 virtual void updateSymbol(const DtModelData& d, int changed); 00134 00135 virtual void expandSymbol(const DtModelKey&); 00136 virtual void collapseSymbol(const DtModelKey&); 00137 00142 virtual bool repositionSymbol(const DtModelKey&); 00143 00144 virtual void syncToEchelonView(); 00145 virtual void syncFromEchelonView(); 00146 virtual void setMaintainEchelonSync(bool); 00147 00148 virtual void syncFromHierarchy(); 00149 00150 virtual void setSelection(const QVector<DtModelKey>&); 00151 virtual void clearSelection(); 00152 virtual void setSelectionAll(); 00153 00154 void setEmbarkationHierarchy(const DtEchelonHierarchy*); 00155 const DtEchelonHierarchy* embarkationHierarchy() const; 00156 00158 virtual void tick(); 00159 00160 public slots: 00161 virtual void setupEchelonIdColumn(bool show); 00162 00163 protected slots: 00164 virtual void updateSelection(bool signal = true); 00165 virtual void scrollRangeChanged(int x, int y); 00166 00167 virtual void viewItemExpanded(QTreeWidgetItem* item); 00168 virtual void viewItemCollapsed(QTreeWidgetItem* item); 00169 00170 virtual void expandToLevel(unsigned int level); 00171 virtual void collapseToLevel(unsigned int level); 00172 00173 virtual void scrollCollapseButtons(int x); 00174 00175 virtual void doubleClicked(QTreeWidgetItem* li, int col); 00176 00177 protected: 00178 00179 virtual void updateCollapseButtons(); 00180 virtual void updateCollapseButtons(QTreeWidgetItem*); 00181 00182 virtual void createCollapseButton(unsigned int level); 00183 00185 virtual void collapseToLevel(unsigned int level, QTreeWidgetItem*); 00187 virtual void expandToLevel(unsigned int level, QTreeWidgetItem*); 00188 00189 00192 virtual void updateEchelonIdColumn(); 00193 00194 private: 00196 00198 DtTMEchelonTree(const DtTMEchelonTree& orig); 00199 00201 DtTMEchelonTree& operator=(const DtTMEchelonTree& rhs); 00202 00203 protected: 00204 DtTreeWidget *myListView; 00205 QVector<DtModelKey> mySelectedKeys; 00206 00207 DtEchelonView* myEchelonView; 00208 const DtEchelonHierarchy* myHierarchy; 00209 const DtEchelonHierarchy* myEmbarkationHierarchy; 00210 bool myMaintainEchelonSync; 00211 QHash<DtModelKey, QTreeWidgetItem*> myKeyList; 00212 00215 QList<DtExpandCollapseButton*> myCollapseButtonVector; 00216 DtScrollButtonArea* myCollapseButtonWidget; 00217 QPixmap myPlusPixmap; 00218 QPixmap myMinusPixmap; 00219 00220 static const int theEntityIdColumn; 00221 static const char* thePlusImageData[]; 00222 static const char* theMinusImageData[]; 00223 00224 bool mySelectionModeEnabled; 00225 bool myDirty; 00226 bool myUpdateCollapseButtons; 00227 bool mySendingSelectionSignal; 00228 }; 00229 00230 00233 class DtExpandCollapseButton : public QPushButton 00234 { 00235 Q_OBJECT 00236 00237 public: 00238 DtExpandCollapseButton(QWidget *parent = NULL); 00239 virtual ~DtExpandCollapseButton(); 00240 00241 virtual void setExpandPixmap(QPixmap pix); 00242 virtual void setCollapsePixmap(QPixmap pix); 00243 virtual void setLevel(unsigned int level); 00244 virtual unsigned int level() const; 00245 virtual void setIsExpand(bool value); 00246 virtual bool isExpand() const; 00247 00248 signals: 00249 void expandLevelClicked(unsigned int level); 00250 void collapseLevelClicked(unsigned int level); 00251 00252 protected slots: 00253 virtual void buttonClicked(); 00254 00255 protected: 00256 virtual void paintEvent(QPaintEvent*); 00257 00258 protected: 00259 QPixmap myExpandPixmap; 00260 QPixmap myCollapsePixmap; 00261 bool myIsExpand; 00262 unsigned int myLevel; 00263 }; 00264 00265 00266 inline DtTreeWidget* DtTMEchelonTree::listView() 00267 { 00268 return myListView; 00269 } 00270 00271 inline void DtTMEchelonTree::setEmbarkationHierarchy(const DtEchelonHierarchy* h) 00272 { 00273 myEmbarkationHierarchy = h; 00274 } 00275 00276 inline const DtEchelonHierarchy* DtTMEchelonTree::embarkationHierarchy() const 00277 { 00278 return myEmbarkationHierarchy; 00279 } 00280 00281 #endif //DtTMEchelonTree_H