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()
{
}