diff options
Diffstat (limited to 'src/yuzu')
| -rw-r--r-- | src/yuzu/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/yuzu/applets/controller.cpp | 16 | ||||
| -rw-r--r-- | src/yuzu/applets/controller.h | 3 | ||||
| -rw-r--r-- | src/yuzu/applets/controller.ui | 18 | ||||
| -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 | 
10 files changed, 708 insertions, 26 deletions
| diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 22fe0a2a6..bf1fae9fa 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -105,6 +105,9 @@ add_executable(yuzu      configuration/configure_ui.cpp      configuration/configure_ui.h      configuration/configure_ui.ui +    configuration/configure_vibration.cpp +    configuration/configure_vibration.h +    configuration/configure_vibration.ui      configuration/configure_web.cpp      configuration/configure_web.h      configuration/configure_web.ui diff --git a/src/yuzu/applets/controller.cpp b/src/yuzu/applets/controller.cpp index 0fc713a6e..c5e671309 100644 --- a/src/yuzu/applets/controller.cpp +++ b/src/yuzu/applets/controller.cpp @@ -14,6 +14,7 @@  #include "ui_controller.h"  #include "yuzu/applets/controller.h"  #include "yuzu/configuration/configure_input_dialog.h" +#include "yuzu/configuration/configure_vibration.h"  #include "yuzu/main.h"  namespace { @@ -223,6 +224,9 @@ QtControllerSelectorDialog::QtControllerSelectorDialog(          }      } +    connect(ui->vibrationButton, &QPushButton::clicked, this, +            &QtControllerSelectorDialog::CallConfigureVibrationDialog); +      connect(ui->inputConfigButton, &QPushButton::clicked, this,              &QtControllerSelectorDialog::CallConfigureInputDialog); @@ -285,6 +289,18 @@ void QtControllerSelectorDialog::LoadConfiguration() {      ui->motionGroup->setChecked(Settings::values.motion_enabled.GetValue());  } +void QtControllerSelectorDialog::CallConfigureVibrationDialog() { +    ConfigureVibration dialog(this); + +    dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | +                          Qt::WindowSystemMenuHint); +    dialog.setWindowModality(Qt::WindowModal); + +    if (dialog.exec() == QDialog::Accepted) { +        dialog.ApplyConfiguration(); +    } +} +  void QtControllerSelectorDialog::CallConfigureInputDialog() {      const auto max_supported_players = parameters.enable_single_mode ? 1 : parameters.max_players; diff --git a/src/yuzu/applets/controller.h b/src/yuzu/applets/controller.h index 8fefecf05..a2ce03c8f 100644 --- a/src/yuzu/applets/controller.h +++ b/src/yuzu/applets/controller.h @@ -42,6 +42,9 @@ private:      // Loads the current input configuration into the frontend applet.      void LoadConfiguration(); +    // Initializes the "Configure Vibration" Dialog. +    void CallConfigureVibrationDialog(); +      // Initializes the "Configure Input" Dialog.      void CallConfigureInputDialog(); diff --git a/src/yuzu/applets/controller.ui b/src/yuzu/applets/controller.ui index cc27b8ef4..8e571ba8f 100644 --- a/src/yuzu/applets/controller.ui +++ b/src/yuzu/applets/controller.ui @@ -2329,11 +2329,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"> @@ -2342,17 +2342,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> 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> | 
