property_data.h

Go to the documentation of this file.
00001 
00023 #ifndef PROPERTY_DATA_H
00024 #define PROPERTY_DATA_H
00025 
00026 #include <QtGui>
00027 
00028 class PropertyData
00029 {
00030         public:
00031                 enum DataType { MinRange=0, MaxRange, ActiveIndex, ImagePath, User, numDataType };
00032                 inline void init(bool enable = true)
00033                 {
00034                         PropertyItem* prop = new PropertyItem;
00035                         prop->enable = enable;
00036 
00037                         m_properties.insert(m_name, prop);
00038                 }
00039                 inline void init(const QString& label, const QIcon& icon = QIcon())
00040                 {
00041                         init();
00042                         setLabel(label);
00043                         setIcon(icon);
00044                 }
00045 
00046                 inline void setLabel(const QString& label) { m_properties.value(m_name)->label = label; }
00047                 inline void setIcon(const QIcon& icon) { m_properties.value(m_name)->icon = icon; }
00048                 inline void setName(const char* name) { m_name = name; }
00049                 inline void setData(DataType type, const QVariant& value) { m_properties.value(m_name)->data[type] = value; }
00050                 inline void setEnable(bool enable) { m_properties.value(m_name)->enable = enable; }
00051                 inline QString label() { return m_properties.value(m_name)->label; }
00052                 inline bool isEnable() { return m_properties.value(m_name)->enable; }
00053                 inline bool isInit() { return m_properties.contains(m_name); }
00054                 inline QVariant data(DataType type) const { return m_properties.value(m_name)->data[type]; }
00055 
00056         private:
00057                 struct PropertyItem
00058                 {
00059                         QString label;
00060                         QIcon icon;
00061                         bool enable;
00062                         QMap <DataType, QVariant> data;
00063                 };
00064                 
00065                 QString m_name; 
00066                 QHash<QString, PropertyItem*> m_properties;
00067 };
00068 
00069 class IProperty
00070 {
00071         public:
00072                 virtual ~IProperty(){};
00073                 virtual QWidget* createEditor(QWidget*) = 0;
00074                 virtual void updateEditor(QWidget*) = 0;
00075                 
00076                 virtual const char* name() = 0;
00077                 virtual QString label() const = 0;
00078                 virtual QVariant value() const = 0;
00079                 virtual QString valueToString() const = 0;
00080                 virtual QString status() const = 0;
00081                 
00082                 virtual void addChild(IProperty*) = 0;
00083                 virtual void clearChildren() = 0;
00084                 virtual int children() = 0;
00085                 virtual IProperty* child(int) const = 0;
00086                 virtual IProperty* child(const QString&) const = 0;
00087 
00088                 virtual int indexOf(IProperty*) = 0;
00089                 virtual IProperty* parent() = 0;
00090                 virtual void setParent(IProperty* parent) = 0;
00091                 virtual void setFake(bool) = 0;
00092                 virtual void setValue(const QVariant&) = 0;
00093                 virtual bool isFake() = 0;
00094 };
00095 
00096 class AbstractProperty : public IProperty
00097 {
00098         public:
00099                 AbstractProperty(const char* name, const QString& label, PropertyData* propertyData, const QVariant& value)
00100                                 :  m_name(name), m_label(label), m_value(value), m_propertyData(propertyData), m_fake(false){};
00101 
00102                 inline ~AbstractProperty() { clearChildren(); }
00103                 inline QWidget* createEditor(QWidget*){ return 0; }
00104                 inline void updateEditor(QWidget*) {}
00105                 
00106                 inline const char* name() { return m_name; }
00107                 inline QString label() const { return m_label; }
00108                 inline QVariant value() const { return m_value; }
00109                 inline QString valueToString() const { return m_value.toString(); }
00110                 QString status() const;
00111 
00112                 inline int children() { return m_children.count(); }
00113                 inline void addChild(IProperty* child) { m_children.append(child); }
00114                 inline void clearChildren() { qDeleteAll(m_children); m_children.clear(); }
00115                 inline IProperty* child(int index) const { return m_children.value(index); }
00116                 IProperty* child(const QString&) const;
00117 
00118                 inline int indexOf(IProperty* child) { return m_children.indexOf(child); }
00119                 inline IProperty* parent() { return m_parent; }
00120                 inline void setParent(IProperty* parent) { m_parent = parent; }
00121                 inline void setFake(bool fake) { m_fake = fake; }
00122                 inline void setValue(const QVariant& value) { m_value = value; }
00123                 inline bool isFake() { return m_fake; }
00124 
00125         protected:
00126                 inline PropertyData* propertyData() const { m_propertyData->setName(m_name); return m_propertyData; }
00127 
00128                 const char* m_name;
00129                 QString m_label;
00130                 QVariant m_value;
00131 
00132                 QList<IProperty*> m_children;
00133 
00134         private:
00135                 IProperty* m_parent;
00136                 PropertyData* m_propertyData;
00137                 bool m_fake;
00138 };
00139 
00140 class IntProperty : public AbstractProperty
00141 {
00142         public:
00143                 IntProperty(const char*, const QString&, PropertyData*, int);
00144                 QWidget* createEditor(QWidget*);
00145                 void updateEditor(QWidget*);
00146                 void setRange(int, int);
00147 
00148         private:
00149                 int m_min;
00150                 int m_max;
00151 };
00152 
00153 class DoubleProperty : public AbstractProperty
00154 {
00155         public:
00156                 DoubleProperty(const char*, const QString&, PropertyData*, double);
00157                 QWidget* createEditor(QWidget*);
00158                 void updateEditor(QWidget*);
00159                 void setRange(double, double);
00160 
00161         private:
00162                 double m_min;
00163                 double m_max;
00164 };
00165 
00166 class BoolProperty : public AbstractProperty
00167 {
00168         public:
00169                 BoolProperty(const char*, const QString&, PropertyData*, bool);
00170                 QWidget* createEditor(QWidget*);
00171                 void updateEditor(QWidget*);
00172 };
00173 
00174 class StringProperty : public AbstractProperty
00175 {
00176         public:
00177                 StringProperty(const char*, const QString&, PropertyData*, const QString&);
00178                 QWidget* createEditor(QWidget*);
00179                 void updateEditor(QWidget*);
00180 };
00181 
00182 class ListProperty : public AbstractProperty
00183 {
00184         public:
00185                 ListProperty(const char*, const QString&, PropertyData*, const QStringList&);
00186                 QWidget* createEditor(QWidget*);
00187                 void updateEditor(QWidget*);
00188                 void setCurrentIndex(int);
00189                 void setValue(const QVariant&);
00190                 QString status() const;
00191                 QVariant value() const;
00192                 QString valueToString() const;
00193         
00194         private:
00195                 QStringList m_list;
00196                 int m_index;
00197 };
00198 
00199 class PixmapProperty : public AbstractProperty
00200 {
00201         public:
00202                 PixmapProperty(const char*, const QString&, PropertyData*, const QPixmap&);
00203                 QWidget* createEditor(QWidget*);
00204                 void updateEditor(QWidget*);
00205                 void setValue(const QVariant&);
00206                 QString status() const;
00207                 QVariant value() const;
00208                 QString valueToString() const;
00209                 void setPath(const QString&);
00210 
00211         private:
00212                 QString m_path;
00213 };
00214 
00215 class FamilyProperty : public AbstractProperty
00216 {
00217         public:
00218                 FamilyProperty(const char*, const QString&, PropertyData*, const QFont&);
00219                 QWidget* createEditor(QWidget*);
00220                 void updateEditor(QWidget*);
00221                 QString status() const;
00222 };
00223 
00224 class EnumProperty : public AbstractProperty
00225 {
00226         public:
00227                 EnumProperty(const char*, const QString&, PropertyData*, const QMetaEnum&);
00228                 QWidget* createEditor(QWidget*);
00229                 void updateEditor(QWidget*);
00230                 void setValue(const QVariant&);
00231                 QString status() const;
00232                 QVariant value() const;
00233                 QString valueToString() const;
00234                 void setCurrentIndex(int);
00235 
00236         private:
00237                 QMetaEnum m_enums;
00238                 QStringList m_keys;
00239                 int m_index;
00240 };
00241 
00242 class PointProperty : public AbstractProperty
00243 {
00244         public:
00245                 PointProperty(const char*, const QString&, PropertyData*, const QPoint&);
00246                 QVariant value() const;
00247 };
00248 
00249 class SizeProperty : public AbstractProperty
00250 {
00251         public:
00252                 SizeProperty(const char*, const QString&, PropertyData*, const QSize&);
00253                 QVariant value() const;
00254 };
00255 
00256 class RectProperty : public AbstractProperty
00257 {
00258         public:
00259                 RectProperty(const char*, const QString&, PropertyData*, const QRect&);
00260                 QVariant value() const;
00261 };
00262 
00263 class LineProperty : public AbstractProperty
00264 {
00265         public:
00266                 LineProperty(const char*, const QString&, PropertyData*, const QLine&);
00267                 QVariant value() const;
00268 };
00269 
00270 class PolygonProperty : public AbstractProperty
00271 {
00272         public:
00273                 PolygonProperty(const char*, const QString&, PropertyData*, const QPolygon&);
00274                 QVariant value() const;
00275 };
00276 
00277 class PenProperty : public AbstractProperty
00278 {
00279         public:
00280                 PenProperty(const char*, const QString&, PropertyData*, const QPen&);
00281                 QVariant value() const;
00282 
00283         private:
00284                 QStringList m_penStyle;
00285 };
00286 
00287 class BrushProperty : public AbstractProperty
00288 {
00289         public:
00290                 BrushProperty(const char*, const QString&, PropertyData*, const QBrush&);
00291                 QVariant value() const;
00292 
00293         private:
00294                 QStringList m_brushStyle;
00295 };
00296 
00297 class FontProperty : public AbstractProperty
00298 {
00299         public:
00300                 FontProperty(const char*, const QString&, PropertyData*, const QFont&);
00301                 QVariant value() const;
00302 };
00303 
00304 class MatrixProperty : public AbstractProperty
00305 {
00306         public:
00307                 MatrixProperty(const char*, const QString&, PropertyData*, const QMatrix&);
00308                 QVariant value() const;
00309 };
00310 
00311 class PixmapBox : public QWidget
00312 {
00313         Q_OBJECT
00314         
00315         private slots:
00316                 void openDialog();
00317 
00318         public:
00319                 PixmapBox(QWidget*);
00320                 
00321                 void setPixmap(const QPixmap&);
00322                 void setPath(const QString&);
00323                 QPixmap pixmap() const;
00324                 QString path() const;
00325 
00326         private:
00327                 QPixmap m_pixmap;
00328                 QString m_path;
00329                 QHBoxLayout m_hbox;
00330                 QLabel m_label;
00331                 QPushButton m_button;
00332 };
00333 
00334 #endif

Generated on Thu Apr 5 13:06:31 2007 for LCDBuilder by  doxygen 1.4.7