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