diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 616e1da32a..b9194c9e80 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -106,6 +106,7 @@ namespace gui const QString fs = "FileSystem"; const QString gs_frame = "GSFrame"; const QString trophy = "Trophy"; + const QString patches = "Patches"; const QString savedata = "SaveData"; const QString users = "Users"; const QString notes = "Notes"; @@ -213,6 +214,9 @@ namespace gui const gui_save tr_games_state = gui_save(trophy, "games_state", QByteArray()); const gui_save tr_trophy_state = gui_save(trophy, "trophy_state", QByteArray()); + const gui_save pm_geometry = gui_save(patches, "geometry", QByteArray()); + const gui_save pm_splitter_state = gui_save(patches, "splitter_state", QByteArray()); + const gui_save sd_geometry = gui_save(savedata, "geometry", QByteArray()); const gui_save sd_icon_size = gui_save(savedata, "icon_size", 60); const gui_save sd_icon_color = gui_save(savedata, "icon_color", gl_icon_color); diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index ca02f8e5b5..de390fa09b 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -1551,7 +1551,7 @@ void main_window::CreateConnects() connect(ui->actionManage_Game_Patches, &QAction::triggered, [this] { - patch_manager_dialog patch_manager(this); + patch_manager_dialog patch_manager(m_gui_settings, this); patch_manager.exec(); }); diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.cpp b/rpcs3/rpcs3qt/patch_manager_dialog.cpp index 3f0d38f05d..20ccbc3f04 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/patch_manager_dialog.cpp @@ -11,6 +11,7 @@ #include "ui_patch_manager_dialog.h" #include "patch_manager_dialog.h" #include "table_item_delegate.h" +#include "gui_settings.h" #include "qt_utils.h" #include "Utilities/File.h" #include "util/logs.hpp" @@ -35,8 +36,9 @@ enum patch_role : int persistance_role }; -patch_manager_dialog::patch_manager_dialog(QWidget* parent) +patch_manager_dialog::patch_manager_dialog(std::shared_ptr gui_settings, QWidget* parent) : QDialog(parent) + , m_gui_settings(gui_settings) , ui(new Ui::patch_manager_dialog) { ui->setupUi(this); @@ -66,21 +68,43 @@ patch_manager_dialog::patch_manager_dialog(QWidget* parent) save_config(); } }); - - refresh(); - - resize(QGuiApplication::primaryScreen()->availableSize() * 0.7); } patch_manager_dialog::~patch_manager_dialog() { + // Save gui settings + m_gui_settings->SetValue(gui::pm_geometry, saveGeometry()); + m_gui_settings->SetValue(gui::pm_splitter_state, ui->splitter->saveState()); + delete ui; } -void patch_manager_dialog::refresh() +int patch_manager_dialog::exec() +{ + show(); + refresh(true); + return QDialog::exec(); +} + +void patch_manager_dialog::refresh(bool restore_layout) { load_patches(); populate_tree(); + + if (restore_layout) + { + if (!restoreGeometry(m_gui_settings->GetValue(gui::pm_geometry).toByteArray())) + { + resize(QGuiApplication::primaryScreen()->availableSize() * 0.7); + } + + if (!ui->splitter->restoreState(m_gui_settings->GetValue(gui::pm_splitter_state).toByteArray())) + { + const int width_left = ui->splitter->width() * 0.7; + const int width_right = ui->splitter->width() - width_left; + ui->splitter->setSizes({ width_left, width_right }); + } + } } void patch_manager_dialog::load_patches() diff --git a/rpcs3/rpcs3qt/patch_manager_dialog.h b/rpcs3/rpcs3qt/patch_manager_dialog.h index ebcdb3dcbd..59c3b151db 100644 --- a/rpcs3/rpcs3qt/patch_manager_dialog.h +++ b/rpcs3/rpcs3qt/patch_manager_dialog.h @@ -12,14 +12,18 @@ namespace Ui class patch_manager_dialog; } +class gui_settings; + class patch_manager_dialog : public QDialog { Q_OBJECT public: - explicit patch_manager_dialog(QWidget* parent = nullptr); + explicit patch_manager_dialog(std::shared_ptr gui_settings, QWidget* parent = nullptr); ~patch_manager_dialog(); + int exec() override; + private Q_SLOTS: void filter_patches(const QString& term); void on_item_selected(QTreeWidgetItem *current, QTreeWidgetItem *previous); @@ -28,13 +32,15 @@ private Q_SLOTS: void on_legacy_patches_enabled(int state); private: - void refresh(); + void refresh(bool restore_layout = false); void load_patches(); void populate_tree(); void save_config(); void update_patch_info(const patch_engine::patch_info& info); bool is_valid_file(const QMimeData& md, QStringList* drop_paths = nullptr); + std::shared_ptr m_gui_settings; + patch_engine::patch_map m_map; bool m_legacy_patches_enabled = false;