diff options
| author | 2016-06-13 18:42:57 -0400 | |
|---|---|---|
| committer | 2016-06-13 18:42:57 -0400 | |
| commit | 65d5f68cc6dc81799c5a5d90400a2c1f0dd02547 (patch) | |
| tree | 6f245ba901b87ef42fed69965aea22f5eea6b590 /SQLiteStudio3/guiSQLiteStudio/configmapper.cpp | |
| parent | aeb6bad01630d325a4e768e798a7a6d44e18fdaf (diff) | |
| parent | 5d9314f134ddd3dc4c853e398ac90ba247fb2e4f (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.cpp | 112 |
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)) |
