diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-24 13:04:10 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-24 13:04:10 -0400 |
| commit | 0f712305c840bc509fa8f00eebf2a2a4bbf28bfd (patch) | |
| tree | 81087d9f70c83ea43d0f1a8e706bf307e7631019 | |
| parent | 2ffad7edf2946e66585a67c4ab58c0522cd8e412 (diff) | |
added settings for QTabWidget, checkable QAbstractButton and ExpanderWidget
removed directInterface() from mod info conflicts
| -rw-r--r-- | src/expanderwidget.cpp | 27 | ||||
| -rw-r--r-- | src/expanderwidget.h | 5 | ||||
| -rw-r--r-- | src/modinfodialogconflicts.cpp | 102 | ||||
| -rw-r--r-- | src/settings.cpp | 74 | ||||
| -rw-r--r-- | src/settings.h | 14 |
5 files changed, 140 insertions, 82 deletions
diff --git a/src/expanderwidget.cpp b/src/expanderwidget.cpp index 2f47da5b..a9d045a5 100644 --- a/src/expanderwidget.cpp +++ b/src/expanderwidget.cpp @@ -52,3 +52,30 @@ bool ExpanderWidget::opened() const { return opened_; } + +QByteArray ExpanderWidget::saveState() const +{ + QByteArray result; + QDataStream stream(&result, QIODevice::WriteOnly); + + stream << opened(); + + return result; +} + +void ExpanderWidget::restoreState(const QByteArray& a) +{ + QDataStream stream(a); + + bool opened = false; + stream >> opened; + + if (stream.status() == QDataStream::Ok) { + toggle(opened); + } +} + +QToolButton* ExpanderWidget::button() const +{ + return m_button; +} diff --git a/src/expanderwidget.h b/src/expanderwidget.h index da3eb9d6..99b2d303 100644 --- a/src/expanderwidget.h +++ b/src/expanderwidget.h @@ -37,6 +37,11 @@ public: **/ bool opened() const; + QByteArray saveState() const; + void restoreState(const QByteArray& a); + + QToolButton* button() const; + private: QToolButton* m_button; QWidget* m_content; diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp index 03b490a2..7840269d 100644 --- a/src/modinfodialogconflicts.cpp +++ b/src/modinfodialogconflicts.cpp @@ -409,8 +409,7 @@ void ConflictsTab::clear() void ConflictsTab::saveState(Settings& s) { - s.directInterface().setValue( - "mod_info_conflicts_tab", ui->tabConflictsTabs->currentIndex()); + s.saveIndex(ui->tabConflictsTabs); m_general.saveState(s); m_advanced.saveState(s); @@ -418,8 +417,7 @@ void ConflictsTab::saveState(Settings& s) void ConflictsTab::restoreState(const Settings& s) { - ui->tabConflictsTabs->setCurrentIndex( - s.directInterface().value("mod_info_conflicts_tab", 0).toInt()); + s.restoreIndex(ui->tabConflictsTabs, 0); m_general.restoreState(s); m_advanced.restoreState(s); @@ -817,55 +815,22 @@ void GeneralConflictsTab::clear() void GeneralConflictsTab::saveState(Settings& s) { - QByteArray result; - QDataStream stream(&result, QIODevice::WriteOnly); - - stream - << m_expanders.overwrite.opened() - << m_expanders.overwritten.opened() - << m_expanders.nonconflict.opened(); - - s.directInterface().setValue( - "mod_info_conflicts_general_expanders", result); - - s.directInterface().setValue( - "mod_info_conflicts_general_overwrite", - ui->overwriteTree->header()->saveState()); - - s.directInterface().setValue( - "mod_info_conflicts_general_noconflict", - ui->noConflictTree->header()->saveState()); - - s.directInterface().setValue( - "mod_info_conflicts_general_overwritten", - ui->overwrittenTree->header()->saveState()); + s.geometry().saveState(&m_expanders.overwrite); + s.geometry().saveState(&m_expanders.overwritten); + s.geometry().saveState(&m_expanders.nonconflict); + s.geometry().saveState(ui->overwriteTree->header()); + s.geometry().saveState(ui->noConflictTree->header()); + s.geometry().saveState(ui->overwrittenTree->header()); } void GeneralConflictsTab::restoreState(const Settings& s) { - QDataStream stream(s.directInterface() - .value("mod_info_conflicts_general_expanders").toByteArray()); - - bool overwriteExpanded = false; - bool overwrittenExpanded = false; - bool noConflictExpanded = false; - - stream >> overwriteExpanded >> overwrittenExpanded >> noConflictExpanded; - - if (stream.status() == QDataStream::Ok) { - m_expanders.overwrite.toggle(overwriteExpanded); - m_expanders.overwritten.toggle(overwrittenExpanded); - m_expanders.nonconflict.toggle(noConflictExpanded); - } - - ui->overwriteTree->header()->restoreState(s.directInterface() - .value("mod_info_conflicts_general_overwrite").toByteArray()); - - ui->noConflictTree->header()->restoreState(s.directInterface() - .value("mod_info_conflicts_general_noconflict").toByteArray()); - - ui->overwrittenTree->header()->restoreState(s.directInterface() - .value("mod_info_conflicts_general_overwritten").toByteArray()); + s.geometry().restoreState(&m_expanders.overwrite); + s.geometry().restoreState(&m_expanders.overwritten); + s.geometry().restoreState(&m_expanders.nonconflict); + s.geometry().restoreState(ui->overwriteTree->header()); + s.geometry().restoreState(ui->noConflictTree->header()); + s.geometry().restoreState(ui->overwrittenTree->header()); } bool GeneralConflictsTab::update() @@ -1048,41 +1013,18 @@ void AdvancedConflictsTab::clear() void AdvancedConflictsTab::saveState(Settings& s) { - s.directInterface().setValue( - "mod_info_conflicts_advanced_list", - ui->conflictsAdvancedList->header()->saveState()); - - QByteArray result; - QDataStream stream(&result, QIODevice::WriteOnly); - - stream - << ui->conflictsAdvancedShowNoConflict->isChecked() - << ui->conflictsAdvancedShowAll->isChecked() - << ui->conflictsAdvancedShowNearest->isChecked(); - - s.directInterface().setValue( - "mod_info_conflicts_advanced_options", result); + s.geometry().saveState(ui->conflictsAdvancedList->header()); + s.saveChecked(ui->conflictsAdvancedShowNoConflict); + s.saveChecked(ui->conflictsAdvancedShowAll); + s.saveChecked(ui->conflictsAdvancedShowNearest); } void AdvancedConflictsTab::restoreState(const Settings& s) { - ui->conflictsAdvancedList->header()->restoreState( - s.directInterface().value("mod_info_conflicts_advanced_list").toByteArray()); - - QDataStream stream(s.directInterface() - .value("mod_info_conflicts_advanced_options").toByteArray()); - - bool noConflictChecked = false; - bool showAllChecked = false; - bool showNearestChecked = false; - - stream >> noConflictChecked >> showAllChecked >> showNearestChecked; - - if (stream.status() == QDataStream::Ok) { - ui->conflictsAdvancedShowNoConflict->setChecked(noConflictChecked); - ui->conflictsAdvancedShowAll->setChecked(showAllChecked); - ui->conflictsAdvancedShowNearest->setChecked(showNearestChecked); - } + s.geometry().restoreState(ui->conflictsAdvancedList->header()); + s.restoreChecked(ui->conflictsAdvancedShowNoConflict); + s.restoreChecked(ui->conflictsAdvancedShowAll); + s.restoreChecked(ui->conflictsAdvancedShowNearest); } void AdvancedConflictsTab::update() diff --git a/src/settings.cpp b/src/settings.cpp index 9001ac65..844ee81e 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. #include "serverinfo.h" #include "executableslist.h" #include "appconfig.h" +#include "expanderwidget.h" #include <utility.h> #include <iplugingame.h> #include <usvfsparameters.h> @@ -107,6 +108,11 @@ QString widgetName(const QHeaderView* w) return widgetNameWithTopLevel(w->parentWidget()); } +QString widgetName(const ExpanderWidget* w) +{ + return widgetNameWithTopLevel(w->button()); +} + QString widgetName(const QWidget* w) { return widgetNameWithTopLevel(w); @@ -140,6 +146,19 @@ QString indexSettingName(const QWidget* widget) return widgetNameWithTopLevel(widget) + "_index"; } +QString checkedSettingName(const QAbstractButton* b) +{ + return widgetNameWithTopLevel(b) + "_checked"; +} + +void warnIfNotCheckable(const QAbstractButton* b) +{ + if (!b->isCheckable()) { + log::warn( + "button '{}' used in the settings as a checkbox or radio button " + "but is not checkable", b->objectName()); + } +} Settings *Settings::s_Instance = nullptr; @@ -1048,7 +1067,7 @@ void Settings::resetQuestionButtons() m_Settings.endGroup(); } -std::optional<int> Settings::getIndex(QComboBox* cb) const +std::optional<int> Settings::getIndex(const QComboBox* cb) const { return getOptional<int>(m_Settings, indexSettingName(cb)); } @@ -1065,6 +1084,44 @@ void Settings::restoreIndex(QComboBox* cb, std::optional<int> def) const } } +std::optional<int> Settings::getIndex(const QTabWidget* w) const +{ + return getOptional<int>(m_Settings, indexSettingName(w)); +} + +void Settings::saveIndex(const QTabWidget* w) +{ + m_Settings.setValue(indexSettingName(w), w->currentIndex()); +} + +void Settings::restoreIndex(QTabWidget* w, std::optional<int> def) const +{ + if (auto v=getOptional<int>(m_Settings, indexSettingName(w), def)) { + w->setCurrentIndex(*v); + } +} + +std::optional<bool> Settings::getChecked(const QAbstractButton* w) const +{ + warnIfNotCheckable(w); + return getOptional<bool>(m_Settings, checkedSettingName(w)); +} + +void Settings::saveChecked(const QAbstractButton* w) +{ + warnIfNotCheckable(w); + m_Settings.setValue(checkedSettingName(w), w->isChecked()); +} + +void Settings::restoreChecked(QAbstractButton* w, std::optional<bool> def) const +{ + warnIfNotCheckable(w); + + if (auto v=getOptional<bool>(m_Settings, checkedSettingName(w), def)) { + w->setChecked(*v); + } +} + GeometrySettings& Settings::geometry() { return m_Geometry; @@ -1184,6 +1241,21 @@ bool GeometrySettings::restoreState(QSplitter* w) const return false; } +void GeometrySettings::saveState(const ExpanderWidget* expander) +{ + m_Settings.setValue(stateSettingName(expander), expander->saveState()); +} + +bool GeometrySettings::restoreState(ExpanderWidget* expander) const +{ + if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(expander))) { + expander->restoreState(*v); + return true; + } + + return false; +} + void GeometrySettings::saveVisibility(const QWidget* w) { m_Settings.setValue(visibilitySettingName(w), w->isVisible()); diff --git a/src/settings.h b/src/settings.h index d46c358c..b25af15f 100644 --- a/src/settings.h +++ b/src/settings.h @@ -34,6 +34,7 @@ class QSplitter; class PluginContainer; struct ServerInfo; class Settings; +class ExpanderWidget; class GeometrySaver { @@ -71,6 +72,9 @@ public: void saveState(const QSplitter* splitter); bool restoreState(QSplitter* splitter) const; + void saveState(const ExpanderWidget* expander); + bool restoreState(ExpanderWidget* expander) const; + void saveVisibility(const QWidget* w); bool restoreVisibility(QWidget* w, std::optional<bool> def={}) const; @@ -249,10 +253,18 @@ public: void resetQuestionButtons(); - std::optional<int> getIndex(QComboBox* cb) const; + std::optional<int> getIndex(const QComboBox* cb) const; void saveIndex(const QComboBox* cb); void restoreIndex(QComboBox* cb, std::optional<int> def={}) const; + std::optional<int> getIndex(const QTabWidget* w) const; + void saveIndex(const QTabWidget* w); + void restoreIndex(QTabWidget* w, std::optional<int> def={}) const; + + std::optional<bool> getChecked(const QAbstractButton* w) const; + void saveChecked(const QAbstractButton* w); + void restoreChecked(QAbstractButton* w, std::optional<bool> def={}) const; + GeometrySettings& geometry(); const GeometrySettings& geometry() const; |
