summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/expanderwidget.cpp27
-rw-r--r--src/expanderwidget.h5
-rw-r--r--src/modinfodialogconflicts.cpp102
-rw-r--r--src/settings.cpp74
-rw-r--r--src/settings.h14
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;