Salome HOME
30.10.2014. Redesigned boolean feature.
[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  protected slots:
40   virtual void commitData(QWidget* theEditor);
41
42  protected:
43   virtual void mouseDoubleClickEvent(QMouseEvent* theEvent);
44   virtual void contextMenuEvent(QContextMenuEvent* theEvent);
45
46  private slots:
47   //! Called when selection in Data Tree is changed
48   void onSelectionChanged(const QItemSelection& theSelected, const QItemSelection& theDeselected);
49
50  private:
51   //! List of currently selected data
52   QList<ObjectPtr> mySelectedData;
53 };
54
55 /**\class XGUI_ObjectsBrowser
56  * \ingroup GUI
57  * \brief Object browser window object. Represents data tree of current data structure
58  */
59 class XGUI_EXPORT XGUI_ObjectsBrowser : public QWidget
60 {
61 Q_OBJECT
62  public:
63   XGUI_ObjectsBrowser(QWidget* theParent);
64   virtual ~XGUI_ObjectsBrowser();
65
66   //! Returns Model which provides access to data objects
67   XGUI_DocumentDataModel* dataModel() const
68   {
69     return myDocModel;
70   }
71
72   //! Returns list of currently selected objects
73   QList<ObjectPtr> selectedObjects() const
74   {
75     return myObjectsList;
76   }
77
78   void setObjectsSelected(const QList<ObjectPtr>& theObjects);
79
80   //! Returns currently selected indexes
81   QModelIndexList selectedIndexes() const
82   {
83     return myTreeView->selectionModel()->selectedIndexes();
84   }
85
86   //! Returns TreeView widget
87   XGUI_DataTree* treeView() const
88   {
89     return myTreeView;
90   }
91
92   //! Activates currently selected part. Signal activePartChanged will not be sent
93   void activatePart(const ResultPartPtr& thePart);
94
95   void rebuildDataTree();
96
97   void processEvent(const boost::shared_ptr<Events_Message>& theMessage);
98
99 signals:
100   //! Emited when selection is changed
101   void selectionChanged();
102
103   //! Emited when current active document is changed
104   void activePartChanged(ObjectPtr thePart);
105
106   //! Emited on context menu request
107   void contextMenuRequested(QContextMenuEvent* theEvent);
108
109  protected:
110   virtual bool eventFilter(QObject* obj, QEvent* theEvent);
111
112  private slots:
113   void onActivePartChanged(ObjectPtr thePart);
114   void onContextMenuRequested(QContextMenuEvent* theEvent);
115   void onLabelContextMenuRequested(const QPoint& thePnt);
116
117   //! Called on Edit command request
118   void onEditItem();
119
120   void onSelectionChanged();
121
122  private:
123   void closeDocNameEditing(bool toSave);
124
125   //! Internal model
126   XGUI_DocumentDataModel* myDocModel;
127
128   QLineEdit* myActiveDocLbl;
129   XGUI_DataTree* myTreeView;
130
131   QList<ObjectPtr> myObjectsList;
132 };
133
134 #endif