Salome HOME
bf7e350dd265106f58b4f6292db773876a1ba21d
[modules/gui.git] / src / SalomeApp / SalomeApp_ListView.h
1 // Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 // File   : SalomeApp_ListView.h
24 // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
25 //
26 #ifndef SALOMEAPP_LISTVIEW_H
27 #define SALOMEAPP_LISTVIEW_H
28
29 //#include <QtxListView.h>
30
31 #include <SUIT_PopupClient.h>
32
33 #include <QTreeWidget>
34 #include <QTreeWidgetItem>
35 #include <QString>
36 #include <QLineEdit>
37 #include <QComboBox>
38
39 #include <TColStd_ListOfInteger.hxx>
40 #include <TColStd_ListOfReal.hxx>
41
42 class QToolButton; 
43
44 // enumeration for ListView updating mode
45 enum UpdateType {
46   utCancel        = -1,           // cancel updating
47   utNone          =  0,           // needs no any update
48   utUpdateItem,                   // update one item
49   utUpdateParent,                 // update parent item too
50   utUpdateViewer,                 // update all viewer
51   utUpdateAll                     // strong update
52 };
53
54 class SalomeApp_ListViewItem;
55 class SalomeApp_EntityEdit;
56
57 /*!
58   \class SalomeApp_ListView
59   parent class for Data Viewer and Properties Viewer
60 */
61 class SalomeApp_ListView : public QTreeWidget/*QtxListView*/ , public SUIT_PopupClient  {
62   
63   Q_OBJECT
64     
65 public:
66 // constructor  
67   SalomeApp_ListView(QWidget *parent);
68 // destructor  
69   virtual ~SalomeApp_ListView();
70
71 // updates list viewer
72   virtual void updateViewer();
73 // updtes currently selected item(s)
74   virtual void updateSelected();
75
76 // fills popup with items
77   virtual QString popupClientType() const;
78   virtual void    contextMenuPopup( QMenu* );
79
80 // setting editing of items availbale/not available
81   void enableEditing(bool theFlag);
82 // says if editing is enabled
83   bool isEnableEditing();
84 // accepts user input by calling finishEditing(true)
85   void accept();
86
87 // clears view
88   void clear();
89
90 // event filter
91   bool eventFilter(QObject* object, QEvent* event) ;
92
93 // gets current tooltip for list view
94 // returns valid rect in success
95   QRect tip(QPoint aPos, QString& aText, QRect& dspRect, QFont& dspFnt) const;
96
97 protected:
98 // handler for resize event
99   void resizeEvent(QResizeEvent* e);
100 // handler for paint event
101   void viewportPaintEvent(QPaintEvent* e);
102 // finishes editing of entity
103   virtual UpdateType finishEditing(bool ok);
104
105 // returns true if mouse events are enabled
106   bool isMouseEnabled();
107 // enables/disables mouse events (excluding MouseMove)
108   void enableMouse(bool enable);
109   
110 protected slots:
111 // called when selection changed in list
112   virtual void onSelectionChanged();
113 // called when user finishes in editing of item
114   void onEditOk();
115 // called when user cancels item editing
116   void onEditCancel();
117 // called when columns sizes are changed
118   void onHeaderSizeChange(int, int, int);
119
120 protected:
121   SalomeApp_EntityEdit*   myEdit;
122   SalomeApp_ListViewItem* myEditedItem;
123   bool                    myEditingEnabled;
124   bool                    myMouseEnabled;
125 };
126
127
128 class SalomeApp_EditBox: public QLineEdit
129 {
130   Q_OBJECT
131
132 public:
133   SalomeApp_EditBox(QWidget* parent);
134  
135 protected:
136   void keyPressEvent(QKeyEvent* e);
137   
138 signals:
139   void escapePressed();
140 };
141
142 class SalomeApp_ComboBox: public QComboBox 
143 {
144   Q_OBJECT
145
146 public:
147   SalomeApp_ComboBox(bool rw, QWidget* parent = 0, const char* name = 0);
148
149   int findItem(const QString& theText);
150   void insertItem(const QString& theValue, int theIndex = -1);
151   void insertList(const QStringList& theList);
152   void insertItem(const int theValue);
153   void insertList(const TColStd_ListOfInteger& theList);
154   void insertItem(const double theValue);
155   void insertList(const TColStd_ListOfReal& theList);
156 };
157
158 class SalomeApp_EntityEdit : public QWidget 
159 {
160   Q_OBJECT
161
162 public:
163   // enum for edit control type
164   enum {
165     etLineEdit,           // simple edit box
166     etComboBox,           // non-editable combo box
167     etComboEdit           // editable combo box
168   };
169   // enum for value type
170   enum {
171     vtString,             // string
172     vtInteger,            // integer value
173     vtDouble              // double value
174   };
175   // enum for insertion order
176   enum {
177     atBottom,
178     atTop,
179     atBeforeCurrent,
180     atAfterCurrent
181   };
182   // enum for edit box buttons (Apply = Cancel)
183   enum {
184     btApply  = 0x0001,
185     btCancel = 0x0002
186   };
187
188 public:
189   SalomeApp_EntityEdit( QWidget* parent, 
190                         int      controlType = etLineEdit, 
191                         int      valueType   = vtString,
192                         bool     butApply    = false, 
193                         bool     butCancel   = false);
194   ~SalomeApp_EntityEdit();
195
196   void finishEditing();
197   void clear();
198   QString getText();
199   void setText(const QString& theText );
200   void insertItem( const QString& theValue, 
201                    bool           theSetCurrent = false,
202                    int            theOrder = atBottom );
203   void insertList( const QStringList& theList, 
204                    const int          theCurrent = -1 );
205   void insertItem( const int theValue, 
206                    bool  theSetCurrent = false );
207   void insertList( const TColStd_ListOfInteger& theList, 
208                    const int                    theCurrent = -1 );
209   void insertItem( const double theValue, 
210                    bool         theSetCurrent = false );
211   void insertList( const TColStd_ListOfReal& theList, 
212                    const int                 theCurrent = -1 );
213   QWidget* getControl();
214   void setFocus();
215   void setValidator(const QValidator*);
216   void showButtons(bool show);
217   void setDuplicatesEnabled(bool enabled);
218
219 protected:
220   void keyPressEvent ( QKeyEvent * e);
221
222 private slots:
223   void onComboActivated(const QString&);
224   void onTextChanged(const QString&);
225   void onApply();
226   void onCancel();
227 signals:
228   void returnPressed();
229   void escapePressed();
230
231 private:
232   // Widgets
233   SalomeApp_EditBox*   myEdit;
234   SalomeApp_ComboBox*  myCombo;
235   QToolButton*         myApplyBtn;
236   QToolButton*         myCancelBtn;
237   QString              myString;
238 };
239
240 class SalomeApp_ListViewItem : public QTreeWidgetItem
241 {
242 public:
243   SalomeApp_ListViewItem( SalomeApp_ListView* );
244   SalomeApp_ListViewItem( SalomeApp_ListView*, 
245                           SalomeApp_ListViewItem* );
246   SalomeApp_ListViewItem( SalomeApp_ListView*,
247                           const QStringList&,
248                           const bool = false );
249   SalomeApp_ListViewItem( SalomeApp_ListViewItem*,
250                           const QStringList&,
251                           const bool = false );
252   SalomeApp_ListViewItem( SalomeApp_ListView*,
253                           SalomeApp_ListViewItem*,
254                           const QString&,
255                           const bool = false );
256   SalomeApp_ListViewItem( SalomeApp_ListViewItem*,
257                           SalomeApp_ListViewItem*,
258                           const QString&,
259                           const bool = false);
260   SalomeApp_ListViewItem( SalomeApp_ListView*,
261                           SalomeApp_ListViewItem*,
262                           const QString& theName,
263                           const QString& theValue, 
264                           const bool = false);
265   SalomeApp_ListViewItem( SalomeApp_ListViewItem*,
266                           SalomeApp_ListViewItem*,
267                           const QString&,
268                           const QString&, 
269                           const bool = false);
270   ~SalomeApp_ListViewItem();
271
272   QString            fullName();
273   void               openAllLevels();
274   virtual void       updateAllLevels();
275   bool               isEditable() const;
276   void               setEditable(bool theEditable);
277
278   // returns true if entitiy is accepted after editing
279   bool               isAccepted() const;
280   // set entity accepted or not after editing
281   void               setAccepted(bool theAccepted);
282
283   // returns name of entity (as default it is text in first column)
284   virtual QString    getName() const;
285   // sets name of entity (as default it is text in first column)
286   virtual UpdateType setName(const QString& theName);
287
288   // returns value of entity (as default it is text in second column)
289   virtual QString    getValue() const;
290   // sets value of entity (as default it is text in second column)
291   virtual UpdateType setValue(const QString& theValue);
292
293   // creates control for editing and fills it with values
294   SalomeApp_EntityEdit*    startEditing();
295   // fills widget with initial values (list or single value)
296   virtual void       fillWidgetWithValues(SalomeApp_EntityEdit* theWidget);
297   // finishes editing of entity
298   virtual UpdateType finishEditing(SalomeApp_EntityEdit* theWidget);
299
300   // returns type of edit control (0 - edit box, 1 - combo box, 2 - editable combo box)
301   virtual int        getEditingType();
302   // sets type of edit control (0 - edit box, 1 - combo box, 2 - editable combo box)
303   virtual void       setEditingType(const int);
304   // returns edited column
305   virtual int        getEditedColumn();
306   // returns type of edited value (string, int, double)
307   virtual int        getValueType();
308   // sets type of edited value (string, int, double)
309   virtual void       setValueType(const int);
310
311   // gets user type 
312   virtual int        getUserType();
313   // sets user type 
314   virtual void       setUserType(const int);
315
316   // returns buttons for editing widget
317   virtual int        getButtons();
318   // sets  buttons for editing widget
319   virtual void       setButtons(const int);
320   // returns text for tooltip
321   QString            tipText();
322   // calculates rectangle which should contain items tip
323   QRect              tipRect();
324   // calculates rect of item text in viewport coordinates
325   QRect              textRect(const int column) const;
326   // calculates full rect of item data in viewport coordinates
327   QRect              itemRect(const int column) const;
328
329 protected:
330   // initialization
331   void               init();
332   int                depth() const;
333
334 private:
335   bool myEditable;
336   bool myAccepted;
337   int  myEditingType;
338   int  myValueType;
339   int  myButtons;
340   int  myUserType; // user are welcome to put additional data here and use it in fillWidgetWithValues()
341 };
342
343
344 #endif