diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-16 06:03:05 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-08-16 06:03:05 -0400 |
| commit | 799ddb1b2477434252d06975fd4c68106dc3826f (patch) | |
| tree | 4cb0c555f1e38dfd25e893c132a16e16fb035635 /src/settings.cpp | |
| parent | 4d4f25d1774659e0dfae8e60e13c494cab0f0a44 (diff) | |
added GeometrySaver
removed widget-specific functions in GeometrySettings, now using generic functions in Settings
removed some unused member variables in MainWindow
Diffstat (limited to 'src/settings.cpp')
| -rw-r--r-- | src/settings.cpp | 218 |
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); +} |
