Qt: move some more settings to persistent_settings

This commit is contained in:
Megamouse 2020-08-02 16:03:30 +02:00
parent 70fb5712e5
commit 8799eebfe1
15 changed files with 176 additions and 88 deletions

View file

@ -571,10 +571,10 @@ void game_list_frame::Refresh(const bool from_drive, const bool scroll_after)
mutex_cat.lock(); mutex_cat.lock();
const QString serial = qstr(game.serial); const QString serial = qstr(game.serial);
const QString note = m_gui_settings->GetValue(gui::notes, serial, "").toString();
const QString title = m_gui_settings->GetValue(gui::titles, serial, "").toString().simplified();
// Read persistent_settings values // Read persistent_settings values
QString note = m_persistent_settings->GetValue(gui::persistent::notes, serial, "").toString();
QString title = m_persistent_settings->GetValue(gui::persistent::titles, serial, "").toString().simplified();
QString last_played = m_persistent_settings->GetValue(gui::persistent::last_played, serial, "").toString(); QString last_played = m_persistent_settings->GetValue(gui::persistent::last_played, serial, "").toString();
int playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toInt(); int playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toInt();
@ -588,6 +588,27 @@ void game_list_frame::Refresh(const bool from_drive, const bool scroll_after)
{ {
playtime = m_gui_settings->GetValue(gui::persistent::playtime, serial, 0).toInt(); playtime = m_gui_settings->GetValue(gui::persistent::playtime, serial, 0).toInt();
} }
// Deprecated values older than August 2nd 2020
if (note.isEmpty())
{
note = m_gui_settings->GetValue(gui::persistent::notes, serial, "").toString();
// Move to persistent settings
if (!note.isEmpty())
{
m_persistent_settings->SetValue(gui::persistent::notes, serial, note);
}
}
if (title.isEmpty())
{
title = m_gui_settings->GetValue(gui::persistent::titles, serial, "").toString().simplified();
// Move to persistent settings
if (!title.isEmpty())
{
m_persistent_settings->SetValue(gui::persistent::titles, serial, title);
}
}
// Set persistent_settings values if values exist // Set persistent_settings values if values exist
if (!last_played.isEmpty()) if (!last_played.isEmpty())
@ -870,7 +891,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
? tr("&Reboot with custom configuration") ? tr("&Reboot with custom configuration")
: tr("&Boot with custom configuration")); : tr("&Boot with custom configuration"));
boot_custom->setFont(font); boot_custom->setFont(font);
connect(boot_custom, &QAction::triggered, [=, this] connect(boot_custom, &QAction::triggered, [this, gameinfo]
{ {
sys_log.notice("Booting from gamelist per context menu..."); sys_log.notice("Booting from gamelist per context menu...");
Q_EMIT RequestBoot(gameinfo); Q_EMIT RequestBoot(gameinfo);
@ -902,7 +923,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (gameinfo->hasCustomConfig) if (gameinfo->hasCustomConfig)
{ {
QAction* remove_custom_config = remove_menu->addAction(tr("&Remove Custom Configuration")); QAction* remove_custom_config = remove_menu->addAction(tr("&Remove Custom Configuration"));
connect(remove_custom_config, &QAction::triggered, [=, this]() connect(remove_custom_config, &QAction::triggered, [this, current_game, gameinfo]()
{ {
if (RemoveCustomConfiguration(current_game.serial, gameinfo, true)) if (RemoveCustomConfiguration(current_game.serial, gameinfo, true))
{ {
@ -913,7 +934,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (gameinfo->hasCustomPadConfig) if (gameinfo->hasCustomPadConfig)
{ {
QAction* remove_custom_pad_config = remove_menu->addAction(tr("&Remove Custom Gamepad Configuration")); QAction* remove_custom_pad_config = remove_menu->addAction(tr("&Remove Custom Gamepad Configuration"));
connect(remove_custom_pad_config, &QAction::triggered, [=, this]() connect(remove_custom_pad_config, &QAction::triggered, [this, current_game, gameinfo]()
{ {
if (RemoveCustomPadConfiguration(current_game.serial, gameinfo, true)) if (RemoveCustomPadConfiguration(current_game.serial, gameinfo, true))
{ {
@ -925,22 +946,22 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
{ {
remove_menu->addSeparator(); remove_menu->addSeparator();
QAction* remove_shaders_cache = remove_menu->addAction(tr("&Remove Shaders Cache")); QAction* remove_shaders_cache = remove_menu->addAction(tr("&Remove Shaders Cache"));
connect(remove_shaders_cache, &QAction::triggered, [=, this]() connect(remove_shaders_cache, &QAction::triggered, [this, cache_base_dir]()
{ {
RemoveShadersCache(cache_base_dir, true); RemoveShadersCache(cache_base_dir, true);
}); });
QAction* remove_ppu_cache = remove_menu->addAction(tr("&Remove PPU Cache")); QAction* remove_ppu_cache = remove_menu->addAction(tr("&Remove PPU Cache"));
connect(remove_ppu_cache, &QAction::triggered, [=, this]() connect(remove_ppu_cache, &QAction::triggered, [this, cache_base_dir]()
{ {
RemovePPUCache(cache_base_dir, true); RemovePPUCache(cache_base_dir, true);
}); });
QAction* remove_spu_cache = remove_menu->addAction(tr("&Remove SPU Cache")); QAction* remove_spu_cache = remove_menu->addAction(tr("&Remove SPU Cache"));
connect(remove_spu_cache, &QAction::triggered, [=, this]() connect(remove_spu_cache, &QAction::triggered, [this, cache_base_dir]()
{ {
RemoveSPUCache(cache_base_dir, true); RemoveSPUCache(cache_base_dir, true);
}); });
QAction* remove_all_caches = remove_menu->addAction(tr("&Remove All Caches")); QAction* remove_all_caches = remove_menu->addAction(tr("&Remove All Caches"));
connect(remove_all_caches, &QAction::triggered, [=, this]() connect(remove_all_caches, &QAction::triggered, [this, cache_base_dir]()
{ {
if (QMessageBox::question(this, tr("Confirm Removal"), tr("Remove all caches?")) != QMessageBox::Yes) if (QMessageBox::question(this, tr("Confirm Removal"), tr("Remove all caches?")) != QMessageBox::Yes)
return; return;
@ -955,7 +976,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (gameinfo->hasCustomConfig) if (gameinfo->hasCustomConfig)
{ {
QAction* open_config_dir = menu.addAction(tr("&Open Custom Config Folder")); QAction* open_config_dir = menu.addAction(tr("&Open Custom Config Folder"));
connect(open_config_dir, &QAction::triggered, [=, this]() connect(open_config_dir, &QAction::triggered, [current_game]()
{ {
const std::string new_config_path = Emulator::GetCustomConfigPath(current_game.serial); const std::string new_config_path = Emulator::GetCustomConfigPath(current_game.serial);
@ -971,7 +992,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (fs::is_dir(data_base_dir)) if (fs::is_dir(data_base_dir))
{ {
QAction* open_data_dir = menu.addAction(tr("&Open Data Folder")); QAction* open_data_dir = menu.addAction(tr("&Open Data Folder"));
connect(open_data_dir, &QAction::triggered, [=, this]() connect(open_data_dir, &QAction::triggered, [data_base_dir]()
{ {
gui::utils::open_dir(data_base_dir); gui::utils::open_dir(data_base_dir);
}); });
@ -986,12 +1007,12 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
QAction* copy_name = info_menu->addAction(tr("&Copy Name")); QAction* copy_name = info_menu->addAction(tr("&Copy Name"));
QAction* copy_serial = info_menu->addAction(tr("&Copy Serial")); QAction* copy_serial = info_menu->addAction(tr("&Copy Serial"));
connect(boot, &QAction::triggered, [=, this]() connect(boot, &QAction::triggered, [this, gameinfo]()
{ {
sys_log.notice("Booting from gamelist per context menu..."); sys_log.notice("Booting from gamelist per context menu...");
Q_EMIT RequestBoot(gameinfo, gameinfo->hasCustomConfig); Q_EMIT RequestBoot(gameinfo, gameinfo->hasCustomConfig);
}); });
connect(configure, &QAction::triggered, [=, this]() connect(configure, &QAction::triggered, [this, current_game, gameinfo]()
{ {
settings_dialog dlg(m_gui_settings, m_emu_settings, 0, this, &current_game); settings_dialog dlg(m_gui_settings, m_emu_settings, 0, this, &current_game);
connect(&dlg, &settings_dialog::EmuSettingsApplied, [this, gameinfo]() connect(&dlg, &settings_dialog::EmuSettingsApplied, [this, gameinfo]()
@ -1005,7 +1026,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
}); });
dlg.exec(); dlg.exec();
}); });
connect(pad_configure, &QAction::triggered, [=, this]() connect(pad_configure, &QAction::triggered, [this, current_game, gameinfo]()
{ {
pad_settings_dialog dlg(m_gui_settings, this, &current_game); pad_settings_dialog dlg(m_gui_settings, this, &current_game);
@ -1032,7 +1053,7 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
CreatePPUCache(gameinfo); CreatePPUCache(gameinfo);
} }
}); });
connect(remove_game, &QAction::triggered, [=, this] connect(remove_game, &QAction::triggered, [this, current_game, gameinfo, cache_base_dir, name]
{ {
if (current_game.path.empty()) if (current_game.path.empty())
{ {
@ -1069,22 +1090,22 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
} }
} }
}); });
connect(open_game_folder, &QAction::triggered, [=, this]() connect(open_game_folder, &QAction::triggered, [current_game]()
{ {
gui::utils::open_dir(current_game.path); gui::utils::open_dir(current_game.path);
}); });
connect(check_compat, &QAction::triggered, [=, this] connect(check_compat, &QAction::triggered, [serial]
{ {
const QString link = "https://rpcs3.net/compatibility?g=" + serial; const QString link = "https://rpcs3.net/compatibility?g=" + serial;
QDesktopServices::openUrl(QUrl(link)); QDesktopServices::openUrl(QUrl(link));
}); });
connect(download_compat, &QAction::triggered, [=, this] connect(download_compat, &QAction::triggered, [this]
{ {
m_game_compat->RequestCompatibility(true); m_game_compat->RequestCompatibility(true);
}); });
connect(rename_title, &QAction::triggered, [=, this] connect(rename_title, &QAction::triggered, [this, name, serial, global_pos]
{ {
const QString custom_title = m_gui_settings->GetValue(gui::titles, serial, "").toString(); const QString custom_title = m_persistent_settings->GetValue(gui::persistent::titles, serial, "").toString();
const QString old_title = custom_title.isEmpty() ? name : custom_title; const QString old_title = custom_title.isEmpty() ? name : custom_title;
QString new_title; QString new_title;
@ -1100,20 +1121,20 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (new_title.isEmpty() || new_title == name) if (new_title.isEmpty() || new_title == name)
{ {
m_titles.remove(serial); m_titles.remove(serial);
m_gui_settings->RemoveValue(gui::titles, serial); m_persistent_settings->RemoveValue(gui::persistent::titles, serial);
} }
else else
{ {
m_titles.insert(serial, new_title); m_titles.insert(serial, new_title);
m_gui_settings->SetValue(gui::titles, serial, new_title); m_persistent_settings->SetValue(gui::persistent::titles, serial, new_title);
} }
Refresh(true); // full refresh in order to reliably sort the list Refresh(true); // full refresh in order to reliably sort the list
} }
}); });
connect(edit_notes, &QAction::triggered, [=, this] connect(edit_notes, &QAction::triggered, [this, name, serial]
{ {
bool accepted; bool accepted;
const QString old_notes = m_gui_settings->GetValue(gui::notes, serial, "").toString(); const QString old_notes = m_persistent_settings->GetValue(gui::persistent::notes, serial, "").toString();
const QString new_notes = QInputDialog::getMultiLineText(this, tr("Edit Tooltip Notes"), tr("%0\n%1").arg(name).arg(serial), old_notes, &accepted); const QString new_notes = QInputDialog::getMultiLineText(this, tr("Edit Tooltip Notes"), tr("%0\n%1").arg(name).arg(serial), old_notes, &accepted);
if (accepted) if (accepted)
@ -1121,25 +1142,25 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
if (new_notes.simplified().isEmpty()) if (new_notes.simplified().isEmpty())
{ {
m_notes.remove(serial); m_notes.remove(serial);
m_gui_settings->RemoveValue(gui::notes, serial); m_persistent_settings->RemoveValue(gui::persistent::notes, serial);
} }
else else
{ {
m_notes.insert(serial, new_notes); m_notes.insert(serial, new_notes);
m_gui_settings->SetValue(gui::notes, serial, new_notes); m_persistent_settings->SetValue(gui::persistent::notes, serial, new_notes);
} }
Refresh(); Refresh();
} }
}); });
connect(copy_info, &QAction::triggered, [=, this] connect(copy_info, &QAction::triggered, [name, serial]
{ {
QApplication::clipboard()->setText(name % QStringLiteral(" [") % serial % QStringLiteral("]")); QApplication::clipboard()->setText(name % QStringLiteral(" [") % serial % QStringLiteral("]"));
}); });
connect(copy_name, &QAction::triggered, [=, this] connect(copy_name, &QAction::triggered, [name]
{ {
QApplication::clipboard()->setText(name); QApplication::clipboard()->setText(name);
}); });
connect(copy_serial, &QAction::triggered, [=, this] connect(copy_serial, &QAction::triggered, [serial]
{ {
QApplication::clipboard()->setText(serial); QApplication::clipboard()->setText(serial);
}); });

View file

@ -58,8 +58,14 @@ void gui_application::Init()
m_gui_settings.reset(new gui_settings()); m_gui_settings.reset(new gui_settings());
m_persistent_settings.reset(new persistent_settings()); m_persistent_settings.reset(new persistent_settings());
// Get deprecated active user (before August 2nd 2020)
QString active_user = m_gui_settings->GetValue(gui::um_active_user).toString();
// Get active user with deprecated active user as fallback
active_user = m_persistent_settings->GetCurrentUser(active_user.isEmpty() ? "00000001" : active_user);
// Force init the emulator // Force init the emulator
InitializeEmulator(m_gui_settings->GetCurrentUser().toStdString(), true, m_show_gui); InitializeEmulator(active_user.toStdString(), true, m_show_gui);
// Create the main window // Create the main window
if (m_show_gui) if (m_show_gui)

View file

@ -26,23 +26,6 @@ gui_settings::gui_settings(QObject* parent) : settings(parent)
} }
} }
QString gui_settings::GetCurrentUser()
{
// load user
bool is_valid_user;
const QString user = GetValue(gui::um_active_user).toString();
const u32 user_id = user.toInt(&is_valid_user);
// set user if valid
if (is_valid_user && user_id > 0)
{
return user;
}
cfg_log.fatal("Could not parse user setting: '%s' = '%d'.", user.toStdString(), user_id);
return QString();
}
bool gui_settings::ChangeToConfig(const QString& config_name) bool gui_settings::ChangeToConfig(const QString& config_name)
{ {
if (m_current_name == config_name) if (m_current_name == config_name)

View file

@ -107,10 +107,6 @@ namespace gui
const QString gs_frame = "GSFrame"; const QString gs_frame = "GSFrame";
const QString trophy = "Trophy"; const QString trophy = "Trophy";
const QString patches = "Patches"; const QString patches = "Patches";
const QString savedata = "SaveData";
const QString users = "Users";
const QString notes = "Notes";
const QString titles = "Titles";
const QString localization = "Localization"; const QString localization = "Localization";
const QString pad_settings = "PadSettings"; const QString pad_settings = "PadSettings";
@ -186,7 +182,7 @@ namespace gui
const gui_save m_currentConfig = gui_save(meta, "currentConfig", Settings); const gui_save m_currentConfig = gui_save(meta, "currentConfig", Settings);
const gui_save m_currentStylesheet = gui_save(meta, "currentStylesheet", Default); const gui_save m_currentStylesheet = gui_save(meta, "currentStylesheet", Default);
const gui_save m_saveNotes = gui_save(meta, "saveNotes", QVariantMap()); const gui_save m_saveNotes = gui_save(meta, "saveNotes", QVariantMap()); // Deprecated
const gui_save m_showDebugTab = gui_save(meta, "showDebugTab", false); const gui_save m_showDebugTab = gui_save(meta, "showDebugTab", false);
const gui_save m_enableUIColors = gui_save(meta, "enableUIColors", false); const gui_save m_enableUIColors = gui_save(meta, "enableUIColors", false);
const gui_save m_richPresence = gui_save(meta, "useRichPresence", true); const gui_save m_richPresence = gui_save(meta, "useRichPresence", true);
@ -224,7 +220,7 @@ namespace gui
const gui_save sd_icon_color = gui_save(savedata, "icon_color", gl_icon_color); const gui_save sd_icon_color = gui_save(savedata, "icon_color", gl_icon_color);
const gui_save um_geometry = gui_save(users, "geometry", QByteArray()); const gui_save um_geometry = gui_save(users, "geometry", QByteArray());
const gui_save um_active_user = gui_save(users, "active_user", "00000001"); const gui_save um_active_user = gui_save(users, "active_user", ""); // Deprecated
const gui_save loc_language = gui_save(localization, "language", "en"); const gui_save loc_language = gui_save(localization, "language", "en");
@ -240,8 +236,6 @@ class gui_settings : public settings
public: public:
explicit gui_settings(QObject* parent = nullptr); explicit gui_settings(QObject* parent = nullptr);
QString GetCurrentUser();
/** Changes the settings file to the destination preset*/ /** Changes the settings file to the destination preset*/
bool ChangeToConfig(const QString& config_name); bool ChangeToConfig(const QString& config_name);

View file

@ -1551,7 +1551,7 @@ void main_window::CreateConnects()
connect(ui->confSavedataManagerAct, &QAction::triggered, [this] connect(ui->confSavedataManagerAct, &QAction::triggered, [this]
{ {
save_manager_dialog* save_manager = new save_manager_dialog(m_gui_settings); save_manager_dialog* save_manager = new save_manager_dialog(m_gui_settings, m_persistent_settings);
connect(this, &main_window::RequestTrophyManagerRepaint, save_manager, &save_manager_dialog::HandleRepaintUiRequest); connect(this, &main_window::RequestTrophyManagerRepaint, save_manager, &save_manager_dialog::HandleRepaintUiRequest);
save_manager->show(); save_manager->show();
}); });
@ -1594,7 +1594,7 @@ void main_window::CreateConnects()
connect(ui->actionManage_Users, &QAction::triggered, [this] connect(ui->actionManage_Users, &QAction::triggered, [this]
{ {
user_manager_dialog user_manager(m_gui_settings, this); user_manager_dialog user_manager(m_gui_settings, m_persistent_settings, this);
user_manager.exec(); user_manager.exec();
m_game_list_frame->Refresh(true); // New user may have different games unlocked. m_game_list_frame->Refresh(true); // New user may have different games unlocked.
}); });

View file

@ -1,4 +1,7 @@
#include "persistent_settings.h" #include "stdafx.h"
#include "persistent_settings.h"
LOG_CHANNEL(cfg_log, "CFG");
persistent_settings::persistent_settings(QObject* parent) : settings(parent) persistent_settings::persistent_settings(QObject* parent) : settings(parent)
{ {
@ -27,3 +30,25 @@ QString persistent_settings::GetLastPlayed(const QString& serial)
{ {
return m_last_played[serial]; return m_last_played[serial];
} }
QString persistent_settings::GetCurrentUser(const QString& fallback) const
{
// Load user
QString user = GetValue(gui::persistent::active_user).toString();
if (user.isEmpty())
{
user = fallback;
}
bool is_valid_user;
const u32 user_id = user.toInt(&is_valid_user);
// Set user if valid
if (is_valid_user && user_id > 0)
{
return user;
}
cfg_log.fatal("Could not parse user setting: '%s' = '%d'.", user.toStdString(), user_id);
return QString();
}

View file

@ -12,11 +12,17 @@ namespace gui
// Entry names // Entry names
const QString playtime = "Playtime"; const QString playtime = "Playtime";
const QString last_played = "LastPlayed"; const QString last_played = "LastPlayed";
const QString notes = "Notes";
const QString titles = "Titles";
// Date format // Date format
const QString last_played_date_format_old = "MMMM d yyyy"; const QString last_played_date_format_old = "MMMM d yyyy";
const QString last_played_date_format_new = "MMMM d, yyyy"; const QString last_played_date_format_new = "MMMM d, yyyy";
const Qt::DateFormat last_played_date_format = Qt::DateFormat::ISODate; const Qt::DateFormat last_played_date_format = Qt::DateFormat::ISODate;
// GUI Saves
const gui_save save_notes = gui_save(savedata, "notes", QVariantMap());
const gui_save active_user = gui_save(users, "active_user", "");
} }
} }
@ -28,6 +34,8 @@ class persistent_settings : public settings
public: public:
explicit persistent_settings(QObject* parent = nullptr); explicit persistent_settings(QObject* parent = nullptr);
QString GetCurrentUser(const QString& fallback) const;
public Q_SLOTS: public Q_SLOTS:
void SetPlaytime(const QString& serial, const qint64& elapsed); void SetPlaytime(const QString& serial, const qint64& elapsed);
qint64 GetPlaytime(const QString& serial); qint64 GetPlaytime(const QString& serial);

View file

@ -2,6 +2,7 @@
#include "save_data_list_dialog.h" #include "save_data_list_dialog.h"
#include "save_data_info_dialog.h" #include "save_data_info_dialog.h"
#include "gui_settings.h" #include "gui_settings.h"
#include "persistent_settings.h"
#include <QPushButton> #include <QPushButton>
#include <QHBoxLayout> #include <QHBoxLayout>
@ -33,6 +34,7 @@ save_data_list_dialog::save_data_list_dialog(const std::vector<SaveDataEntry>& e
setMinimumSize(QSize(400, 400)); setMinimumSize(QSize(400, 400));
m_gui_settings.reset(new gui_settings()); m_gui_settings.reset(new gui_settings());
m_persistent_settings.reset(new persistent_settings());
// Table // Table
m_list = new QTableWidget(this); m_list = new QTableWidget(this);
@ -103,12 +105,12 @@ save_data_list_dialog::save_data_list_dialog(const std::vector<SaveDataEntry>& e
connect(m_list, &QTableWidget::cellChanged, [&](int row, int col) connect(m_list, &QTableWidget::cellChanged, [&](int row, int col)
{ {
const int originalIndex = m_list->item(row, 0)->data(Qt::UserRole).toInt(); const int original_index = m_list->item(row, 0)->data(Qt::UserRole).toInt();
const SaveDataEntry originalEntry = m_save_entries[originalIndex]; const SaveDataEntry original_entry = m_save_entries[original_index];
const QString originalDirName = qstr(originalEntry.dirName); const QString original_dir_name = qstr(original_entry.dirName);
QVariantMap currNotes = m_gui_settings->GetValue(gui::m_saveNotes).toMap(); QVariantMap notes = m_persistent_settings->GetValue(gui::persistent::save_notes).toMap();
currNotes[originalDirName] = m_list->item(row, col)->text(); notes[original_dir_name] = m_list->item(row, col)->text();
m_gui_settings->SetValue(gui::m_saveNotes, currNotes); m_persistent_settings->SetValue(gui::persistent::save_notes, notes);
}); });
m_list->setCurrentCell(focusedEntry, 0); m_list->setCurrentCell(focusedEntry, 0);
@ -179,7 +181,19 @@ void save_data_list_dialog::UpdateList()
m_list->clearContents(); m_list->clearContents();
m_list->setRowCount(::narrow<int>(m_save_entries.size())); m_list->setRowCount(::narrow<int>(m_save_entries.size()));
const QVariantMap currNotes = m_gui_settings->GetValue(gui::m_saveNotes).toMap(); QVariantMap notes = m_persistent_settings->GetValue(gui::persistent::save_notes).toMap();
// Find deprecated values (older than August 2nd 2020)
if (notes.isEmpty())
{
notes = m_gui_settings->GetValue(gui::m_saveNotes).toMap();
// Move to persistent settings
if (!notes.isEmpty())
{
m_persistent_settings->SetValue(gui::persistent::save_notes, notes);
}
}
int row = 0; int row = 0;
for (const SaveDataEntry& entry: m_save_entries) for (const SaveDataEntry& entry: m_save_entries)
@ -204,9 +218,9 @@ void save_data_list_dialog::UpdateList()
QTableWidgetItem* noteItem = new QTableWidgetItem(); QTableWidgetItem* noteItem = new QTableWidgetItem();
noteItem->setFlags(noteItem->flags() | Qt::ItemIsEditable); noteItem->setFlags(noteItem->flags() | Qt::ItemIsEditable);
if (currNotes.contains(dirName)) if (notes.contains(dirName))
{ {
noteItem->setText(currNotes[dirName].toString()); noteItem->setText(notes[dirName].toString());
} }
m_list->setItem(row, 3, noteItem); m_list->setItem(row, 3, noteItem);

View file

@ -10,6 +10,7 @@
#include <QLabel> #include <QLabel>
class gui_settings; class gui_settings;
class persistent_settings;
//Display a list of SaveData. Would need to be initialized. //Display a list of SaveData. Would need to be initialized.
//Can also be used as a Save Data Chooser. //Can also be used as a Save Data Chooser.
@ -41,6 +42,7 @@ private:
std::vector<SaveDataEntry> m_save_entries; std::vector<SaveDataEntry> m_save_entries;
std::shared_ptr<gui_settings> m_gui_settings; std::shared_ptr<gui_settings> m_gui_settings;
std::shared_ptr<persistent_settings> m_persistent_settings;
int m_sort_column = 0; int m_sort_column = 0;
bool m_sort_ascending = true; bool m_sort_ascending = true;

View file

@ -3,6 +3,7 @@
#include "custom_table_widget_item.h" #include "custom_table_widget_item.h"
#include "qt_utils.h" #include "qt_utils.h"
#include "gui_settings.h" #include "gui_settings.h"
#include "persistent_settings.h"
#include "Emu/System.h" #include "Emu/System.h"
#include "Emu/Memory/vm.h" #include "Emu/Memory/vm.h"
@ -91,10 +92,11 @@ namespace
} }
} }
save_manager_dialog::save_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::string dir, QWidget* parent) save_manager_dialog::save_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<persistent_settings> persistent_settings, std::string dir, QWidget* parent)
: QDialog(parent) : QDialog(parent)
, m_dir(dir) , m_dir(dir)
, m_gui_settings(gui_settings) , m_gui_settings(gui_settings)
, m_persistent_settings(persistent_settings)
{ {
setWindowTitle(tr("Save Manager")); setWindowTitle(tr("Save Manager"));
setMinimumSize(QSize(400, 400)); setMinimumSize(QSize(400, 400));
@ -214,12 +216,12 @@ void save_manager_dialog::Init(std::string dir)
{ {
return; return;
} }
const int originalIndex = user_item->data(Qt::UserRole).toInt(); const int original_index = user_item->data(Qt::UserRole).toInt();
const SaveDataEntry originalEntry = m_save_entries[originalIndex]; const SaveDataEntry originalEntry = m_save_entries[original_index];
const QString originalDirName = qstr(originalEntry.dirName); const QString original_dir_name = qstr(originalEntry.dirName);
QVariantMap currNotes = m_gui_settings->GetValue(gui::m_saveNotes).toMap(); QVariantMap notes = m_persistent_settings->GetValue(gui::persistent::save_notes).toMap();
currNotes[originalDirName] = text_item->text(); notes[original_dir_name] = text_item->text();
m_gui_settings->SetValue(gui::m_saveNotes, currNotes); m_persistent_settings->SetValue(gui::persistent::save_notes, notes);
}); });
connect(m_list, &QTableWidget::itemSelectionChanged, this, &save_manager_dialog::UpdateDetails); connect(m_list, &QTableWidget::itemSelectionChanged, this, &save_manager_dialog::UpdateDetails);
} }
@ -236,7 +238,7 @@ void save_manager_dialog::UpdateList()
m_list->clearContents(); m_list->clearContents();
m_list->setRowCount(static_cast<int>(m_save_entries.size())); m_list->setRowCount(static_cast<int>(m_save_entries.size()));
QVariantMap currNotes = m_gui_settings->GetValue(gui::m_saveNotes).toMap(); QVariantMap notes = m_persistent_settings->GetValue(gui::persistent::save_notes).toMap();
if (m_gui_settings->GetValue(gui::m_enableUIColors).toBool()) if (m_gui_settings->GetValue(gui::m_enableUIColors).toBool())
{ {
@ -271,7 +273,7 @@ void save_manager_dialog::UpdateList()
const auto& entry = m_save_entries[i]; const auto& entry = m_save_entries[i];
QString title = qstr(entry.title) + QStringLiteral("\n") + qstr(entry.subtitle); QString title = qstr(entry.title) + QStringLiteral("\n") + qstr(entry.subtitle);
QString dirName = qstr(entry.dirName); QString dir_name = qstr(entry.dirName);
custom_table_widget_item* iconItem = new custom_table_widget_item; custom_table_widget_item* iconItem = new custom_table_widget_item;
iconItem->setData(Qt::UserRole, icons[i]); iconItem->setData(Qt::UserRole, icons[i]);
@ -287,15 +289,15 @@ void save_manager_dialog::UpdateList()
timeItem->setFlags(timeItem->flags() & ~Qt::ItemIsEditable); timeItem->setFlags(timeItem->flags() & ~Qt::ItemIsEditable);
m_list->setItem(i, 2, timeItem); m_list->setItem(i, 2, timeItem);
QTableWidgetItem* dirNameItem = new QTableWidgetItem(dirName); QTableWidgetItem* dirNameItem = new QTableWidgetItem(dir_name);
dirNameItem->setFlags(dirNameItem->flags() & ~Qt::ItemIsEditable); dirNameItem->setFlags(dirNameItem->flags() & ~Qt::ItemIsEditable);
m_list->setItem(i, 3, dirNameItem); m_list->setItem(i, 3, dirNameItem);
QTableWidgetItem* noteItem = new QTableWidgetItem(); QTableWidgetItem* noteItem = new QTableWidgetItem();
noteItem->setFlags(noteItem->flags() | Qt::ItemIsEditable); noteItem->setFlags(noteItem->flags() | Qt::ItemIsEditable);
if (currNotes.contains(dirName)) if (notes.contains(dir_name))
{ {
noteItem->setText(currNotes[dirName].toString()); noteItem->setText(notes[dir_name].toString());
} }
m_list->setItem(i, 4, noteItem); m_list->setItem(i, 4, noteItem);
} }

View file

@ -8,6 +8,7 @@
#include <QTableWidget> #include <QTableWidget>
class gui_settings; class gui_settings;
class persistent_settings;
class save_manager_dialog : public QDialog class save_manager_dialog : public QDialog
{ {
@ -19,7 +20,7 @@ public:
* Plus, there's the added complexity of an additional way in which the dialog will spawn differently. * Plus, there's the added complexity of an additional way in which the dialog will spawn differently.
* There'll be some duplicated code. But, in the future, there'll be no duplicated code. So, I don't care. * There'll be some duplicated code. But, in the future, there'll be no duplicated code. So, I don't care.
*/ */
explicit save_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::string dir = "", QWidget* parent = nullptr); explicit save_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<persistent_settings> persistent_settings, std::string dir = "", QWidget* parent = nullptr);
public Q_SLOTS: public Q_SLOTS:
void HandleRepaintUiRequest(); void HandleRepaintUiRequest();
private Q_SLOTS: private Q_SLOTS:
@ -42,6 +43,7 @@ private:
std::vector<SaveDataEntry> m_save_entries; std::vector<SaveDataEntry> m_save_entries;
std::shared_ptr<gui_settings> m_gui_settings; std::shared_ptr<gui_settings> m_gui_settings;
std::shared_ptr<persistent_settings> m_persistent_settings;
int m_sort_column = 1; int m_sort_column = 1;
bool m_sort_ascending = true; bool m_sort_ascending = true;

View file

@ -37,12 +37,12 @@ void settings::RemoveValue(const QString& key, const QString& name)
} }
} }
QVariant settings::GetValue(const gui_save& entry) QVariant settings::GetValue(const gui_save& entry) const
{ {
return m_settings ? m_settings->value(entry.key + "/" + entry.name, entry.def) : entry.def; return m_settings ? m_settings->value(entry.key + "/" + entry.name, entry.def) : entry.def;
} }
QVariant settings::GetValue(const QString& key, const QString& name, const QString& def) QVariant settings::GetValue(const QString& key, const QString& name, const QVariant& def) const
{ {
return m_settings ? m_settings->value(key + "/" + name, def) : def; return m_settings ? m_settings->value(key + "/" + name, def) : def;
} }
@ -74,6 +74,14 @@ void settings::SetValue(const gui_save& entry, const QVariant& value)
} }
} }
void settings::SetValue(const QString& key, const QVariant& value)
{
if (m_settings)
{
m_settings->setValue(key, value);
}
}
void settings::SetValue(const QString& key, const QString& name, const QVariant& value) void settings::SetValue(const QString& key, const QString& name, const QVariant& value)
{ {
if (m_settings) if (m_settings)

View file

@ -14,6 +14,12 @@ typedef QPair<QString, QSize> q_size_pair;
typedef QList<q_string_pair> q_pair_list; typedef QList<q_string_pair> q_pair_list;
typedef QList<q_size_pair> q_size_list; typedef QList<q_size_pair> q_size_list;
namespace gui
{
const QString savedata = "SaveData";
const QString users = "Users";
}
// Parent Class for GUI settings // Parent Class for GUI settings
class settings : public QObject class settings : public QObject
{ {
@ -25,8 +31,8 @@ public:
QString GetSettingsDir() const; QString GetSettingsDir() const;
QVariant GetValue(const gui_save& entry); QVariant GetValue(const gui_save& entry) const;
QVariant GetValue(const QString& key, const QString& name, const QString& def); QVariant GetValue(const QString& key, const QString& name, const QVariant& def) const;
static QVariant List2Var(const q_pair_list& list); static QVariant List2Var(const q_pair_list& list);
static q_pair_list Var2List(const QVariant& var); static q_pair_list Var2List(const QVariant& var);
@ -36,6 +42,7 @@ public Q_SLOTS:
/** Write value to entry */ /** Write value to entry */
void SetValue(const gui_save& entry, const QVariant& value); void SetValue(const gui_save& entry, const QVariant& value);
void SetValue(const QString& key, const QVariant& value);
void SetValue(const QString& key, const QString& name, const QVariant& value); void SetValue(const QString& key, const QString& name, const QVariant& value);
protected: protected:

View file

@ -16,6 +16,7 @@
#include "table_item_delegate.h" #include "table_item_delegate.h"
#include "main_application.h" #include "main_application.h"
#include "gui_settings.h" #include "gui_settings.h"
#include "persistent_settings.h"
#include "Emu/System.h" #include "Emu/System.h"
@ -64,9 +65,10 @@ namespace
} }
} }
user_manager_dialog::user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, QWidget* parent) user_manager_dialog::user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<persistent_settings> persistent_settings, QWidget* parent)
: QDialog(parent) : QDialog(parent)
, m_gui_settings(gui_settings) , m_gui_settings(gui_settings)
, m_persistent_settings(persistent_settings)
{ {
setWindowTitle(tr("User Manager")); setWindowTitle(tr("User Manager"));
setMinimumSize(QSize(500, 400)); setMinimumSize(QSize(500, 400));
@ -123,7 +125,19 @@ void user_manager_dialog::Init()
vbox_main->addLayout(hbox_buttons); vbox_main->addLayout(hbox_buttons);
setLayout(vbox_main); setLayout(vbox_main);
m_active_user = m_gui_settings->GetValue(gui::um_active_user).toString().toStdString(); m_active_user = m_persistent_settings->GetValue(gui::persistent::active_user).toString().toStdString();
// Handle deprecated value (before August 2nd 2020)
if (m_active_user.empty())
{
m_active_user = m_gui_settings->GetValue(gui::um_active_user).toString().toStdString();
if (!m_active_user.empty())
{
m_persistent_settings->SetValue(gui::persistent::active_user, qstr(m_active_user));
}
}
UpdateTable(); UpdateTable();
restoreGeometry(m_gui_settings->GetValue(gui::um_geometry).toByteArray()); restoreGeometry(m_gui_settings->GetValue(gui::um_geometry).toByteArray());
@ -389,7 +403,7 @@ void user_manager_dialog::OnUserLogin()
} }
m_active_user = new_user; m_active_user = new_user;
m_gui_settings->SetValue(gui::um_active_user, qstr(m_active_user)); m_persistent_settings->SetValue(gui::persistent::active_user, qstr(m_active_user));
UpdateTable(true); UpdateTable(true);
Q_EMIT OnUserLoginSuccess(); Q_EMIT OnUserLoginSuccess();
} }

View file

@ -7,12 +7,13 @@
#include <QTableWidget> #include <QTableWidget>
class gui_settings; class gui_settings;
class persistent_settings;
class user_manager_dialog : public QDialog class user_manager_dialog : public QDialog
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, QWidget* parent = nullptr); explicit user_manager_dialog(std::shared_ptr<gui_settings> gui_settings, std::shared_ptr<persistent_settings> persistent_settings, QWidget* parent = nullptr);
Q_SIGNALS: Q_SIGNALS:
void OnUserLoginSuccess(); void OnUserLoginSuccess();
private Q_SLOTS: private Q_SLOTS:
@ -39,6 +40,7 @@ private:
std::map<u32, UserAccount> m_user_list; std::map<u32, UserAccount> m_user_list;
std::shared_ptr<gui_settings> m_gui_settings; std::shared_ptr<gui_settings> m_gui_settings;
std::shared_ptr<persistent_settings> m_persistent_settings;
int m_sort_column = 1; int m_sort_column = 1;
bool m_sort_ascending = true; bool m_sort_ascending = true;