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