aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalanto <62221668+Salanto@users.noreply.github.com>2024-07-11 15:52:34 +0200
committerSalanto <62221668+Salanto@users.noreply.github.com>2024-07-11 15:52:34 +0200
commitd9aada29009c66c6d146d88b20ab43f967653566 (patch)
treed3d93edb4d4ff93b3fda493f0e0e1a68bcdb3a78
parentefd2571459924f40718130f7edd28a72a76b12d7 (diff)
Add Courtroom position restore
-rw-r--r--src/charselect.cpp4
-rw-r--r--src/courtroom.cpp29
-rw-r--r--src/courtroom.h3
-rw-r--r--src/lobby.cpp2
-rw-r--r--src/options.cpp25
-rw-r--r--src/options.h10
-rw-r--r--src/widgets/aooptionsdialog.cpp6
7 files changed, 65 insertions, 14 deletions
diff --git a/src/charselect.cpp b/src/charselect.cpp
index 8bce410a..d36220aa 100644
--- a/src/charselect.cpp
+++ b/src/charselect.cpp
@@ -230,9 +230,9 @@ void Courtroom::on_char_button_context_menu_requested(const QPoint &pos)
}
QMenu *menu = new QMenu(this);
- menu->addAction(QString("Edit " + char_name + "/char.ini"), this, [=] { QDesktopServices::openUrl(QUrl::fromLocalFile(char_ini_path)); });
+ menu->addAction(QString("Edit " + char_name + "/char.ini"), this, [=, this] { QDesktopServices::openUrl(QUrl::fromLocalFile(char_ini_path)); });
menu->addSeparator();
- menu->addAction(QString("Open character folder " + char_name), this, [=] {
+ menu->addAction(QString("Open character folder " + char_name), this, [=, this] {
QString p_path = ao_app->get_real_path(VPath("characters/" + char_name + "/"));
if (!dir_exists(p_path))
{
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 75f45570..1a7c7618 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -7,14 +7,12 @@
// #define DEBUG_TRANSITION
Courtroom::Courtroom(AOApplication *p_ao_app)
- : QMainWindow()
+ : QMainWindow(),
+ ao_app{p_ao_app}
{
- ao_app = p_ao_app;
-
- this->setWindowFlags((this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
+ setWindowFlags((this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
ao_app->initBASS();
-
keepalive_timer = new QTimer(this);
keepalive_timer->start(45000);
@@ -1372,6 +1370,14 @@ void Courtroom::done_received()
show();
+ if (Options::getInstance().restoreWindowPositionEnabled()) {
+ auto maybe_point = Options::getInstance().windowPosition("courtroom");
+ if (maybe_point.has_value()) {
+ qDebug() << maybe_point.value();
+ QMainWindow::move(maybe_point.value());
+ }
+ }
+
ui_spectator->show();
}
@@ -1907,6 +1913,13 @@ void Courtroom::set_judge_buttons()
show_judge_controls(ao_app->get_pos_is_judge(current_or_default_side()));
}
+void Courtroom::closeEvent(QCloseEvent *event)
+{
+ Options::getInstance().setWindowPosition("courtroom", pos());
+ qDebug() << pos();
+ QMainWindow::closeEvent(event);
+}
+
void Courtroom::on_chat_return_pressed()
{
if (is_muted)
@@ -5191,7 +5204,7 @@ void Courtroom::on_pos_dropdown_context_menu_requested(const QPoint &pos)
QMenu *menu = new QMenu(ui_iniswap_dropdown);
menu->setAttribute(Qt::WA_DeleteOnClose);
- menu->addAction(QString("Open background " + current_background), this, [=] {
+ menu->addAction(QString("Open background " + current_background), this, [=, this] {
QString p_path = ao_app->get_real_path(VPath("background/" + current_background + "/"));
if (!dir_exists(p_path))
{
@@ -5303,7 +5316,7 @@ void Courtroom::on_iniswap_context_menu_requested(const QPoint &pos)
}
menu->addSeparator();
- menu->addAction(QString("Open character folder " + current_char), this, [=] {
+ menu->addAction(QString("Open character folder " + current_char), this, [=, this] {
QString p_path = ao_app->get_real_path(VPath("characters/" + current_char + "/"));
if (!dir_exists(p_path))
{
@@ -6127,7 +6140,7 @@ void Courtroom::on_text_color_context_menu_requested(const QPoint &pos)
QMenu *menu = new QMenu(this);
menu->setAttribute(Qt::WA_DeleteOnClose);
- menu->addAction(QString("Open currently used chat_config.ini"), this, [=] {
+ menu->addAction(QString("Open currently used chat_config.ini"), this, [=, this] {
QString p_path = ao_app->get_asset("chat_config.ini", Options::getInstance().theme(), Options::getInstance().subTheme(), ao_app->default_theme, ao_app->get_chat(current_char));
if (!file_exists(p_path))
{
diff --git a/src/courtroom.h b/src/courtroom.h
index c0fff0ad..ba771acf 100644
--- a/src/courtroom.h
+++ b/src/courtroom.h
@@ -297,6 +297,9 @@ public:
void set_judge_state(JudgeState new_state);
void set_judge_buttons();
+protected:
+ virtual void closeEvent(QCloseEvent *event) override;
+
private:
AOApplication *ao_app;
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 9918ca3d..78797c02 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -162,7 +162,7 @@ void Lobby::loadUI()
FROM_UI(QTextBrowser, server_description_text);
FROM_UI(QPushButton, connect_button);
connect(ui_connect_button, &QPushButton::released, net_manager, &NetworkManager::join_to_server);
- connect(ui_connect_button, &QPushButton::released, this, [=] { ui_server_player_count_lbl->setText(tr("Joining Server...")); });
+ connect(ui_connect_button, &QPushButton::released, this, [=, this] { ui_server_player_count_lbl->setText(tr("Joining Server...")); });
connect(net_manager, &NetworkManager::server_connected, ui_connect_button, &QPushButton::setEnabled);
FROM_UI(QTextBrowser, motd_text);
diff --git a/src/options.cpp b/src/options.cpp
index 9145aa4f..0b963d60 100644
--- a/src/options.cpp
+++ b/src/options.cpp
@@ -763,3 +763,28 @@ QString Options::getUIAsset(QString f_asset_name)
qWarning() << "Unable to locate ui-asset" << f_asset_name << "in theme" << theme() << "Defaulting to embeeded asset.";
return QString(":/data/ui/" + f_asset_name);
}
+
+void Options::setWindowPosition(QString widget, QPoint position)
+{
+ config.setValue("windows/position_" + widget, position);
+}
+
+std::optional<QPoint> Options::windowPosition(QString widget)
+{
+ QPoint point = config.value("windows/position_" + widget, QPoint()).toPoint();
+ if (point.isNull())
+ {
+ return std::nullopt;
+ }
+ return std::optional<QPoint>(point);
+}
+
+bool Options::restoreWindowPositionEnabled() const
+{
+ return config.value("windows/restore", false).toBool();
+}
+
+void Options::setRestoreWindowPositionEnabled(bool state)
+{
+ config.setValue("windows/restore", state);
+}
diff --git a/src/options.h b/src/options.h
index 4ccc3016..65501774 100644
--- a/src/options.h
+++ b/src/options.h
@@ -5,6 +5,8 @@
#include <QCoreApplication>
#include <QSettings>
+#include <QPoint>
+
class Options
{
public:
@@ -269,6 +271,12 @@ public:
// Theming Nonesense!
QString getUIAsset(QString f_asset_name);
+ void setWindowPosition(QString widget, QPoint position);
+ std::optional<QPoint> windowPosition(QString widget);
+
+ bool restoreWindowPositionEnabled() const;
+ void setRestoreWindowPositionEnabled(bool state);
+
private:
/**
* @brief QSettings object for config.ini
@@ -280,6 +288,8 @@ private:
*/
QSettings favorite;
+ QSettings windows;
+
void migrateCallwords();
/**
diff --git a/src/widgets/aooptionsdialog.cpp b/src/widgets/aooptionsdialog.cpp
index 4d55652e..704e407f 100644
--- a/src/widgets/aooptionsdialog.cpp
+++ b/src/widgets/aooptionsdialog.cpp
@@ -157,10 +157,10 @@ void AOOptionsDialog::registerOption(const QString &widgetName, V (Options::*get
}
OptionEntry entry;
- entry.load = [=] {
+ entry.load = [=, this] {
setWidgetData<T, V>(widget, (Options::getInstance().*getter)());
};
- entry.save = [=] {
+ entry.save = [=, this] {
(Options::getInstance().*setter)(widgetData<T, V>(widget));
};
@@ -323,7 +323,7 @@ void AOOptionsDialog::setupUI()
connect(ui_theme_reload_button, &QPushButton::clicked, this, &::AOOptionsDialog::onReloadThemeClicked);
FROM_UI(QPushButton, theme_folder_button);
- connect(ui_theme_folder_button, &QPushButton::clicked, this, [=] {
+ connect(ui_theme_folder_button, &QPushButton::clicked, this, [=, this] {
QString p_path = ao_app->get_real_path(ao_app->get_theme_path("", ui_theme_combobox->itemText(ui_theme_combobox->currentIndex())));
if (!dir_exists(p_path))
{