summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-16 07:03:52 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-16 07:03:52 -0400
commit3f487a5a6c9c23824298fdde3d76dc82edf3ca46 (patch)
tree62e1ef5285c026c9959ccd430382b4f33e174d1f /src
parent799ddb1b2477434252d06975fd4c68106dc3826f (diff)
merged toolbars into restoreToolbars() and saveToolbars()
added centerOnMainWindowMonitor(), now also used by validation dialog added overloads for splitter, used by main splitter fixed saveState() for QMainWindow calling the wrong function
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp11
-rw-r--r--src/mainwindow.cpp28
-rw-r--r--src/nxmaccessmanager.cpp13
-rw-r--r--src/nxmaccessmanager.h2
-rw-r--r--src/pch.h1
-rw-r--r--src/settings.cpp86
-rw-r--r--src/settings.h19
7 files changed, 114 insertions, 46 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 506c6270..8eee41e4 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -697,16 +697,7 @@ int runApplication(MOApplication &application, SingleInstance &instance,
QPixmap pixmap(splashPath);
QSplashScreen splash(pixmap);
- const auto monitor = settings.geometry().getMainWindowMonitor();
- if (monitor && QGuiApplication::screens().size() > *monitor) {
- QGuiApplication::screens().at(*monitor)->geometry().center();
- const QPoint center = QGuiApplication::screens().at(*monitor)->geometry().center();
- splash.move(center - splash.rect().center());
- } else {
- const QPoint center = QGuiApplication::primaryScreen()->geometry().center();
- splash.move(center - splash.rect().center());
- }
-
+ settings.geometry().centerOnMainWindowMonitor(&splash);
splash.show();
splash.activateWindow();
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 85be8563..6e6e3d22 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2261,14 +2261,8 @@ void MainWindow::readSettings(const Settings& settings)
{
settings.restoreGeometry(this);
settings.restoreState(this);
-
- if (auto v=settings.geometry().getToolbarSize()) {
- setToolbarSize(*v);
- }
-
- if (auto v=settings.geometry().getToolbarButtonStyle()) {
- setToolbarButtonStyle(*v);
- }
+ settings.geometry().restoreToolbars(this);
+ settings.restoreState(ui->splitter);
if (auto v=settings.geometry().getMenubarVisible()) {
showMenuBar(*v);
@@ -2278,10 +2272,6 @@ void MainWindow::readSettings(const Settings& settings)
showStatusBar(*v);
}
- if (auto v=settings.geometry().getMainSplitterState()) {
- ui->splitter->restoreState(*v);
- }
-
{
auto v = settings.geometry().getFiltersVisible().value_or(false);
setCategoryListVisible(v);
@@ -2366,14 +2356,12 @@ void MainWindow::storeSettings(Settings& s) {
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);
- settings.setValue("statusbar_visible", m_statusBarVisible);
- settings.setValue("window_split", ui->splitter->saveState());
- QScreen *screen = this->window()->windowHandle()->screen();
- int screenId = QGuiApplication::screens().indexOf(screen);
- settings.setValue("window_monitor", screenId);
+ s.geometry().setMenubarVisible(m_menuBarVisible);
+ s.geometry().saveToolbars(this);
+ s.geometry().setStatusbarVisible(m_statusBarVisible);
+ s.saveState(ui->splitter);
+ s.geometry().saveMainWindowMonitor(this);
+
settings.setValue("browser_geometry", m_IntegratedBrowser.saveGeometry());
settings.setValue("filters_visible", ui->displayCategoriesBtn->isChecked());
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index fd1dc0c1..16190ca4 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -48,8 +48,9 @@ const QString NexusSSO("wss://sso.nexusmods.com");
const QString NexusSSOPage("https://www.nexusmods.com/sso?id=%1&application=modorganizer2");
-ValidationProgressDialog::ValidationProgressDialog(std::chrono::seconds t)
- : m_timeout(t), m_bar(nullptr), m_buttons(nullptr), m_timer(nullptr)
+ValidationProgressDialog::ValidationProgressDialog(std::chrono::seconds t) :
+ m_timeout(t), m_bar(nullptr), m_buttons(nullptr), m_timer(nullptr),
+ m_first(true)
{
m_bar = new QProgressBar;
m_bar->setTextVisible(false);
@@ -103,6 +104,14 @@ void ValidationProgressDialog::stop()
hide();
}
+void ValidationProgressDialog::showEvent(QShowEvent* e)
+{
+ if (m_first) {
+ Settings::instance().geometry().centerOnMainWindowMonitor(this);
+ m_first = false;
+ }
+}
+
void ValidationProgressDialog::closeEvent(QCloseEvent* e)
{
hide();
diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h
index eed7c1c9..0c85153b 100644
--- a/src/nxmaccessmanager.h
+++ b/src/nxmaccessmanager.h
@@ -48,6 +48,7 @@ public:
using QDialog::show;
protected:
+ void showEvent(QShowEvent* e) override;
void closeEvent(QCloseEvent* e) override;
private:
@@ -56,6 +57,7 @@ private:
QDialogButtonBox* m_buttons;
QTimer* m_timer;
QElapsedTimer m_elapsed;
+ bool m_first;
void onButton(QAbstractButton* b);
void onTimer();
diff --git a/src/pch.h b/src/pch.h
index 504ef8f1..dd65efbe 100644
--- a/src/pch.h
+++ b/src/pch.h
@@ -189,6 +189,7 @@
#include <QSize>
#include <QSizePolicy>
#include <QSortFilterProxyModel>
+#include <QSplitter>
#include <QSpinBox>
#include <QSplashScreen>
#include <QSslSocket>
diff --git a/src/settings.cpp b/src/settings.cpp
index 91e667d5..a3d12070 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -958,7 +958,7 @@ bool Settings::restoreGeometry(QWidget* w) const
void Settings::saveState(const QMainWindow* w)
{
- m_Settings.setValue(stateSettingName(w), w->saveGeometry());
+ m_Settings.setValue(stateSettingName(w), w->saveState());
}
bool Settings::restoreState(QMainWindow* w) const
@@ -986,24 +986,61 @@ bool Settings::restoreState(QHeaderView* w) const
return false;
}
+void Settings::saveState(const QSplitter* w)
+{
+ m_Settings.setValue(stateSettingName(w), w->saveState());
+}
+
+bool Settings::restoreState(QSplitter* w) const
+{
+ if (auto v=getOptional<QByteArray>(m_Settings, stateSettingName(w))) {
+ w->restoreState(*v);
+ return true;
+ }
+
+ return false;
+}
+
GeometrySettings::GeometrySettings(QSettings& s)
: m_Settings(s)
{
}
-std::optional<QSize> GeometrySettings::getToolbarSize() const
+bool GeometrySettings::restoreToolbars(QMainWindow* w) const
{
- return getOptional<QSize>(m_Settings, "toolbar_size");
+ const auto size = getOptional<QSize>(m_Settings, "toolbar_size");
+ const auto style = getOptional<int>(m_Settings, "toolbar_button_style");
+
+ if (!size && !style) {
+ return false;
+ }
+
+ for (auto* tb : w->findChildren<QToolBar*>()) {
+ if (size) {
+ tb->setIconSize(*size);
+ }
+
+ if (style) {
+ tb->setToolButtonStyle(static_cast<Qt::ToolButtonStyle>(*style));
+ }
+ }
+
+ return true;
}
-std::optional<Qt::ToolButtonStyle> GeometrySettings::getToolbarButtonStyle() const
+void GeometrySettings::saveToolbars(const QMainWindow* w)
{
- if (auto v=getOptional<int>(m_Settings, "toolbar_button_style")) {
- return static_cast<Qt::ToolButtonStyle>(*v);
+ // all toolbars are identical, just save the first one
+ const auto tbs = w->findChildren<QToolBar*>();
+ if (tbs.isEmpty()) {
+ return;
}
- return {};
+ const auto* tb = tbs[0];
+
+ m_Settings.setValue("toolbar_size", tb->iconSize());
+ m_Settings.setValue("toolbar_button_style", static_cast<int>(tb->toolButtonStyle()));
}
std::optional<bool> GeometrySettings::getMenubarVisible() const
@@ -1011,14 +1048,19 @@ std::optional<bool> GeometrySettings::getMenubarVisible() const
return getOptional<bool>(m_Settings, "menubar_visible");
}
+void GeometrySettings::setMenubarVisible(bool b)
+{
+ m_Settings.setValue("menubar_visible", b);
+}
+
std::optional<bool> GeometrySettings::getStatusbarVisible() const
{
return getOptional<bool>(m_Settings, "statusbar_visible");
}
-std::optional<QByteArray> GeometrySettings::getMainSplitterState() const
+void GeometrySettings::setStatusbarVisible(bool b)
{
- return getOptional<QByteArray>(m_Settings, "window_split");
+ m_Settings.setValue("statusbar_visible", b);
}
std::optional<bool> GeometrySettings::getFiltersVisible() const
@@ -1064,7 +1106,31 @@ void GeometrySettings::setModInfoTabOrder(const QString& names)
std::optional<int> GeometrySettings::getMainWindowMonitor() const
{
- return getOptional<int>(m_Settings, "window_monitor");
+ return getOptional<int>(m_Settings, "geometry/window_monitor");
+}
+
+void GeometrySettings::centerOnMainWindowMonitor(QWidget* w)
+{
+ const auto monitor = getMainWindowMonitor();
+ QPoint center;
+
+ if (monitor && QGuiApplication::screens().size() > *monitor) {
+ center = QGuiApplication::screens().at(*monitor)->geometry().center();
+ } else {
+ center = QGuiApplication::primaryScreen()->geometry().center();
+ }
+
+ w->move(center - w->rect().center());
+}
+
+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);
+ }
+ }
}
void GeometrySettings::setDockSize(const QString& name, int size)
diff --git a/src/settings.h b/src/settings.h
index 1575b3cd..bbf008f0 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -28,6 +28,8 @@ namespace MOBase {
class IPluginGame;
}
+class QSplitter;
+
class PluginContainer;
struct ServerInfo;
class Settings;
@@ -49,18 +51,24 @@ class GeometrySettings
public:
GeometrySettings(QSettings& s);
- std::optional<QSize> getToolbarSize() const;
- std::optional<Qt::ToolButtonStyle> getToolbarButtonStyle() const;
-
std::optional<bool> getMenubarVisible() const;
+ void setMenubarVisible(bool b);
+
+ bool restoreToolbars(QMainWindow* w) const;
+ void saveToolbars(const QMainWindow* w);
+
std::optional<bool> getStatusbarVisible() const;
- std::optional<QByteArray> getMainSplitterState() const;
+ void setStatusbarVisible(bool b);
+
std::optional<bool> getFiltersVisible() const;
QStringList getModInfoTabOrder() const;
void setModInfoTabOrder(const QString& names);
std::optional<int> getMainWindowMonitor() const;
+ void centerOnMainWindowMonitor(QWidget* w);
+ void saveMainWindowMonitor(const QMainWindow* w);
+
void setDockSize(const QString& name, int size);
std::optional<int> getDockSize(const QString& name) const;
@@ -215,6 +223,9 @@ public:
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)