00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _KCONFIGSKELETON_H
00024 #define _KCONFIGSKELETON_H
00025
00026 #include <qcolor.h>
00027 #include <qdatetime.h>
00028 #include <qfont.h>
00029 #include <qpoint.h>
00030 #include <qptrlist.h>
00031 #include <qdict.h>
00032 #include <qrect.h>
00033 #include <qsize.h>
00034 #include <qstringlist.h>
00035 #include <qvariant.h>
00036 #include <kconfig.h>
00037 #include <kglobalsettings.h>
00038
00050 class KConfigSkeletonItem
00051 {
00052 public:
00053 typedef QValueList < KConfigSkeletonItem * >List;
00054 typedef QDict < KConfigSkeletonItem > Dict;
00055 typedef QDictIterator < KConfigSkeletonItem > DictIterator;
00056
00063 KConfigSkeletonItem(const QString & group, const QString & key)
00064 :mGroup(group),mKey(key), mIsImmutable(true)
00065 {
00066 }
00067
00071 virtual ~KConfigSkeletonItem()
00072 {
00073 }
00074
00078 void setGroup( const QString &group )
00079 {
00080 mGroup = group;
00081 }
00082
00086 QString group() const
00087 {
00088 return mGroup;
00089 }
00090
00094 void setKey( const QString &key )
00095 {
00096 mKey = key;
00097 }
00098
00102 QString key() const
00103 {
00104 return mKey;
00105 }
00106
00110 void setName(const QString &name)
00111 {
00112 mName = name;
00113 }
00114
00118 QString name() const
00119 {
00120 return mName;
00121 }
00122
00126 void setLabel( const QString &l )
00127 {
00128 mLabel = l;
00129 }
00130
00134 QString label() const
00135 {
00136 return mLabel;
00137 }
00138
00142 void setWhatsThis( const QString &w )
00143 {
00144 mWhatsThis = w;
00145 }
00146
00150 QString whatsThis() const
00151 {
00152 return mWhatsThis;
00153 }
00154
00160 virtual void readConfig(KConfig *) = 0;
00161
00166 virtual void writeConfig(KConfig *) = 0;
00167
00171 virtual void readDefault(KConfig *) = 0;
00172
00176 virtual void setProperty(const QVariant &p) = 0;
00177
00181 virtual QVariant property() const = 0;
00182
00186 virtual QVariant minValue() const { return QVariant(); }
00187
00191 virtual QVariant maxValue() const { return QVariant(); }
00192
00196 virtual void setDefault() = 0;
00197
00202 virtual void swapDefault() = 0;
00203
00207 bool isImmutable() const
00208 {
00209 return mIsImmutable;
00210 }
00211
00212 protected:
00213 void readImmutability(KConfig *);
00214
00215 QString mGroup;
00216 QString mKey;
00217 QString mName;
00218
00219 private:
00220 bool mIsImmutable;
00221
00222 QString mLabel;
00223 QString mWhatsThis;
00224 };
00225
00226
00227 template < typename T > class KConfigSkeletonGenericItem:public KConfigSkeletonItem
00228 {
00229 public:
00230 KConfigSkeletonGenericItem(const QString & group, const QString & key, T & reference,
00231 T defaultValue)
00232 : KConfigSkeletonItem(group, key), mReference(reference),
00233 mDefault(defaultValue), mLoadedValue(defaultValue)
00234 {
00235 }
00236
00240 void setValue(const T & v)
00241 {
00242 mReference = v;
00243 }
00244
00248 T & value()
00249 {
00250 return mReference;
00251 }
00252
00256 const T & value() const
00257 {
00258 return mReference;
00259 }
00260
00264 virtual void setDefaultValue( const T &v )
00265 {
00266 mDefault = v;
00267 }
00268
00269 virtual void setDefault()
00270 {
00271 mReference = mDefault;
00272 }
00273
00274 virtual void writeConfig(KConfig * config)
00275 {
00276 if ( mReference != mLoadedValue )
00277 {
00278 config->setGroup(mGroup);
00279 if ((mDefault == mReference) && !config->hasDefault( mKey))
00280 config->revertToDefault( mKey );
00281 else
00282 config->writeEntry(mKey, mReference);
00283 }
00284 }
00285
00286 void readDefault(KConfig * config)
00287 {
00288 config->setReadDefaults(true);
00289 readConfig(config);
00290 config->setReadDefaults(false);
00291 mDefault = mReference;
00292 }
00293
00294 void swapDefault()
00295 {
00296 T tmp = mReference;
00297 mReference = mDefault;
00298 mDefault = tmp;
00299 }
00300
00301 protected:
00302 T & mReference;
00303 T mDefault;
00304 T mLoadedValue;
00305 };
00306
00361 class KConfigSkeleton
00362 {
00363 public:
00364
00368 class ItemString:public KConfigSkeletonGenericItem < QString >
00369 {
00370 public:
00371 enum Type { Normal, Password, Path };
00372
00373 ItemString(const QString & group, const QString & key,
00374 QString & reference,
00375 const QString & defaultValue = QString::fromLatin1(""),
00376 Type type = Normal);
00377
00378 void writeConfig(KConfig * config);
00379 void readConfig(KConfig * config);
00380 void setProperty(const QVariant & p);
00381 QVariant property() const;
00382
00383 private:
00384 Type mType;
00385 };
00386
00390 class ItemPassword:public ItemString
00391 {
00392 public:
00393 ItemPassword(const QString & group, const QString & key,
00394 QString & reference,
00395 const QString & defaultValue = QString::fromLatin1(""));
00396 };
00397
00401 class ItemPath:public ItemString
00402 {
00403 public:
00404 ItemPath(const QString & group, const QString & key,
00405 QString & reference,
00406 const QString & defaultValue = QString::null);
00407 };
00408
00409
00413 class ItemProperty:public KConfigSkeletonGenericItem < QVariant >
00414 {
00415 public:
00416 ItemProperty(const QString & group, const QString & key,
00417 QVariant & reference, QVariant defaultValue = 0);
00418
00419 void readConfig(KConfig * config);
00420 void setProperty(const QVariant & p);
00421 QVariant property() const;
00422 };
00423
00424
00428 class ItemBool:public KConfigSkeletonGenericItem < bool >
00429 {
00430 public:
00431 ItemBool(const QString & group, const QString & key, bool & reference,
00432 bool defaultValue = true);
00433
00434 void readConfig(KConfig * config);
00435 void setProperty(const QVariant & p);
00436 QVariant property() const;
00437 };
00438
00439
00443 class ItemInt:public KConfigSkeletonGenericItem < int >
00444 {
00445 public:
00446 ItemInt(const QString & group, const QString & key, int &reference,
00447 int defaultValue = 0);
00448
00449 void readConfig(KConfig * config);
00450 void setProperty(const QVariant & p);
00451 QVariant property() const;
00452 QVariant minValue() const;
00453 QVariant maxValue() const;
00454
00455 void setMinValue(int);
00456 void setMaxValue(int);
00457
00458 private:
00459 bool mHasMin : 1;
00460 bool mHasMax : 1;
00461 int mMin;
00462 int mMax;
00463 };
00464
00468 class ItemInt64:public KConfigSkeletonGenericItem < Q_INT64 >
00469 {
00470 public:
00471 ItemInt64(const QString & group, const QString & key, Q_INT64 &reference,
00472 Q_INT64 defaultValue = 0);
00473
00474 void readConfig(KConfig * config);
00475 void setProperty(const QVariant & p);
00476 QVariant property() const;
00477
00478 QVariant minValue() const;
00479 QVariant maxValue() const;
00480
00481 void setMinValue(Q_INT64);
00482 void setMaxValue(Q_INT64);
00483
00484 private:
00485 bool mHasMin : 1;
00486 bool mHasMax : 1;
00487 Q_INT64 mMin;
00488 Q_INT64 mMax;
00489 };
00490
00494 class ItemEnum:public ItemInt
00495 {
00496 public:
00497 struct Choice
00498 {
00499 QString name;
00500 QString label;
00501 QString whatsThis;
00502 };
00503
00504 ItemEnum(const QString & group, const QString & key, int &reference,
00505 const QValueList<Choice> &choices, int defaultValue = 0);
00506
00507 QValueList<Choice> choices() const;
00508
00509 void readConfig(KConfig * config);
00510 void writeConfig(KConfig * config);
00511
00512 private:
00513 QValueList<Choice> mChoices;
00514 };
00515
00516
00520 class ItemUInt:public KConfigSkeletonGenericItem < unsigned int >
00521 {
00522 public:
00523 ItemUInt(const QString & group, const QString & key,
00524 unsigned int &reference, unsigned int defaultValue = 0);
00525
00526 void readConfig(KConfig * config);
00527 void setProperty(const QVariant & p);
00528 QVariant property() const;
00529 QVariant minValue() const;
00530 QVariant maxValue() const;
00531
00532 void setMinValue(unsigned int);
00533 void setMaxValue(unsigned int);
00534
00535 private:
00536 bool mHasMin : 1;
00537 bool mHasMax : 1;
00538 unsigned int mMin;
00539 unsigned int mMax;
00540 };
00541
00542
00546 class ItemLong:public KConfigSkeletonGenericItem < long >
00547 {
00548 public:
00549 ItemLong(const QString & group, const QString & key, long &reference,
00550 long defaultValue = 0);
00551
00552 void readConfig(KConfig * config);
00553 void setProperty(const QVariant & p);
00554 QVariant property() const;
00555 QVariant minValue() const;
00556 QVariant maxValue() const;
00557
00558 void setMinValue(long);
00559 void setMaxValue(long);
00560
00561 private:
00562 bool mHasMin : 1;
00563 bool mHasMax : 1;
00564 long mMin;
00565 long mMax;
00566 };
00567
00568
00572 class ItemULong:public KConfigSkeletonGenericItem < unsigned long >
00573 {
00574 public:
00575 ItemULong(const QString & group, const QString & key,
00576 unsigned long &reference, unsigned long defaultValue = 0);
00577
00578 void readConfig(KConfig * config);
00579 void setProperty(const QVariant & p);
00580 QVariant property() const;
00581 QVariant minValue() const;
00582 QVariant maxValue() const;
00583
00584 void setMinValue(unsigned long);
00585 void setMaxValue(unsigned long);
00586
00587 private:
00588 bool mHasMin : 1;
00589 bool mHasMax : 1;
00590 unsigned long mMin;
00591 unsigned long mMax;
00592 };
00593
00597 class ItemUInt64:public KConfigSkeletonGenericItem < Q_UINT64 >
00598 {
00599 public:
00600 ItemUInt64(const QString & group, const QString & key, Q_UINT64 &reference,
00601 Q_UINT64 defaultValue = 0);
00602
00603 void readConfig(KConfig * config);
00604 void setProperty(const QVariant & p);
00605 QVariant property() const;
00606
00607 QVariant minValue() const;
00608 QVariant maxValue() const;
00609
00610 void setMinValue(Q_UINT64);
00611 void setMaxValue(Q_UINT64);
00612
00613 private:
00614 bool mHasMin : 1;
00615 bool mHasMax : 1;
00616 Q_UINT64 mMin;
00617 Q_UINT64 mMax;
00618 };
00619
00623 class ItemDouble:public KConfigSkeletonGenericItem < double >
00624 {
00625 public:
00626 ItemDouble(const QString & group, const QString & key,
00627 double &reference, double defaultValue = 0);
00628
00629 void readConfig(KConfig * config);
00630 void setProperty(const QVariant & p);
00631 QVariant property() const;
00632 QVariant minValue() const;
00633 QVariant maxValue() const;
00634
00635 void setMinValue(double);
00636 void setMaxValue(double);
00637
00638 private:
00639 bool mHasMin : 1;
00640 bool mHasMax : 1;
00641 double mMin;
00642 double mMax;
00643 };
00644
00645
00649 class ItemColor:public KConfigSkeletonGenericItem < QColor >
00650 {
00651 public:
00652 ItemColor(const QString & group, const QString & key,
00653 QColor & reference,
00654 const QColor & defaultValue = QColor(128, 128, 128));
00655
00656 void readConfig(KConfig * config);
00657 void setProperty(const QVariant & p);
00658 QVariant property() const;
00659 };
00660
00661
00665 class ItemFont:public KConfigSkeletonGenericItem < QFont >
00666 {
00667 public:
00668 ItemFont(const QString & group, const QString & key, QFont & reference,
00669 const QFont & defaultValue = KGlobalSettings::generalFont());
00670
00671 void readConfig(KConfig * config);
00672 void setProperty(const QVariant & p);
00673 QVariant property() const;
00674 };
00675
00676
00680 class ItemRect:public KConfigSkeletonGenericItem < QRect >
00681 {
00682 public:
00683 ItemRect(const QString & group, const QString & key, QRect & reference,
00684 const QRect & defaultValue = QRect());
00685
00686 void readConfig(KConfig * config);
00687 void setProperty(const QVariant & p);
00688 QVariant property() const;
00689 };
00690
00691
00695 class ItemPoint:public KConfigSkeletonGenericItem < QPoint >
00696 {
00697 public:
00698 ItemPoint(const QString & group, const QString & key, QPoint & reference,
00699 const QPoint & defaultValue = QPoint());
00700
00701 void readConfig(KConfig * config);
00702 void setProperty(const QVariant & p);
00703 QVariant property() const;
00704 };
00705
00706
00710 class ItemSize:public KConfigSkeletonGenericItem < QSize >
00711 {
00712 public:
00713 ItemSize(const QString & group, const QString & key, QSize & reference,
00714 const QSize & defaultValue = QSize());
00715
00716 void readConfig(KConfig * config);
00717 void setProperty(const QVariant & p);
00718 QVariant property() const;
00719 };
00720
00721
00725 class ItemDateTime:public KConfigSkeletonGenericItem < QDateTime >
00726 {
00727 public:
00728 ItemDateTime(const QString & group, const QString & key,
00729 QDateTime & reference,
00730 const QDateTime & defaultValue = QDateTime());
00731
00732 void readConfig(KConfig * config);
00733 void setProperty(const QVariant & p);
00734 QVariant property() const;
00735 };
00736
00737
00741 class ItemStringList:public KConfigSkeletonGenericItem < QStringList >
00742 {
00743 public:
00744 ItemStringList(const QString & group, const QString & key,
00745 QStringList & reference,
00746 const QStringList & defaultValue = QStringList());
00747
00748 void readConfig(KConfig * config);
00749 void setProperty(const QVariant & p);
00750 QVariant property() const;
00751 };
00752
00753
00757 class ItemIntList:public KConfigSkeletonGenericItem < QValueList < int > >
00758 {
00759 public:
00760 ItemIntList(const QString & group, const QString & key,
00761 QValueList < int >&reference,
00762 const QValueList < int >&defaultValue = QValueList < int >());
00763
00764 void readConfig(KConfig * config);
00765 void setProperty(const QVariant & p);
00766 QVariant property() const;
00767 };
00768
00769
00770 public:
00777 KConfigSkeleton(const QString & configname = QString::null);
00778
00784 KConfigSkeleton(KSharedConfig::Ptr config);
00785
00789 virtual ~ KConfigSkeleton();
00790
00794 void setDefaults();
00795
00800 void readConfig();
00801
00806 void writeConfig();
00807
00813 void setCurrentGroup(const QString & group);
00814
00818 QString currentGroup()
00819 {
00820 return mCurrentGroup;
00821 }
00822
00829 void addItem(KConfigSkeletonItem *, const QString & name = QString::null );
00830
00842 ItemString *addItemString(const QString & name, QString & reference,
00843 const QString & defaultValue = QString::fromLatin1(""),
00844 const QString & key = QString::null);
00845
00859 ItemPassword *addItemPassword(const QString & name, QString & reference,
00860 const QString & defaultValue = QString::fromLatin1(""),
00861 const QString & key = QString::null);
00862
00876 ItemPath *addItemPath(const QString & name, QString & reference,
00877 const QString & defaultValue = QString::fromLatin1(""),
00878 const QString & key = QString::null);
00879
00893 ItemProperty *addItemProperty(const QString & name, QVariant & reference,
00894 const QVariant & defaultValue = QVariant(),
00895 const QString & key = QString::null);
00907 ItemBool *addItemBool(const QString & name, bool & reference,
00908 bool defaultValue = false,
00909 const QString & key = QString::null);
00910
00922 ItemInt *addItemInt(const QString & name, int &reference, int defaultValue = 0,
00923 const QString & key = QString::null);
00924
00936 ItemUInt *addItemUInt(const QString & name, unsigned int &reference,
00937 unsigned int defaultValue = 0,
00938 const QString & key = QString::null);
00939
00951 ItemLong *addItemLong(const QString & name, long &reference,
00952 long defaultValue = 0,
00953 const QString & key = QString::null);
00954
00966 ItemULong *addItemULong(const QString & name, unsigned long &reference,
00967 unsigned long defaultValue = 0,
00968 const QString & key = QString::null);
00969
00981 ItemInt64 *addItemInt64(const QString & name, Q_INT64 &reference,
00982 Q_INT64 defaultValue = 0,
00983 const QString & key = QString::null);
00984
00996 ItemUInt64 *addItemUInt64(const QString & name, Q_UINT64 &reference,
00997 Q_UINT64 defaultValue = 0,
00998 const QString & key = QString::null);
00999
01011 ItemDouble *addItemDouble(const QString & name, double &reference,
01012 double defaultValue = 0.0,
01013 const QString & key = QString::null);
01014
01026 ItemColor *addItemColor(const QString & name, QColor & reference,
01027 const QColor & defaultValue = QColor(128, 128, 128),
01028 const QString & key = QString::null);
01029
01041 ItemFont *addItemFont(const QString & name, QFont & reference,
01042 const QFont & defaultValue =
01043 KGlobalSettings::generalFont(),
01044 const QString & key = QString::null);
01045
01057 ItemRect *addItemRect(const QString & name, QRect & reference,
01058 const QRect & defaultValue = QRect(),
01059 const QString & key = QString::null);
01060
01072 ItemPoint *addItemPoint(const QString & name, QPoint & reference,
01073 const QPoint & defaultValue = QPoint(),
01074 const QString & key = QString::null);
01075
01087 ItemSize *addItemSize(const QString & name, QSize & reference,
01088 const QSize & defaultValue = QSize(),
01089 const QString & key = QString::null);
01090
01102 ItemDateTime *addItemDateTime(const QString & name, QDateTime & reference,
01103 const QDateTime & defaultValue = QDateTime(),
01104 const QString & key = QString::null);
01105
01117 ItemStringList *addItemStringList(const QString & name, QStringList & reference,
01118 const QStringList & defaultValue = QStringList(),
01119 const QString & key = QString::null);
01120
01132 ItemIntList *addItemIntList(const QString & name, QValueList < int >&reference,
01133 const QValueList < int >&defaultValue =
01134 QValueList < int >(),
01135 const QString & key = QString::null);
01136
01140 KConfig *config() const;
01141
01145 KConfigSkeletonItem::List items() const
01146 {
01147 return mItems;
01148 }
01149
01153 bool isImmutable(const QString & name);
01154
01158 KConfigSkeletonItem * findItem(const QString & name);
01159
01166 bool useDefaults(bool b);
01167
01168 protected:
01174 virtual void usrUseDefaults(bool)
01175 {
01176 }
01177
01178 virtual void usrSetDefaults()
01179 {
01180 }
01181
01185 virtual void usrReadConfig()
01186 {
01187 }
01188
01192 virtual void usrWriteConfig()
01193 {
01194 }
01195
01196 private:
01197 QString mCurrentGroup;
01198
01199 KSharedConfig::Ptr mConfig;
01200
01201 KConfigSkeletonItem::List mItems;
01202 KConfigSkeletonItem::Dict mItemDict;
01203
01204 bool mUseDefaults;
01205
01206 class Private;
01207 Private *d;
01208
01209 };
01210
01211 #endif