Source Code (Use browser search to find items of interest.)
Class Index
kikbd'KObjectConfig (./kdebase/kikbd/kobjconf.h:149)
class KObjectConfig: public QObject {
Q_OBJECT
protected:
KConfigBase *config;
QString configFile;
QStrList groups;
QList<KConfigObject> entries;
bool deleteConfig;
bool readOnly;
short configType;
int version;
protected:
void init();
void initConfig();
public:
enum {External, AppRc, UserFromSystemRc, AppData, File};
/** Construct with existing KConfigBase object.
@param config KConfigBase class, for example returned by kapp->getConfig()
@param autoDelete if TRUE class pointed by config will be deleted at destruction time
*/
KObjectConfig(KConfigBase* config, bool autoDelete = FALSE);
/** Constructor
@param type if AppRc, name is ignored and Application rc file is used
(user or if does not exists, system).
if File, name is absolute name of opened file.
if UserFromSystemRc, like AppRc, but if User rc file does not exists,
it will be created with as copy of system rc file or from compiled
in defaults and signal newUserRc will be emited.
if AppData, name is the file name relative to the Application share directory
(~/.kde/share/apps/<app name> or $KDEDIR/.share/apps/<app name>).
@param name this interpreted acording to the value of type
*/
KObjectConfig(int type = AppRc, const char *name = 0L, bool readOnly = TRUE);
~KObjectConfig();
public:
KConfigBase* getConfig() {return config;}
/**
set current Group for register object
@param pGroup The name of the group
*/
int setGroup(const QString& pGroup);
/** Return current group
*/
QString group();
/**
Load all registered objects from configuration file.
Usualy you do not need to reimplement this in the child class.
*/
virtual void loadConfig();
/**
Write back all dirty objects to configuration file.
Usualy you do not need to reimplement this in the child class.
*/
virtual void saveConfig();
/**
Register object in current group. This object will be deleted
automatically at destruction time.
@param obj object created by new
*/
void registerObject(KConfigObject* obj);
/**
Find previously registered object by looking for a data reference.
@param data pointer to data registered with one of object
*/
KConfigObject* find(const void* data) const;
/**
Create widget to interactively change object value.
@param data address of variable registered with object
@param parent optional parent widget
@param label optional text label
@param tip if not NULL locale translated QToolTip will be set
*/
QWidget* createWidget(const void* data, QWidget* parent=0L,
const char* label=0, const QString& tip=QString::null);
/**
This set config file version and enables version control
(disabled by default). Version number follow the standart convension:
major number before dot, minor number after dot.
*/
void setVersion(int v) {version = v;}
int getVersion() const {return version;}
friend KObjectConfig& operator<<(KObjectConfig& config, KConfigObject* obj) {
return config.registerObject(obj), config;
}
friend KObjectConfig& operator<<(KObjectConfig& config, int) {
return config;
}
static QStrList separate(const QString&, char sep=',');
public slots:
void objectChanged();
/** Usualy this called to update widgets of all objects.
*/
void markDataChanged();
signals:
/** This signal emited when new user rc file created by using UserFromSystemRc
*/
void newUserRcFile();
void noUserRcFile(const QString&);
/** This signal emited when where is no user Application rc file
*/
/** This signal emited when where is no system Application rc file
*/
void noSystemRcFile(const QString&);
/** This signal emited when where is no user Application data file
*/
void noUserDataFile(const QString&);
/** This signal emited when where is no system Application data file
*/
void noSystemDataFile(const QString&);
/** This signal is emited when version control enabled by setVersion and
readed file major version older then expected. Only integer part compared
@param fileVersion version of readed configuration
*/
// void olderVersion(float fileVersion);
/** This signal is emited when version control enabled by setVersion and
readed file version newer then expected. Only integer part compared
@param fileVersion version of readed configuration
*/
// void newerVersion(float fileVersion);
/** This signal is emited when version control enabled by setVersion and
the one read file version is not the expected on.
Only integer part compared
@param fileVersion version of read configuration
*/
void wrongVersion(int fileVersion);
/** Object who whants to know about configuration changes should
connect to this signal
*/
void dataChanged();
};
kikbd'KObjectConfig::separate() (./kdebase/kikbd/kobjconf.cpp:92)
QStrList KObjectConfig::separate(const QString& string, char sep)
{
QStrList list;
int i, j;for(i=0;j=string.find(sep, i), j != -1; i=j+1)
list.append(string.mid(i, j-i));
QString last = string.mid(i, 1000);
if(!last.isEmpty()) list.append(last);
return list;
}
kikbd'KObjectConfig::KObjectConfig() (./kdebase/kikbd/kobjconf.cpp:101)
KObjectConfig::KObjectConfig(KConfigBase* config, bool autoDelete)
{
init();
deleteConfig = autoDelete;
config = config;
configType = External;
version = -1;
readOnly = FALSE;
}
kikbd'KObjectConfig::KObjectConfig() (./kdebase/kikbd/kobjconf.cpp:110)
KObjectConfig::KObjectConfig(int type, const char* name, bool rdOnly)
{
init();
configType = type;
configFile = name;
//version = -1; //CT 07Jan1999 - fix for segfault on Alphas
readOnly = rdOnly;
}
kikbd'KObjectConfig::~KObjectConfig() (./kdebase/kikbd/kobjconf.cpp:118)
KObjectConfig::~KObjectConfig(){if(deleteConfig && config) delete config;}
kikbd'KObjectConfig::init() (./kdebase/kikbd/kobjconf.cpp:119)
void KObjectConfig::init()
{
groups.setAutoDelete(TRUE);
entries.setAutoDelete(TRUE);
config = 0L;
}
kikbd'KObjectConfig::initConfig() (./kdebase/kikbd/kobjconf.cpp:130)
void KObjectConfig::initConfig()
{
if(config == 0L && configType != External) {
QString file;
switch(configType) {
case AppRc :
configFile = KGlobal::dirs()->resourceDirs("config").last() + kapp->name() + "rc";
if(!nonzeroFile(configFile)) {
emit noUserRcFile(configFile);
file = KGlobal::dirs()->resourceDirs("config").first() + kapp->name() + "rc";
if(nonzeroFile(file)) configFile = file; else emit noSystemRcFile(file);
}
break;
case UserFromSystemRc :
configFile = KGlobal::dirs()->resourceDirs("config").last() + kapp->name() + "rc";
if(!nonzeroFile(configFile)) {
file = KGlobal::dirs()->resourceDirs("config").first() + kapp->name() + "rc";
if(nonzeroFile(file)) {
//--- system file exists, reading
config = new KSimpleConfig(file, TRUE);
loadConfig();
delete config;
}
//--- save new one
config = new KSimpleConfig(configFile);
saveConfig();
emit newUserRcFile();
}
break;
case AppData :
file = configFile;
configFile = locateLocal("appdata", file);
if(!QFile::exists(configFile)) {
emit noUserDataFile(configFile);
file = locate("appdata", file);
QFileInfo info(file);
if(info.isFile()) {
configFile = file;
if(!readOnly) readOnly = ! info.isWritable();
} else {
configFile = QString::null;
emit noSystemDataFile(file);
}
}
break;
case File : break;
default : ASSERT("KObjectConfig: bad type in constructor");
}
if(config == 0L && !configFile.isNull())
config = new KSimpleConfig(configFile, readOnly);
deleteConfig = TRUE;
}
}
/*
* set current configuration group
*/
kikbd'KObjectConfig::setGroup() (./kdebase/kikbd/kobjconf.cpp:187)
int KObjectConfig::setGroup(const QString& pGroup)
{
if(groups.find(pGroup) == -1) groups.append(pGroup);
return 0;
}
kikbd'KObjectConfig::group() (./kdebase/kikbd/kobjconf.cpp:192)
QString KObjectConfig::group()
{
return groups.current();
}
kikbd'KObjectConfig::registerObject() (./kdebase/kikbd/kobjconf.cpp:196)
void KObjectConfig::registerObject(KConfigObject* obj)
{
obj->group = groups.current();
entries.append(obj);
}
kikbd'KObjectConfig::loadConfig() (./kdebase/kikbd/kobjconf.cpp:201)
void KObjectConfig::loadConfig()
{
initConfig();
if(config == 0L) return;
unsigned i;for(i=0; i<groups.count(); i++) {
config->setGroup(groups.at(i));
unsigned j;for(j=0; j<entries.count(); j++)
if(groups.at(i) == entries.at(j)->group) {
entries.at(j)->readObject(this);
}
}
/*CT 17Jan1999 - completely unneeded for the moment and very cumbersome
take it out
if(version >= 0) {
config->setGroup(configGroup);
int newversion = config->readNumEntry(configVersion, 1);
if (newversion != version)
emit wrongVersion(newversion - version);
}
*/
}
kikbd'KObjectConfig::saveConfig() (./kdebase/kikbd/kobjconf.cpp:222)
void KObjectConfig::saveConfig()
{
initConfig();
if(config == 0L) return;
if(readOnly) {
ASSERT("KObjectConfig: object read only");
return;
}
unsigned i;for(i=0; i<groups.count(); i++) {
config->setGroup(groups.at(i));
unsigned j;for(j=0; j<entries.count(); j++)
if(groups.at(i) == entries.at(j)->group)
entries.at(j)->writeObject(this);
}
if(version >= 0) {
QString str;
str.sprintf("%2.1f", version);
config->setGroup(configGroup);
config->writeEntry(configVersion, str);
}
config->sync();
}
kikbd'KObjectConfig::find() (./kdebase/kikbd/kobjconf.cpp:244)
KConfigObject* KObjectConfig::find(const void* data) const
{
// we need this complicated expression because we know that
// find does not make sensible changes
QList<KConfigObject> &entries = *(QList<KConfigObject>*)&this->entries;
unsigned i;for(i=0; i<entries.count(); i++)
if(entries.at(i)->data == data)
return entries.at(i);
return 0L;
}
/**
supported widgets
*/
kikbd'KObjectConfig::createWidget() (./kdebase/kikbd/kobjconf.cpp:257)
QWidget* KObjectConfig::createWidget(const void* data, QWidget* parent,
const char* label, const QString& tip)
{
KConfigObject *obj = find(data);
if(obj) {
QWidget* widget = obj->createWidget(parent, label);
if (!tip.isNull()) QToolTip::add(widget, tip);
return widget;
}
return 0L;
}
kikbd'KObjectConfig::markDataChanged() (./kdebase/kikbd/kobjconf.cpp:268)
void KObjectConfig::markDataChanged()
{
unsigned i;for(i=0; i<entries.count(); i++)
emit entries.at(i)->dataChanged();
emit dataChanged();
}
kikbd'KObjectConfig::objectChanged() (./kdebase/kikbd/kobjconf.cpp:274)
void KObjectConfig::objectChanged()
{
}