Qt: sync gui settings by default after setting or removing values

This commit is contained in:
Megamouse 2024-08-24 20:00:07 +02:00
parent 56d35bf409
commit 4a4762654b
17 changed files with 77 additions and 80 deletions

View File

@ -248,7 +248,6 @@ bool debugger_frame::eventFilter(QObject* object, QEvent* event)
void debugger_frame::closeEvent(QCloseEvent* event) void debugger_frame::closeEvent(QCloseEvent* event)
{ {
SaveSettings(); SaveSettings();
m_gui_settings->sync();
QDockWidget::closeEvent(event); QDockWidget::closeEvent(event);
Q_EMIT DebugFrameClosed(); Q_EMIT DebugFrameClosed();

View File

@ -70,9 +70,9 @@ game_list_frame::game_list_frame(std::shared_ptr<gui_settings> gui_settings, std
m_old_layout_is_list = m_is_list_layout; m_old_layout_is_list = m_is_list_layout;
// Save factors for first setup // Save factors for first setup
m_gui_settings->SetValue(gui::gl_iconColor, m_icon_color); m_gui_settings->SetValue(gui::gl_iconColor, m_icon_color, false);
m_gui_settings->SetValue(gui::gl_marginFactor, m_margin_factor); m_gui_settings->SetValue(gui::gl_marginFactor, m_margin_factor, false);
m_gui_settings->SetValue(gui::gl_textFactor, m_text_factor); m_gui_settings->SetValue(gui::gl_textFactor, m_text_factor, true);
m_game_dock = new QMainWindow(this); m_game_dock = new QMainWindow(this);
m_game_dock->setWindowFlags(Qt::Widget); m_game_dock->setWindowFlags(Qt::Widget);
@ -260,8 +260,8 @@ void game_list_frame::OnColClicked(int col)
} }
m_sort_column = col; m_sort_column = col;
m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder); m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder, false);
m_gui_settings->SetValue(gui::gl_sortCol, col); m_gui_settings->SetValue(gui::gl_sortCol, col, true);
m_game_list->sort(m_game_data.count(), m_sort_column, m_col_sort_order); m_game_list->sort(m_game_data.count(), m_sort_column, m_col_sort_order);
} }
@ -573,17 +573,17 @@ void game_list_frame::OnParsingFinished()
// Read persistent_settings values // Read persistent_settings values
const QString note = m_persistent_settings->GetValue(gui::persistent::notes, serial, "").toString(); const QString note = m_persistent_settings->GetValue(gui::persistent::notes, serial, "").toString();
const QString title = m_persistent_settings->GetValue(gui::persistent::titles, serial, "").toString().simplified(); const 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(); const QString last_played = m_persistent_settings->GetValue(gui::persistent::last_played, serial, "").toString();
quint64 playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toULongLong(); const quint64 playtime = m_persistent_settings->GetValue(gui::persistent::playtime, serial, 0).toULongLong();
// Set persistent_settings values if values exist // Set persistent_settings values if values exist
if (!last_played.isEmpty()) if (!last_played.isEmpty())
{ {
m_persistent_settings->SetLastPlayed(serial, last_played); m_persistent_settings->SetLastPlayed(serial, last_played, false); // No need to sync here. It would slow down the refresh anyway.
} }
if (playtime > 0) if (playtime > 0)
{ {
m_persistent_settings->SetPlaytime(serial, playtime); m_persistent_settings->SetPlaytime(serial, playtime, false); // No need to sync here. It would slow down the refresh anyway.
} }
m_serials.insert(serial); m_serials.insert(serial);
@ -851,9 +851,9 @@ void game_list_frame::SaveSettings()
{ {
m_gui_settings->SetGamelistColVisibility(static_cast<gui::game_list_columns>(col), m_columnActs[col]->isChecked()); m_gui_settings->SetGamelistColVisibility(static_cast<gui::game_list_columns>(col), m_columnActs[col]->isChecked());
} }
m_gui_settings->SetValue(gui::gl_sortCol, m_sort_column); m_gui_settings->SetValue(gui::gl_sortCol, m_sort_column, false);
m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder); m_gui_settings->SetValue(gui::gl_sortAsc, m_col_sort_order == Qt::AscendingOrder, false);
m_gui_settings->SetValue(gui::gl_state, m_game_list->horizontalHeader()->saveState()); m_gui_settings->SetValue(gui::gl_state, m_game_list->horizontalHeader()->saveState(), true);
} }
void game_list_frame::doubleClickedSlot(QTableWidgetItem *item) void game_list_frame::doubleClickedSlot(QTableWidgetItem *item)
@ -1627,9 +1627,8 @@ void game_list_frame::ShowContextMenu(const QPoint &pos)
{ {
if (QMessageBox::question(this, tr("Confirm Reset"), tr("Reset time played?\n\n%0 [%1]").arg(name).arg(serial)) == QMessageBox::Yes) if (QMessageBox::question(this, tr("Confirm Reset"), tr("Reset time played?\n\n%0 [%1]").arg(name).arg(serial)) == QMessageBox::Yes)
{ {
m_persistent_settings->SetPlaytime(serial, 0); m_persistent_settings->SetPlaytime(serial, 0, false);
m_persistent_settings->SetLastPlayed(serial, 0); m_persistent_settings->SetLastPlayed(serial, 0, true);
m_persistent_settings->sync();
Refresh(); Refresh();
} }
}); });
@ -2432,7 +2431,6 @@ void game_list_frame::FocusAndSelectFirstEntryIfNoneIs()
void game_list_frame::closeEvent(QCloseEvent *event) void game_list_frame::closeEvent(QCloseEvent *event)
{ {
SaveSettings(); SaveSettings();
m_gui_settings->sync();
QDockWidget::closeEvent(event); QDockWidget::closeEvent(event);
Q_EMIT GameListFrameClosed(); Q_EMIT GameListFrameClosed();

View File

@ -637,9 +637,8 @@ void gs_frame::hide_on_close()
{ {
// Make sure not to save the hidden state, which is useless to us. // Make sure not to save the hidden state, which is useless to us.
const Visibility current_visibility = visibility(); const Visibility current_visibility = visibility();
m_gui_settings->SetValue(gui::gs_visibility, current_visibility == Visibility::Hidden ? Visibility::AutomaticVisibility : current_visibility); m_gui_settings->SetValue(gui::gs_visibility, current_visibility == Visibility::Hidden ? Visibility::AutomaticVisibility : current_visibility, false);
m_gui_settings->SetValue(gui::gs_geometry, geometry()); m_gui_settings->SetValue(gui::gs_geometry, geometry(), true);
m_gui_settings->sync();
if (!g_progr.load()) if (!g_progr.load())
{ {

View File

@ -166,8 +166,6 @@ bool gui_application::Init()
{ {
m_gui_settings->SetValue(gui::m_currentStylesheet, "Darker Style by TheMitoSan"); m_gui_settings->SetValue(gui::m_currentStylesheet, "Darker Style by TheMitoSan");
} }
m_gui_settings->sync();
} }
// Check maxfiles // Check maxfiles
@ -819,7 +817,7 @@ void gui_application::StartPlaytime(bool start_playtime = true)
return; return;
} }
m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format)); m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format), true);
m_timer_playtime.start(); m_timer_playtime.start();
m_timer.start(10000); // Update every 10 seconds in case the emulation crashes m_timer.start(10000); // Update every 10 seconds in case the emulation crashes
} }
@ -840,8 +838,8 @@ void gui_application::UpdatePlaytime()
return; return;
} }
m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart()); m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart(), false);
m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format)); m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format), true);
} }
void gui_application::StopPlaytime() void gui_application::StopPlaytime()
@ -858,8 +856,8 @@ void gui_application::StopPlaytime()
return; return;
} }
m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart()); m_persistent_settings->AddPlaytime(serial, m_timer_playtime.restart(), false);
m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format)); m_persistent_settings->SetLastPlayed(serial, QDateTime::currentDateTime().toString(gui::persistent::last_played_date_format), true);
m_timer_playtime.invalidate(); m_timer_playtime.invalidate();
} }

View File

@ -273,10 +273,10 @@ void log_frame::CreateAndConnectActions()
m_ansi_act_tty = new QAction(tr("ANSI Code (TTY)"), this); m_ansi_act_tty = new QAction(tr("ANSI Code (TTY)"), this);
m_ansi_act_tty->setCheckable(true); m_ansi_act_tty->setCheckable(true);
connect(m_ansi_act_tty, &QAction::toggled, [this](bool checked) connect(m_ansi_act_tty, &QAction::toggled, [this](bool checked)
{ {
m_gui_settings->SetValue(gui::l_ansi_code, checked); m_gui_settings->SetValue(gui::l_ansi_code, checked);
m_ansi_tty = checked; m_ansi_tty = checked;
}); });
m_tty_channel_acts = new QActionGroup(this); m_tty_channel_acts = new QActionGroup(this);
// Special Channel: All // Special Channel: All

View File

@ -1731,16 +1731,14 @@ void main_window::DecryptSPRXLibraries()
void main_window::SaveWindowState() const void main_window::SaveWindowState() const
{ {
// Save gui settings // Save gui settings
m_gui_settings->SetValue(gui::mw_geometry, saveGeometry()); m_gui_settings->SetValue(gui::mw_geometry, saveGeometry(), false);
m_gui_settings->SetValue(gui::mw_windowState, saveState()); m_gui_settings->SetValue(gui::mw_windowState, saveState(), false);
m_gui_settings->SetValue(gui::mw_mwState, m_mw->saveState()); m_gui_settings->SetValue(gui::mw_mwState, m_mw->saveState(), true);
// Save column settings // Save column settings
m_game_list_frame->SaveSettings(); m_game_list_frame->SaveSettings();
// Save splitter state // Save splitter state
m_debugger_frame->SaveSettings(); m_debugger_frame->SaveSettings();
m_gui_settings->sync();
} }
void main_window::RepaintThumbnailIcons() void main_window::RepaintThumbnailIcons()

View File

@ -233,7 +233,6 @@ pad_settings_dialog::pad_settings_dialog(std::shared_ptr<gui_settings> gui_setti
void pad_settings_dialog::closeEvent(QCloseEvent* event) void pad_settings_dialog::closeEvent(QCloseEvent* event)
{ {
m_gui_settings->SetValue(gui::pads_geometry, saveGeometry()); m_gui_settings->SetValue(gui::pads_geometry, saveGeometry());
m_gui_settings->sync();
QDialog::closeEvent(event); QDialog::closeEvent(event);
} }

View File

@ -154,9 +154,8 @@ patch_manager_dialog::patch_manager_dialog(std::shared_ptr<gui_settings> gui_set
void patch_manager_dialog::closeEvent(QCloseEvent* event) void patch_manager_dialog::closeEvent(QCloseEvent* event)
{ {
// Save gui settings // Save gui settings
m_gui_settings->SetValue(gui::pm_geometry, saveGeometry()); m_gui_settings->SetValue(gui::pm_geometry, saveGeometry(), false);
m_gui_settings->SetValue(gui::pm_splitter_state, ui->splitter->saveState()); m_gui_settings->SetValue(gui::pm_splitter_state, ui->splitter->saveState(), true);
m_gui_settings->sync();
QDialog::closeEvent(event); QDialog::closeEvent(event);
} }

View File

@ -11,16 +11,16 @@ persistent_settings::persistent_settings(QObject* parent) : settings(parent)
m_settings.reset(new QSettings(ComputeSettingsDir() + gui::persistent::persistent_file_name + ".dat", QSettings::Format::IniFormat, parent)); m_settings.reset(new QSettings(ComputeSettingsDir() + gui::persistent::persistent_file_name + ".dat", QSettings::Format::IniFormat, parent));
} }
void persistent_settings::SetPlaytime(const QString& serial, quint64 playtime) void persistent_settings::SetPlaytime(const QString& serial, quint64 playtime, bool sync)
{ {
m_playtime[serial] = playtime; m_playtime[serial] = playtime;
SetValue(gui::persistent::playtime, serial, playtime); SetValue(gui::persistent::playtime, serial, playtime, sync);
} }
void persistent_settings::AddPlaytime(const QString& serial, quint64 elapsed) void persistent_settings::AddPlaytime(const QString& serial, quint64 elapsed, bool sync)
{ {
const quint64 playtime = GetValue(gui::persistent::playtime, serial, 0).toULongLong(); const quint64 playtime = GetValue(gui::persistent::playtime, serial, 0).toULongLong();
SetPlaytime(serial, playtime + elapsed); SetPlaytime(serial, playtime + elapsed, sync);
} }
quint64 persistent_settings::GetPlaytime(const QString& serial) quint64 persistent_settings::GetPlaytime(const QString& serial)
@ -28,10 +28,10 @@ quint64 persistent_settings::GetPlaytime(const QString& serial)
return m_playtime[serial]; return m_playtime[serial];
} }
void persistent_settings::SetLastPlayed(const QString& serial, const QString& date) void persistent_settings::SetLastPlayed(const QString& serial, const QString& date, bool sync)
{ {
m_last_played[serial] = date; m_last_played[serial] = date;
SetValue(gui::persistent::last_played, serial, date); SetValue(gui::persistent::last_played, serial, date, sync);
} }
QString persistent_settings::GetLastPlayed(const QString& serial) QString persistent_settings::GetLastPlayed(const QString& serial)

View File

@ -38,11 +38,11 @@ public:
QString GetCurrentUser(const QString& fallback) const; QString GetCurrentUser(const QString& fallback) const;
public Q_SLOTS: public Q_SLOTS:
void SetPlaytime(const QString& serial, quint64 playtime); void SetPlaytime(const QString& serial, quint64 playtime, bool sync);
void AddPlaytime(const QString& serial, quint64 elapsed); void AddPlaytime(const QString& serial, quint64 elapsed, bool sync);
quint64 GetPlaytime(const QString& serial); quint64 GetPlaytime(const QString& serial);
void SetLastPlayed(const QString& serial, const QString& date); void SetLastPlayed(const QString& serial, const QString& date, bool sync);
QString GetLastPlayed(const QString& serial); QString GetLastPlayed(const QString& serial);
private: private:
QMap<QString, quint64> m_playtime; QMap<QString, quint64> m_playtime;

View File

@ -265,9 +265,8 @@ void rsx_debugger::closeEvent(QCloseEvent* event)
for (int i = 0; i < m_tw_rsx->count(); i++) for (int i = 0; i < m_tw_rsx->count(); i++)
states[QString::number(i)] = (static_cast<QTableWidget*>(m_tw_rsx->widget(i)))->horizontalHeader()->saveState(); states[QString::number(i)] = (static_cast<QTableWidget*>(m_tw_rsx->widget(i)))->horizontalHeader()->saveState();
m_gui_settings->SetValue(gui::rsx_states, states); m_gui_settings->SetValue(gui::rsx_states, states, false);
m_gui_settings->SetValue(gui::rsx_geometry, saveGeometry()); m_gui_settings->SetValue(gui::rsx_geometry, saveGeometry(), true);
m_gui_settings->sync();
QDialog::closeEvent(event); QDialog::closeEvent(event);
} }

View File

@ -585,13 +585,12 @@ void save_manager_dialog::SetIconSize(int size)
{ {
m_icon_size = QSize(size, size * 176 / 320); m_icon_size = QSize(size, size * 176 / 320);
UpdateIcons(); UpdateIcons();
m_gui_settings->SetValue(gui::sd_icon_size, size); m_gui_settings->SetValue(gui::sd_icon_size, size, false); // Don't sync while sliding
} }
void save_manager_dialog::closeEvent(QCloseEvent *event) void save_manager_dialog::closeEvent(QCloseEvent *event)
{ {
m_gui_settings->SetValue(gui::sd_geometry, saveGeometry()); m_gui_settings->SetValue(gui::sd_geometry, saveGeometry());
m_gui_settings->sync();
QDialog::closeEvent(event); QDialog::closeEvent(event);
} }

View File

@ -32,19 +32,24 @@ QString settings::ComputeSettingsDir()
return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/"; return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/";
} }
void settings::RemoveValue(const QString& key, const QString& name) const void settings::RemoveValue(const QString& key, const QString& name, bool sync) const
{ {
if (m_settings) if (m_settings)
{ {
m_settings->beginGroup(key); m_settings->beginGroup(key);
m_settings->remove(name); m_settings->remove(name);
m_settings->endGroup(); m_settings->endGroup();
if (sync)
{
m_settings->sync();
}
} }
} }
void settings::RemoveValue(const gui_save& entry) const void settings::RemoveValue(const gui_save& entry, bool sync) const
{ {
RemoveValue(entry.key, entry.name); RemoveValue(entry.key, entry.name, sync);
} }
QVariant settings::GetValue(const QString& key, const QString& name, const QVariant& def) const QVariant settings::GetValue(const QString& key, const QString& name, const QVariant& def) const
@ -74,30 +79,35 @@ q_pair_list settings::Var2List(const QVariant& var)
return list; return list;
} }
void settings::SetValue(const gui_save& entry, const QVariant& value) const void settings::SetValue(const gui_save& entry, const QVariant& value, bool sync) const
{ {
if (m_settings) SetValue(entry.key, entry.name, value, sync);
{
m_settings->beginGroup(entry.key);
m_settings->setValue(entry.name, value);
m_settings->endGroup();
}
} }
void settings::SetValue(const QString& key, const QVariant& value) const void settings::SetValue(const QString& key, const QVariant& value, bool sync) const
{ {
if (m_settings) if (m_settings)
{ {
m_settings->setValue(key, value); m_settings->setValue(key, value);
if (sync)
{
m_settings->sync();
}
} }
} }
void settings::SetValue(const QString& key, const QString& name, const QVariant& value) const void settings::SetValue(const QString& key, const QString& name, const QVariant& value, bool sync) const
{ {
if (m_settings) if (m_settings)
{ {
m_settings->beginGroup(key); m_settings->beginGroup(key);
m_settings->setValue(name, value); m_settings->setValue(name, value);
m_settings->endGroup(); m_settings->endGroup();
if (sync)
{
m_settings->sync();
}
} }
} }

View File

@ -40,13 +40,13 @@ public:
public Q_SLOTS: public Q_SLOTS:
/** Remove entry */ /** Remove entry */
void RemoveValue(const QString& key, const QString& name) const; void RemoveValue(const QString& key, const QString& name, bool sync = true) const;
void RemoveValue(const gui_save& entry) const; void RemoveValue(const gui_save& entry, bool sync = true) const;
/** Write value to entry */ /** Write value to entry */
void SetValue(const gui_save& entry, const QVariant& value) const; void SetValue(const gui_save& entry, const QVariant& value, bool sync = true) const;
void SetValue(const QString& key, const QVariant& value) const; void SetValue(const QString& key, const QVariant& value, bool sync = true) const;
void SetValue(const QString& key, const QString& name, const QVariant& value) const; void SetValue(const QString& key, const QString& name, const QVariant& value, bool sync = true) const;
protected: protected:
static QString ComputeSettingsDir(); static QString ComputeSettingsDir();

View File

@ -200,8 +200,8 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
Q_EMIT EmuSettingsApplied(); Q_EMIT EmuSettingsApplied();
// Discord Settings can be saved regardless of WITH_DISCORD_RPC // Discord Settings can be saved regardless of WITH_DISCORD_RPC
m_gui_settings->SetValue(gui::m_richPresence, m_use_discord); m_gui_settings->SetValue(gui::m_richPresence, m_use_discord, false);
m_gui_settings->SetValue(gui::m_discordState, m_discord_state); m_gui_settings->SetValue(gui::m_discordState, m_discord_state, true);
#ifdef WITH_DISCORD_RPC #ifdef WITH_DISCORD_RPC
if (m_use_discord != use_discord_old) if (m_use_discord != use_discord_old)
@ -2471,7 +2471,6 @@ void settings_dialog::refresh_countrybox()
void settings_dialog::closeEvent([[maybe_unused]] QCloseEvent* event) void settings_dialog::closeEvent([[maybe_unused]] QCloseEvent* event)
{ {
m_gui_settings->SetValue(gui::cfg_geometry, saveGeometry()); m_gui_settings->SetValue(gui::cfg_geometry, saveGeometry());
m_gui_settings->sync();
} }
settings_dialog::~settings_dialog() settings_dialog::~settings_dialog()

View File

@ -91,8 +91,9 @@ void shortcut_dialog::save()
for (const auto& entry : m_values) for (const auto& entry : m_values)
{ {
m_gui_settings->SetValue(sc_settings.get_shortcut_gui_save(entry.first), entry.second); m_gui_settings->SetValue(sc_settings.get_shortcut_gui_save(entry.first), entry.second, false);
} }
m_gui_settings->sync();
Q_EMIT saved(); Q_EMIT saved();
} }

View File

@ -1300,11 +1300,10 @@ bool trophy_manager_dialog::eventFilter(QObject *object, QEvent *event)
void trophy_manager_dialog::closeEvent(QCloseEvent *event) void trophy_manager_dialog::closeEvent(QCloseEvent *event)
{ {
// Save gui settings // Save gui settings
m_gui_settings->SetValue(gui::tr_geometry, saveGeometry()); m_gui_settings->SetValue(gui::tr_geometry, saveGeometry(), false);
m_gui_settings->SetValue(gui::tr_splitterState, m_splitter->saveState()); m_gui_settings->SetValue(gui::tr_splitterState, m_splitter->saveState(), false);
m_gui_settings->SetValue(gui::tr_games_state, m_game_table->horizontalHeader()->saveState()); m_gui_settings->SetValue(gui::tr_games_state, m_game_table->horizontalHeader()->saveState(), false);
m_gui_settings->SetValue(gui::tr_trophy_state, m_trophy_table->horizontalHeader()->saveState()); m_gui_settings->SetValue(gui::tr_trophy_state, m_trophy_table->horizontalHeader()->saveState(), true);
m_gui_settings->sync();
QWidget::closeEvent(event); QWidget::closeEvent(event);
} }