diff options
Diffstat (limited to 'src/yuzu/configuration/configuration_shared.cpp')
| -rw-r--r-- | src/yuzu/configuration/configuration_shared.cpp | 74 | 
1 files changed, 69 insertions, 5 deletions
| diff --git a/src/yuzu/configuration/configuration_shared.cpp b/src/yuzu/configuration/configuration_shared.cpp index bb47c3933..f9becab6e 100644 --- a/src/yuzu/configuration/configuration_shared.cpp +++ b/src/yuzu/configuration/configuration_shared.cpp @@ -4,17 +4,20 @@  #include <QCheckBox>  #include <QComboBox> +#include <QObject> +#include <QString>  #include "core/settings.h"  #include "yuzu/configuration/configuration_shared.h"  #include "yuzu/configuration/configure_per_game.h"  void ConfigurationShared::ApplyPerGameSetting(Settings::Setting<bool>* setting, -                                              const QCheckBox* checkbox) { -    if (checkbox->checkState() == Qt::PartiallyChecked) { +                                              const QCheckBox* checkbox, +                                              const CheckState& tracker) { +    if (tracker == CheckState::Global) {          setting->SetGlobal(true);      } else {          setting->SetGlobal(false); -        setting->SetValue(checkbox->checkState() == Qt::Checked); +        setting->SetValue(checkbox->checkState());      }  } @@ -69,8 +72,69 @@ void ConfigurationShared::SetPerGameSetting(                                                             ConfigurationShared::USE_GLOBAL_OFFSET);  } -void ConfigurationShared::InsertGlobalItem(QComboBox* combobox) { -    const QString use_global_text = ConfigurePerGame::tr("Use global configuration"); +void ConfigurationShared::SetHighlight(QWidget* widget, const std::string& name, bool highlighted) { +    if (highlighted) { +        widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,203,255,0.5) }") +                                  .arg(QString::fromStdString(name))); +    } else { +        widget->setStyleSheet(QStringLiteral("QWidget#%1 { background-color:rgba(0,0,0,0) }") +                                  .arg(QString::fromStdString(name))); +    } +    widget->show(); +} + +void ConfigurationShared::SetColoredTristate(QCheckBox* checkbox, const std::string& name, +                                             const Settings::Setting<bool>& setting, +                                             CheckState& tracker) { +    if (setting.UsingGlobal()) { +        tracker = CheckState::Global; +    } else { +        tracker = (setting.GetValue() == setting.GetValue(true)) ? CheckState::On : CheckState::Off; +    } +    SetHighlight(checkbox, name, tracker != CheckState::Global); +    QObject::connect(checkbox, &QCheckBox::clicked, checkbox, +                     [checkbox, name, setting, &tracker]() { +                         tracker = static_cast<CheckState>((static_cast<int>(tracker) + 1) % +                                                           static_cast<int>(CheckState::Count)); +                         if (tracker == CheckState::Global) { +                             checkbox->setChecked(setting.GetValue(true)); +                         } +                         SetHighlight(checkbox, name, tracker != CheckState::Global); +                     }); +} + +void ConfigurationShared::SetColoredTristate(QCheckBox* checkbox, const std::string& name, +                                             bool global, bool state, bool global_state, +                                             CheckState& tracker) { +    if (global) { +        tracker = CheckState::Global; +    } else { +        tracker = (state == global_state) ? CheckState::On : CheckState::Off; +    } +    SetHighlight(checkbox, name, tracker != CheckState::Global); +    QObject::connect(checkbox, &QCheckBox::clicked, checkbox, +                     [checkbox, name, global_state, &tracker]() { +                         tracker = static_cast<CheckState>((static_cast<int>(tracker) + 1) % +                                                           static_cast<int>(CheckState::Count)); +                         if (tracker == CheckState::Global) { +                             checkbox->setChecked(global_state); +                         } +                         SetHighlight(checkbox, name, tracker != CheckState::Global); +                     }); +} + +void ConfigurationShared::SetColoredComboBox(QComboBox* combobox, QWidget* target, +                                             const std::string& target_name, int global) { +    InsertGlobalItem(combobox, global); +    QObject::connect(combobox, static_cast<void (QComboBox::*)(int)>(&QComboBox::activated), target, +                     [target, target_name](int index) { +                         ConfigurationShared::SetHighlight(target, target_name, index != 0); +                     }); +} + +void ConfigurationShared::InsertGlobalItem(QComboBox* combobox, int global_index) { +    const QString use_global_text = +        ConfigurePerGame::tr("Use global configuration (%1)").arg(combobox->itemText(global_index));      combobox->insertItem(ConfigurationShared::USE_GLOBAL_INDEX, use_global_text);      combobox->insertSeparator(ConfigurationShared::USE_GLOBAL_SEPARATOR_INDEX);  } | 
