diff options
| -rw-r--r-- | src/categoriesdialog.cpp | 13 | ||||
| -rw-r--r-- | src/editexecutablesdialog.cpp | 13 | ||||
| -rw-r--r-- | src/listdialog.cpp | 13 | ||||
| -rw-r--r-- | src/mainwindow.cpp | 49 | ||||
| -rw-r--r-- | src/mainwindow.h | 4 | ||||
| -rw-r--r-- | src/modinfodialog.cpp | 6 | ||||
| -rw-r--r-- | src/overwriteinfodialog.cpp | 11 | ||||
| -rw-r--r-- | src/previewdialog.cpp | 13 | ||||
| -rw-r--r-- | src/problemsdialog.cpp | 13 | ||||
| -rw-r--r-- | src/profilesdialog.cpp | 13 | ||||
| -rw-r--r-- | src/settings.cpp | 218 | ||||
| -rw-r--r-- | src/settings.h | 64 |
12 files changed, 158 insertions, 272 deletions
diff --git a/src/categoriesdialog.cpp b/src/categoriesdialog.cpp index 91df5cae..b5194bf0 100644 --- a/src/categoriesdialog.cpp +++ b/src/categoriesdialog.cpp @@ -112,17 +112,8 @@ CategoriesDialog::~CategoriesDialog() int CategoriesDialog::exec()
{
- auto& settings = Settings::instance();
-
- if (auto v=settings.geometry().getCategoriesDialog()) {
- restoreGeometry(*v);
- }
-
- const int r = QDialog::exec();
-
- settings.geometry().setCategoriesDialog(saveGeometry());
-
- return r;
+ GeometrySaver gs(Settings::instance(), this);
+ return QDialog::exec();
}
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp index 9c5ae44a..7823fadc 100644 --- a/src/editexecutablesdialog.cpp +++ b/src/editexecutablesdialog.cpp @@ -67,17 +67,8 @@ EditExecutablesDialog::~EditExecutablesDialog() = default; int EditExecutablesDialog::exec() { - auto& settings = m_organizerCore.settings(); - - if (auto v=settings.geometry().getExecutablesDialog()) { - restoreGeometry(*v); - } - - const int r = QDialog::exec(); - - settings.geometry().setExecutablesDialog(saveGeometry()); - - return r; + GeometrySaver gs(Settings::instance(), this); + return QDialog::exec(); } void EditExecutablesDialog::loadCustomOverwrites() diff --git a/src/listdialog.cpp b/src/listdialog.cpp index 0fdcdb5f..2ad88408 100644 --- a/src/listdialog.cpp +++ b/src/listdialog.cpp @@ -35,17 +35,8 @@ ListDialog::~ListDialog() int ListDialog::exec() { - auto& settings = Settings::instance(); - - if (auto v=settings.geometry().getListDialog()) { - restoreGeometry(*v); - } - - const int r = QDialog::exec(); - - settings.geometry().setListDialog(saveGeometry()); - - return r; + GeometrySaver gs(Settings::instance(), this); + return QDialog::exec(); } void ListDialog::setChoices(QStringList choices) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 532914a5..85be8563 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -290,7 +290,6 @@ MainWindow::MainWindow(Settings &settings , m_linksSeparator(nullptr) , m_Tutorial(this, "MainWindow") , m_OldProfileIndex(-1) - , m_ModListGroupingProxy(nullptr) , m_ModListSortProxy(nullptr) , m_OldExecutableIndex(-1) , m_CategoryFactory(CategoryFactory::instance()) @@ -309,8 +308,8 @@ MainWindow::MainWindow(Settings &settings { QWebEngineProfile::defaultProfile()->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies); QWebEngineProfile::defaultProfile()->setHttpCacheMaximumSize(52428800); - QWebEngineProfile::defaultProfile()->setCachePath(m_OrganizerCore.settings().getCacheDirectory()); - QWebEngineProfile::defaultProfile()->setPersistentStoragePath(m_OrganizerCore.settings().getCacheDirectory()); + QWebEngineProfile::defaultProfile()->setCachePath(settings.getCacheDirectory()); + QWebEngineProfile::defaultProfile()->setPersistentStoragePath(settings.getCacheDirectory()); ui->setupUi(this); m_statusBar.reset(new StatusBar(statusBar(), ui)); @@ -340,7 +339,7 @@ MainWindow::MainWindow(Settings &settings m_statusBar->setAPI(ni->getAPIStats(), ni->getAPIUserAccount()); } - languageChange(m_OrganizerCore.settings().language()); + languageChange(settings.language()); m_CategoryFactory.loadCategories(); @@ -367,19 +366,9 @@ MainWindow::MainWindow(Settings &settings initDownloadView(); - bool pluginListAdjusted = false; - if (auto v=m_OrganizerCore.settings().geometry().getPluginListHeader()) { - ui->espList->header()->restoreState(*v); - pluginListAdjusted = true; - } - - if (auto v=m_OrganizerCore.settings().geometry().getDataTreeHeader()) { - ui->dataTree->header()->restoreState(*v); - } - - if (auto v=m_OrganizerCore.settings().geometry().getDownloadViewHeader()) { - ui->downloadView->header()->restoreState(*v); - } + const bool pluginListAdjusted = settings.restoreState(ui->espList->header()); + settings.restoreState(ui->dataTree->header()); + settings.restoreState(ui->downloadView->header()); ui->splitter->setStretchFactor(0, 3); ui->splitter->setStretchFactor(1, 2); @@ -586,9 +575,7 @@ void MainWindow::setupModList() ui->modList->header()->installEventFilter(m_OrganizerCore.modList()); - if (auto v=m_OrganizerCore.settings().geometry().getModListHeader()) { - ui->modList->header()->restoreState(*v); - + if (m_OrganizerCore.settings().restoreState(ui->modList->header())) { // hack: force the resize-signal to be triggered because restoreState doesn't seem to do that for (int column = 0; column <= ModList::COL_LASTCOLUMN; ++column) { int sectionSize = ui->modList->header()->sectionSize(column); @@ -2272,13 +2259,8 @@ void MainWindow::activateProxy(bool activate) void MainWindow::readSettings(const Settings& settings) { - if (auto v=settings.geometry().getMainWindow()) { - restoreGeometry(*v); - } - - if (auto v=settings.geometry().getMainWindowState()) { - restoreState(*v); - } + settings.restoreGeometry(this); + settings.restoreState(this); if (auto v=settings.geometry().getToolbarSize()) { setToolbarSize(*v); @@ -2381,8 +2363,9 @@ void MainWindow::storeSettings(Settings& s) { settings.remove("geometry"); settings.remove("reset_geometry"); } else { - settings.setValue("window_geometry", saveGeometry()); - settings.setValue("window_state", saveState()); + s.saveState(this); + s.saveGeometry(this); + settings.setValue("toolbar_size", ui->toolBar->iconSize()); settings.setValue("toolbar_button_style", static_cast<int>(ui->toolBar->toolButtonStyle())); settings.setValue("menubar_visible", m_menuBarVisible); @@ -2394,10 +2377,10 @@ void MainWindow::storeSettings(Settings& s) { settings.setValue("browser_geometry", m_IntegratedBrowser.saveGeometry()); settings.setValue("filters_visible", ui->displayCategoriesBtn->isChecked()); - s.geometry().setPluginListHeader(ui->espList->header()->saveState()); - s.geometry().setDataTreeHeader(ui->dataTree->header()->saveState()); - s.geometry().setDownloadViewHeader(ui->downloadView->header()->saveState()); - s.geometry().setModListHeader(ui->modList->header()->saveState()); + s.saveState(ui->espList->header()); + s.saveState(ui->dataTree->header()); + s.saveState(ui->downloadView->header()); + s.saveState(ui->modList->header()); DockFixer::save(this, s); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 7460019d..946a341b 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -347,11 +347,9 @@ private: int m_OldProfileIndex; std::vector<QString> m_ModNameList; // the mod-list to go with the directory structure - bool m_Refreshing; QStringList m_DefaultArchives; - QAbstractItemModel *m_ModListGroupingProxy; ModListSortProxy *m_ModListSortProxy; PluginListSortProxy *m_PluginListSortProxy; @@ -367,8 +365,6 @@ private: CategoryFactory &m_CategoryFactory; - bool m_LoginAttempted; - QTimer m_CheckBSATimer; QTimer m_SaveMetaTimer; QTimer m_UpdateProblemsTimer; diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index 5e614358..f3840230 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -210,10 +210,8 @@ void ModInfoDialog::createTabs() int ModInfoDialog::exec() { + GeometrySaver gs(Settings::instance(), this); restoreState(); - if (auto v=m_core->settings().geometry().getModInfoDialog()) { - restoreGeometry(*v); - } // whether to select the first tab; if the main window requested a specific // tab, it is selected when encountered in update() @@ -226,9 +224,7 @@ int ModInfoDialog::exec() } const int r = TutorableDialog::exec(); - saveState(); - m_core->settings().geometry().setModInfoDialog(saveGeometry()); return r; } diff --git a/src/overwriteinfodialog.cpp b/src/overwriteinfodialog.cpp index f3ae0ff5..47416311 100644 --- a/src/overwriteinfodialog.cpp +++ b/src/overwriteinfodialog.cpp @@ -106,20 +106,13 @@ OverwriteInfoDialog::~OverwriteInfoDialog() void OverwriteInfoDialog::showEvent(QShowEvent* e)
{
- const auto& settings = Settings::instance();
-
- if (auto v=settings.geometry().getOverwriteDialog()) {
- restoreGeometry(*v);
- }
-
+ Settings::instance().restoreGeometry(this);
QDialog::showEvent(e);
}
void OverwriteInfoDialog::done(int r)
{
- auto& settings = Settings::instance();
- settings.geometry().setOverwriteDialog(saveGeometry());
-
+ Settings::instance().saveGeometry(this);
QDialog::done(r);
}
diff --git a/src/previewdialog.cpp b/src/previewdialog.cpp index 06dcd674..91a5f13e 100644 --- a/src/previewdialog.cpp +++ b/src/previewdialog.cpp @@ -20,17 +20,8 @@ PreviewDialog::~PreviewDialog() int PreviewDialog::exec()
{
- auto& settings = Settings::instance();
-
- if (auto v=settings.geometry().getPreviewDialog()) {
- restoreGeometry(*v);
- }
-
- const int r = QDialog::exec();
-
- settings.geometry().setPreviewDialog(saveGeometry());
-
- return r;
+ GeometrySaver gs(Settings::instance(), this);
+ return QDialog::exec();
}
void PreviewDialog::addVariant(const QString &modName, QWidget *widget)
diff --git a/src/problemsdialog.cpp b/src/problemsdialog.cpp index 99cc9833..63d58295 100644 --- a/src/problemsdialog.cpp +++ b/src/problemsdialog.cpp @@ -31,17 +31,8 @@ ProblemsDialog::~ProblemsDialog() int ProblemsDialog::exec()
{
- auto& settings = Settings::instance();
-
- if (auto v=settings.geometry().getProblemsDialog()) {
- restoreGeometry(*v);
- }
-
- const int r = QDialog::exec();
-
- settings.geometry().setProblemsDialog(saveGeometry());
-
- return r;
+ GeometrySaver gs(Settings::instance(), this);
+ return QDialog::exec();
}
void ProblemsDialog::runDiagnosis()
diff --git a/src/profilesdialog.cpp b/src/profilesdialog.cpp index 25fff2b2..2f1bd059 100644 --- a/src/profilesdialog.cpp +++ b/src/profilesdialog.cpp @@ -86,17 +86,8 @@ ProfilesDialog::~ProfilesDialog() int ProfilesDialog::exec()
{
- auto& settings = Settings::instance();
-
- if (auto v=settings.geometry().getProfilesDialog()) {
- restoreGeometry(*v);
- }
-
- const int r = QDialog::exec();
-
- settings.geometry().setProfilesDialog(saveGeometry());
-
- return r;
+ GeometrySaver gs(Settings::instance(), this);
+ return QDialog::exec();
}
void ProfilesDialog::showEvent(QShowEvent *event)
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); +} diff --git a/src/settings.h b/src/settings.h index 2c4c7ca6..1575b3cd 100644 --- a/src/settings.h +++ b/src/settings.h @@ -30,6 +30,18 @@ namespace MOBase { class PluginContainer; struct ServerInfo; +class Settings; + +class GeometrySaver +{ +public: + GeometrySaver(Settings& s, QDialog* dialog); + ~GeometrySaver(); + +private: + Settings& m_settings; + QDialog* m_dialog; +}; class GeometrySettings @@ -37,54 +49,17 @@ class GeometrySettings public: GeometrySettings(QSettings& s); - std::optional<QByteArray> getMainWindow() const; - std::optional<QByteArray> getMainWindowState() const; std::optional<QSize> getToolbarSize() const; std::optional<Qt::ToolButtonStyle> getToolbarButtonStyle() const; + std::optional<bool> getMenubarVisible() const; std::optional<bool> getStatusbarVisible() const; std::optional<QByteArray> getMainSplitterState() const; std::optional<bool> getFiltersVisible() const; - std::optional<QByteArray> getExecutablesDialog() const; - void setExecutablesDialog(const QByteArray& v); - - std::optional<QByteArray> getProfilesDialog() const; - void setProfilesDialog(const QByteArray& v); - - std::optional<QByteArray> getOverwriteDialog() const; - void setOverwriteDialog(const QByteArray& v); - - std::optional<QByteArray> getModInfoDialog() const; - void setModInfoDialog(const QByteArray& v) const; - QStringList getModInfoTabOrder() const; void setModInfoTabOrder(const QString& names); - std::optional<QByteArray> getListDialog() const; - void setListDialog(const QByteArray& v); - - std::optional<QByteArray> getProblemsDialog() const; - void setProblemsDialog(const QByteArray& v); - - std::optional<QByteArray> getCategoriesDialog() const; - void setCategoriesDialog(const QByteArray& v); - - std::optional<QByteArray> getPreviewDialog() const; - void setPreviewDialog(const QByteArray& v); - - std::optional<QByteArray> getPluginListHeader() const; - void setPluginListHeader(const QByteArray& v) const; - - std::optional<QByteArray> getDataTreeHeader() const; - void setDataTreeHeader(const QByteArray& v) const; - - std::optional<QByteArray> getDownloadViewHeader() const; - void setDownloadViewHeader(const QByteArray& v) const; - - std::optional<QByteArray> getModListHeader() const; - void setModListHeader(const QByteArray& v) const; - std::optional<int> getMainWindowMonitor() const; void setDockSize(const QString& name, int size); @@ -228,6 +203,19 @@ public: const GeometrySettings& geometry() const; + void saveGeometry(const QWidget* w); + bool restoreGeometry(QWidget* w) const; + + void saveState(const QMainWindow* window); + bool restoreState(QMainWindow* window) const; + + void saveState(const QHeaderView* header); + bool restoreState(QHeaderView* header) const; + + void saveState(const QToolBar* toolbar); + bool restoreState(QToolBar* toolbar) const; + + /** * retrieve the directory where profiles stored (with native separators) **/ |
