From feda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Fri, 27 Jul 2018 23:51:12 -0400 Subject: New upstream version 3.2.1+dfsg1 --- .../coreSQLiteStudio/config_builder/cfgmain.cpp | 54 ++++++++++++++++++++++ .../coreSQLiteStudio/config_builder/cfgmain.h | 15 ++++++ 2 files changed, 69 insertions(+) (limited to 'SQLiteStudio3/coreSQLiteStudio/config_builder') diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp index fb7d199..0c7295a 100644 --- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.cpp @@ -2,6 +2,7 @@ #include "config_builder/cfgcategory.h" #include "config_builder/cfgentry.h" #include "common/global.h" +#include CfgMain* lastCreatedCfgMain = nullptr; QList* CfgMain::instances = nullptr; @@ -153,6 +154,39 @@ QList CfgMain::getEntries() const return entries; } +void CfgMain::setValuesFromQVariant(const QVariant& cfgMainHash) +{ + QHash mainHash = cfgMainHash.toHash(); + if (mainHash.isEmpty()) + return; + + QHash::const_iterator mainIt = mainHash.begin(); + if (mainIt.key() != name) + { + qWarning() << "Tried to set CfgMain values from QVariant which does not have such main in its registry."; + return; + } + + QHash categoriesHash = mainIt.value().toHash(); + QHash entriesHash; + QHash entries; + for (QHash::const_iterator categoryIt = childs.begin(); categoryIt != childs.end(); categoryIt++) + { + if (!categoriesHash.contains(categoryIt.key())) + continue; + + entriesHash = categoriesHash[categoryIt.key()].toHash(); + entries = categoryIt.value()->getEntries(); + for (QHash::const_iterator entryIt = entries.begin(); entryIt != entries.end(); entryIt++) + { + if (!entriesHash.contains(entryIt.key())) + continue; + + entryIt.value()->set(entriesHash[entryIt.key()]); + } + } +} + bool CfgMain::isPersistable() const { return persistable; @@ -173,6 +207,26 @@ QString CfgMain::getTitle() const return title; } +QVariant CfgMain::toQVariant() const +{ + QHash categoriesVariant; + QHash entriesVariant; + QHash entries; + for (QHash::const_iterator categoryIt = childs.begin(); categoryIt != childs.end(); categoryIt++) + { + entries = categoryIt.value()->getEntries(); + entriesVariant.clear(); + for (QHash::const_iterator entryIt = entries.begin(); entryIt != entries.end(); entryIt++) + entriesVariant[entryIt.key()] = entryIt.value()->get(); + + categoriesVariant[categoryIt.key()] = entriesVariant; + } + + QHash mainVariant; + mainVariant[name] = categoriesVariant; + return mainVariant; +} + CfgMain::operator CfgMain*() { return this; diff --git a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h index ea11c6d..4e84bef 100644 --- a/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h +++ b/SQLiteStudio3/coreSQLiteStudio/config_builder/cfgmain.h @@ -37,12 +37,27 @@ class API_EXPORT CfgMain QStringList getPaths() const; QList getEntries() const; + /** + * @brief Accepts QVariant produced by toQVariant(). + * + * This method assumes that the QVariant is actually a multi-level QHash + * produced by toQVariant() method. + * It sets all values recursivly using values from provided QVariant. + */ + void setValuesFromQVariant(const QVariant& cfgMainHash); + bool isPersistable() const; QString getName() const; const char* getMetaName() const; QString getTitle() const; operator CfgMain*(); + /** + * @brief Serializes this CfgMain to recursive QHash. + * @return Recursive QHash, where top level has one entry (name of CfgMain), then next level has keys as CfgCategory names, and last one has keys as CfgEntry names. + */ + QVariant toQVariant() const; + private: QString name; const char* metaName; -- cgit v1.2.3