insilmaril@0: #include insilmaril@3: #include insilmaril@0: #include "settings.h" insilmaril@3: #include "file.h" insilmaril@0: insilmaril@0: using namespace std; insilmaril@3: insilmaril@3: ///////////////////////////////////////////////////////////////// insilmaril@3: // SimpleSettings insilmaril@3: ///////////////////////////////////////////////////////////////// insilmaril@3: SimpleSettings::SimpleSettings() insilmaril@3: { insilmaril@3: clear(); insilmaril@3: } insilmaril@3: insilmaril@3: SimpleSettings::~SimpleSettings() insilmaril@3: { insilmaril@3: } insilmaril@3: insilmaril@3: void SimpleSettings::clear() insilmaril@3: { insilmaril@3: keylist.clear(); insilmaril@3: valuelist.clear(); insilmaril@3: } insilmaril@3: insilmaril@3: void SimpleSettings::readSettings (const QString &path) insilmaril@3: { insilmaril@3: QString s; insilmaril@3: if (!loadStringFromDisk(path,s)) insilmaril@3: { insilmaril@3: qWarning ("SimpleSettings::readSettings() Couldn't read "+path); insilmaril@3: return; insilmaril@3: } insilmaril@3: QStringList lines; insilmaril@3: lines=QStringList::split (QRegExp("\n"),s,false); insilmaril@3: int i; insilmaril@3: QStringList::Iterator it=lines.begin(); insilmaril@3: while (it !=lines.end() ) insilmaril@3: { insilmaril@3: i=(*it).find("=",0); insilmaril@3: keylist.append((*it).left(i)); insilmaril@3: valuelist.append((*it).right((*it).length()-i-1)); insilmaril@3: it++; insilmaril@3: } insilmaril@3: } insilmaril@3: insilmaril@3: void SimpleSettings::writeSettings (const QString &path) insilmaril@3: { insilmaril@3: QString s; insilmaril@3: QStringList::Iterator itk=keylist.begin(); insilmaril@3: QStringList::Iterator itv=valuelist.begin(); insilmaril@3: insilmaril@3: // First search for value in settings saved in map insilmaril@3: while (itk !=keylist.end() ) insilmaril@3: { insilmaril@3: s+=*itk+"="+*itv+"\n"; insilmaril@3: itk++; insilmaril@3: itv++; insilmaril@3: } insilmaril@3: if (!saveStringToDisk(path,s)) insilmaril@3: qWarning ("SimpleSettings::writeSettings() Couldn't write "+path); insilmaril@3: } insilmaril@3: insilmaril@3: QString SimpleSettings::readEntry (const QString &key) insilmaril@3: { insilmaril@3: QStringList::Iterator itk=keylist.begin(); insilmaril@3: QStringList::Iterator itv=valuelist.begin(); insilmaril@3: insilmaril@3: // First search for value in settings saved in map insilmaril@3: while (itk !=keylist.end() ) insilmaril@3: { insilmaril@3: if (*itk == key) insilmaril@3: return *itv; insilmaril@3: itk++; insilmaril@3: itv++; insilmaril@3: } insilmaril@3: qWarning ("SimpleSettings::readEntry() Couldn't find key "+key); insilmaril@3: return ""; insilmaril@3: } insilmaril@3: insilmaril@3: void SimpleSettings::setEntry (const QString &key, const QString &value) insilmaril@3: { insilmaril@3: QStringList::Iterator itk=keylist.begin(); insilmaril@3: QStringList::Iterator itv=valuelist.begin(); insilmaril@3: insilmaril@3: if (!key.isEmpty() ) insilmaril@3: { insilmaril@3: // Search for existing entry first insilmaril@3: while (itk !=keylist.end() ) insilmaril@3: { insilmaril@3: if (*itk == key) insilmaril@3: { insilmaril@3: if (!value.isEmpty()) insilmaril@3: *itv=value; insilmaril@3: else insilmaril@3: *itv=""; insilmaril@3: *itv=value; insilmaril@3: return; insilmaril@3: } insilmaril@3: itk++; insilmaril@3: itv++; insilmaril@3: } insilmaril@3: insilmaril@3: // If no entry exists, append a new one insilmaril@3: keylist.append (key); insilmaril@3: valuelist.append (value); insilmaril@3: } insilmaril@3: } insilmaril@3: insilmaril@3: insilmaril@3: insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: // Settings insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: Settings::Settings() insilmaril@0: { insilmaril@0: clear(); insilmaril@0: } insilmaril@0: insilmaril@3: Settings::Settings(const QString & organization, const QString & application ):QSettings (organization,application) insilmaril@3: { insilmaril@3: clear(); insilmaril@3: } insilmaril@3: 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@0: QString Settings::getXMLData (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: