diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 16 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.ui | 22 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_vibration.cpp | 66 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_vibration.h | 40 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_vibration.ui | 546 | 
6 files changed, 680 insertions, 14 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 296c58f58..7f66f29aa 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -300,6 +300,14 @@ void Config::ReadPlayerValue(std::size_t player_index) {                          static_cast<u8>(Settings::ControllerType::ProController))                  .toUInt()); +        player.vibration_enabled = +            qt_config->value(QStringLiteral("%1vibration_enabled").arg(player_prefix), true) +                .toBool(); + +        player.vibration_strength = +            qt_config->value(QStringLiteral("%1vibration_strength").arg(player_prefix), 100) +                .toInt(); +          player.body_color_left = qt_config                                       ->value(QStringLiteral("%1body_color_left").arg(player_prefix),                                               Settings::JOYCON_BODY_NEON_BLUE) @@ -493,6 +501,8 @@ void Config::ReadControlValues() {      ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode"), false);      ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled"),                        true); +    ReadSettingGlobal(Settings::values.enable_accurate_vibrations, +                      QStringLiteral("enable_accurate_vibrations"), false);      ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled"), true);      qt_config->endGroup(); @@ -983,6 +993,10 @@ void Config::SavePlayerValue(std::size_t player_index) {      if (!player_prefix.isEmpty()) {          WriteSetting(QStringLiteral("%1connected").arg(player_prefix), player.connected, false); +        WriteSetting(QStringLiteral("%1vibration_enabled").arg(player_prefix), +                     player.vibration_enabled, true); +        WriteSetting(QStringLiteral("%1vibration_strength").arg(player_prefix), +                     player.vibration_strength, 100);          WriteSetting(QStringLiteral("%1body_color_left").arg(player_prefix), player.body_color_left,                       Settings::JOYCON_BODY_NEON_BLUE);          WriteSetting(QStringLiteral("%1body_color_right").arg(player_prefix), @@ -1150,6 +1164,8 @@ void Config::SaveControlValues() {      WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode, false);      WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled,                         true); +    WriteSettingGlobal(QStringLiteral("enable_accurate_vibrations"), +                       Settings::values.enable_accurate_vibrations, false);      WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled, true);      WriteSetting(QStringLiteral("motion_device"),                   QString::fromStdString(Settings::values.motion_device), diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 9a4de4c5d..600cc03ae 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp @@ -23,6 +23,7 @@  #include "yuzu/configuration/configure_motion_touch.h"  #include "yuzu/configuration/configure_mouse_advanced.h"  #include "yuzu/configuration/configure_touchscreen_advanced.h" +#include "yuzu/configuration/configure_vibration.h"  #include "yuzu/configuration/input_profiles.h"  namespace { @@ -156,6 +157,9 @@ void ConfigureInput::Initialize(InputCommon::InputSubsystem* input_subsystem,                  CallConfigureDialog<ConfigureMotionTouch>(*this, input_subsystem);              }); +    connect(ui->vibrationButton, &QPushButton::clicked, +            [this] { CallConfigureDialog<ConfigureVibration>(*this); }); +      connect(ui->motionButton, &QPushButton::clicked, [this, input_subsystem] {          CallConfigureDialog<ConfigureMotionTouch>(*this, input_subsystem);      }); diff --git a/src/yuzu/configuration/configure_input.ui b/src/yuzu/configuration/configure_input.ui index cbd67d4c7..2707025e7 100644 --- a/src/yuzu/configuration/configure_input.ui +++ b/src/yuzu/configuration/configure_input.ui @@ -6,7 +6,7 @@     <rect>      <x>0</x>      <y>0</y> -    <width>700</width> +    <width>680</width>      <height>540</height>     </rect>    </property> @@ -195,11 +195,11 @@            <number>3</number>           </property>           <item> -          <widget class="QSpinBox" name="vibrationSpin"> +          <widget class="QPushButton" name="vibrationButton">             <property name="minimumSize">              <size>               <width>68</width> -             <height>21</height> +             <height>0</height>              </size>             </property>             <property name="maximumSize"> @@ -208,17 +208,11 @@               <height>16777215</height>              </size>             </property> -           <property name="suffix"> -            <string>%</string> -           </property> -           <property name="minimum"> -            <number>1</number> -           </property> -           <property name="maximum"> -            <number>100</number> +           <property name="styleSheet"> +            <string notr="true">min-width: 68px;</string>             </property> -           <property name="value"> -            <number>100</number> +           <property name="text"> +            <string>Configure</string>             </property>            </widget>           </item> @@ -272,7 +266,7 @@         </widget>        </item>        <item alignment="Qt::AlignVCenter"> -       <widget class="QWidget" name="widget" native="true"> +       <widget class="QWidget" name="connectedControllers" native="true">          <layout class="QGridLayout" name="gridLayout_2">           <property name="leftMargin">            <number>5</number> diff --git a/src/yuzu/configuration/configure_vibration.cpp b/src/yuzu/configuration/configure_vibration.cpp new file mode 100644 index 000000000..1c68f28f3 --- /dev/null +++ b/src/yuzu/configuration/configure_vibration.cpp @@ -0,0 +1,66 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/settings.h" +#include "ui_configure_vibration.h" +#include "yuzu/configuration/configure_vibration.h" + +ConfigureVibration::ConfigureVibration(QWidget* parent) +    : QDialog(parent), ui(std::make_unique<Ui::ConfigureVibration>()) { +    ui->setupUi(this); + +    vibration_groupboxes = { +        ui->vibrationGroupPlayer1, ui->vibrationGroupPlayer2, ui->vibrationGroupPlayer3, +        ui->vibrationGroupPlayer4, ui->vibrationGroupPlayer5, ui->vibrationGroupPlayer6, +        ui->vibrationGroupPlayer7, ui->vibrationGroupPlayer8, +    }; + +    vibration_spinboxes = { +        ui->vibrationSpinPlayer1, ui->vibrationSpinPlayer2, ui->vibrationSpinPlayer3, +        ui->vibrationSpinPlayer4, ui->vibrationSpinPlayer5, ui->vibrationSpinPlayer6, +        ui->vibrationSpinPlayer7, ui->vibrationSpinPlayer8, +    }; + +    const auto& players = Settings::values.players.GetValue(); + +    for (std::size_t i = 0; i < NUM_PLAYERS; ++i) { +        vibration_groupboxes[i]->setChecked(players[i].vibration_enabled); +        vibration_spinboxes[i]->setValue(players[i].vibration_strength); +    } + +    ui->checkBoxAccurateVibration->setChecked( +        Settings::values.enable_accurate_vibrations.GetValue()); + +    if (!Settings::IsConfiguringGlobal()) { +        ui->checkBoxAccurateVibration->setDisabled(true); +    } + +    RetranslateUI(); +} + +ConfigureVibration::~ConfigureVibration() = default; + +void ConfigureVibration::ApplyConfiguration() { +    auto& players = Settings::values.players.GetValue(); + +    for (std::size_t i = 0; i < NUM_PLAYERS; ++i) { +        players[i].vibration_enabled = vibration_groupboxes[i]->isChecked(); +        players[i].vibration_strength = vibration_spinboxes[i]->value(); +    } + +    Settings::values.enable_accurate_vibrations.SetValue( +        ui->checkBoxAccurateVibration->isChecked()); +} + +void ConfigureVibration::changeEvent(QEvent* event) { +    if (event->type() == QEvent::LanguageChange) { +        RetranslateUI(); +    } + +    QDialog::changeEvent(event); +} + +void ConfigureVibration::RetranslateUI() { +    ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_vibration.h b/src/yuzu/configuration/configure_vibration.h new file mode 100644 index 000000000..37bbc2653 --- /dev/null +++ b/src/yuzu/configuration/configure_vibration.h @@ -0,0 +1,40 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <array> +#include <memory> +#include <QDialog> + +class QGroupBox; +class QSpinBox; + +namespace Ui { +class ConfigureVibration; +} + +class ConfigureVibration : public QDialog { +    Q_OBJECT + +public: +    explicit ConfigureVibration(QWidget* parent); +    ~ConfigureVibration() override; + +    void ApplyConfiguration(); + +private: +    void changeEvent(QEvent* event) override; +    void RetranslateUI(); + +    std::unique_ptr<Ui::ConfigureVibration> ui; + +    static constexpr std::size_t NUM_PLAYERS = 8; + +    // Groupboxes encapsulating the vibration strength spinbox. +    std::array<QGroupBox*, NUM_PLAYERS> vibration_groupboxes; + +    // Spinboxes representing the vibration strength percentage. +    std::array<QSpinBox*, NUM_PLAYERS> vibration_spinboxes; +}; diff --git a/src/yuzu/configuration/configure_vibration.ui b/src/yuzu/configuration/configure_vibration.ui new file mode 100644 index 000000000..efdf317a9 --- /dev/null +++ b/src/yuzu/configuration/configure_vibration.ui @@ -0,0 +1,546 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ConfigureVibration</class> + <widget class="QDialog" name="ConfigureVibration"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>364</width> +    <height>242</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Configure Vibration</string> +  </property> +  <property name="styleSheet"> +   <string notr="true"/> +  </property> +  <layout class="QVBoxLayout"> +   <item> +    <widget class="QGroupBox" name="vibrationStrengthGroup"> +     <property name="title"> +      <string>Vibration</string> +     </property> +     <layout class="QVBoxLayout" name="verticalLayout_3" stretch="0,0"> +      <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> +       <widget class="QWidget" name="player14Widget" native="true"> +        <layout class="QHBoxLayout" name="horizontalLayout_4"> +         <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="QGroupBox" name="vibrationGroupPlayer1"> +           <property name="title"> +            <string>Player 1</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_8"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer1"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +         <item> +          <widget class="QGroupBox" name="vibrationGroupPlayer2"> +           <property name="title"> +            <string>Player 2</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_9"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer2"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +         <item> +          <widget class="QGroupBox" name="vibrationGroupPlayer3"> +           <property name="title"> +            <string>Player 3</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_10"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer3"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +         <item> +          <widget class="QGroupBox" name="vibrationGroupPlayer4"> +           <property name="title"> +            <string>Player 4</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_11"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer4"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +        </layout> +       </widget> +      </item> +      <item> +       <widget class="QWidget" name="player58Widget" native="true"> +        <layout class="QHBoxLayout" name="horizontalLayout_6"> +         <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="QGroupBox" name="vibrationGroupPlayer7"> +           <property name="title"> +            <string>Player 5</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_14"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer7"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +         <item> +          <widget class="QGroupBox" name="vibrationGroupPlayer8"> +           <property name="title"> +            <string>Player 6</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_15"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer8"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +         <item> +          <widget class="QGroupBox" name="vibrationGroupPlayer5"> +           <property name="title"> +            <string>Player 7</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_12"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer5"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +         <item> +          <widget class="QGroupBox" name="vibrationGroupPlayer6"> +           <property name="title"> +            <string>Player 8</string> +           </property> +           <property name="checkable"> +            <bool>true</bool> +           </property> +           <layout class="QHBoxLayout" name="horizontalLayout_13"> +            <property name="leftMargin"> +             <number>3</number> +            </property> +            <property name="topMargin"> +             <number>3</number> +            </property> +            <property name="rightMargin"> +             <number>3</number> +            </property> +            <property name="bottomMargin"> +             <number>3</number> +            </property> +            <item> +             <widget class="QSpinBox" name="vibrationSpinPlayer6"> +              <property name="minimumSize"> +               <size> +                <width>68</width> +                <height>21</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>68</width> +                <height>16777215</height> +               </size> +              </property> +              <property name="suffix"> +               <string>%</string> +              </property> +              <property name="minimum"> +               <number>1</number> +              </property> +              <property name="maximum"> +               <number>150</number> +              </property> +              <property name="value"> +               <number>100</number> +              </property> +             </widget> +            </item> +           </layout> +          </widget> +         </item> +        </layout> +       </widget> +      </item> +     </layout> +    </widget> +   </item> +   <item> +    <widget class="QGroupBox" name="vibrationSettingsGroup"> +     <property name="title"> +      <string>Settings</string> +     </property> +     <layout class="QVBoxLayout" name="verticalLayout"> +      <item> +       <widget class="QCheckBox" name="checkBoxAccurateVibration"> +        <property name="text"> +         <string>Enable Accurate Vibration</string> +        </property> +       </widget> +      </item> +     </layout> +    </widget> +   </item> +   <item> +    <spacer name="spacerVibration"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>167</width> +       <height>55</height> +      </size> +     </property> +    </spacer> +   </item> +   <item> +    <widget class="QDialogButtonBox" name="buttonBoxVibration"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections> +  <connection> +   <sender>buttonBoxVibration</sender> +   <signal>accepted()</signal> +   <receiver>ConfigureVibration</receiver> +   <slot>accept()</slot> +  </connection> +  <connection> +   <sender>buttonBoxVibration</sender> +   <signal>rejected()</signal> +   <receiver>ConfigureVibration</receiver> +   <slot>reject()</slot> +  </connection> + </connections> +</ui>  | 
