insilmaril@0: #include insilmaril@55: #include insilmaril@0: #include "settings.h" insilmaril@55: #include "file.h" insilmaril@0: insilmaril@55: ///////////////////////////////////////////////////////////////// insilmaril@55: // SimpleSettings insilmaril@55: ///////////////////////////////////////////////////////////////// insilmaril@55: SimpleSettings::SimpleSettings() insilmaril@55: { insilmaril@55: clear(); insilmaril@55: } insilmaril@55: insilmaril@55: SimpleSettings::~SimpleSettings() insilmaril@55: { insilmaril@55: } insilmaril@55: insilmaril@55: void SimpleSettings::clear() insilmaril@55: { insilmaril@55: keylist.clear(); insilmaril@55: valuelist.clear(); insilmaril@55: } insilmaril@55: insilmaril@55: void SimpleSettings::readSettings (const QString &path) insilmaril@55: { insilmaril@55: QString s; insilmaril@55: if (!loadStringFromDisk(path,s)) insilmaril@55: { insilmaril@55: qWarning ("SimpleSettings::readSettings() Couldn't read "+path); insilmaril@55: return; insilmaril@55: } insilmaril@55: QStringList lines; insilmaril@55: lines=QStringList::split (QRegExp("\n"),s,false); insilmaril@55: int i; insilmaril@55: QStringList::Iterator it=lines.begin(); insilmaril@55: while (it !=lines.end() ) insilmaril@55: { insilmaril@55: i=(*it).find("=",0); insilmaril@55: keylist.append((*it).left(i)); insilmaril@55: valuelist.append((*it).right((*it).length()-i-1)); insilmaril@55: it++; insilmaril@55: } insilmaril@55: } insilmaril@55: insilmaril@55: void SimpleSettings::writeSettings (const QString &path) insilmaril@55: { insilmaril@55: QString s; insilmaril@55: QStringList::Iterator itk=keylist.begin(); insilmaril@55: QStringList::Iterator itv=valuelist.begin(); insilmaril@55: insilmaril@55: // First search for value in settings saved in map insilmaril@55: while (itk !=keylist.end() ) insilmaril@55: { insilmaril@55: s+=*itk+"="+*itv+"\n"; insilmaril@55: itk++; insilmaril@55: itv++; insilmaril@55: } insilmaril@55: if (!saveStringToDisk(path,s)) insilmaril@55: qWarning ("SimpleSettings::writeSettings() Couldn't write "+path); insilmaril@55: } insilmaril@55: insilmaril@55: /* insilmaril@55: QString SimpleSettings::readEntry (const QString &key) insilmaril@55: { insilmaril@55: QStringList::Iterator itk=keylist.begin(); insilmaril@55: QStringList::Iterator itv=valuelist.begin(); insilmaril@55: insilmaril@55: // First search for value in settings saved in map insilmaril@55: while (itk !=keylist.end() ) insilmaril@55: { insilmaril@55: if (*itk == key) insilmaril@55: return *itv; insilmaril@55: itk++; insilmaril@55: itv++; insilmaril@55: } insilmaril@55: qWarning ("SimpleSettings::readEntry() Couldn't find key "+key); insilmaril@55: return ""; insilmaril@55: } insilmaril@55: */ insilmaril@55: insilmaril@55: QString SimpleSettings::readEntry (const QString &key, const QString &def) insilmaril@55: { insilmaril@55: QStringList::Iterator itk=keylist.begin(); insilmaril@55: QStringList::Iterator itv=valuelist.begin(); insilmaril@55: insilmaril@55: // First search for value in settings saved in map insilmaril@55: while (itk !=keylist.end() ) insilmaril@55: { insilmaril@55: if (*itk == key) insilmaril@55: return *itv; insilmaril@55: itk++; insilmaril@55: itv++; insilmaril@55: } insilmaril@55: return def; insilmaril@55: } insilmaril@55: insilmaril@55: int SimpleSettings::readNumEntry (const QString &key, const int &def) insilmaril@55: { insilmaril@55: QStringList::Iterator itk=keylist.begin(); insilmaril@55: QStringList::Iterator itv=valuelist.begin(); insilmaril@55: insilmaril@55: // First search for value in settings saved in map insilmaril@55: while (itk !=keylist.end() ) insilmaril@55: { insilmaril@55: if (*itk == key) insilmaril@55: { insilmaril@55: bool ok; insilmaril@55: int i=(*itv).toInt(&ok,10); insilmaril@55: if (ok) insilmaril@55: return i; insilmaril@55: else insilmaril@55: return def; insilmaril@55: } insilmaril@55: itk++; insilmaril@55: itv++; insilmaril@55: } insilmaril@55: return def; insilmaril@55: } insilmaril@55: insilmaril@55: void SimpleSettings::setEntry (const QString &key, const QString &value) insilmaril@55: { insilmaril@55: QStringList::Iterator itk=keylist.begin(); insilmaril@55: QStringList::Iterator itv=valuelist.begin(); insilmaril@55: insilmaril@55: if (!key.isEmpty() ) insilmaril@55: { insilmaril@55: // Search for existing entry first insilmaril@55: while (itk !=keylist.end() ) insilmaril@55: { insilmaril@55: if (*itk == key) insilmaril@55: { insilmaril@55: if (!value.isEmpty()) insilmaril@55: *itv=value; insilmaril@55: else insilmaril@55: *itv=""; insilmaril@55: *itv=value; insilmaril@55: return; insilmaril@55: } insilmaril@55: itk++; insilmaril@55: itv++; insilmaril@55: } insilmaril@55: insilmaril@55: // If no entry exists, append a new one insilmaril@55: keylist.append (key); insilmaril@55: valuelist.append (value); insilmaril@55: } insilmaril@55: } insilmaril@55: insilmaril@55: insilmaril@55: insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: // Settings insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: Settings::Settings() insilmaril@0: { insilmaril@0: clear(); insilmaril@0: } insilmaril@0: insilmaril@55: Settings::Settings(const QString & organization, const QString & application ):QSettings (organization,application) insilmaril@55: { insilmaril@55: clear(); insilmaril@55: } insilmaril@55: insilmaril@0: Settings::~Settings() insilmaril@0: { insilmaril@0: } insilmaril@0: insilmaril@0: void Settings::clear() insilmaril@0: { insilmaril@0: pathlist.clear(); insilmaril@0: keylist.clear(); insilmaril@0: valuelist.clear(); insilmaril@0: } insilmaril@0: insilmaril@0: void Settings::clearLocal(const QString &s) insilmaril@0: { insilmaril@0: QStringList::Iterator itp=pathlist.begin(); insilmaril@0: QStringList::Iterator itk=keylist.begin(); insilmaril@0: QStringList::Iterator itv=valuelist.begin(); insilmaril@0: insilmaril@0: while (itp !=pathlist.end() ) insilmaril@0: { insilmaril@0: if ((*itk).startsWith (s)) insilmaril@0: { insilmaril@0: itp=pathlist.remove (itp); insilmaril@0: itk=keylist.remove (itk); insilmaril@0: itv=valuelist.remove (itv); insilmaril@0: } else insilmaril@0: { insilmaril@0: itp++; insilmaril@0: itk++; insilmaril@0: itv++; insilmaril@0: } insilmaril@0: } insilmaril@0: } insilmaril@0: insilmaril@0: QString Settings::readLocalEntry ( const QString &fpath, const QString & key, const QString & def = QString::null ) insilmaril@0: { insilmaril@0: QStringList::Iterator itp=pathlist.begin(); insilmaril@0: QStringList::Iterator itk=keylist.begin(); insilmaril@0: QStringList::Iterator itv=valuelist.begin(); insilmaril@0: insilmaril@0: // First search for value in settings saved in map insilmaril@0: while (itp !=pathlist.end() ) insilmaril@0: { insilmaril@0: if (*itp == fpath && *itk == key) insilmaril@0: return *itv; insilmaril@0: itp++; insilmaril@0: itk++; insilmaril@0: itv++; insilmaril@0: } insilmaril@0: insilmaril@0: // Fall back to global vym settings insilmaril@0: bool ok; insilmaril@0: return readEntry (key,def, &ok); insilmaril@0: } insilmaril@0: insilmaril@0: void Settings::setLocalEntry (const QString &fpath, const QString &key, const QString &value) insilmaril@0: { insilmaril@0: QStringList::Iterator itp=pathlist.begin(); insilmaril@0: QStringList::Iterator itk=keylist.begin(); insilmaril@0: QStringList::Iterator itv=valuelist.begin(); insilmaril@0: insilmaril@0: if (!fpath.isEmpty() && !key.isEmpty() && !value.isEmpty() ) insilmaril@0: { insilmaril@0: // Search for existing entry first insilmaril@0: while (itp !=pathlist.end() ) insilmaril@0: { insilmaril@0: if (*itp == fpath && *itk == key) insilmaril@0: { insilmaril@0: *itv=value; insilmaril@0: return; insilmaril@0: } insilmaril@0: itp++; insilmaril@0: itk++; insilmaril@0: itv++; insilmaril@0: } insilmaril@0: insilmaril@0: // If no entry exists, append a new one insilmaril@0: pathlist.append (fpath); insilmaril@0: keylist.append (key); insilmaril@0: valuelist.append (value); insilmaril@0: } insilmaril@0: } insilmaril@0: insilmaril@55: QString Settings::getDataXML (const QString &fpath) insilmaril@0: { insilmaril@0: QString s; insilmaril@0: QStringList::Iterator itp=pathlist.begin(); insilmaril@0: QStringList::Iterator itk=keylist.begin(); insilmaril@0: QStringList::Iterator itv=valuelist.begin(); insilmaril@0: insilmaril@0: while (itp !=pathlist.end() ) insilmaril@0: { insilmaril@0: if (*itp == fpath ) insilmaril@0: if (!(*itv).isEmpty()) insilmaril@0: s+=singleElement ( insilmaril@0: "setting", insilmaril@0: attribut ("key",*itk) insilmaril@0: +attribut ("value",*itv) insilmaril@0: )+"\n"; insilmaril@0: itp++; insilmaril@0: itk++; insilmaril@0: itv++; insilmaril@0: } insilmaril@0: return s; insilmaril@0: } insilmaril@0: