00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <qcolor.h>
00024
00025 #include <kconfig.h>
00026 #include <kstandarddirs.h>
00027 #include <kglobal.h>
00028 #include <kdebug.h>
00029
00030 #include "kprefs.h"
00031
00032 class KPrefsItemBool : public KPrefsItem {
00033 public:
00034 KPrefsItemBool(const QString &group,const QString &name,bool *,bool defaultValue=true);
00035 virtual ~KPrefsItemBool() {}
00036
00037 void setDefault();
00038 void readConfig(KConfig *);
00039 void writeConfig(KConfig *);
00040
00041 private:
00042 bool *mReference;
00043 bool mDefault;
00044 };
00045
00046 class KPrefsItemInt : public KPrefsItem {
00047 public:
00048 KPrefsItemInt(const QString &group,const QString &name,int *,int defaultValue=0);
00049 virtual ~KPrefsItemInt() {}
00050
00051 void setDefault();
00052 void readConfig(KConfig *);
00053 void writeConfig(KConfig *);
00054
00055 private:
00056 int *mReference;
00057 int mDefault;
00058 };
00059
00060
00061 class KPrefsItemColor : public KPrefsItem {
00062 public:
00063 KPrefsItemColor(const QString &group,const QString &name,QColor *,
00064 const QColor &defaultValue=QColor(128,128,128));
00065 virtual ~KPrefsItemColor() {}
00066
00067 void setDefault();
00068 void readConfig(KConfig *);
00069 void writeConfig(KConfig *);
00070
00071 private:
00072 QColor *mReference;
00073 QColor mDefault;
00074 };
00075
00076
00077 class KPrefsItemFont : public KPrefsItem {
00078 public:
00079 KPrefsItemFont(const QString &group,const QString &name,QFont *,
00080 const QFont &defaultValue=QFont("helvetica",12));
00081 virtual ~KPrefsItemFont() {}
00082
00083 void setDefault();
00084 void readConfig(KConfig *);
00085 void writeConfig(KConfig *);
00086
00087 private:
00088 QFont *mReference;
00089 QFont mDefault;
00090 };
00091
00092
00093 class KPrefsItemString : public KPrefsItem {
00094 public:
00095 KPrefsItemString(const QString &group,const QString &name,QString *,
00096 const QString &defaultValue="", bool isPassword=false);
00097 virtual ~KPrefsItemString() {}
00098
00099 void setDefault();
00100 void readConfig(KConfig *);
00101 void writeConfig(KConfig *);
00102
00103 private:
00104 QString *mReference;
00105 QString mDefault;
00106 bool mPassword;
00107 };
00108
00109
00110 class KPrefsItemStringList : public KPrefsItem {
00111 public:
00112 KPrefsItemStringList(const QString &group,const QString &name,QStringList *,
00113 const QStringList &defaultValue=QStringList());
00114 virtual ~KPrefsItemStringList() {}
00115
00116 void setDefault();
00117 void readConfig(KConfig *);
00118 void writeConfig(KConfig *);
00119
00120 private:
00121 QStringList *mReference;
00122 QStringList mDefault;
00123 };
00124
00125
00126 class KPrefsItemIntList : public KPrefsItem {
00127 public:
00128 KPrefsItemIntList(const QString &group,const QString &name,QValueList<int> *,
00129 const QValueList<int> &defaultValue=QValueList<int>());
00130 virtual ~KPrefsItemIntList() {}
00131
00132 void setDefault();
00133 void readConfig(KConfig *);
00134 void writeConfig(KConfig *);
00135
00136 private:
00137 QValueList<int> *mReference;
00138 QValueList<int> mDefault;
00139 };
00140
00141
00142 KPrefsItemBool::KPrefsItemBool(const QString &group,const QString &name,
00143 bool *reference,bool defaultValue) :
00144 KPrefsItem(group,name)
00145 {
00146 mReference = reference;
00147 mDefault = defaultValue;
00148 }
00149
00150 void KPrefsItemBool::setDefault()
00151 {
00152 *mReference = mDefault;
00153 }
00154
00155 void KPrefsItemBool::writeConfig(KConfig *config)
00156 {
00157 config->setGroup(mGroup);
00158 config->writeEntry(mName,*mReference);
00159 }
00160
00161
00162 void KPrefsItemBool::readConfig(KConfig *config)
00163 {
00164 config->setGroup(mGroup);
00165 *mReference = config->readBoolEntry(mName,mDefault);
00166 }
00167
00168
00169 KPrefsItemInt::KPrefsItemInt(const QString &group,const QString &name,
00170 int *reference,int defaultValue) :
00171 KPrefsItem(group,name)
00172 {
00173 mReference = reference;
00174 mDefault = defaultValue;
00175 }
00176
00177 void KPrefsItemInt::setDefault()
00178 {
00179 *mReference = mDefault;
00180 }
00181
00182 void KPrefsItemInt::writeConfig(KConfig *config)
00183 {
00184 config->setGroup(mGroup);
00185 config->writeEntry(mName,*mReference);
00186 }
00187
00188 void KPrefsItemInt::readConfig(KConfig *config)
00189 {
00190 config->setGroup(mGroup);
00191 *mReference = config->readNumEntry(mName,mDefault);
00192 }
00193
00194
00195 KPrefsItemColor::KPrefsItemColor(const QString &group,const QString &name,
00196 QColor *reference,const QColor &defaultValue) :
00197 KPrefsItem(group,name)
00198 {
00199 mReference = reference;
00200 mDefault = defaultValue;
00201 }
00202
00203 void KPrefsItemColor::setDefault()
00204 {
00205 *mReference = mDefault;
00206 }
00207
00208 void KPrefsItemColor::writeConfig(KConfig *config)
00209 {
00210 config->setGroup(mGroup);
00211 config->writeEntry(mName,*mReference);
00212 }
00213
00214 void KPrefsItemColor::readConfig(KConfig *config)
00215 {
00216 config->setGroup(mGroup);
00217 *mReference = config->readColorEntry(mName,&mDefault);
00218 }
00219
00220
00221 KPrefsItemFont::KPrefsItemFont(const QString &group,const QString &name,
00222 QFont *reference,const QFont &defaultValue) :
00223 KPrefsItem(group,name)
00224 {
00225 mReference = reference;
00226 mDefault = defaultValue;
00227 }
00228
00229 void KPrefsItemFont::setDefault()
00230 {
00231 *mReference = mDefault;
00232 }
00233
00234 void KPrefsItemFont::writeConfig(KConfig *config)
00235 {
00236 config->setGroup(mGroup);
00237 config->writeEntry(mName,*mReference);
00238 }
00239
00240 void KPrefsItemFont::readConfig(KConfig *config)
00241 {
00242 config->setGroup(mGroup);
00243 *mReference = config->readFontEntry(mName,&mDefault);
00244 }
00245
00246
00247 QString endecryptStr( const QString &aStr )
00248 {
00249 QString result;
00250 for (uint i = 0; i < aStr.length(); i++)
00251 result += (aStr[i].unicode() < 0x20) ? aStr[i] :
00252 QChar(0x1001F - aStr[i].unicode());
00253 return result;
00254 }
00255
00256
00257 KPrefsItemString::KPrefsItemString(const QString &group,const QString &name,
00258 QString *reference,const QString &defaultValue,
00259 bool isPassword) :
00260 KPrefsItem(group,name)
00261 {
00262 mReference = reference;
00263 mDefault = defaultValue;
00264 mPassword = isPassword;
00265 }
00266
00267 void KPrefsItemString::setDefault()
00268 {
00269 *mReference = mDefault;
00270 }
00271
00272 void KPrefsItemString::writeConfig(KConfig *config)
00273 {
00274 config->setGroup(mGroup);
00275 if ( mPassword )
00276 config->writeEntry(mName, endecryptStr( *mReference ) );
00277 else
00278 config->writeEntry(mName,*mReference);
00279 }
00280
00281 void KPrefsItemString::readConfig(KConfig *config)
00282 {
00283 config->setGroup(mGroup);
00284 if ( mPassword )
00285 if ( config->hasKey( mName ) )
00286 *mReference = endecryptStr( config->readEntry( mName ) );
00287 else
00288 *mReference = mDefault;
00289 else
00290 *mReference = config->readEntry(mName,mDefault);
00291 }
00292
00293
00294 KPrefsItemStringList::KPrefsItemStringList(const QString &group,const QString &name,
00295 QStringList *reference,const QStringList &defaultValue) :
00296 KPrefsItem(group,name)
00297 {
00298 mReference = reference;
00299 mDefault = defaultValue;
00300 }
00301
00302 void KPrefsItemStringList::setDefault()
00303 {
00304 *mReference = mDefault;
00305 }
00306
00307 void KPrefsItemStringList::writeConfig(KConfig *config)
00308 {
00309 config->setGroup(mGroup);
00310 config->writeEntry(mName,*mReference);
00311 }
00312
00313 void KPrefsItemStringList::readConfig(KConfig *config)
00314 {
00315 config->setGroup(mGroup);
00316 *mReference = config->readListEntry(mName);
00317 }
00318
00319
00320 KPrefsItemIntList::KPrefsItemIntList(const QString &group,const QString &name,
00321 QValueList<int> *reference,const QValueList<int> &defaultValue) :
00322 KPrefsItem(group,name)
00323 {
00324 mReference = reference;
00325 mDefault = defaultValue;
00326 }
00327
00328 void KPrefsItemIntList::setDefault()
00329 {
00330 *mReference = mDefault;
00331 }
00332
00333 void KPrefsItemIntList::writeConfig(KConfig *config)
00334 {
00335 config->setGroup(mGroup);
00336 config->writeEntry(mName,*mReference);
00337 }
00338
00339 void KPrefsItemIntList::readConfig(KConfig *config)
00340 {
00341 config->setGroup(mGroup);
00342 *mReference = config->readIntListEntry(mName);
00343 }
00344
00345
00346 QString *KPrefs::mCurrentGroup = 0;
00347
00348 KPrefs::KPrefs(const QString &configname)
00349 {
00350 if (!configname.isEmpty()) {
00351 mConfig = new KConfig(locateLocal("config",configname));
00352 } else {
00353 mConfig = KGlobal::config();
00354 }
00355
00356 mItems.setAutoDelete(true);
00357
00358
00359 if (mCurrentGroup == 0) mCurrentGroup = new QString("No Group");
00360 }
00361
00362 KPrefs::~KPrefs()
00363 {
00364 if (mConfig != KGlobal::config()) {
00365 delete mConfig;
00366 }
00367 }
00368
00369 void KPrefs::setCurrentGroup(const QString &group)
00370 {
00371 if (mCurrentGroup) delete mCurrentGroup;
00372 mCurrentGroup = new QString(group);
00373 }
00374
00375 KConfig *KPrefs::config() const
00376 {
00377 return mConfig;
00378 }
00379
00380 void KPrefs::setDefaults()
00381 {
00382 KPrefsItem *item;
00383 for(item = mItems.first();item;item = mItems.next()) {
00384 item->setDefault();
00385 }
00386
00387 usrSetDefaults();
00388 }
00389
00390 void KPrefs::readConfig()
00391 {
00392 KPrefsItem *item;
00393 for(item = mItems.first();item;item = mItems.next()) {
00394 item->readConfig(mConfig);
00395 }
00396
00397 usrReadConfig();
00398 }
00399
00400 void KPrefs::writeConfig()
00401 {
00402 KPrefsItem *item;
00403 for(item = mItems.first();item;item = mItems.next()) {
00404 item->writeConfig(mConfig);
00405 }
00406
00407 usrWriteConfig();
00408
00409 mConfig->sync();
00410 }
00411
00412
00413 void KPrefs::addItem(KPrefsItem *item)
00414 {
00415 mItems.append(item);
00416 }
00417
00418 void KPrefs::addItemBool(const QString &key,bool *reference,bool defaultValue)
00419 {
00420 addItem(new KPrefsItemBool(*mCurrentGroup,key,reference,defaultValue));
00421 }
00422
00423 void KPrefs::addItemInt(const QString &key,int *reference,int defaultValue)
00424 {
00425 addItem(new KPrefsItemInt(*mCurrentGroup,key,reference,defaultValue));
00426 }
00427
00428 void KPrefs::addItemColor(const QString &key,QColor *reference,const QColor &defaultValue)
00429 {
00430 addItem(new KPrefsItemColor(*mCurrentGroup,key,reference,defaultValue));
00431 }
00432
00433 void KPrefs::addItemFont(const QString &key,QFont *reference,const QFont &defaultValue)
00434 {
00435 addItem(new KPrefsItemFont(*mCurrentGroup,key,reference,defaultValue));
00436 }
00437
00438 void KPrefs::addItemString(const QString &key,QString *reference,const QString &defaultValue)
00439 {
00440 addItem(new KPrefsItemString(*mCurrentGroup,key,reference,defaultValue,false));
00441 }
00442
00443 void KPrefs::addItemPassword(const QString &key,QString *reference,const QString &defaultValue)
00444 {
00445 addItem(new KPrefsItemString(*mCurrentGroup,key,reference,defaultValue,true));
00446 }
00447
00448 void KPrefs::addItemStringList(const QString &key,QStringList *reference,
00449 const QStringList &defaultValue)
00450 {
00451 addItem(new KPrefsItemStringList(*mCurrentGroup,key,reference,defaultValue));
00452 }
00453
00454 void KPrefs::addItemIntList(const QString &key,QValueList<int> *reference,
00455 const QValueList<int> &defaultValue)
00456 {
00457 addItem(new KPrefsItemIntList(*mCurrentGroup,key,reference,defaultValue));
00458 }