diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/configure_input.cpp | 22 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_dialog.cpp | 37 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_dialog.h | 38 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input_dialog.ui | 57 | 
5 files changed, 150 insertions, 6 deletions
diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index ae3e31762..7ea17a4db 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -70,7 +70,8 @@ ConfigureInput::ConfigureInput(QWidget* parent)  ConfigureInput::~ConfigureInput() = default; -void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem) { +void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem, +                                std::size_t max_players) {      player_controllers = {          new ConfigureInputPlayer(this, 0, ui->consoleInputSettings, input_subsystem),          new ConfigureInputPlayer(this, 1, ui->consoleInputSettings, input_subsystem), @@ -93,6 +94,11 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem) {          ui->checkboxPlayer7Connected, ui->checkboxPlayer8Connected,      }; +    std::array<QLabel*, 8> player_connected_labels = { +        ui->label,   ui->label_3, ui->label_4, ui->label_5, +        ui->label_6, ui->label_7, ui->label_8, ui->label_9, +    }; +      for (std::size_t i = 0; i < player_tabs.size(); ++i) {          player_tabs[i]->setLayout(new QHBoxLayout(player_tabs[i]));          player_tabs[i]->layout()->addWidget(player_controllers[i]); @@ -112,6 +118,13 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem) {          connect(player_connected[i], &QCheckBox::stateChanged, [this, i](int state) {              player_controllers[i]->ConnectPlayer(state == Qt::Checked);          }); + +        // Remove/hide all the elements that exceed max_players, if applicable. +        if (i >= max_players) { +            ui->tabWidget->removeTab(static_cast<int>(max_players)); +            player_connected[i]->hide(); +            player_connected_labels[i]->hide(); +        }      }      // Only the first player can choose handheld mode so connect the signal just to player 1      connect(player_controllers[0], &ConfigureInputPlayer::HandheldStateChanged, @@ -175,8 +188,7 @@ void ConfigureInput::RetranslateUI() {  void ConfigureInput::LoadConfiguration() {      LoadPlayerControllerIndices(); -    UpdateDockedState(Settings::values.players[0].controller_type == -                      Settings::ControllerType::Handheld); +    UpdateDockedState(Settings::values.players[8].connected);      ui->vibrationGroup->setChecked(Settings::values.vibration_enabled);  } @@ -208,14 +220,14 @@ void ConfigureInput::RestoreDefaults() {  }  void ConfigureInput::UpdateDockedState(bool is_handheld) { -    // If the controller type is handheld only, disallow changing docked mode +    // Disallow changing the console mode if the controller type is handheld.      ui->radioDocked->setEnabled(!is_handheld);      ui->radioUndocked->setEnabled(!is_handheld);      ui->radioDocked->setChecked(Settings::values.use_docked_mode);      ui->radioUndocked->setChecked(!Settings::values.use_docked_mode); -    // If its handheld only, force docked mode off (since you can't play handheld in a dock) +    // Also force into undocked mode if the controller type is handheld.      if (is_handheld) {          ui->radioUndocked->setChecked(true);      } diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index d08a24f96..0e8b2fd4e 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h @@ -37,7 +37,7 @@ public:      ~ConfigureInput() override;      /// Initializes the input dialog with the given input subsystem. -    void Initialize(InputCommon::InputSubsystem* input_subsystem_); +    void Initialize(InputCommon::InputSubsystem* input_subsystem_, std::size_t max_players = 8);      /// Save all button configurations to settings file.      void ApplyConfiguration(); diff --git a/src/yuzu/configuration/configure_input_dialog.cpp b/src/yuzu/configuration/configure_input_dialog.cpp new file mode 100644 index 000000000..1866003c2 --- /dev/null +++ b/src/yuzu/configuration/configure_input_dialog.cpp @@ -0,0 +1,37 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "ui_configure_input_dialog.h" +#include "yuzu/configuration/configure_input_dialog.h" + +ConfigureInputDialog::ConfigureInputDialog(QWidget* parent, std::size_t max_players, +                                           InputCommon::InputSubsystem* input_subsystem) +    : QDialog(parent), ui(std::make_unique<Ui::ConfigureInputDialog>()), +      input_widget(new ConfigureInput(this)) { +    ui->setupUi(this); + +    input_widget->Initialize(input_subsystem, max_players); + +    ui->inputLayout->addWidget(input_widget); + +    RetranslateUI(); +} + +ConfigureInputDialog::~ConfigureInputDialog() = default; + +void ConfigureInputDialog::ApplyConfiguration() { +    input_widget->ApplyConfiguration(); +} + +void ConfigureInputDialog::changeEvent(QEvent* event) { +    if (event->type() == QEvent::LanguageChange) { +        RetranslateUI(); +    } + +    QDialog::changeEvent(event); +} + +void ConfigureInputDialog::RetranslateUI() { +    ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_input_dialog.h b/src/yuzu/configuration/configure_input_dialog.h new file mode 100644 index 000000000..d1bd865f9 --- /dev/null +++ b/src/yuzu/configuration/configure_input_dialog.h @@ -0,0 +1,38 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <memory> +#include <QDialog> +#include "yuzu/configuration/configure_input.h" + +class QPushButton; + +namespace InputCommon { +class InputSubsystem; +} + +namespace Ui { +class ConfigureInputDialog; +} + +class ConfigureInputDialog : public QDialog { +    Q_OBJECT + +public: +    explicit ConfigureInputDialog(QWidget* parent, std::size_t max_players, +                                  InputCommon::InputSubsystem* input_subsystem); +    ~ConfigureInputDialog() override; + +    void ApplyConfiguration(); + +private: +    void changeEvent(QEvent* event) override; +    void RetranslateUI(); + +    std::unique_ptr<Ui::ConfigureInputDialog> ui; + +    ConfigureInput* input_widget; +}; diff --git a/src/yuzu/configuration/configure_input_dialog.ui b/src/yuzu/configuration/configure_input_dialog.ui new file mode 100644 index 000000000..b92ddb200 --- /dev/null +++ b/src/yuzu/configuration/configure_input_dialog.ui @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ConfigureInputDialog</class> + <widget class="QDialog" name="ConfigureInputDialog"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>70</width> +    <height>540</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Configure Input</string> +  </property> +  <layout class="QVBoxLayout" name="verticalLayout"> +   <property name="spacing"> +    <number>2</number> +   </property> +   <property name="leftMargin"> +    <number>9</number> +   </property> +   <property name="topMargin"> +    <number>9</number> +   </property> +   <property name="rightMargin"> +    <number>9</number> +   </property> +   <property name="bottomMargin"> +    <number>9</number> +   </property> +   <item> +    <layout class="QHBoxLayout" name="inputLayout"/> +   </item> +   <item> +    <layout class="QHBoxLayout" name="horizontalLayout"> +     <item> +      <widget class="QDialogButtonBox" name="buttonBox"> +       <property name="standardButtons"> +        <set>QDialogButtonBox::Ok</set> +       </property> +      </widget> +     </item> +    </layout> +   </item> +  </layout> + </widget> + <resources/> + <connections> +  <connection> +   <sender>buttonBox</sender> +   <signal>accepted()</signal> +   <receiver>ConfigureInputDialog</receiver> +   <slot>accept()</slot> +  </connection> + </connections> +</ui>  | 
