Salome HOME
Merge from OCC_development_generic_2006
[modules/gui.git] / src / QDS / QDS_Datum.h
1 #ifndef QDS_DATUM_H
2 #define QDS_DATUM_H
3
4 #include "QDS.h"
5
6 #include <qobject.h>
7 #include <qstring.h>
8 #include <qvariant.h>
9 #include <qguardedptr.h>
10
11 #include <DDS_DicItem.h>
12
13 class QLabel;
14 class QWidget;
15 class QValidator;
16 class QVBoxLayout;
17 class QHBoxLayout;
18 class QGridLayout;
19
20 class Handle(DDS_Dictionary);
21
22 class QDS_EXPORT QDS_Datum : public QObject, public QDS
23 {
24   Q_OBJECT
25
26   class Wrapper;
27
28 public:
29   QDS_Datum( const QString&, QWidget* = 0, const int = All, const QString& = QString::null );
30   virtual ~QDS_Datum();
31
32   QString                   id() const;
33   int                       type() const;
34   QString                   label() const;
35   QString                   units() const;
36   QString                   filter() const;
37   QString                   format() const;
38   QString                   longDescription() const;
39   QString                   shortDescription() const;
40
41   QString                   defaultValue() const;
42   QString                   minimumValue() const;
43   QString                   maximumValue() const;
44
45   virtual QVariant          value() const;
46
47   virtual QString           stringValue() const;
48   virtual double            doubleValue() const;
49   virtual int               integerValue() const;
50
51   QString                   text() const;
52
53   virtual bool              isEmpty() const;
54
55   virtual void              reset();
56   virtual void              clear();
57
58   virtual void              setValue( const QVariant& );
59
60   virtual void              setStringValue( const QString& );
61   virtual void              setDoubleValue( const double );
62   virtual void              setIntegerValue( const int );
63
64   virtual bool              isEnabled( const int = Control ) const;
65   virtual void              setEnabled( const bool, const int );
66
67   void                      show( const int = -1 );
68   void                      hide( const int = -1 );
69   void                      setShown( const bool, const int = -1 );
70
71   QWidget*                  widget( const int ) const;
72   void                      setFocus();
73
74   virtual bool              isValid( const bool = true, 
75                                      const QString& = QString::null,
76                                      const QString& = QString::null ) const;
77   virtual QValidator*       validator( const bool = false ) const;
78
79   void                      addTo( QVBoxLayout* );
80   void                      addTo( QHBoxLayout* );
81   void                      addTo( QGridLayout*, const int, const int, const bool = false );
82
83   virtual void              setAlignment( const int, const int = Label );
84
85   static QString            unitsToText( const QString& );
86   static QString            textToUnits( const QString& );
87
88   static QString            format( const QString&, const QString&, const bool = false );
89   static QString            format( const int, const QString&, const bool = false );
90   static QString            format( const double, const QString&, const bool = false );
91   static QString            units( const QString& );
92
93   virtual bool              eventFilter( QObject*, QEvent* );
94
95   operator QWidget*() const;
96
97 signals:
98   void                      paramChanged();
99   void                      paramChanged( QString& );
100
101 public slots:
102   void                      setEnabled( bool );
103
104 protected slots:
105   virtual void              onParamChanged();
106
107 private slots:
108   void                      onInitDatum();
109   void                      onDestroyed( QObject* );
110
111 protected:
112   QLabel*                   labelWidget() const;
113   QLabel*                   unitsWidget() const;
114   QWidget*                  controlWidget() const;
115
116   Handle(DDS_DicItem)       dicItem() const;
117   void                      setDicItem( const Handle(DDS_DicItem)& );
118
119   int                       flags() const;
120
121   void                      invalidateCache();
122
123   virtual QLabel*           createLabel( QWidget* );
124   virtual QLabel*           createUnits( QWidget* );
125   virtual QWidget*          createControl( QWidget* ) = 0;
126
127   virtual QString           getString() const = 0;
128   virtual void              setString( const QString& ) = 0;
129
130   virtual bool              validate( const QString& ) const;
131
132   QString                   prefix() const;
133   QString                   suffix() const;
134   virtual QString           minValue() const;
135   virtual QString           maxValue() const;
136
137   static QString            format( const QString&, const int, const int );
138   static QString            format( const QString&, const int, const double );
139   static QString            format( const QString&, const int, const QString& );
140
141   static QString            sprintf( const QString&, const int );
142   static QString            sprintf( const QString&, const double );
143   static QString            sprintf( const QString&, const QString& );
144
145   virtual void              unitSystemChanged( const QString& );
146
147   void                      initDatum() const;
148
149 private:
150   void                      initialize();
151
152   Wrapper*                  wrapper( QWidget* ) const;
153   Wrapper*                  wrapper( const int ) const;
154   int                       wrapperType( Wrapper* ) const;
155
156   static QString            removeAccel( const QString& );
157   static bool               isDoubleFormat( const QString& );
158   static QString            canonicalFormat( const QString& );
159   static QString            canonicalFormat( const QString&, QString& );
160
161 private:
162   typedef QGuardedPtr<QLabel>  GuardedLabel;
163   typedef QGuardedPtr<QWidget> GuardedWidget;
164
165 private:
166   QString                   myId;
167   int                       myFlags;
168   Handle(DDS_DicItem)       myDicItem;
169   QMap<int, Wrapper*>       myWrapper;
170
171   GuardedLabel              myLabel;
172   GuardedLabel              myUnits;
173   GuardedWidget             myControl;
174
175   QString                   mySourceValue;
176   QString                   myTargetValue;
177
178   bool                      myInitialised;
179
180   friend class QDS;
181 };
182
183 #endif