diff options
| author | ameerj <52414509+ameerj@users.noreply.github.com> | 2022-11-17 20:11:47 -0500 | 
|---|---|---|
| committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2022-11-28 19:22:18 -0500 | 
| commit | b1b20ad84a5e966bb13f01de037bbfe88ac985cc (patch) | |
| tree | 06f8a1234771d13bda865fcb01f355d06e08c707 | |
| parent | 9efdad6a2733e701b24e9edcbad1851692ca8863 (diff) | |
configure_input_per_game: Allow configuring all 8 players
| -rw-r--r-- | src/yuzu/configuration/configure_input_per_game.cpp | 104 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_per_game.h | 14 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_per_game.ui | 49 | 
3 files changed, 113 insertions, 54 deletions
| diff --git a/src/yuzu/configuration/configure_input_per_game.cpp b/src/yuzu/configuration/configure_input_per_game.cpp index 5773c268d..af5cee542 100644 --- a/src/yuzu/configuration/configure_input_per_game.cpp +++ b/src/yuzu/configuration/configure_input_per_game.cpp @@ -13,64 +13,90 @@ ConfigureInputPerGame::ConfigureInputPerGame(Core::System& system_, QWidget* par      : QWidget(parent), ui(std::make_unique<Ui::ConfigureInputPerGame>()),        profiles(std::make_unique<InputProfiles>()), system{system_} {      ui->setupUi(this); - -    Settings::values.players.SetGlobal(false); -    const auto previous_profile = Settings::values.players.GetValue()[0].profile_name; +    const std::array labels = { +        ui->label_player_1, ui->label_player_2, ui->label_player_3, ui->label_player_4, +        ui->label_player_5, ui->label_player_6, ui->label_player_7, ui->label_player_8, +    }; +    profile_comboboxes = { +        ui->profile_player_1, ui->profile_player_2, ui->profile_player_3, ui->profile_player_4, +        ui->profile_player_5, ui->profile_player_6, ui->profile_player_7, ui->profile_player_8, +    };      const auto& profile_names = profiles->GetInputProfileNames(); +    const auto populate_profiles = [this, &profile_names](size_t player_index) { +        const auto previous_profile = +            Settings::values.players.GetValue()[player_index].profile_name; -    ui->profile_player_1->addItem(QString::fromStdString("Use global configuration")); -    for (size_t index = 0; index < profile_names.size(); ++index) { -        const auto& profile_name = profile_names[index]; -        ui->profile_player_1->addItem(QString::fromStdString(profile_name)); -        if (profile_name == previous_profile) { -            // offset by 1 since the first element is the global config -            ui->profile_player_1->setCurrentIndex(static_cast<int>(index + 1)); +        auto* const player_combobox = profile_comboboxes[player_index]; +        player_combobox->addItem(tr("Use global input configuration")); +        for (size_t index = 0; index < profile_names.size(); ++index) { +            const auto& profile_name = profile_names[index]; +            player_combobox->addItem(QString::fromStdString(profile_name)); +            if (profile_name == previous_profile) { +                // offset by 1 since the first element is the global config +                player_combobox->setCurrentIndex(static_cast<int>(index + 1)); +            }          } +    }; + +    for (size_t index = 0; index < profile_comboboxes.size(); ++index) { +        labels[index]->setText(tr("Player %1 profile").arg(index + 1)); +        populate_profiles(index);      } +      LoadConfiguration();  }  void ConfigureInputPerGame::ApplyConfiguration() {      LoadConfiguration(); +    SaveConfiguration(); +} +void ConfigureInputPerGame::LoadConfiguration() {      auto& hid_core = system.HIDCore(); -    auto* emulated_controller = hid_core.GetEmulatedControllerByIndex(0); +    const auto load_player_profile = [this, &hid_core](size_t player_index) { +        Settings::values.players.SetGlobal(false); + +        auto* emulated_controller = hid_core.GetEmulatedControllerByIndex(player_index); +        auto* const player_combobox = profile_comboboxes[player_index]; -    const auto selection_index = ui->profile_player_1->currentIndex(); -    if (selection_index == 0) { -        Settings::values.players.SetGlobal(true); +        const auto selection_index = player_combobox->currentIndex(); +        if (selection_index == 0) { +            Settings::values.players.GetValue()[player_index].profile_name = ""; +            Settings::values.players.SetGlobal(true); +            emulated_controller->ReloadFromSettings(); +            return; +        } +        const auto profile_name = player_combobox->itemText(selection_index).toStdString(); +        if (profile_name.empty()) { +            return; +        } +        profiles->LoadProfile(profile_name, player_index); +        Settings::values.players.GetValue()[player_index].profile_name = profile_name;          emulated_controller->ReloadFromSettings(); -        return; -    } else { -        Settings::values.players.SetGlobal(false); -    } -    const QString profile_name = ui->profile_player_1->itemText(selection_index); -    if (profile_name.isEmpty()) { -        return; +    }; + +    for (size_t index = 0; index < profile_comboboxes.size(); ++index) { +        load_player_profile(index);      } -    profiles->SaveProfile(Settings::values.players.GetValue()[0].profile_name, 0); -    emulated_controller->ReloadFromSettings();  } -void ConfigureInputPerGame::LoadConfiguration() { -    auto& hid_core = system.HIDCore(); -    auto* emulated_controller = hid_core.GetEmulatedControllerByIndex(0); - +void ConfigureInputPerGame::SaveConfiguration() {      Settings::values.players.SetGlobal(false); -    const auto selection_index = ui->profile_player_1->currentIndex(); -    if (selection_index == 0) { -        Settings::values.players.GetValue()[0].profile_name = ""; -        Settings::values.players.SetGlobal(true); +    auto& hid_core = system.HIDCore(); +    const auto save_player_profile = [this, &hid_core](size_t player_index) { +        const auto selection_index = profile_comboboxes[player_index]->currentIndex(); +        if (selection_index == 0) { +            return; +        } +        auto* emulated_controller = hid_core.GetEmulatedControllerByIndex(player_index); +        profiles->SaveProfile(Settings::values.players.GetValue()[player_index].profile_name, +                              player_index);          emulated_controller->ReloadFromSettings(); -        return; -    } -    const QString profile_name = ui->profile_player_1->itemText(selection_index); -    if (profile_name.isEmpty()) { -        return; +    }; + +    for (size_t index = 0; index < profile_comboboxes.size(); ++index) { +        save_player_profile(index);      } -    profiles->LoadProfile(profile_name.toStdString(), 0); -    Settings::values.players.GetValue()[0].profile_name = profile_name.toStdString(); -    emulated_controller->ReloadFromSettings();  } diff --git a/src/yuzu/configuration/configure_input_per_game.h b/src/yuzu/configuration/configure_input_per_game.h index 6feb608b7..a586ec07c 100644 --- a/src/yuzu/configuration/configure_input_per_game.h +++ b/src/yuzu/configuration/configure_input_per_game.h @@ -11,10 +11,6 @@ namespace Core {  class System;  } -namespace InputCommon { -class InputSubsystem; -} -  namespace Ui {  class ConfigureInputPerGame;  } @@ -27,18 +23,20 @@ class ConfigureInputPerGame : public QWidget {  public:      explicit ConfigureInputPerGame(Core::System& system_, QWidget* parent = nullptr); -    /// Initializes the input dialog with the given input subsystem. -    // void Initialize(InputCommon::InputSubsystem* input_subsystem_, std::size_t max_players = 8); - -    /// Save configurations to settings file. +    /// Load and Save configurations to settings file.      void ApplyConfiguration();  private:      /// Load configuration from settings file.      void LoadConfiguration(); +    /// Save configuration to settings file. +    void SaveConfiguration(); +      std::unique_ptr<Ui::ConfigureInputPerGame> ui;      std::unique_ptr<InputProfiles> profiles; +    std::array<QComboBox*, 8> profile_comboboxes; +      Core::System& system;  }; diff --git a/src/yuzu/configuration/configure_input_per_game.ui b/src/yuzu/configuration/configure_input_per_game.ui index 8a384c0df..fbd8eab1c 100644 --- a/src/yuzu/configuration/configure_input_per_game.ui +++ b/src/yuzu/configuration/configure_input_per_game.ui @@ -30,7 +30,7 @@         <layout class="QVBoxLayout" name="verticalLayout_4">          <item>           <widget class="QWidget" name="player_1" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_1">             <property name="leftMargin">              <number>0</number>             </property> @@ -64,8 +64,43 @@           </widget>          </item>          <item> +         <widget class="QWidget" name="player_2" native="true"> +          <layout class="QHBoxLayout" name="input_profile_layout_2"> +           <property name="leftMargin"> +            <number>0</number> +           </property> +           <property name="topMargin"> +            <number>0</number> +           </property> +           <property name="rightMargin"> +            <number>0</number> +           </property> +           <property name="bottomMargin"> +            <number>0</number> +           </property> +           <item> +            <widget class="QLabel" name="label_player_2"> +             <property name="text"> +              <string>Player 2 Profile</string> +             </property> +            </widget> +           </item> +           <item> +            <widget class="QComboBox" name="profile_player_2"> +             <property name="sizePolicy"> +              <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +               <horstretch>0</horstretch> +               <verstretch>0</verstretch> +              </sizepolicy> +             </property> +            </widget> +           </item> +          </layout> +         </widget> +        </item> +        <item>           <widget class="QWidget" name="player_3" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_3">             <property name="leftMargin">              <number>0</number>             </property> @@ -100,7 +135,7 @@          </item>          <item>           <widget class="QWidget" name="player_4" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_4">             <property name="leftMargin">              <number>0</number>             </property> @@ -135,7 +170,7 @@          </item>          <item>           <widget class="QWidget" name="player_5" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_5">             <property name="leftMargin">              <number>0</number>             </property> @@ -170,7 +205,7 @@          </item>          <item>           <widget class="QWidget" name="player_6" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_6">             <property name="leftMargin">              <number>0</number>             </property> @@ -205,7 +240,7 @@          </item>          <item>           <widget class="QWidget" name="player_7" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_7">             <property name="leftMargin">              <number>0</number>             </property> @@ -240,7 +275,7 @@          </item>          <item>           <widget class="QWidget" name="player_8" native="true"> -          <layout class="QHBoxLayout" name="input_profile_layout"> +          <layout class="QHBoxLayout" name="input_profile_layout_8">             <property name="leftMargin">              <number>0</number>             </property> | 
