summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-16 08:02:14 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-16 08:02:14 -0400
commita5cb39aaf44b1f84003fb2ec2d36f07bf28916e4 (patch)
tree083e7ca94003ac269b323f135b9eafe560e5aedc
parent3f487a5a6c9c23824298fdde3d76dc82edf3ca46 (diff)
moved all geometry save, restore and reset to GeometrySettings
changed reset button in settings to restart immediately
-rw-r--r--src/browserdialog.cpp3
-rw-r--r--src/main.cpp12
-rw-r--r--src/mainwindow.cpp75
-rw-r--r--src/mainwindow.h1
-rw-r--r--src/overwriteinfodialog.cpp4
-rw-r--r--src/settings.cpp79
-rw-r--r--src/settings.h39
-rw-r--r--src/settingsdialog.cpp11
-rw-r--r--src/settingsdialog.h2
-rw-r--r--src/settingsdialog.ui3
-rw-r--r--src/settingsdialogworkarounds.cpp16
11 files changed, 121 insertions, 124 deletions
diff --git a/src/browserdialog.cpp b/src/browserdialog.cpp
index 73a6a2d0..70da0b9c 100644
--- a/src/browserdialog.cpp
+++ b/src/browserdialog.cpp
@@ -72,7 +72,7 @@ BrowserDialog::~BrowserDialog()
void BrowserDialog::closeEvent(QCloseEvent *event)
{
-// m_AccessManager->showCookies();
+ Settings::instance().geometry().saveGeometry(this);
QDialog::closeEvent(event);
}
@@ -126,6 +126,7 @@ void BrowserDialog::urlChanged(const QUrl &url)
void BrowserDialog::openUrl(const QUrl &url)
{
if (isHidden()) {
+ Settings::instance().geometry().restoreGeometry(this);
show();
}
openInNewTab(url);
diff --git a/src/main.cpp b/src/main.cpp
index 8eee41e4..6d4108fa 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -718,6 +718,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
}
int res = 1;
+
{ // scope to control lifetime of mainwindow
// set up main window and its data structures
MainWindow mainWindow(settings, organizer, pluginContainer);
@@ -743,17 +744,20 @@ int runApplication(MOApplication &application, SingleInstance &instance,
splash.finish(&mainWindow);
- const auto ret = application.exec();
+ res = application.exec();
NexusInterface::instance(&pluginContainer)
->getAccessManager()->setTopLevelWidget(nullptr);
-
- return ret;
}
+
+ settings.geometry().resetIfNeeded();
+ return res;
+
} catch (const std::exception &e) {
reportError(e.what());
- return 1;
}
+
+ return 1;
}
int doCoreDump(env::CoreDumpTypes type)
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 6e6e3d22..28e1de2e 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -366,9 +366,11 @@ MainWindow::MainWindow(Settings &settings
initDownloadView();
- const bool pluginListAdjusted = settings.restoreState(ui->espList->header());
- settings.restoreState(ui->dataTree->header());
- settings.restoreState(ui->downloadView->header());
+ const bool pluginListAdjusted =
+ settings.geometry().restoreState(ui->espList->header());
+
+ settings.geometry().restoreState(ui->dataTree->header());
+ settings.geometry().restoreState(ui->downloadView->header());
ui->splitter->setStretchFactor(0, 3);
ui->splitter->setStretchFactor(1, 2);
@@ -575,7 +577,7 @@ void MainWindow::setupModList()
ui->modList->header()->installEventFilter(m_OrganizerCore.modList());
- if (m_OrganizerCore.settings().restoreState(ui->modList->header())) {
+ if (m_OrganizerCore.settings().geometry().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);
@@ -1417,12 +1419,6 @@ void MainWindow::cleanup()
m_MetaSave.waitForFinished();
}
-
-void MainWindow::setBrowserGeometry(const QByteArray &geometry)
-{
- m_IntegratedBrowser.restoreGeometry(geometry);
-}
-
void MainWindow::displaySaveGameInfo(QListWidgetItem *newItem)
{
// don't display the widget if the main window doesn't have focus
@@ -2259,10 +2255,10 @@ void MainWindow::activateProxy(bool activate)
void MainWindow::readSettings(const Settings& settings)
{
- settings.restoreGeometry(this);
- settings.restoreState(this);
+ settings.geometry().restoreGeometry(this);
+ settings.geometry().restoreState(this);
settings.geometry().restoreToolbars(this);
- settings.restoreState(ui->splitter);
+ settings.geometry().restoreState(ui->splitter);
if (auto v=settings.geometry().getMenubarVisible()) {
showMenuBar(*v);
@@ -2340,38 +2336,22 @@ void MainWindow::storeSettings(Settings& s) {
settings.setValue("selected_executable",
ui->executablesListBox->currentIndex());
- if (settings.value("reset_geometry", false).toBool()) {
- settings.remove("window_geometry");
- settings.remove("window_state");
- settings.remove("toolbar_size");
- settings.remove("toolbar_button_style");
- settings.remove("menubar_visible");
- settings.remove("window_split");
- settings.remove("window_monitor");
- settings.remove("filters_visible");
- settings.remove("browser_geometry");
- settings.remove("geometry");
- settings.remove("reset_geometry");
- } else {
- s.saveState(this);
- s.saveGeometry(this);
-
- s.geometry().setMenubarVisible(m_menuBarVisible);
- s.geometry().saveToolbars(this);
- s.geometry().setStatusbarVisible(m_statusBarVisible);
- s.saveState(ui->splitter);
- s.geometry().saveMainWindowMonitor(this);
+ s.geometry().saveState(this);
+ s.geometry().saveGeometry(this);
- settings.setValue("browser_geometry", m_IntegratedBrowser.saveGeometry());
- settings.setValue("filters_visible", ui->displayCategoriesBtn->isChecked());
+ s.geometry().setMenubarVisible(m_menuBarVisible);
+ s.geometry().saveToolbars(this);
+ s.geometry().setStatusbarVisible(m_statusBarVisible);
+ s.geometry().saveState(ui->splitter);
+ s.geometry().saveMainWindowMonitor(this);
+ s.geometry().setFiltersVisible(ui->displayCategoriesBtn->isChecked());
- s.saveState(ui->espList->header());
- s.saveState(ui->dataTree->header());
- s.saveState(ui->downloadView->header());
- s.saveState(ui->modList->header());
+ s.geometry().saveState(ui->espList->header());
+ s.geometry().saveState(ui->dataTree->header());
+ s.geometry().saveState(ui->downloadView->header());
+ s.geometry().saveState(ui->modList->header());
- DockFixer::save(this, s);
- }
+ DockFixer::save(this, s);
}
ILockedWaitingForProcess* MainWindow::lock()
@@ -6489,7 +6469,6 @@ void MainWindow::processLOOTOut(const std::string &lootOut, std::string &errorMe
void MainWindow::on_bossButton_clicked()
{
- std::string reportURL;
std::string errorMessages;
//m_OrganizerCore.currentProfile()->writeModlistNow();
@@ -6637,16 +6616,6 @@ void MainWindow::on_bossButton_clicked()
if (success) {
m_DidUpdateMasterList = true;
- if (reportURL.length() > 0) {
- m_IntegratedBrowser.setWindowTitle("LOOT Report");
- QString report(reportURL.c_str());
- QStringList temp = report.split("?");
- QUrl url = QUrl::fromLocalFile(temp.at(0));
- if (temp.size() > 1) {
- url.setQuery(temp.at(1).toUtf8());
- }
- m_IntegratedBrowser.openUrl(url);
- }
m_OrganizerCore.refreshESPList(false);
m_OrganizerCore.savePluginList();
}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 946a341b..8542dc8a 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -293,7 +293,6 @@ private:
static void setupNetworkProxy(bool activate);
void activateProxy(bool activate);
- void setBrowserGeometry(const QByteArray &geometry);
bool createBackup(const QString &filePath, const QDateTime &time);
QString queryRestore(const QString &filePath);
diff --git a/src/overwriteinfodialog.cpp b/src/overwriteinfodialog.cpp
index 47416311..fe1d8825 100644
--- a/src/overwriteinfodialog.cpp
+++ b/src/overwriteinfodialog.cpp
@@ -106,13 +106,13 @@ OverwriteInfoDialog::~OverwriteInfoDialog()
void OverwriteInfoDialog::showEvent(QShowEvent* e)
{
- Settings::instance().restoreGeometry(this);
+ Settings::instance().geometry().restoreGeometry(this);
QDialog::showEvent(e);
}
void OverwriteInfoDialog::done(int r)
{
- Settings::instance().saveGeometry(this);
+ Settings::instance().geometry().saveGeometry(this);
QDialog::done(r);
}
diff --git a/src/settings.cpp b/src/settings.cpp
index a3d12070..db6cecdf 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -884,6 +884,7 @@ void Settings::dump() const
m_Settings.endGroup();
}
+
QString widgetNameWithTopLevel(const QWidget* widget)
{
QStringList components;
@@ -941,12 +942,46 @@ QString stateSettingName(const Widget* widget)
return "geometry/" + widgetName(widget) + "_state";
}
-void Settings::saveGeometry(const QWidget* w)
+
+GeometrySettings::GeometrySettings(QSettings& s)
+ : m_Settings(s), m_Reset(false)
+{
+}
+
+void GeometrySettings::requestReset()
+{
+ m_Reset = true;
+}
+
+void GeometrySettings::resetIfNeeded()
+{
+ if (!m_Reset) {
+ return;
+ }
+
+ m_Settings.beginGroup("geometry");
+ m_Settings.remove("");
+ m_Settings.endGroup();
+
+ /*settings.remove("window_geometry");
+ settings.remove("window_state");
+ settings.remove("toolbar_size");
+ settings.remove("toolbar_button_style");
+ settings.remove("menubar_visible");
+ settings.remove("window_split");
+ settings.remove("window_monitor");
+ settings.remove("filters_visible");
+ settings.remove("browser_geometry");
+ settings.remove("geometry");
+ settings.remove("reset_geometry");*/
+}
+
+void GeometrySettings::saveGeometry(const QWidget* w)
{
m_Settings.setValue(geoSettingName(w), w->saveGeometry());
}
-bool Settings::restoreGeometry(QWidget* w) const
+bool GeometrySettings::restoreGeometry(QWidget* w) const
{
if (auto v=getOptional<QByteArray>(m_Settings, geoSettingName(w))) {
w->restoreGeometry(*v);
@@ -956,12 +991,12 @@ bool Settings::restoreGeometry(QWidget* w) const
return false;
}
-void Settings::saveState(const QMainWindow* w)
+void GeometrySettings::saveState(const QMainWindow* w)
{
m_Settings.setValue(stateSettingName(w), w->saveState());
}
-bool Settings::restoreState(QMainWindow* w) const
+bool GeometrySettings::restoreState(QMainWindow* w) const
{
if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(w))) {
w->restoreState(*v);
@@ -971,12 +1006,12 @@ bool Settings::restoreState(QMainWindow* w) const
return false;
}
-void Settings::saveState(const QHeaderView* w)
+void GeometrySettings::saveState(const QHeaderView* w)
{
m_Settings.setValue(stateSettingName(w), w->saveState());
}
-bool Settings::restoreState(QHeaderView* w) const
+bool GeometrySettings::restoreState(QHeaderView* w) const
{
if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(w))) {
w->restoreState(*v);
@@ -986,12 +1021,12 @@ bool Settings::restoreState(QHeaderView* w) const
return false;
}
-void Settings::saveState(const QSplitter* w)
+void GeometrySettings::saveState(const QSplitter* w)
{
m_Settings.setValue(stateSettingName(w), w->saveState());
}
-bool Settings::restoreState(QSplitter* w) const
+bool GeometrySettings::restoreState(QSplitter* w) const
{
if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(w))) {
w->restoreState(*v);
@@ -1001,12 +1036,6 @@ bool Settings::restoreState(QSplitter* w) const
return false;
}
-
-GeometrySettings::GeometrySettings(QSettings& s)
- : m_Settings(s)
-{
-}
-
bool GeometrySettings::restoreToolbars(QMainWindow* w) const
{
const auto size = getOptional<QSize>(m_Settings, "toolbar_size");
@@ -1068,6 +1097,11 @@ std::optional<bool> GeometrySettings::getFiltersVisible() const
return getOptional<bool>(m_Settings, "filters_visible");
}
+void GeometrySettings::setFiltersVisible(bool b)
+{
+ m_Settings.setValue("filters_visible", b);
+}
+
QStringList GeometrySettings::getModInfoTabOrder() const
{
QStringList v;
@@ -1106,7 +1140,7 @@ void GeometrySettings::setModInfoTabOrder(const QString& names)
std::optional<int> GeometrySettings::getMainWindowMonitor() const
{
- return getOptional<int>(m_Settings, "geometry/window_monitor");
+ return getOptional<int>(m_Settings, "geometry/MainWindow_monitor");
}
void GeometrySettings::centerOnMainWindowMonitor(QWidget* w)
@@ -1128,34 +1162,29 @@ void GeometrySettings::saveMainWindowMonitor(const QMainWindow* w)
if (auto* handle=w->windowHandle()) {
if (auto* screen = handle->screen()) {
const int screenId = QGuiApplication::screens().indexOf(screen);
- m_Settings.setValue("geometry/window_monitor", screenId);
+ m_Settings.setValue("geometry/MainWindow_monitor", screenId);
}
}
}
void GeometrySettings::setDockSize(const QString& name, int size)
{
- m_Settings.setValue("geometry/" + name + "_size", size);
+ m_Settings.setValue("geometry/MainWindow_docks_" + name + "_size", size);
}
std::optional<int> GeometrySettings::getDockSize(const QString& name) const
{
- return getOptional<int>(m_Settings, "geometry/" + name + "_size");
-}
-
-std::optional<bool> GeometrySettings::isCategoryListVisible() const
-{
- return getOptional<bool>(m_Settings, "categorylist_visible");
+ return getOptional<int>(m_Settings, "geometry/MainWindow_docks_" + name + "_size");
}
GeometrySaver::GeometrySaver(Settings& s, QDialog* dialog)
: m_settings(s), m_dialog(dialog)
{
- m_settings.restoreGeometry(m_dialog);
+ m_settings.geometry().restoreGeometry(m_dialog);
}
GeometrySaver::~GeometrySaver()
{
- m_settings.saveGeometry(m_dialog);
+ m_settings.geometry().saveGeometry(m_dialog);
}
diff --git a/src/settings.h b/src/settings.h
index bbf008f0..9ae58803 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -51,6 +51,24 @@ class GeometrySettings
public:
GeometrySettings(QSettings& s);
+ void requestReset();
+ void resetIfNeeded();
+
+ 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;
+
+ void saveState(const QSplitter* splitter);
+ bool restoreState(QSplitter* splitter) const;
+
std::optional<bool> getMenubarVisible() const;
void setMenubarVisible(bool b);
@@ -61,6 +79,7 @@ public:
void setStatusbarVisible(bool b);
std::optional<bool> getFiltersVisible() const;
+ void setFiltersVisible(bool b);
QStringList getModInfoTabOrder() const;
void setModInfoTabOrder(const QString& names);
@@ -73,10 +92,9 @@ public:
std::optional<int> getDockSize(const QString& name) const;
- std::optional<bool> isCategoryListVisible() const;
-
private:
QSettings& m_Settings;
+ bool m_Reset;
};
@@ -210,23 +228,6 @@ public:
GeometrySettings& geometry();
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;
-
- void saveState(const QSplitter* splitter);
- bool restoreState(QSplitter* splitter) const;
-
-
/**
* retrieve the directory where profiles stored (with native separators)
**/
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index fbd9ecd1..d74507c9 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -34,7 +34,6 @@ SettingsDialog::SettingsDialog(PluginContainer *pluginContainer, Settings* setti
, ui(new Ui::SettingsDialog)
, m_settings(settings)
, m_PluginContainer(pluginContainer)
- , m_GeometriesReset(false)
, m_keyChanged(false)
{
ui->setupUi(this);
@@ -101,10 +100,7 @@ int SettingsDialog::exec()
if (getApiKeyChanged()) {
restartNeeded = true;
}
- if (getResetGeometries()) {
- restartNeeded = true;
- qsettings.setValue("reset_geometry", true);
- }
+
if (restartNeeded) {
if (QMessageBox::question(nullptr,
tr("Restart Mod Organizer?"),
@@ -156,11 +152,6 @@ void SettingsDialog::accept()
TutorableDialog::accept();
}
-bool SettingsDialog::getResetGeometries()
-{
- return ui->resetGeometryBtn->isChecked();
-}
-
bool SettingsDialog::getApiKeyChanged()
{
return m_keyChanged;
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index 03bba7cf..efc4a095 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -71,7 +71,6 @@ public:
// temp
Ui::SettingsDialog *ui;
bool m_keyChanged;
- bool m_GeometriesReset;
PluginContainer *m_PluginContainer;
int exec() override;
@@ -81,7 +80,6 @@ public slots:
public:
bool getApiKeyChanged();
- bool getResetGeometries();
private:
Settings* m_settings;
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index e011542e..e7676387 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -1233,9 +1233,6 @@ programs you are intentionally running.</string>
<property name="text">
<string>Reset Window Geometries</string>
</property>
- <property name="checkable">
- <bool>true</bool>
- </property>
</widget>
</item>
<item>
diff --git a/src/settingsdialogworkarounds.cpp b/src/settingsdialogworkarounds.cpp
index 9ac46ac1..fc859289 100644
--- a/src/settingsdialogworkarounds.cpp
+++ b/src/settingsdialogworkarounds.cpp
@@ -26,8 +26,6 @@ WorkaroundsSettingsTab::WorkaroundsSettingsTab(Settings *m_parent, SettingsDialo
ui->lockGUIBox->setChecked(m_parent->lockGUI());
ui->enableArchiveParsingBox->setChecked(m_parent->archiveParsing());
- ui->resetGeometryBtn->setChecked(m_parent->directInterface().value("reset_geometry", false).toBool());
-
setExecutableBlacklist(m_parent->executablesBlacklist());
QObject::connect(ui->bsaDateBtn, &QPushButton::clicked, [&]{ on_bsaDateBtn_clicked(); });
@@ -89,6 +87,16 @@ void WorkaroundsSettingsTab::on_bsaDateBtn_clicked()
void WorkaroundsSettingsTab::on_resetGeometryBtn_clicked()
{
- m_dialog.m_GeometriesReset = true;
- ui->resetGeometryBtn->setChecked(true);
+ const auto caption = QObject::tr("Restart Mod Organizer?");
+ const auto text = QObject::tr(
+ "In order to reset the geometry, Mod Organizer must be restarted.\n"
+ "Restart now?");
+
+ const auto res = QMessageBox::question(
+ nullptr, caption, text, QMessageBox::Yes | QMessageBox::Cancel);
+
+ if (res == QMessageBox::Yes) {
+ m_parent->geometry().requestReset();
+ qApp->exit(INT_MAX);
+ }
}