summaryrefslogtreecommitdiff
path: root/src/settings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings.cpp')
-rw-r--r--src/settings.cpp218
1 files changed, 101 insertions, 117 deletions
diff --git a/src/settings.cpp b/src/settings.cpp
index a8dcfa39..91e667d5 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -884,94 +884,146 @@ void Settings::dump() const
m_Settings.endGroup();
}
+QString widgetNameWithTopLevel(const QWidget* widget)
+{
+ QStringList components;
-GeometrySettings::GeometrySettings(QSettings& s)
- : m_Settings(s)
+ auto* tl = widget->window();
+
+ if (tl == widget) {
+ // this is a top level widget, such as a dialog
+ components.push_back(widget->objectName());
+ } else {
+ // this is a widget
+ const auto toplevelName = tl->objectName();
+ if (!toplevelName.isEmpty()) {
+ components.push_back(toplevelName);
+ }
+
+ const auto widgetName = widget->objectName();
+ if (!widgetName.isEmpty()) {
+ components.push_back(widgetName);
+ }
+ }
+
+ if (components.isEmpty()) {
+ // can't do much
+ return "unknown_widget";
+ }
+
+ return components.join("_");
+}
+
+QString widgetName(const QMainWindow* w)
{
+ return w->objectName();
}
-std::optional<QByteArray> GeometrySettings::getMainWindow() const
+QString widgetName(const QHeaderView* w)
{
- return getOptional<QByteArray>(m_Settings, "window_geometry");
+ return widgetNameWithTopLevel(w->parentWidget());
}
-std::optional<QByteArray> GeometrySettings::getMainWindowState() const
+QString widgetName(const QWidget* w)
{
- return getOptional<QByteArray>(m_Settings, "window_state");
+ return widgetNameWithTopLevel(w);
}
-std::optional<QSize> GeometrySettings::getToolbarSize() const
+template <class Widget>
+QString geoSettingName(const Widget* widget)
{
- return getOptional<QSize>(m_Settings, "toolbar_size");
+ return "geometry/" + widgetName(widget) + "_geometry";
}
-std::optional<Qt::ToolButtonStyle> GeometrySettings::getToolbarButtonStyle() const
+template <class Widget>
+QString stateSettingName(const Widget* widget)
{
- if (auto v=getOptional<int>(m_Settings, "toolbar_button_style")) {
- return static_cast<Qt::ToolButtonStyle>(*v);
- }
+ return "geometry/" + widgetName(widget) + "_state";
+}
- return {};
+void Settings::saveGeometry(const QWidget* w)
+{
+ m_Settings.setValue(geoSettingName(w), w->saveGeometry());
}
-std::optional<bool> GeometrySettings::getMenubarVisible() const
+bool Settings::restoreGeometry(QWidget* w) const
{
- return getOptional<bool>(m_Settings, "menubar_visible");
+ if (auto v=getOptional<QByteArray>(m_Settings, geoSettingName(w))) {
+ w->restoreGeometry(*v);
+ return true;
+ }
+
+ return false;
}
-std::optional<bool> GeometrySettings::getStatusbarVisible() const
+void Settings::saveState(const QMainWindow* w)
{
- return getOptional<bool>(m_Settings, "statusbar_visible");
+ m_Settings.setValue(stateSettingName(w), w->saveGeometry());
}
-std::optional<QByteArray> GeometrySettings::getMainSplitterState() const
+bool Settings::restoreState(QMainWindow* w) const
{
- return getOptional<QByteArray>(m_Settings, "window_split");
+ if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(w))) {
+ w->restoreState(*v);
+ return true;
+ }
+
+ return false;
}
-std::optional<bool> GeometrySettings::getFiltersVisible() const
+void Settings::saveState(const QHeaderView* w)
{
- return getOptional<bool>(m_Settings, "filters_visible");
+ m_Settings.setValue(stateSettingName(w), w->saveState());
}
-std::optional<QByteArray> GeometrySettings::getExecutablesDialog() const
+bool Settings::restoreState(QHeaderView* w) const
{
- return getOptional<QByteArray>(m_Settings, "geometry/EditExecutablesDialog");
+ if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(w))) {
+ w->restoreState(*v);
+ return true;
+ }
+
+ return false;
}
-void GeometrySettings::setExecutablesDialog(const QByteArray& v)
+
+GeometrySettings::GeometrySettings(QSettings& s)
+ : m_Settings(s)
{
- m_Settings.setValue("geometry/EditExecutablesDialog", v);
}
-std::optional<QByteArray> GeometrySettings::getProfilesDialog() const
+std::optional<QSize> GeometrySettings::getToolbarSize() const
{
- return getOptional<QByteArray>(m_Settings, "geometry/ProfilesDialog");
+ return getOptional<QSize>(m_Settings, "toolbar_size");
}
-void GeometrySettings::setProfilesDialog(const QByteArray& v)
+std::optional<Qt::ToolButtonStyle> GeometrySettings::getToolbarButtonStyle() const
{
- m_Settings.setValue("geometry/ProfilesDialog", v);
+ if (auto v=getOptional<int>(m_Settings, "toolbar_button_style")) {
+ return static_cast<Qt::ToolButtonStyle>(*v);
+ }
+
+ return {};
}
-std::optional<QByteArray> GeometrySettings::getOverwriteDialog() const
+std::optional<bool> GeometrySettings::getMenubarVisible() const
{
- return getOptional<QByteArray>(m_Settings, "geometry/__overwriteDialog");
+ return getOptional<bool>(m_Settings, "menubar_visible");
}
-void GeometrySettings::setOverwriteDialog(const QByteArray& v)
+std::optional<bool> GeometrySettings::getStatusbarVisible() const
{
- m_Settings.setValue("geometry/__overwriteDialog", v);
+ return getOptional<bool>(m_Settings, "statusbar_visible");
}
-std::optional<QByteArray> GeometrySettings::getModInfoDialog() const
+std::optional<QByteArray> GeometrySettings::getMainSplitterState() const
{
- return getOptional<QByteArray>(m_Settings, "geometry/ModInfoDialog");
+ return getOptional<QByteArray>(m_Settings, "window_split");
}
-void GeometrySettings::setModInfoDialog(const QByteArray& v) const
+std::optional<bool> GeometrySettings::getFiltersVisible() const
{
- m_Settings.setValue("geometry/ModInfoDialog", v);
+ return getOptional<bool>(m_Settings, "filters_visible");
}
QStringList GeometrySettings::getModInfoTabOrder() const
@@ -1010,86 +1062,6 @@ void GeometrySettings::setModInfoTabOrder(const QString& names)
m_Settings.setValue("mod_info_tab_order", names);
}
-std::optional<QByteArray> GeometrySettings::getListDialog() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/ListDialog");
-}
-
-void GeometrySettings::setListDialog(const QByteArray& v)
-{
- m_Settings.setValue("geometry/ListDialog", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getProblemsDialog() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/ProblemsDialog");
-}
-
-void GeometrySettings::setProblemsDialog(const QByteArray& v)
-{
- m_Settings.setValue("geometry/ProblemsDialog", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getCategoriesDialog() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/CategoriesDialog");
-}
-
-void GeometrySettings::setCategoriesDialog(const QByteArray& v)
-{
- m_Settings.setValue("geometry/CategoriesDialog", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getPreviewDialog() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/PreviewDialog");
-}
-
-void GeometrySettings::setPreviewDialog(const QByteArray& v)
-{
- m_Settings.setValue("geometry/PreviewDialog", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getPluginListHeader() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/espList");
-}
-
-void GeometrySettings::setPluginListHeader(const QByteArray& v) const
-{
- m_Settings.setValue("geometry/espList", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getDataTreeHeader() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/dataTree");
-}
-
-void GeometrySettings::setDataTreeHeader(const QByteArray& v) const
-{
- m_Settings.setValue("geometry/dataTree", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getDownloadViewHeader() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/downloadView");
-}
-
-void GeometrySettings::setDownloadViewHeader(const QByteArray& v) const
-{
- m_Settings.setValue("geometry/downloadView", v);
-}
-
-std::optional<QByteArray> GeometrySettings::getModListHeader() const
-{
- return getOptional<QByteArray>(m_Settings, "geometry/modList");
-}
-
-void GeometrySettings::setModListHeader(const QByteArray& v) const
-{
- m_Settings.setValue("geometry/modList", v);
-}
-
std::optional<int> GeometrySettings::getMainWindowMonitor() const
{
return getOptional<int>(m_Settings, "window_monitor");
@@ -1109,3 +1081,15 @@ std::optional<bool> GeometrySettings::isCategoryListVisible() const
{
return getOptional<bool>(m_Settings, "categorylist_visible");
}
+
+
+GeometrySaver::GeometrySaver(Settings& s, QDialog* dialog)
+ : m_settings(s), m_dialog(dialog)
+{
+ m_settings.restoreGeometry(m_dialog);
+}
+
+GeometrySaver::~GeometrySaver()
+{
+ m_settings.saveGeometry(m_dialog);
+}