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 KDECORE_EXPORT 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:
00217
void readImmutability(
KConfig *config);
00218
00219
QString mGroup;
00220
QString mKey;
00221
QString mName;
00222
00223
private:
00224
bool mIsImmutable;
00225
00226
QString mLabel;
00227
QString mWhatsThis;
00228 };
00229
00230
00231
template <
typename T >
class KConfigSkeletonGenericItem:
public KConfigSkeletonItem
00232 {
00233
public:
00234 KConfigSkeletonGenericItem(
const QString & group,
const QString & key, T & reference,
00235 T defaultValue)
00236 : KConfigSkeletonItem(group,
key), mReference(reference),
00237 mDefault(defaultValue), mLoadedValue(defaultValue)
00238 {
00239 }
00240
00244
void setValue(
const T & v)
00245 {
00246 mReference = v;
00247 }
00248
00252 T & value()
00253 {
00254
return mReference;
00255 }
00256
00260
const T & value()
const
00261
{
00262
return mReference;
00263 }
00264
00268
virtual void setDefaultValue(
const T &v )
00269 {
00270 mDefault = v;
00271 }
00272
00273
virtual void setDefault()
00274 {
00275 mReference = mDefault;
00276 }
00277
00278
virtual void writeConfig(
KConfig * config)
00279 {
00280
if ( mReference != mLoadedValue )
00281 {
00282 config->
setGroup(mGroup);
00283
if ((mDefault == mReference) && !config->
hasDefault( mKey))
00284 config->
revertToDefault( mKey );
00285
else
00286 config->
writeEntry(mKey, mReference);
00287 }
00288 }
00289
00290
void readDefault(
KConfig * config)
00291 {
00292 config->
setReadDefaults(
true);
00293 readConfig(config);
00294 config->
setReadDefaults(
false);
00295 mDefault = mReference;
00296 }
00297
00298
void swapDefault()
00299 {
00300 T tmp = mReference;
00301 mReference = mDefault;
00302 mDefault = tmp;
00303 }
00304
00305
protected:
00306 T & mReference;
00307 T mDefault;
00308 T mLoadedValue;
00309 };
00310
00365 class KDECORE_EXPORT KConfigSkeleton
00366 {
00367
public:
00368
00372 class KDECORE_EXPORT ItemString:
public KConfigSkeletonGenericItem < QString >
00373 {
00374
public:
00375
enum Type { Normal, Password, Path };
00376
00377 ItemString(
const QString & group,
const QString & key,
00378
QString & reference,
00379
const QString & defaultValue = QString::fromLatin1(
""),
00380 Type type = Normal);
00381
00382
void writeConfig(
KConfig * config);
00383
void readConfig(
KConfig * config);
00384
void setProperty(
const QVariant & p);
00385
QVariant property()
const;
00386
00387
private:
00388 Type mType;
00389 };
00390
00394 class KDECORE_EXPORT ItemPassword:
public ItemString
00395 {
00396
public:
00397 ItemPassword(
const QString & group,
const QString & key,
00398
QString & reference,
00399
const QString & defaultValue = QString::fromLatin1(
""));
00400 };
00401
00405 class KDECORE_EXPORT ItemPath:
public ItemString
00406 {
00407
public:
00408 ItemPath(
const QString & group,
const QString & key,
00409
QString & reference,
00410
const QString & defaultValue = QString::null);
00411 };
00412
00413
00417 class KDECORE_EXPORT ItemProperty:
public KConfigSkeletonGenericItem < QVariant >
00418 {
00419
public:
00420 ItemProperty(
const QString & group,
const QString & key,
00421
QVariant & reference,
QVariant defaultValue = 0);
00422
00423
void readConfig(
KConfig * config);
00424
void setProperty(
const QVariant & p);
00425
QVariant property()
const;
00426 };
00427
00428
00432 class KDECORE_EXPORT ItemBool:
public KConfigSkeletonGenericItem < bool >
00433 {
00434
public:
00435 ItemBool(
const QString & group,
const QString & key,
bool & reference,
00436
bool defaultValue =
true);
00437
00438
void readConfig(
KConfig * config);
00439
void setProperty(
const QVariant & p);
00440
QVariant property()
const;
00441 };
00442
00443
00447 class KDECORE_EXPORT ItemInt:
public KConfigSkeletonGenericItem < int >
00448 {
00449
public:
00450 ItemInt(
const QString & group,
const QString & key,
int &reference,
00451
int defaultValue = 0);
00452
00453
void readConfig(
KConfig * config);
00454
void setProperty(
const QVariant & p);
00455
QVariant property()
const;
00456
QVariant minValue()
const;
00457
QVariant maxValue()
const;
00458
00459
void setMinValue(
int);
00460
void setMaxValue(
int);
00461
00462
private:
00463
bool mHasMin : 1;
00464
bool mHasMax : 1;
00465
int mMin;
00466
int mMax;
00467 };
00468
00472 class KDECORE_EXPORT ItemInt64:
public KConfigSkeletonGenericItem < Q_INT64 >
00473 {
00474
public:
00475 ItemInt64(
const QString & group,
const QString & key, Q_INT64 &reference,
00476 Q_INT64 defaultValue = 0);
00477
00478
void readConfig(
KConfig * config);
00479
void setProperty(
const QVariant & p);
00480
QVariant property()
const;
00481
00482
QVariant minValue()
const;
00483
QVariant maxValue()
const;
00484
00485
void setMinValue(Q_INT64);
00486
void setMaxValue(Q_INT64);
00487
00488
private:
00489
bool mHasMin : 1;
00490
bool mHasMax : 1;
00491 Q_INT64 mMin;
00492 Q_INT64 mMax;
00493 };
00494
00498 class KDECORE_EXPORT ItemEnum:
public ItemInt
00499 {
00500
public:
00501
struct Choice
00502 {
00503
QString name;
00504
QString label;
00505
QString whatsThis;
00506 };
00507
00508 ItemEnum(
const QString & group,
const QString & key,
int &reference,
00509
const QValueList<Choice> &choices,
int defaultValue = 0);
00510
00511
QValueList<Choice> choices()
const;
00512
00513
void readConfig(
KConfig * config);
00514
void writeConfig(
KConfig * config);
00515
00516
private:
00517
QValueList<Choice> mChoices;
00518 };
00519
00520
00524 class KDECORE_EXPORT ItemUInt:
public KConfigSkeletonGenericItem < unsigned int >
00525 {
00526
public:
00527 ItemUInt(
const QString & group,
const QString & key,
00528
unsigned int &reference,
unsigned int defaultValue = 0);
00529
00530
void readConfig(
KConfig * config);
00531
void setProperty(
const QVariant & p);
00532
QVariant property()
const;
00533
QVariant minValue()
const;
00534
QVariant maxValue()
const;
00535
00536
void setMinValue(
unsigned int);
00537
void setMaxValue(
unsigned int);
00538
00539
private:
00540
bool mHasMin : 1;
00541
bool mHasMax : 1;
00542
unsigned int mMin;
00543
unsigned int mMax;
00544 };
00545
00546
00550 class KDECORE_EXPORT ItemLong:
public KConfigSkeletonGenericItem < long >
00551 {
00552
public:
00553 ItemLong(
const QString & group,
const QString & key,
long &reference,
00554
long defaultValue = 0);
00555
00556
void readConfig(
KConfig * config);
00557
void setProperty(
const QVariant & p);
00558
QVariant property()
const;
00559
QVariant minValue()
const;
00560
QVariant maxValue()
const;
00561
00562
void setMinValue(
long);
00563
void setMaxValue(
long);
00564
00565
private:
00566
bool mHasMin : 1;
00567
bool mHasMax : 1;
00568
long mMin;
00569
long mMax;
00570 };
00571
00572
00576 class KDECORE_EXPORT ItemULong:
public KConfigSkeletonGenericItem < unsigned long >
00577 {
00578
public:
00579 ItemULong(
const QString & group,
const QString & key,
00580
unsigned long &reference,
unsigned long defaultValue = 0);
00581
00582
void readConfig(
KConfig * config);
00583
void setProperty(
const QVariant & p);
00584
QVariant property()
const;
00585
QVariant minValue()
const;
00586
QVariant maxValue()
const;
00587
00588
void setMinValue(
unsigned long);
00589
void setMaxValue(
unsigned long);
00590
00591
private:
00592
bool mHasMin : 1;
00593
bool mHasMax : 1;
00594
unsigned long mMin;
00595
unsigned long mMax;
00596 };
00597
00601 class KDECORE_EXPORT ItemUInt64:
public KConfigSkeletonGenericItem < Q_UINT64 >
00602 {
00603
public:
00604 ItemUInt64(
const QString & group,
const QString & key, Q_UINT64 &reference,
00605 Q_UINT64 defaultValue = 0);
00606
00607
void readConfig(
KConfig * config);
00608
void setProperty(
const QVariant & p);
00609
QVariant property()
const;
00610
00611
QVariant minValue()
const;
00612
QVariant maxValue()
const;
00613
00614
void setMinValue(Q_UINT64);
00615
void setMaxValue(Q_UINT64);
00616
00617
private:
00618
bool mHasMin : 1;
00619
bool mHasMax : 1;
00620 Q_UINT64 mMin;
00621 Q_UINT64 mMax;
00622 };
00623
00627 class KDECORE_EXPORT ItemDouble:
public KConfigSkeletonGenericItem < double >
00628 {
00629
public:
00630 ItemDouble(
const QString & group,
const QString & key,
00631
double &reference,
double defaultValue = 0);
00632
00633
void readConfig(
KConfig * config);
00634
void setProperty(
const QVariant & p);
00635
QVariant property()
const;
00636
QVariant minValue()
const;
00637
QVariant maxValue()
const;
00638
00639
void setMinValue(
double);
00640
void setMaxValue(
double);
00641
00642
private:
00643
bool mHasMin : 1;
00644
bool mHasMax : 1;
00645
double mMin;
00646
double mMax;
00647 };
00648
00649
00653 class KDECORE_EXPORT ItemColor:
public KConfigSkeletonGenericItem < QColor >
00654 {
00655
public:
00656 ItemColor(
const QString & group,
const QString & key,
00657
QColor & reference,
00658
const QColor & defaultValue =
QColor(128, 128, 128));
00659
00660
void readConfig(
KConfig * config);
00661
void setProperty(
const QVariant & p);
00662
QVariant property()
const;
00663 };
00664
00665
00669 class KDECORE_EXPORT ItemFont:
public KConfigSkeletonGenericItem < QFont >
00670 {
00671
public:
00672 ItemFont(
const QString & group,
const QString & key,
QFont & reference,
00673
const QFont & defaultValue = KGlobalSettings::generalFont());
00674
00675
void readConfig(
KConfig * config);
00676
void setProperty(
const QVariant & p);
00677
QVariant property()
const;
00678 };
00679
00680
00684 class KDECORE_EXPORT ItemRect:
public KConfigSkeletonGenericItem < QRect >
00685 {
00686
public:
00687 ItemRect(
const QString & group,
const QString & key,
QRect & reference,
00688
const QRect & defaultValue =
QRect());
00689
00690
void readConfig(
KConfig * config);
00691
void setProperty(
const QVariant & p);
00692
QVariant property()
const;
00693 };
00694
00695
00699 class KDECORE_EXPORT ItemPoint:
public KConfigSkeletonGenericItem < QPoint >
00700 {
00701
public:
00702 ItemPoint(
const QString & group,
const QString & key,
QPoint & reference,
00703
const QPoint & defaultValue =
QPoint());
00704
00705
void readConfig(
KConfig * config);
00706
void setProperty(
const QVariant & p);
00707
QVariant property()
const;
00708 };
00709
00710
00714 class KDECORE_EXPORT ItemSize:
public KConfigSkeletonGenericItem < QSize >
00715 {
00716
public:
00717 ItemSize(
const QString & group,
const QString & key,
QSize & reference,
00718
const QSize & defaultValue =
QSize());
00719
00720
void readConfig(
KConfig * config);
00721
void setProperty(
const QVariant & p);
00722
QVariant property()
const;
00723 };
00724
00725
00729 class KDECORE_EXPORT ItemDateTime:
public KConfigSkeletonGenericItem < QDateTime >
00730 {
00731
public:
00732 ItemDateTime(
const QString & group,
const QString & key,
00733
QDateTime & reference,
00734
const QDateTime & defaultValue =
QDateTime());
00735
00736
void readConfig(
KConfig * config);
00737
void setProperty(
const QVariant & p);
00738
QVariant property()
const;
00739 };
00740
00741
00745 class KDECORE_EXPORT ItemStringList:
public KConfigSkeletonGenericItem < QStringList >
00746 {
00747
public:
00748 ItemStringList(
const QString & group,
const QString & key,
00749
QStringList & reference,
00750
const QStringList & defaultValue =
QStringList());
00751
00752
void readConfig(
KConfig * config);
00753
void setProperty(
const QVariant & p);
00754
QVariant property()
const;
00755 };
00756
00757
00761 class KDECORE_EXPORT ItemPathList:
public ItemStringList
00762 {
00763
public:
00764 ItemPathList(
const QString & group,
const QString & key,
00765
QStringList & reference,
00766
const QStringList & defaultValue =
QStringList());
00767
00768
void readConfig(
KConfig * config);
00769
void writeConfig(
KConfig * config);
00770 };
00771
00772
00776 class KDECORE_EXPORT ItemIntList:
public KConfigSkeletonGenericItem < QValueList < int > >
00777 {
00778
public:
00779 ItemIntList(
const QString & group,
const QString & key,
00780 QValueList < int >&reference,
00781
const QValueList < int >&defaultValue = QValueList < int >());
00782
00783
void readConfig(
KConfig * config);
00784
void setProperty(
const QVariant & p);
00785
QVariant property()
const;
00786 };
00787
00788
00789
public:
00796 KConfigSkeleton(
const QString & configname = QString::null);
00797
00803 KConfigSkeleton(
KSharedConfig::Ptr config);
00804
00808
virtual ~ KConfigSkeleton();
00809
00813
void setDefaults();
00814
00819
void readConfig();
00820
00825
void writeConfig();
00826
00832
void setCurrentGroup(
const QString & group);
00833
00837 QString currentGroup()
00838 {
00839
return mCurrentGroup;
00840 }
00841
00848
void addItem(KConfigSkeletonItem *,
const QString & name = QString::null );
00849
00861 ItemString *addItemString(
const QString & name,
QString & reference,
00862
const QString & defaultValue = QString::fromLatin1(
""),
00863
const QString & key = QString::null);
00864
00878 ItemPassword *addItemPassword(
const QString & name,
QString & reference,
00879
const QString & defaultValue = QString::fromLatin1(
""),
00880
const QString & key = QString::null);
00881
00895 ItemPath *addItemPath(
const QString & name,
QString & reference,
00896
const QString & defaultValue = QString::fromLatin1(
""),
00897
const QString & key = QString::null);
00898
00912 ItemProperty *addItemProperty(
const QString & name,
QVariant & reference,
00913
const QVariant & defaultValue =
QVariant(),
00914
const QString & key = QString::null);
00926 ItemBool *addItemBool(
const QString & name,
bool & reference,
00927
bool defaultValue =
false,
00928
const QString & key = QString::null);
00929
00941 ItemInt *addItemInt(
const QString & name,
int &reference,
int defaultValue = 0,
00942
const QString & key = QString::null);
00943
00955 ItemUInt *addItemUInt(
const QString & name,
unsigned int &reference,
00956
unsigned int defaultValue = 0,
00957
const QString & key = QString::null);
00958
00970 ItemLong *addItemLong(
const QString & name,
long &reference,
00971
long defaultValue = 0,
00972
const QString & key = QString::null);
00973
00985 ItemULong *addItemULong(
const QString & name,
unsigned long &reference,
00986
unsigned long defaultValue = 0,
00987
const QString & key = QString::null);
00988
01000 ItemInt64 *addItemInt64(
const QString & name, Q_INT64 &reference,
01001 Q_INT64 defaultValue = 0,
01002
const QString & key = QString::null);
01003
01015 ItemUInt64 *addItemUInt64(
const QString & name, Q_UINT64 &reference,
01016 Q_UINT64 defaultValue = 0,
01017
const QString & key = QString::null);
01018
01030 ItemDouble *addItemDouble(
const QString & name,
double &reference,
01031
double defaultValue = 0.0,
01032
const QString & key = QString::null);
01033
01045 ItemColor *addItemColor(
const QString & name,
QColor & reference,
01046
const QColor & defaultValue =
QColor(128, 128, 128),
01047
const QString & key = QString::null);
01048
01060 ItemFont *addItemFont(
const QString & name,
QFont & reference,
01061
const QFont & defaultValue =
01062 KGlobalSettings::generalFont(),
01063
const QString & key = QString::null);
01064
01076 ItemRect *addItemRect(
const QString & name,
QRect & reference,
01077
const QRect & defaultValue =
QRect(),
01078
const QString & key = QString::null);
01079
01091 ItemPoint *addItemPoint(
const QString & name,
QPoint & reference,
01092
const QPoint & defaultValue =
QPoint(),
01093
const QString & key = QString::null);
01094
01106 ItemSize *addItemSize(
const QString & name,
QSize & reference,
01107
const QSize & defaultValue =
QSize(),
01108
const QString & key = QString::null);
01109
01121 ItemDateTime *addItemDateTime(
const QString & name,
QDateTime & reference,
01122
const QDateTime & defaultValue =
QDateTime(),
01123
const QString & key = QString::null);
01124
01136 ItemStringList *addItemStringList(
const QString & name,
QStringList & reference,
01137
const QStringList & defaultValue =
QStringList(),
01138
const QString & key = QString::null);
01139
01151 ItemIntList *addItemIntList(
const QString & name, QValueList < int >&reference,
01152
const QValueList < int >&defaultValue =
01153 QValueList < int >(),
01154
const QString & key = QString::null);
01155
01159
KConfig *config() const;
01160
01164 KConfigSkeletonItem::List items()
const
01165
{
01166
return mItems;
01167 }
01168
01172
bool isImmutable(
const QString & name);
01173
01177 KConfigSkeletonItem * findItem(
const QString & name);
01178
01185
bool useDefaults(
bool b);
01186
01187
protected:
01193 virtual void usrUseDefaults(
bool)
01194 {
01195 }
01196
01197
virtual void usrSetDefaults()
01198 {
01199 }
01200
01204 virtual void usrReadConfig()
01205 {
01206 }
01207
01211 virtual void usrWriteConfig()
01212 {
01213 }
01214
01215
private:
01216
QString mCurrentGroup;
01217
01218 KSharedConfig::Ptr mConfig;
01219
01220
KConfigSkeletonItem::List mItems;
01221
KConfigSkeletonItem::Dict mItemDict;
01222
01223
bool mUseDefaults;
01224
01225
class Private;
01226 Private *d;
01227
01228 };
01229
01230
#endif