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