00001 #ifndef STAR_STARGEOMTREE
00002 #define STAR_STARGEOMTREE
00003
00004 #include <QTreeWidget>
00005 #include <QString>
00006 #include "TVolume.h"
00007
00008 class TObject;
00009 class TContextMenu;
00010 class TGeoManager;
00011 class QMenu;
00012
00013
00014 class TQtLockUpdateWidget {
00015
00016 private:
00017
00018 QAbstractScrollArea *fView;
00019 bool fHasBeenLocked;
00020
00021 public:
00022 TQtLockUpdateWidget(QAbstractScrollArea *view) : fView (view),fHasBeenLocked(FALSE) {
00023 if (fView) {
00024 fHasBeenLocked = !fView->updatesEnabled();
00025 if (!fHasBeenLocked) {
00026
00027 fView->setCursor(Qt::WaitCursor);
00028 fView->setUpdatesEnabled( FALSE );
00029 fView->viewport()->setCursor(Qt::WaitCursor);
00030 fView->viewport()->setUpdatesEnabled( FALSE );
00031 }
00032 }
00033 }
00034 ~TQtLockUpdateWidget() {
00035 if (fView) {
00036 if (!fHasBeenLocked) {
00037
00038 fView->viewport()->setUpdatesEnabled( TRUE );
00039 fView->setUpdatesEnabled( TRUE );
00040 fView->unsetCursor();
00041 fView->viewport()->unsetCursor();
00042
00043 }
00044 }
00045 }
00046 };
00047
00048 class StarGeomTreeWidget : public QTreeWidget
00049 {
00050 Q_OBJECT
00051 private:
00052 TContextMenu *fContextMenu;
00053 TGeoManager *fGeoManager2Delete;
00054 QTreeWidgetItem *fCurrentDrawn;
00055 bool fNewItemCreating;
00056 QMenu *fPopupContextMenu;
00057 Int_t fDepth;
00058
00059 protected:
00060 friend class GeomBrowser;
00061 void ConnectTreeSlots();
00062 void Init();
00063 void TreeView_selectionChanged(QTreeWidgetItem *i);
00064 void drawItem( QTreeWidgetItem *item, bool expanded=false);
00065 void SetVisibility( QTreeWidgetItem * item, TVolume::ENodeSEEN vis );
00066 QTreeWidgetItem* AddModel2ListView( TObject *obj, const QString &title);
00067 QTreeWidgetItem *CreateTreeWidgetItem(TVolume *obj, QTreeWidgetItem *parent=0, const QString &cnt=QString() );
00068
00069 public:
00070 StarGeomTreeWidget(QWidget *parent = 0);
00071 virtual ~StarGeomTreeWidget();
00072 TObject *CurrentObject(QTreeWidgetItem *item=0);
00073
00074 public slots:
00075
00076 void ClearCB();
00077 void currentItemChangedCB ( QTreeWidgetItem * current, QTreeWidgetItem * previous );
00078 void itemActivatedCB ( QTreeWidgetItem * item, int column );
00079 void itemChangedCB ( QTreeWidgetItem * item, int column );
00080 void itemClickedCB ( QTreeWidgetItem * item, int column );
00081 void itemCollapsedCB ( QTreeWidgetItem * item );
00082 void itemDoubleClickedCB ( QTreeWidgetItem * item, int column );
00083 void itemEnteredCB ( QTreeWidgetItem * item, int column );
00084 void itemExpandedCB ( QTreeWidgetItem * item );
00085 void itemPressedCB ( QTreeWidgetItem * item, int column );
00086 void itemSelectionChangedCB ();
00087 void contextMenuRequestedCB(const QPoint &pos);
00088 void SelectByTObject( TObject *obj, const QPoint &);
00089 void SetDepthCB(int depth=3);
00090 signals:
00091 void DrawObject(TObject *o,bool expanded);
00092 void ObjectInfo(QString objInfo);
00093 };
00094
00095 QDataStream & operator>> ( QDataStream & in, StarGeomTreeWidget & item ) ;
00096 QDataStream & operator<< ( QDataStream & out, const StarGeomTreeWidget & item ) ;
00097
00098 #endif