insilmaril@0: #include insilmaril@0: #include "settings.h" insilmaril@0: #include "misc.h" insilmaril@0: insilmaril@0: using namespace std; insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: // Settings insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: Settings::Settings() insilmaril@0: { insilmaril@0: clear(); insilmaril@0: } insilmaril@0: 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: insilmaril@0: void Settings::write() 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: itp++; insilmaril@0: itk++; insilmaril@0: itv++; insilmaril@0: } insilmaril@0: } insilmaril@0: