aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/configmapper.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2016-06-13 18:42:57 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2016-06-13 18:42:57 -0400
commit65d5f68cc6dc81799c5a5d90400a2c1f0dd02547 (patch)
tree6f245ba901b87ef42fed69965aea22f5eea6b590 /SQLiteStudio3/guiSQLiteStudio/configmapper.cpp
parentaeb6bad01630d325a4e768e798a7a6d44e18fdaf (diff)
parent5d9314f134ddd3dc4c853e398ac90ba247fb2e4f (diff)
Merge tag 'upstream/3.1.0'
Upstream version 3.1.0 # gpg: Signature made Mon 13 Jun 2016 06:42:54 PM EDT using RSA key ID EBE9BD91 # gpg: Good signature from "Unit 193 <unit193@gmail.com>" # gpg: aka "Unit 193 <unit193@ninthfloor.org>" # gpg: aka "Unit 193 <unit193@ubuntu.com>" # gpg: aka "Unit 193 <unit193@ninthfloor.com>"
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/configmapper.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/configmapper.cpp112
1 files changed, 108 insertions, 4 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/configmapper.cpp b/SQLiteStudio3/guiSQLiteStudio/configmapper.cpp
index da1ff44..8543d37 100644
--- a/SQLiteStudio3/guiSQLiteStudio/configmapper.cpp
+++ b/SQLiteStudio3/guiSQLiteStudio/configmapper.cpp
@@ -92,7 +92,6 @@ ConfigMapper::ConfigMapper(const QList<CfgMain*> cfgMain) :
{
}
-
void ConfigMapper::applyCommonConfigToWidget(QWidget *widget, const QVariant &value, CfgEntry* cfgEntry)
{
APPLY_CFG(widget, value, QCheckBox, setChecked, bool);
@@ -221,6 +220,20 @@ QVariant ConfigMapper::getConfigValueFromWidget(QWidget* widget, CfgEntry* key)
return value;
}
+QVariant ConfigMapper::getConfigValueFromWidget(QWidget* widget)
+{
+ QString keyStr = widget->property(CFG_MODEL_PROPERTY).toString();
+ QHash<QString, CfgEntry*> allConfigEntries = getAllConfigEntries();
+ if (!allConfigEntries.contains(keyStr))
+ {
+ qWarning() << "Asked for config value from widget" << widget << "but it's config entry key was not found:" << keyStr;
+ return QVariant();
+ }
+
+ CfgEntry* key = allConfigEntries[keyStr];
+ return getConfigValueFromWidget(widget, key);
+}
+
void ConfigMapper::loadToWidget(QWidget *topLevelWidget)
{
QHash<QString, CfgEntry *> allConfigEntries = getAllConfigEntries();
@@ -231,10 +244,13 @@ void ConfigMapper::loadToWidget(QWidget *topLevelWidget)
config = CFG->getAll();
updatingEntry = true;
- foreach (QWidget* widget, allConfigWidgets)
+ for (QWidget* widget : allConfigWidgets)
applyConfigToWidget(widget, allConfigEntries, config);
updatingEntry = false;
+
+ for (QWidget* widget : allConfigWidgets)
+ handleDependencySettings(widget);
}
void ConfigMapper::loadToWidget(CfgEntry* config, QWidget* widget)
@@ -247,6 +263,8 @@ void ConfigMapper::loadToWidget(CfgEntry* config, QWidget* widget)
applyCommonConfigToWidget(widget, configValue, config);
updatingEntry = false;
+
+ handleDependencySettings(widget);
}
void ConfigMapper::saveFromWidget(QWidget *widget, bool noTransaction)
@@ -310,6 +328,20 @@ void ConfigMapper::applyConfigToWidget(QWidget* widget, CfgEntry* cfgEntry, cons
applyCommonConfigToWidget(widget, configValue, cfgEntry);
}
+void ConfigMapper::applyConfigDefaultValueToWidget(QWidget* widget)
+{
+ QString keyStr = widget->property(CFG_MODEL_PROPERTY).toString();
+ QHash<QString, CfgEntry*> allConfigEntries = getAllConfigEntries();
+ if (!allConfigEntries.contains(keyStr))
+ {
+ qWarning() << "Asked to apply config value to widget" << widget << "but it's config entry key was not found:" << keyStr;
+ return;
+ }
+
+ CfgEntry* key = allConfigEntries[keyStr];
+ applyConfigToWidget(widget, key, key->getDefultValue());
+}
+
void ConfigMapper::handleSpecialWidgets(QWidget* widget, const QHash<QString, CfgEntry*>& allConfigEntries)
{
handleConfigComboBox(widget, allConfigEntries);
@@ -474,7 +506,7 @@ QList<QWidget*> ConfigMapper::getAllConfigWidgets(QWidget *parent)
foreach (QObject* obj, parent->children())
{
widget = qobject_cast<QWidget*>(obj);
- if (!widget)
+ if (!widget || widgetsToIgnore.contains(widget))
continue;
results += getAllConfigWidgets(widget);
@@ -486,6 +518,60 @@ QList<QWidget*> ConfigMapper::getAllConfigWidgets(QWidget *parent)
return results;
}
+void ConfigMapper::handleDependencySettings(QWidget* widget)
+{
+ QString boolDependency = widget->property(CFG_BOOL_DEPENDENCY_PROPERTY).toString();
+ if (!boolDependency.isNull())
+ {
+ handleBoolDependencySettings(boolDependency, widget);
+ return;
+ }
+}
+
+void ConfigMapper::handleBoolDependencySettings(const QString& boolDependency, QWidget* widget)
+{
+ QHash<QString, CfgEntry*> allConfigEntries = getAllConfigEntries();
+ if (!allConfigEntries.contains(boolDependency))
+ {
+ qWarning() << "Config widget" << widget->objectName() << "has dependency defined for" << boolDependency << "but that dependency config entry cannot be found.";
+ return;
+ }
+
+ CfgEntry* cfg = allConfigEntries[boolDependency];
+ QVariant cfgValue = cfg->get();
+ if (cfgValue.userType() != QVariant::Bool)
+ {
+ qWarning() << "Config widget" << widget->objectName() << "has bool dependency defined for" << boolDependency << "but that dependency has different type:" << cfgValue.userType();
+ return;
+ }
+
+ bool value = cfgValue.toBool();
+ widget->setEnabled(value);
+
+ QWidget* dependWidget = configEntryToWidgets[cfg];
+ boolDependencyToDependingWidget[dependWidget] = widget;
+}
+
+void ConfigMapper::handleDependencyChange(QWidget* widget)
+{
+ if (handleBoolDependencyChange(widget))
+ return;
+}
+
+bool ConfigMapper::handleBoolDependencyChange(QWidget* widget)
+{
+ if (!boolDependencyToDependingWidget.contains(widget))
+ return false;
+
+ QWidget* depWid = boolDependencyToDependingWidget[widget];
+ bool value = getConfigValueFromWidget(widget).toBool();
+ depWid->setEnabled(value);
+ if (!value)
+ applyConfigDefaultValueToWidget(depWid);
+
+ return true;
+}
+
bool ConfigMapper::isPersistant() const
{
for (CfgMain* cfgMain : cfgMainList)
@@ -520,11 +606,21 @@ void ConfigMapper::clearExtraWidgets()
extraWidgets.clear();
}
+void ConfigMapper::ignoreWidget(QWidget* w)
+{
+ widgetsToIgnore << w;
+}
+
+void ConfigMapper::removeIgnoredWidget(QWidget* w)
+{
+ widgetsToIgnore.removeOne(w);
+}
+
void ConfigMapper::handleModified()
{
+ QWidget* widget = dynamic_cast<QWidget*>(sender());
if (realTimeUpdates && !updatingEntry)
{
- QWidget* widget = dynamic_cast<QWidget*>(sender());
if (widget && widgetToConfigEntry.contains(widget))
{
updatingEntry = true;
@@ -532,6 +628,9 @@ void ConfigMapper::handleModified()
updatingEntry = false;
}
}
+
+ handleDependencyChange(widget);
+
emit modified();
}
@@ -639,6 +738,11 @@ void ConfigMapper::unbindFromConfig()
realTimeUpdates = false;
}
+void ConfigMapper::removeMainCfgEntry(CfgMain* cfgMain)
+{
+ cfgMainList.removeOne(cfgMain);
+}
+
QWidget* ConfigMapper::getBindWidgetForConfig(CfgEntry* key) const
{
if (configEntryToWidgets.contains(key))