Qt: fix gui settings options

This commit is contained in:
Megamouse 2018-06-28 01:48:05 +02:00
parent f8d396ac9e
commit 451d64407b
4 changed files with 108 additions and 41 deletions

View file

@ -8,9 +8,17 @@
inline std::string sstr(const QString& _in) { return _in.toStdString(); } inline std::string sstr(const QString& _in) { return _in.toStdString(); }
gui_settings::gui_settings(QObject* parent) : QObject(parent), m_settings(ComputeSettingsDir() + tr("CurrentSettings") + ".ini", QSettings::Format::IniFormat, parent), gui_settings::gui_settings(QObject* parent) : QObject(parent)
m_settingsDir(ComputeSettingsDir()) , m_current_name(gui::Settings)
, m_settings(ComputeSettingsDir() + gui::Settings + ".ini", QSettings::Format::IniFormat, parent)
, m_settingsDir(ComputeSettingsDir())
{ {
const QString settings_name = GetValue(gui::m_currentConfig).toString();
if (settings_name != m_current_name)
{
ChangeToConfig(settings_name);
}
} }
gui_settings::~gui_settings() gui_settings::~gui_settings()
@ -45,19 +53,46 @@ QString gui_settings::ComputeSettingsDir()
return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/"; return QString::fromStdString(fs::get_config_dir()) + "/GuiConfigs/";
} }
void gui_settings::ChangeToConfig(const QString& name) bool gui_settings::ChangeToConfig(const QString& friendly_name)
{ {
if (name != tr("CurrentSettings")) if (m_current_name == friendly_name)
{ // don't try to change to yourself. {
Reset(false); return false;
QSettings other(m_settingsDir.absoluteFilePath(name + ".ini"), QSettings::IniFormat);
for (const QString& key : other.allKeys())
{
m_settings.setValue(key, other.value(key));
}
m_settings.sync();
} }
if (friendly_name != gui::Settings)
{
if (m_current_name == gui::Settings)
{
SetValue(gui::m_currentConfig, friendly_name);
}
else
{
QSettings tmp(m_settingsDir.absoluteFilePath(gui::Settings + ".ini"), QSettings::Format::IniFormat, parent());
tmp.beginGroup(gui::m_currentConfig.key);
tmp.setValue(gui::m_currentConfig.name, friendly_name);
tmp.endGroup();
}
}
m_settings.sync();
Reset(true);
QSettings other(m_settingsDir.absoluteFilePath(friendly_name + ".ini"), QSettings::IniFormat);
for (const QString& key : other.allKeys())
{
m_settings.setValue(key, other.value(key));
}
SetValue(gui::m_currentConfig, friendly_name);
m_settings.sync();
m_current_name = friendly_name;
return true;
} }
void gui_settings::Reset(bool removeMeta) void gui_settings::Reset(bool removeMeta)
@ -211,10 +246,26 @@ void gui_settings::SetCustomColor(int col, const QColor& val)
SetValue(gui_save(gui::meta, "CustomColor" + QString::number(col), gui::gl_icon_color), val); SetValue(gui_save(gui::meta, "CustomColor" + QString::number(col), gui::gl_icon_color), val);
} }
void gui_settings::SaveCurrentConfig(const QString& friendlyName) void gui_settings::SaveCurrentConfig(const QString& friendly_name)
{ {
SetValue(gui::m_currentConfig, friendlyName); if (friendly_name != gui::Settings)
BackupSettingsToTarget(friendlyName); {
if (m_current_name == gui::Settings)
{
SetValue(gui::m_currentConfig, friendly_name);
m_settings.sync();
}
else
{
QSettings tmp(m_settingsDir.absoluteFilePath(gui::Settings + ".ini"), QSettings::Format::IniFormat, parent());
tmp.beginGroup(gui::m_currentConfig.key);
tmp.setValue(gui::m_currentConfig.name, friendly_name);
tmp.endGroup();
}
}
BackupSettingsToTarget(friendly_name);
ChangeToConfig(friendly_name);
} }
logs::level gui_settings::GetLogLevel() logs::level gui_settings::GetLogLevel()
@ -246,9 +297,10 @@ QStringList gui_settings::GetConfigEntries()
return res; return res;
} }
void gui_settings::BackupSettingsToTarget(const QString& friendlyName) void gui_settings::BackupSettingsToTarget(const QString& friendly_name)
{ {
QSettings target(ComputeSettingsDir() + friendlyName + ".ini", QSettings::Format::IniFormat); QSettings target(ComputeSettingsDir() + friendly_name + ".ini", QSettings::Format::IniFormat);
for (const QString& key : m_settings.allKeys()) for (const QString& key : m_settings.allKeys())
{ {
if (!key.startsWith(gui::meta)) if (!key.startsWith(gui::meta))
@ -256,6 +308,7 @@ void gui_settings::BackupSettingsToTarget(const QString& friendlyName)
target.setValue(key, m_settings.value(key)); target.setValue(key, m_settings.value(key));
} }
} }
target.sync(); target.sync();
} }

View file

@ -115,6 +115,7 @@ namespace gui
return q_string_pair(path, title.simplified()); // simplified() forces single line text return q_string_pair(path, title.simplified()); // simplified() forces single line text
} }
const QString Settings = QObject::tr("CurrentSettings");
const QString Default = QObject::tr("default"); const QString Default = QObject::tr("default");
const QString main_window = "main_window"; const QString main_window = "main_window";
const QString game_list = "GameList"; const QString game_list = "GameList";
@ -189,7 +190,7 @@ namespace gui
const gui_save rsx_geometry = gui_save(rsx, "geometry", QByteArray()); const gui_save rsx_geometry = gui_save(rsx, "geometry", QByteArray());
const gui_save rsx_states = gui_save(rsx, "states", QVariantMap()); const gui_save rsx_states = gui_save(rsx, "states", QVariantMap());
const gui_save m_currentConfig = gui_save(meta, "currentConfig", QObject::tr("CurrentSettings")); 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());
const gui_save m_showDebugTab = gui_save(meta, "showDebugTab", false); const gui_save m_showDebugTab = gui_save(meta, "showDebugTab", false);
@ -236,7 +237,7 @@ public:
QString GetSettingsDir(); QString GetSettingsDir();
/** Changes the settings file to the destination preset*/ /** Changes the settings file to the destination preset*/
void ChangeToConfig(const QString& destination); bool ChangeToConfig(const QString& friendly_name);
bool GetCategoryVisibility(int cat); bool GetCategoryVisibility(int cat);
QVariant GetValue(const gui_save& entry); QVariant GetValue(const gui_save& entry);
@ -268,15 +269,16 @@ public Q_SLOTS:
void SetCustomColor(int col, const QColor& val); void SetCustomColor(int col, const QColor& val);
void SaveCurrentConfig(const QString& friendlyName); void SaveCurrentConfig(const QString& friendly_name);
static QSize SizeFromSlider(int pos); static QSize SizeFromSlider(int pos);
static gui_save GetGuiSaveForColumn(int col); static gui_save GetGuiSaveForColumn(int col);
private: private:
QString ComputeSettingsDir(); QString ComputeSettingsDir();
void BackupSettingsToTarget(const QString& destination); void BackupSettingsToTarget(const QString& friendly_name);
QSettings m_settings; QSettings m_settings;
QDir m_settingsDir; QDir m_settingsDir;
QString m_current_name;
}; };

View file

@ -78,9 +78,6 @@ void main_window::Init()
setAcceptDrops(true); setAcceptDrops(true);
// hide utilities from the average user
ui->menuUtilities->menuAction()->setVisible(guiSettings->GetValue(gui::m_showDebugTab).toBool());
// add toolbar widgets (crappy Qt designer is not able to) // add toolbar widgets (crappy Qt designer is not able to)
ui->toolBar->setObjectName("mw_toolbar"); ui->toolBar->setObjectName("mw_toolbar");
ui->sizeSlider->setRange(0, gui::gl_max_slider_pos); ui->sizeSlider->setRange(0, gui::gl_max_slider_pos);
@ -1546,6 +1543,9 @@ void main_window::ConfigureGuiFromSettings(bool configure_all)
} }
} }
// hide utilities from the average user
ui->menuUtilities->menuAction()->setVisible(guiSettings->GetValue(gui::m_showDebugTab).toBool());
ui->showLogAct->setChecked(guiSettings->GetValue(gui::mw_logger).toBool()); ui->showLogAct->setChecked(guiSettings->GetValue(gui::mw_logger).toBool());
ui->showGameListAct->setChecked(guiSettings->GetValue(gui::mw_gamelist).toBool()); ui->showGameListAct->setChecked(guiSettings->GetValue(gui::mw_gamelist).toBool());
ui->showDebuggerAct->setChecked(guiSettings->GetValue(gui::mw_debugger).toBool()); ui->showDebuggerAct->setChecked(guiSettings->GetValue(gui::mw_debugger).toBool());

View file

@ -972,7 +972,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
ui->combo_stylesheets->setCurrentIndex(0); ui->combo_stylesheets->setCurrentIndex(0);
} }
// Only attempt to load a config if changes occurred. // Only attempt to load a config if changes occurred.
if (m_currentConfig != xgui_settings->GetValue(gui::m_currentConfig).toString()) if (m_currentConfig != ui->combo_configs->currentText())
{ {
OnApplyConfig(); OnApplyConfig();
} }
@ -1124,9 +1124,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
xemu_settings->EnhanceCheckBox(ui->hookStFunc, emu_settings::HookStaticFuncs); xemu_settings->EnhanceCheckBox(ui->hookStFunc, emu_settings::HookStaticFuncs);
SubscribeTooltip(ui->hookStFunc, json_debug["hookStFunc"].toString()); SubscribeTooltip(ui->hookStFunc, json_debug["hookStFunc"].toString());
//
// Layout fix for High Dpi // Layout fix for High Dpi
//
layout()->setSizeConstraint(QLayout::SetFixedSize); layout()->setSizeConstraint(QLayout::SetFixedSize);
} }
@ -1149,7 +1147,7 @@ void settings_dialog::AddConfigs()
} }
} }
m_currentConfig = tr("CurrentSettings"); m_currentConfig = xgui_settings->GetValue(gui::m_currentConfig).toString();
int index = ui->combo_configs->findText(m_currentConfig); int index = ui->combo_configs->findText(m_currentConfig);
if (index != -1) if (index != -1)
@ -1158,7 +1156,7 @@ void settings_dialog::AddConfigs()
} }
else else
{ {
LOG_WARNING(GENERAL, "Trying to set an invalid config index ", index); LOG_WARNING(GENERAL, "Trying to set an invalid config index %d", index);
} }
} }
@ -1199,41 +1197,55 @@ void settings_dialog::OnBackupCurrentConfig()
while (dialog->exec() != QDialog::Rejected) while (dialog->exec() != QDialog::Rejected)
{ {
dialog->resize(500, 100); dialog->resize(500, 100);
QString friendlyName = dialog->textValue(); QString friendly_name = dialog->textValue();
if (friendlyName == "") if (friendly_name == "")
{ {
QMessageBox::warning(this, tr("Error"), tr("Name cannot be empty")); QMessageBox::warning(this, tr("Error"), tr("Name cannot be empty"));
continue; continue;
} }
if (friendlyName.contains(".")) if (friendly_name.contains("."))
{ {
QMessageBox::warning(this, tr("Error"), tr("Must choose a name with no '.'")); QMessageBox::warning(this, tr("Error"), tr("Must choose a name with no '.'"));
continue; continue;
} }
if (ui->combo_configs->findText(friendlyName) != -1) if (ui->combo_configs->findText(friendly_name) != -1)
{ {
QMessageBox::warning(this, tr("Error"), tr("Please choose a non-existing name")); QMessageBox::warning(this, tr("Error"), tr("Please choose a non-existing name"));
continue; continue;
} }
Q_EMIT GuiSettingsSaveRequest(); Q_EMIT GuiSettingsSaveRequest();
xgui_settings->SaveCurrentConfig(friendlyName); xgui_settings->SaveCurrentConfig(friendly_name);
ui->combo_configs->addItem(friendlyName); ui->combo_configs->addItem(friendly_name);
ui->combo_configs->setCurrentIndex(ui->combo_configs->findText(friendlyName)); ui->combo_configs->setCurrentText(friendly_name);
m_currentConfig = friendly_name;
break; break;
} }
} }
void settings_dialog::OnApplyConfig() void settings_dialog::OnApplyConfig()
{ {
m_currentConfig = ui->combo_configs->currentText(); const QString new_config = ui->combo_configs->currentText();
xgui_settings->SetValue(gui::m_currentConfig, m_currentConfig);
xgui_settings->ChangeToConfig(m_currentConfig); if (new_config == m_currentConfig)
{
return;
}
if (!xgui_settings->ChangeToConfig(new_config))
{
const int new_config_idx = ui->combo_configs->currentIndex();
ui->combo_configs->setCurrentText(m_currentConfig);
ui->combo_configs->removeItem(new_config_idx);
return;
}
m_currentConfig = new_config;
Q_EMIT GuiSettingsSyncRequest(true); Q_EMIT GuiSettingsSyncRequest(true);
} }
void settings_dialog::OnApplyStylesheet() void settings_dialog::OnApplyStylesheet()
{ {
m_currentStylesheet = ui->combo_stylesheets->currentData().toString(); m_currentStylesheet = ui->combo_stylesheets->currentText();
xgui_settings->SetValue(gui::m_currentStylesheet, m_currentStylesheet); xgui_settings->SetValue(gui::m_currentStylesheet, m_currentStylesheet);
Q_EMIT GuiStylesheetRequest(xgui_settings->GetCurrentStylesheetPath()); Q_EMIT GuiStylesheetRequest(xgui_settings->GetCurrentStylesheetPath());
} }