Salome HOME
Merge branch 'master' of newgeom:newgeom.git
[modules/shaper.git] / src / XGUI / XGUI_ObjectsBrowser.h
1
2 #ifndef XGUI_ObjectsBrowser_H
3 #define XGUI_ObjectsBrowser_H
4
5 #include "XGUI.h"
6 #include <ModuleBase_Definitions.h>
7 #include <ModelAPI_Object.h>
8 #include <ModelAPI_ResultPart.h>
9
10 #include <QWidget>
11 #include <QTreeView>
12
13 class XGUI_DocumentDataModel;
14 class QLineEdit;
15
16
17 class XGUI_DataTree: public QTreeView
18 {
19   Q_OBJECT
20 public:
21   XGUI_DataTree(QWidget* theParent);
22   virtual ~XGUI_DataTree();
23
24   //! Returns list of currently selected objects
25   QList<ObjectPtr> selectedObjects() const { return mySelectedData; }
26
27   XGUI_DocumentDataModel* dataModel() const;
28
29 signals:
30   //! Emited when selection is changed
31   void selectionChanged();
32   void activePartChanged(ObjectPtr thePart); 
33  
34   //! Emited on context menu request
35   void contextMenuRequested(QContextMenuEvent* theEvent);
36
37 protected slots:
38   virtual void commitData(QWidget* theEditor);
39
40 protected:
41   virtual void mouseDoubleClickEvent(QMouseEvent* theEvent);
42   virtual void contextMenuEvent(QContextMenuEvent* theEvent);
43
44 private slots:
45   //! Called when selection in Data Tree is changed
46   void onSelectionChanged(const QItemSelection& theSelected, const QItemSelection& theDeselected);
47
48 private:
49   //! List of currently selected data
50   QList<ObjectPtr> mySelectedData;
51 };
52
53
54 /**\class XGUI_ObjectsBrowser
55  * \ingroup GUI
56  * \brief Object browser window object. Represents data tree of current data structure
57  */
58  class XGUI_EXPORT XGUI_ObjectsBrowser : public QWidget
59 {
60   Q_OBJECT
61 public:
62   XGUI_ObjectsBrowser(QWidget* theParent);
63   virtual ~XGUI_ObjectsBrowser();
64
65   //! Returns Model which provides access to data objects
66   XGUI_DocumentDataModel* dataModel() const { return myDocModel; }
67
68   //! Returns list of currently selected objects
69   QList<ObjectPtr> selectedObjects() const { return myObjectsList; }
70
71   void setObjectsSelected(const QList<ObjectPtr>& theObjects);
72
73   //! Returns currently selected indexes
74   QModelIndexList selectedIndexes() const { return myTreeView->selectionModel()->selectedIndexes(); }
75
76   //! Returns TreeView widget
77   XGUI_DataTree* treeView() const { return myTreeView; }
78
79   //! Activates currently selected part. Signal activePartChanged will not be sent
80   void activatePart(const ResultPartPtr& thePart);
81
82   void rebuildDataTree();
83
84 signals:
85   //! Emited when selection is changed
86   void selectionChanged();
87
88   //! Emited when current active document is changed
89   void activePartChanged(ObjectPtr thePart); 
90  
91   //! Emited on context menu request
92   void contextMenuRequested(QContextMenuEvent* theEvent);
93
94 protected:
95   virtual bool eventFilter(QObject* obj, QEvent* theEvent);
96
97 private slots:
98   void onActivePartChanged(ObjectPtr thePart);
99   void onContextMenuRequested(QContextMenuEvent* theEvent);
100   void onLabelContextMenuRequested(const QPoint& thePnt);
101
102   //! Called on Edit command request
103   void onEditItem();
104
105   void onSelectionChanged();
106
107 private:
108   void closeDocNameEditing(bool toSave);
109
110   //! Internal model
111   XGUI_DocumentDataModel* myDocModel;
112
113   QLineEdit* myActiveDocLbl;
114   XGUI_DataTree* myTreeView;
115
116   QList<ObjectPtr> myObjectsList;
117 };
118
119 #endif