Salome HOME
Fix for bug 10438: Crash during Explode on Blocks operation (Global selection on...
[modules/gui.git] / src / Qtx / QtxListResourceEdit.h
1 // File:      QtxListResourceEdit.h
2 // Author:    Sergey TELKOV
3
4 #ifndef QTXLISTRESOURCEEDIT_H
5 #define QTXLISTRESOURCEEDIT_H
6
7 #include "QtxResourceEdit.h"
8
9 #include <qmap.h>
10 #include <qhbox.h>
11 #include <qframe.h>
12 #include <qgroupbox.h>
13 #include <qvalidator.h>
14
15 class QLabel;
16 class QListBox;
17 class QLineEdit;
18 class QCheckBox;
19 class QComboBox;
20 class QTabWidget;
21 class QWidgetStack;
22
23 class QtxIntSpinBox;
24 class QtxDblSpinBox;
25
26 class QtxDirListEditor;
27
28 /*
29   Class: QtxListResourceEdit
30   Descr: GUI implementation of QtxResourceEdit - manager of resources
31 */
32
33 class QTX_EXPORT QtxListResourceEdit : public QFrame, public QtxResourceEdit
34 {
35   Q_OBJECT
36
37 public:
38   class Tab;
39   class Group;
40   class Category;
41   class PrefItem;
42
43   class Spacer;
44   class ColorItem;
45   class StateItem;
46   class SelectItem;
47   class StringItem;
48   class DoubleSpinItem;
49   class DoubleEditItem;
50   class IntegerSpinItem;
51   class IntegerEditItem;
52   class FontItem;
53   class FileItem;
54   class DirListItem;
55
56   enum { Space, Bool, Color, String, Selector, DblSpin, IntSpin, Double, Integer, GroupBox, Font, DirList, File, User };
57
58 public:
59   QtxListResourceEdit( QtxResourceMgr*, QWidget* = 0 );
60   virtual ~QtxListResourceEdit();
61
62   virtual void  setItemProperty( const int, const QString&, const QVariant& );
63
64 signals:
65   void          resourceChanged( int );
66   void          resourceChanged( QString&, QString& );
67   void          resourcesChanged( const QMap<int, QString>& );
68
69 private slots:
70   void          onSelectionChanged();
71
72 protected:
73   virtual void  itemAdded( Item* );
74   virtual Item* createItem( const QString&, const int );
75   virtual void  changedResources( const QMap<Item*, QString>& );
76
77 private:
78   void          updateState();
79   void          updateVisible();
80
81 private:
82   QListBox*     myList;
83   QWidgetStack* myStack;
84 };
85
86 /*
87   Class: QtxListResourceEdit::Category
88   Descr: GUI implementation of 'Category' frame
89 */
90
91 class QtxListResourceEdit::Category : public QFrame, public Item
92 {
93 public:
94   Category( QtxListResourceEdit*, QWidget* = 0 );
95   virtual ~Category();
96
97   virtual bool     isEmpty() const;
98
99   virtual int      type() const;
100   virtual void     store();
101   virtual void     retrieve();
102
103   virtual QVariant property( const QString& ) const;
104   virtual void     setProperty( const QString&, const QVariant& );
105
106 protected:
107   virtual Item*    createItem( const QString&, const int );
108
109 private:
110   void             updateState();
111
112 private:
113   QLabel*          myInfo;
114   QTabWidget*      myTabs;
115 };
116
117 /*
118   Class: QtxListResourceEdit::Tab
119   Descr: GUI implementation of resources tab.
120 */
121
122 class QtxListResourceEdit::Tab : public QFrame, public Item
123 {
124 public:
125   Tab( QtxResourceEdit*, Item*, QWidget* = 0 );
126   virtual ~Tab();
127
128   virtual int   type() const;
129   virtual void  store();
130   virtual void  retrieve();
131
132 public:
133   virtual void  polish();
134
135 protected:
136   virtual Item* createItem( const QString&, const int );
137
138 private:
139   void          adjustLabels();
140
141 private:
142   QWidget*      myMainFrame;
143 };
144
145 /*
146   Class: QtxListResourceEdit::Group
147   Descr: GUI implementation of resources group.
148 */
149
150 class QtxListResourceEdit::Group : public QGroupBox, public Item
151 {
152 public:
153   Group( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
154   virtual ~Group();
155
156   virtual int      type() const;
157   virtual void     store();
158   virtual void     retrieve();
159
160   virtual QVariant property( const QString& ) const;
161   virtual void     setProperty( const QString&, const QVariant& );
162
163   virtual void     setTitle( const QString& );
164
165 protected:
166   virtual Item*    createItem( const QString&, const int );
167 };
168
169 /*
170   Class: QtxListResourceEdit::PrefItem
171   Descr: Base class for preferences items.
172 */
173
174 class QtxListResourceEdit::PrefItem : public QHBox, public Item
175 {
176 public:
177   PrefItem( const int, QtxResourceEdit*, Item* = 0, QWidget* = 0 );
178   virtual ~PrefItem();
179
180   virtual int   type() const;
181
182 protected:
183   virtual Item* createItem( const QString&, const int );
184
185 private:
186   int           myType;
187 };
188
189 /*
190   Class: QtxListResourceEdit::Spacer
191   Descr: GUI implementation of resources spacer.
192 */
193
194 class QtxListResourceEdit::Spacer : public PrefItem
195 {
196 public:
197   Spacer( QtxResourceEdit*, Item*, QWidget* = 0 );
198   virtual ~Spacer();
199
200   virtual void store();
201   virtual void retrieve();
202 };
203
204 /*
205   Class: QtxListResourceEdit::SelectItem
206   Descr: GUI implementation of resources selector item.
207 */
208
209 class QtxListResourceEdit::SelectItem : public PrefItem
210 {
211 public:
212   SelectItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
213   virtual ~SelectItem();
214
215   virtual void     store();
216   virtual void     retrieve();
217
218   virtual QVariant property( const QString& ) const;
219   virtual void     setProperty( const QString&, const QVariant& );
220
221 private:
222   void             setStrings( const QVariant& );
223   void             setIndexes( const QVariant& );
224
225   void             setStrings( const QStringList& );
226   void             setIndexes( const QValueList<int>& );
227
228 private:
229   QComboBox*       myList;
230   QMap<int, int>   myIndex;
231 };
232
233 /*
234   Class: QtxListResourceEdit::StateItem
235   Descr: GUI implementation of resources bool item.
236 */
237
238 class QtxListResourceEdit::StateItem : public PrefItem
239 {
240 public:
241   StateItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
242   virtual ~StateItem();
243
244   virtual void     store();
245   virtual void     retrieve();
246
247 private:
248   QCheckBox*       myState;
249 };
250
251 /*
252   Class: QtxListResourceEdit::StringItem
253   Descr: GUI implementation of resources string item.
254 */
255
256 class QtxListResourceEdit::StringItem : public PrefItem
257 {
258 public:
259   StringItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
260   virtual ~StringItem();
261
262   virtual void     store();
263   virtual void     retrieve();
264
265 private:
266   QLineEdit*       myString;
267 };
268
269 /*
270   Class: QtxListResourceEdit::IntegerEditItem
271   Descr: GUI implementation of resources integer item.
272 */
273
274 class QtxListResourceEdit::IntegerEditItem : public PrefItem
275 {
276 public:
277   IntegerEditItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
278   virtual ~IntegerEditItem();
279
280   virtual void     store();
281   virtual void     retrieve();
282
283 private:
284   QLineEdit*       myInteger;
285 };
286
287 /*
288   Class: QtxListResourceEdit::IntegerSpinItem
289   Descr: GUI implementation of resources integer item.
290 */
291
292 class QtxListResourceEdit::IntegerSpinItem : public PrefItem
293 {
294 public:
295   IntegerSpinItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
296   virtual ~IntegerSpinItem();
297
298   virtual void     store();
299   virtual void     retrieve();
300
301   virtual QVariant property( const QString& ) const;
302   virtual void     setProperty( const QString&, const QVariant& );
303
304 private:
305   QtxIntSpinBox*  myInteger;
306 };
307
308 /*
309   Class: QtxListResourceEdit::DoubleEditItem
310   Descr: GUI implementation of resources double item.
311 */
312
313 class QtxListResourceEdit::DoubleEditItem : public PrefItem
314 {
315 public:
316   DoubleEditItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
317   virtual ~DoubleEditItem();
318
319   virtual void     store();
320   virtual void     retrieve();
321
322 private:
323   QLineEdit*       myDouble;
324 };
325
326 /*
327   Class: QtxListResourceEdit::DoubleSpinItem
328   Descr: GUI implementation of resources double item.
329 */
330
331 class QtxListResourceEdit::DoubleSpinItem : public PrefItem
332 {
333 public:
334   DoubleSpinItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
335   virtual ~DoubleSpinItem();
336
337   virtual void     store();
338   virtual void     retrieve();
339
340   virtual QVariant property( const QString& ) const;
341   virtual void     setProperty( const QString&, const QVariant& );
342
343 private:
344   QtxDblSpinBox*   myDouble;
345 };
346
347 /*
348   Class: QtxListResourceEdit::ColorItem
349   Descr: GUI implementation of resources color item.
350 */
351
352 class QtxListResourceEdit::ColorItem : public PrefItem
353 {
354 public:
355   ColorItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
356   virtual ~ColorItem();
357
358   virtual void     store();
359   virtual void     retrieve();
360
361 private:
362   QWidget*         myColor;
363 };
364
365 /*
366   Class: QtxListResourceEdit::FontItem
367   Descr: GUI implementation of resources font item.
368 */
369
370 class QtxComboBox;
371 class QToolButton;
372
373 class QtxListResourceEdit::FontItem : public PrefItem
374 {
375   Q_OBJECT
376
377 public:
378   typedef enum
379   {
380     Family    = 0x01,
381     Size      = 0x02,
382     UserSize  = 0x04,
383     Bold      = 0x08,
384     Italic    = 0x10,
385     Underline = 0x20,
386     Preview   = 0x40,
387
388     All = Family | Size | UserSize | Bold | Italic | Underline | Preview
389     
390   } WidgetFlags;
391   
392 public:
393   FontItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
394   virtual ~FontItem();
395
396   virtual void store();
397   virtual void retrieve();
398
399   virtual QVariant property( const QString& ) const;
400   virtual void     setProperty( const QString&, const QVariant& );
401
402 private slots:
403   void onActivateFamily( int );
404   void onPreview();
405   
406 private:
407   void       setFamily( const QString& );
408   QString    family() const;
409   void       setSize( const int );
410   int        size() const;
411   void       setParams( const bool, const bool, const bool );
412   void       params( bool&, bool&, bool& );
413   void       internalUpdate();
414   
415 private:
416   int            myFlags;
417   bool           myIsSystem;
418   QtxComboBox   *myFamilies, *mySizes;
419   QCheckBox     *myBold, *myItalic, *myUnderline;
420   QToolButton   *myPreview;
421   QMap<QString, QVariant>   myProperties;
422 };
423
424
425 /*!
426  * \brief GUI implementation of resources directory list item.
427  *
428  * 
429  */
430 class QtxListResourceEdit::DirListItem : public PrefItem
431 {
432   Q_OBJECT
433   
434 public:
435
436   /*!
437    * \brief Constructor
438    */
439   DirListItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
440   /*!
441    * \brief Destructor
442    */
443   virtual ~DirListItem();
444
445   /*!
446    * \brief Stores the data
447    */
448   virtual void     store();
449
450   /*!
451    * \brief Retrieves the data
452    */
453   virtual void     retrieve();
454
455 private:
456   QtxDirListEditor* myDirListEditor; //!< The widget wich implements in GUI the list of directories
457 };
458
459 /*
460   Class: QtxListResourceEdit::FontItem
461   Descr: GUI implementation of resources font item.
462 */
463
464 class QtxComboBox;
465 class QToolButton;
466 class QFileDialog;
467
468 class QtxListResourceEdit::FileItem : public PrefItem
469 {
470   Q_OBJECT
471
472 private:
473   class FileValidator : public QValidator
474   {
475   public:
476     FileValidator( FileItem*, QObject* );
477     ~FileValidator();
478
479     virtual QValidator::State validate( QString&, int& ) const;
480
481   private:
482     FileItem* myItem;
483   };
484
485 public:
486   FileItem( const QString&, QtxResourceEdit*, Item*, QWidget* = 0 );
487   virtual ~FileItem();
488
489   virtual void store();
490   virtual void retrieve();
491   
492   virtual QVariant property( const QString& ) const;
493   virtual void     setProperty( const QString&, const QVariant& );
494
495   virtual bool isFileCorrect( const QString& ) const;
496
497 private slots:
498   void onOpenFile();
499   void onFileSelected( const QString& );
500
501 private:
502   uint          myFlags;
503   QStringList   myFilter;
504   bool          myIsExisting;
505   QLineEdit*    myFile;
506   QToolButton*  myOpenFile;
507   QFileDialog*  myFileDlg;
508 };
509
510
511 #endif