diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/configuration/configure_input.cpp | 406 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.h | 53 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_input.ui | 1064 |
3 files changed, 525 insertions, 998 deletions
diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp index 42a7beac6..9ae9827fe 100644 --- a/src/yuzu/configuration/configure_input.cpp +++ b/src/yuzu/configuration/configure_input.cpp | |||
| @@ -9,334 +9,164 @@ | |||
| 9 | #include <QMessageBox> | 9 | #include <QMessageBox> |
| 10 | #include <QTimer> | 10 | #include <QTimer> |
| 11 | #include "common/param_package.h" | 11 | #include "common/param_package.h" |
| 12 | #include "configuration/configure_touchscreen_advanced.h" | ||
| 13 | #include "core/core.h" | ||
| 12 | #include "input_common/main.h" | 14 | #include "input_common/main.h" |
| 15 | #include "ui_configure_input.h" | ||
| 16 | #include "ui_configure_input_player.h" | ||
| 17 | #include "ui_configure_mouse_advanced.h" | ||
| 18 | #include "ui_configure_touchscreen_advanced.h" | ||
| 13 | #include "yuzu/configuration/config.h" | 19 | #include "yuzu/configuration/config.h" |
| 14 | #include "yuzu/configuration/configure_input.h" | 20 | #include "yuzu/configuration/configure_input.h" |
| 15 | 21 | #include "yuzu/configuration/configure_input_player.h" | |
| 16 | const std::array<std::string, ConfigureInput::ANALOG_SUB_BUTTONS_NUM> | 22 | #include "yuzu/configuration/configure_mouse_advanced.h" |
| 17 | ConfigureInput::analog_sub_buttons{{ | ||
| 18 | "up", | ||
| 19 | "down", | ||
| 20 | "left", | ||
| 21 | "right", | ||
| 22 | "modifier", | ||
| 23 | }}; | ||
| 24 | |||
| 25 | static QString getKeyName(int key_code) { | ||
| 26 | switch (key_code) { | ||
| 27 | case Qt::Key_Shift: | ||
| 28 | return QObject::tr("Shift"); | ||
| 29 | case Qt::Key_Control: | ||
| 30 | return QObject::tr("Ctrl"); | ||
| 31 | case Qt::Key_Alt: | ||
| 32 | return QObject::tr("Alt"); | ||
| 33 | case Qt::Key_Meta: | ||
| 34 | return ""; | ||
| 35 | default: | ||
| 36 | return QKeySequence(key_code).toString(); | ||
| 37 | } | ||
| 38 | } | ||
| 39 | |||
| 40 | static void SetAnalogButton(const Common::ParamPackage& input_param, | ||
| 41 | Common::ParamPackage& analog_param, const std::string& button_name) { | ||
| 42 | if (analog_param.Get("engine", "") != "analog_from_button") { | ||
| 43 | analog_param = { | ||
| 44 | {"engine", "analog_from_button"}, | ||
| 45 | {"modifier_scale", "0.5"}, | ||
| 46 | }; | ||
| 47 | } | ||
| 48 | analog_param.Set(button_name, input_param.Serialize()); | ||
| 49 | } | ||
| 50 | |||
| 51 | static QString ButtonToText(const Common::ParamPackage& param) { | ||
| 52 | if (!param.Has("engine")) { | ||
| 53 | return QObject::tr("[not set]"); | ||
| 54 | } else if (param.Get("engine", "") == "keyboard") { | ||
| 55 | return getKeyName(param.Get("code", 0)); | ||
| 56 | } else if (param.Get("engine", "") == "sdl") { | ||
| 57 | if (param.Has("hat")) { | ||
| 58 | return QString(QObject::tr("Hat %1 %2")) | ||
| 59 | .arg(param.Get("hat", "").c_str(), param.Get("direction", "").c_str()); | ||
| 60 | } | ||
| 61 | if (param.Has("axis")) { | ||
| 62 | return QString(QObject::tr("Axis %1%2")) | ||
| 63 | .arg(param.Get("axis", "").c_str(), param.Get("direction", "").c_str()); | ||
| 64 | } | ||
| 65 | if (param.Has("button")) { | ||
| 66 | return QString(QObject::tr("Button %1")).arg(param.Get("button", "").c_str()); | ||
| 67 | } | ||
| 68 | return QString(); | ||
| 69 | } else { | ||
| 70 | return QObject::tr("[unknown]"); | ||
| 71 | } | ||
| 72 | }; | ||
| 73 | |||
| 74 | static QString AnalogToText(const Common::ParamPackage& param, const std::string& dir) { | ||
| 75 | if (!param.Has("engine")) { | ||
| 76 | return QObject::tr("[not set]"); | ||
| 77 | } else if (param.Get("engine", "") == "analog_from_button") { | ||
| 78 | return ButtonToText(Common::ParamPackage{param.Get(dir, "")}); | ||
| 79 | } else if (param.Get("engine", "") == "sdl") { | ||
| 80 | if (dir == "modifier") { | ||
| 81 | return QString(QObject::tr("[unused]")); | ||
| 82 | } | ||
| 83 | |||
| 84 | if (dir == "left" || dir == "right") { | ||
| 85 | return QString(QObject::tr("Axis %1")).arg(param.Get("axis_x", "").c_str()); | ||
| 86 | } else if (dir == "up" || dir == "down") { | ||
| 87 | return QString(QObject::tr("Axis %1")).arg(param.Get("axis_y", "").c_str()); | ||
| 88 | } | ||
| 89 | return QString(); | ||
| 90 | } else { | ||
| 91 | return QObject::tr("[unknown]"); | ||
| 92 | } | ||
| 93 | }; | ||
| 94 | 23 | ||
| 95 | ConfigureInput::ConfigureInput(QWidget* parent) | 24 | ConfigureInput::ConfigureInput(QWidget* parent) |
| 96 | : QWidget(parent), ui(std::make_unique<Ui::ConfigureInput>()), | 25 | : QWidget(parent), ui(std::make_unique<Ui::ConfigureInput>()) { |
| 97 | timeout_timer(std::make_unique<QTimer>()), poll_timer(std::make_unique<QTimer>()) { | ||
| 98 | |||
| 99 | ui->setupUi(this); | 26 | ui->setupUi(this); |
| 100 | setFocusPolicy(Qt::ClickFocus); | ||
| 101 | 27 | ||
| 102 | button_map = { | 28 | players_enabled = { |
| 103 | ui->buttonA, ui->buttonB, ui->buttonX, ui->buttonY, | 29 | ui->player1_checkbox, ui->player2_checkbox, ui->player3_checkbox, ui->player4_checkbox, |
| 104 | ui->buttonLStick, ui->buttonRStick, ui->buttonL, ui->buttonR, | 30 | ui->player5_checkbox, ui->player6_checkbox, ui->player7_checkbox, ui->player8_checkbox, |
| 105 | ui->buttonZL, ui->buttonZR, ui->buttonPlus, ui->buttonMinus, | ||
| 106 | ui->buttonDpadLeft, ui->buttonDpadUp, ui->buttonDpadRight, ui->buttonDpadDown, | ||
| 107 | ui->buttonLStickLeft, ui->buttonLStickUp, ui->buttonLStickRight, ui->buttonLStickDown, | ||
| 108 | ui->buttonRStickLeft, ui->buttonRStickUp, ui->buttonRStickRight, ui->buttonRStickDown, | ||
| 109 | ui->buttonSL, ui->buttonSR, ui->buttonHome, ui->buttonScreenshot, | ||
| 110 | }; | 31 | }; |
| 111 | 32 | ||
| 112 | analog_map_buttons = {{ | 33 | player_controller = { |
| 113 | { | 34 | ui->player1_combobox, ui->player2_combobox, ui->player3_combobox, ui->player4_combobox, |
| 114 | ui->buttonLStickUp, | 35 | ui->player5_combobox, ui->player6_combobox, ui->player7_combobox, ui->player8_combobox, |
| 115 | ui->buttonLStickDown, | 36 | }; |
| 116 | ui->buttonLStickLeft, | ||
| 117 | ui->buttonLStickRight, | ||
| 118 | ui->buttonLStickMod, | ||
| 119 | }, | ||
| 120 | { | ||
| 121 | ui->buttonRStickUp, | ||
| 122 | ui->buttonRStickDown, | ||
| 123 | ui->buttonRStickLeft, | ||
| 124 | ui->buttonRStickRight, | ||
| 125 | ui->buttonRStickMod, | ||
| 126 | }, | ||
| 127 | }}; | ||
| 128 | 37 | ||
| 129 | analog_map_stick = {ui->buttonLStickAnalog, ui->buttonRStickAnalog}; | 38 | player_configure = { |
| 39 | ui->player1_configure, ui->player2_configure, ui->player3_configure, ui->player4_configure, | ||
| 40 | ui->player5_configure, ui->player6_configure, ui->player7_configure, ui->player8_configure, | ||
| 41 | }; | ||
| 130 | 42 | ||
| 131 | for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { | 43 | for (auto* controller_box : player_controller) { |
| 132 | if (!button_map[button_id]) | 44 | controller_box->addItems( |
| 133 | continue; | 45 | {"Pro Controller", "Dual Joycons", "Single Right Joycon", "Single Left Joycon"}); |
| 134 | button_map[button_id]->setContextMenuPolicy(Qt::CustomContextMenu); | ||
| 135 | connect(button_map[button_id], &QPushButton::released, [=]() { | ||
| 136 | handleClick( | ||
| 137 | button_map[button_id], | ||
| 138 | [=](const Common::ParamPackage& params) { buttons_param[button_id] = params; }, | ||
| 139 | InputCommon::Polling::DeviceType::Button); | ||
| 140 | }); | ||
| 141 | connect(button_map[button_id], &QPushButton::customContextMenuRequested, | ||
| 142 | [=](const QPoint& menu_location) { | ||
| 143 | QMenu context_menu; | ||
| 144 | context_menu.addAction(tr("Clear"), [&] { | ||
| 145 | buttons_param[button_id].Clear(); | ||
| 146 | button_map[button_id]->setText(tr("[not set]")); | ||
| 147 | }); | ||
| 148 | context_menu.addAction(tr("Restore Default"), [&] { | ||
| 149 | buttons_param[button_id] = Common::ParamPackage{ | ||
| 150 | InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; | ||
| 151 | button_map[button_id]->setText(ButtonToText(buttons_param[button_id])); | ||
| 152 | }); | ||
| 153 | context_menu.exec(button_map[button_id]->mapToGlobal(menu_location)); | ||
| 154 | }); | ||
| 155 | } | 46 | } |
| 156 | 47 | ||
| 157 | for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { | 48 | this->loadConfiguration(); |
| 158 | for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { | 49 | updateUIEnabled(); |
| 159 | if (!analog_map_buttons[analog_id][sub_button_id]) | ||
| 160 | continue; | ||
| 161 | analog_map_buttons[analog_id][sub_button_id]->setContextMenuPolicy( | ||
| 162 | Qt::CustomContextMenu); | ||
| 163 | connect(analog_map_buttons[analog_id][sub_button_id], &QPushButton::released, [=]() { | ||
| 164 | handleClick(analog_map_buttons[analog_id][sub_button_id], | ||
| 165 | [=](const Common::ParamPackage& params) { | ||
| 166 | SetAnalogButton(params, analogs_param[analog_id], | ||
| 167 | analog_sub_buttons[sub_button_id]); | ||
| 168 | }, | ||
| 169 | InputCommon::Polling::DeviceType::Button); | ||
| 170 | }); | ||
| 171 | connect(analog_map_buttons[analog_id][sub_button_id], | ||
| 172 | &QPushButton::customContextMenuRequested, [=](const QPoint& menu_location) { | ||
| 173 | QMenu context_menu; | ||
| 174 | context_menu.addAction(tr("Clear"), [&] { | ||
| 175 | analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); | ||
| 176 | analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); | ||
| 177 | }); | ||
| 178 | context_menu.addAction(tr("Restore Default"), [&] { | ||
| 179 | Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | ||
| 180 | Config::default_analogs[analog_id][sub_button_id])}; | ||
| 181 | SetAnalogButton(params, analogs_param[analog_id], | ||
| 182 | analog_sub_buttons[sub_button_id]); | ||
| 183 | analog_map_buttons[analog_id][sub_button_id]->setText(AnalogToText( | ||
| 184 | analogs_param[analog_id], analog_sub_buttons[sub_button_id])); | ||
| 185 | }); | ||
| 186 | context_menu.exec(analog_map_buttons[analog_id][sub_button_id]->mapToGlobal( | ||
| 187 | menu_location)); | ||
| 188 | }); | ||
| 189 | } | ||
| 190 | connect(analog_map_stick[analog_id], &QPushButton::released, [=]() { | ||
| 191 | QMessageBox::information(this, tr("Information"), | ||
| 192 | tr("After pressing OK, first move your joystick horizontally, " | ||
| 193 | "and then vertically.")); | ||
| 194 | handleClick( | ||
| 195 | analog_map_stick[analog_id], | ||
| 196 | [=](const Common::ParamPackage& params) { analogs_param[analog_id] = params; }, | ||
| 197 | InputCommon::Polling::DeviceType::Analog); | ||
| 198 | }); | ||
| 199 | } | ||
| 200 | 50 | ||
| 201 | connect(ui->buttonClearAll, &QPushButton::released, [this] { ClearAll(); }); | 51 | connect(ui->restore_defaults_button, &QPushButton::pressed, this, |
| 202 | connect(ui->buttonRestoreDefaults, &QPushButton::released, [this]() { restoreDefaults(); }); | 52 | &ConfigureInput::restoreDefaults); |
| 203 | 53 | ||
| 204 | timeout_timer->setSingleShot(true); | 54 | for (auto* enabled : players_enabled) |
| 205 | connect(timeout_timer.get(), &QTimer::timeout, [this]() { setPollingResult({}, true); }); | 55 | connect(enabled, &QCheckBox::stateChanged, this, &ConfigureInput::updateUIEnabled); |
| 56 | connect(ui->use_docked_mode, &QCheckBox::stateChanged, this, &ConfigureInput::updateUIEnabled); | ||
| 57 | connect(ui->handheld_connected, &QCheckBox::stateChanged, this, | ||
| 58 | &ConfigureInput::updateUIEnabled); | ||
| 59 | connect(ui->mouse_enabled, &QCheckBox::stateChanged, this, &ConfigureInput::updateUIEnabled); | ||
| 60 | connect(ui->keyboard_enabled, &QCheckBox::stateChanged, this, &ConfigureInput::updateUIEnabled); | ||
| 61 | connect(ui->debug_enabled, &QCheckBox::stateChanged, this, &ConfigureInput::updateUIEnabled); | ||
| 62 | connect(ui->touchscreen_enabled, &QCheckBox::stateChanged, this, | ||
| 63 | &ConfigureInput::updateUIEnabled); | ||
| 206 | 64 | ||
| 207 | connect(poll_timer.get(), &QTimer::timeout, [this]() { | 65 | for (std::size_t i = 0; i < player_configure.size(); ++i) { |
| 208 | Common::ParamPackage params; | 66 | connect(player_configure[i], &QPushButton::pressed, this, |
| 209 | for (auto& poller : device_pollers) { | 67 | [this, i]() { CallConfigureDialog<ConfigureInputPlayer>(i, false); }); |
| 210 | params = poller->GetNextInput(); | 68 | } |
| 211 | if (params.Has("engine")) { | ||
| 212 | setPollingResult(params, false); | ||
| 213 | return; | ||
| 214 | } | ||
| 215 | } | ||
| 216 | }); | ||
| 217 | 69 | ||
| 218 | this->loadConfiguration(); | 70 | connect(ui->handheld_configure, &QPushButton::pressed, this, |
| 71 | [this]() { CallConfigureDialog<ConfigureInputPlayer>(8, false); }); | ||
| 219 | 72 | ||
| 220 | // TODO(wwylele): enable this when we actually emulate it | 73 | connect(ui->debug_configure, &QPushButton::pressed, this, |
| 221 | ui->buttonHome->setEnabled(false); | 74 | [this]() { CallConfigureDialog<ConfigureInputPlayer>(9, true); }); |
| 222 | } | ||
| 223 | 75 | ||
| 224 | void ConfigureInput::applyConfiguration() { | 76 | connect(ui->mouse_advanced, &QPushButton::pressed, this, |
| 225 | std::transform(buttons_param.begin(), buttons_param.end(), Settings::values.buttons.begin(), | 77 | [this]() { CallConfigureDialog<ConfigureMouseAdvanced>(); }); |
| 226 | [](const Common::ParamPackage& param) { return param.Serialize(); }); | ||
| 227 | std::transform(analogs_param.begin(), analogs_param.end(), Settings::values.analogs.begin(), | ||
| 228 | [](const Common::ParamPackage& param) { return param.Serialize(); }); | ||
| 229 | } | ||
| 230 | 78 | ||
| 231 | void ConfigureInput::loadConfiguration() { | 79 | connect(ui->touchscreen_advanced, &QPushButton::pressed, this, |
| 232 | std::transform(Settings::values.buttons.begin(), Settings::values.buttons.end(), | 80 | [this]() { CallConfigureDialog<ConfigureTouchscreenAdvanced>(); }); |
| 233 | buttons_param.begin(), | 81 | |
| 234 | [](const std::string& str) { return Common::ParamPackage(str); }); | 82 | ui->use_docked_mode->setEnabled(!Core::System::GetInstance().IsPoweredOn()); |
| 235 | std::transform(Settings::values.analogs.begin(), Settings::values.analogs.end(), | ||
| 236 | analogs_param.begin(), | ||
| 237 | [](const std::string& str) { return Common::ParamPackage(str); }); | ||
| 238 | updateButtonLabels(); | ||
| 239 | } | 83 | } |
| 240 | 84 | ||
| 241 | void ConfigureInput::restoreDefaults() { | 85 | template <typename Dialog, typename... Args> |
| 242 | for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { | 86 | void ConfigureInput::CallConfigureDialog(Args... args) { |
| 243 | buttons_param[button_id] = Common::ParamPackage{ | 87 | this->applyConfiguration(); |
| 244 | InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; | 88 | Dialog dialog(this, args...); |
| 245 | } | ||
| 246 | 89 | ||
| 247 | for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { | 90 | const auto res = dialog.exec(); |
| 248 | for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { | 91 | if (res == QDialog::Accepted) { |
| 249 | Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | 92 | dialog.applyConfiguration(); |
| 250 | Config::default_analogs[analog_id][sub_button_id])}; | ||
| 251 | SetAnalogButton(params, analogs_param[analog_id], analog_sub_buttons[sub_button_id]); | ||
| 252 | } | ||
| 253 | } | 93 | } |
| 254 | updateButtonLabels(); | ||
| 255 | } | 94 | } |
| 256 | 95 | ||
| 257 | void ConfigureInput::ClearAll() { | 96 | void ConfigureInput::applyConfiguration() { |
| 258 | for (int button_id = 0; button_id < Settings::NativeButton::NumButtons; button_id++) { | 97 | for (std::size_t i = 0; i < 8; ++i) { |
| 259 | if (button_map[button_id] && button_map[button_id]->isEnabled()) | 98 | Settings::values.players[i].connected = players_enabled[i]->isChecked(); |
| 260 | buttons_param[button_id].Clear(); | 99 | Settings::values.players[i].type = |
| 261 | } | 100 | static_cast<Settings::ControllerType>(player_controller[i]->currentIndex()); |
| 262 | for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { | 101 | } |
| 263 | for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { | 102 | |
| 264 | if (analog_map_buttons[analog_id][sub_button_id] && | 103 | Settings::values.use_docked_mode = ui->use_docked_mode->isChecked(); |
| 265 | analog_map_buttons[analog_id][sub_button_id]->isEnabled()) | 104 | Settings::values.players[8].connected = ui->handheld_connected->isChecked(); |
| 266 | analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); | 105 | Settings::values.debug_pad_enabled = ui->debug_enabled->isChecked(); |
| 267 | } | 106 | Settings::values.mouse_enabled = ui->mouse_enabled->isChecked(); |
| 268 | } | 107 | Settings::values.keyboard_enabled = ui->keyboard_enabled->isChecked(); |
| 269 | updateButtonLabels(); | 108 | Settings::values.touchscreen.enabled = ui->touchscreen_enabled->isChecked(); |
| 270 | } | 109 | } |
| 271 | 110 | ||
| 272 | void ConfigureInput::updateButtonLabels() { | 111 | void ConfigureInput::updateUIEnabled() { |
| 273 | for (int button = 0; button < Settings::NativeButton::NumButtons; button++) { | 112 | for (std::size_t i = 0; i < 8; ++i) { |
| 274 | button_map[button]->setText(ButtonToText(buttons_param[button])); | 113 | const auto enabled = players_enabled[i]->checkState() == Qt::Checked; |
| 275 | } | ||
| 276 | 114 | ||
| 277 | for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { | 115 | player_controller[i]->setEnabled(enabled); |
| 278 | for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) { | 116 | player_configure[i]->setEnabled(enabled); |
| 279 | if (analog_map_buttons[analog_id][sub_button_id]) { | ||
| 280 | analog_map_buttons[analog_id][sub_button_id]->setText( | ||
| 281 | AnalogToText(analogs_param[analog_id], analog_sub_buttons[sub_button_id])); | ||
| 282 | } | ||
| 283 | } | ||
| 284 | analog_map_stick[analog_id]->setText(tr("Set Analog Stick")); | ||
| 285 | } | 117 | } |
| 286 | } | ||
| 287 | |||
| 288 | void ConfigureInput::handleClick(QPushButton* button, | ||
| 289 | std::function<void(const Common::ParamPackage&)> new_input_setter, | ||
| 290 | InputCommon::Polling::DeviceType type) { | ||
| 291 | button->setText(tr("[press key]")); | ||
| 292 | button->setFocus(); | ||
| 293 | |||
| 294 | input_setter = new_input_setter; | ||
| 295 | |||
| 296 | device_pollers = InputCommon::Polling::GetPollers(type); | ||
| 297 | |||
| 298 | // Keyboard keys can only be used as button devices | ||
| 299 | want_keyboard_keys = type == InputCommon::Polling::DeviceType::Button; | ||
| 300 | 118 | ||
| 301 | for (auto& poller : device_pollers) { | 119 | bool hit_disabled = false; |
| 302 | poller->Start(); | 120 | for (auto* player : players_enabled) { |
| 121 | if (hit_disabled) | ||
| 122 | player->setDisabled(true); | ||
| 123 | else | ||
| 124 | player->setEnabled(true); | ||
| 125 | if (!player->isChecked()) | ||
| 126 | hit_disabled = true; | ||
| 303 | } | 127 | } |
| 304 | 128 | ||
| 305 | grabKeyboard(); | 129 | ui->handheld_connected->setEnabled(!ui->use_docked_mode->isChecked()); |
| 306 | grabMouse(); | 130 | ui->handheld_configure->setEnabled(ui->handheld_connected->isChecked() && |
| 307 | timeout_timer->start(5000); // Cancel after 5 seconds | 131 | !ui->use_docked_mode->isChecked()); |
| 308 | poll_timer->start(200); // Check for new inputs every 200ms | 132 | ui->mouse_advanced->setEnabled(ui->mouse_enabled->isChecked()); |
| 133 | ui->debug_configure->setEnabled(ui->debug_enabled->isChecked()); | ||
| 134 | ui->touchscreen_advanced->setEnabled(ui->touchscreen_enabled->isChecked()); | ||
| 309 | } | 135 | } |
| 310 | 136 | ||
| 311 | void ConfigureInput::setPollingResult(const Common::ParamPackage& params, bool abort) { | 137 | void ConfigureInput::loadConfiguration() { |
| 312 | releaseKeyboard(); | 138 | std::stable_partition(Settings::values.players.begin(), Settings::values.players.end(), |
| 313 | releaseMouse(); | 139 | [](const auto& player) { return player.connected; }); |
| 314 | timeout_timer->stop(); | ||
| 315 | poll_timer->stop(); | ||
| 316 | for (auto& poller : device_pollers) { | ||
| 317 | poller->Stop(); | ||
| 318 | } | ||
| 319 | 140 | ||
| 320 | if (!abort) { | 141 | for (std::size_t i = 0; i < 8; ++i) { |
| 321 | (*input_setter)(params); | 142 | players_enabled[i]->setChecked(Settings::values.players[i].connected); |
| 143 | player_controller[i]->setCurrentIndex(static_cast<u8>(Settings::values.players[i].type)); | ||
| 322 | } | 144 | } |
| 323 | 145 | ||
| 324 | updateButtonLabels(); | 146 | ui->use_docked_mode->setChecked(Settings::values.use_docked_mode); |
| 325 | input_setter = {}; | 147 | ui->handheld_connected->setChecked(Settings::values.players[8].connected); |
| 148 | ui->debug_enabled->setChecked(Settings::values.debug_pad_enabled); | ||
| 149 | ui->mouse_enabled->setChecked(Settings::values.mouse_enabled); | ||
| 150 | ui->keyboard_enabled->setChecked(Settings::values.keyboard_enabled); | ||
| 151 | ui->touchscreen_enabled->setChecked(Settings::values.touchscreen.enabled); | ||
| 152 | |||
| 153 | updateUIEnabled(); | ||
| 326 | } | 154 | } |
| 327 | 155 | ||
| 328 | void ConfigureInput::keyPressEvent(QKeyEvent* event) { | 156 | void ConfigureInput::restoreDefaults() { |
| 329 | if (!input_setter || !event) | 157 | players_enabled[0]->setCheckState(Qt::Checked); |
| 330 | return; | 158 | player_controller[0]->setCurrentIndex(1); |
| 331 | 159 | ||
| 332 | if (event->key() != Qt::Key_Escape) { | 160 | for (std::size_t i = 1; i < 8; ++i) { |
| 333 | if (want_keyboard_keys) { | 161 | players_enabled[i]->setCheckState(Qt::Unchecked); |
| 334 | setPollingResult(Common::ParamPackage{InputCommon::GenerateKeyboardParam(event->key())}, | 162 | player_controller[i]->setCurrentIndex(0); |
| 335 | false); | ||
| 336 | } else { | ||
| 337 | // Escape key wasn't pressed and we don't want any keyboard keys, so don't stop polling | ||
| 338 | return; | ||
| 339 | } | ||
| 340 | } | 163 | } |
| 341 | setPollingResult({}, true); | 164 | |
| 165 | ui->use_docked_mode->setCheckState(Qt::Unchecked); | ||
| 166 | ui->handheld_connected->setCheckState(Qt::Unchecked); | ||
| 167 | ui->mouse_enabled->setCheckState(Qt::Unchecked); | ||
| 168 | ui->keyboard_enabled->setCheckState(Qt::Unchecked); | ||
| 169 | ui->debug_enabled->setCheckState(Qt::Unchecked); | ||
| 170 | ui->touchscreen_enabled->setCheckState(Qt::Checked); | ||
| 171 | updateUIEnabled(); | ||
| 342 | } | 172 | } |
diff --git a/src/yuzu/configuration/configure_input.h b/src/yuzu/configuration/configure_input.h index 32c7183f9..0ba77c5ef 100644 --- a/src/yuzu/configuration/configure_input.h +++ b/src/yuzu/configuration/configure_input.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "core/settings.h" | 18 | #include "core/settings.h" |
| 19 | #include "input_common/main.h" | 19 | #include "input_common/main.h" |
| 20 | #include "ui_configure_input.h" | 20 | #include "ui_configure_input.h" |
| 21 | #include "yuzu/configuration/config.h" | ||
| 21 | 22 | ||
| 22 | class QPushButton; | 23 | class QPushButton; |
| 23 | class QString; | 24 | class QString; |
| @@ -37,57 +38,19 @@ public: | |||
| 37 | void applyConfiguration(); | 38 | void applyConfiguration(); |
| 38 | 39 | ||
| 39 | private: | 40 | private: |
| 40 | std::unique_ptr<Ui::ConfigureInput> ui; | 41 | void updateUIEnabled(); |
| 41 | |||
| 42 | std::unique_ptr<QTimer> timeout_timer; | ||
| 43 | std::unique_ptr<QTimer> poll_timer; | ||
| 44 | |||
| 45 | /// This will be the the setting function when an input is awaiting configuration. | ||
| 46 | std::optional<std::function<void(const Common::ParamPackage&)>> input_setter; | ||
| 47 | |||
| 48 | std::array<Common::ParamPackage, Settings::NativeButton::NumButtons> buttons_param; | ||
| 49 | std::array<Common::ParamPackage, Settings::NativeAnalog::NumAnalogs> analogs_param; | ||
| 50 | |||
| 51 | static constexpr int ANALOG_SUB_BUTTONS_NUM = 5; | ||
| 52 | |||
| 53 | /// Each button input is represented by a QPushButton. | ||
| 54 | std::array<QPushButton*, Settings::NativeButton::NumButtons> button_map; | ||
| 55 | |||
| 56 | /// A group of five QPushButtons represent one analog input. The buttons each represent up, | ||
| 57 | /// down, left, right, and modifier, respectively. | ||
| 58 | std::array<std::array<QPushButton*, ANALOG_SUB_BUTTONS_NUM>, Settings::NativeAnalog::NumAnalogs> | ||
| 59 | analog_map_buttons; | ||
| 60 | 42 | ||
| 61 | /// Analog inputs are also represented each with a single button, used to configure with an | 43 | template <typename Dialog, typename... Args> |
| 62 | /// actual analog stick | 44 | void CallConfigureDialog(Args... args); |
| 63 | std::array<QPushButton*, Settings::NativeAnalog::NumAnalogs> analog_map_stick; | ||
| 64 | |||
| 65 | static const std::array<std::string, ANALOG_SUB_BUTTONS_NUM> analog_sub_buttons; | ||
| 66 | |||
| 67 | std::vector<std::unique_ptr<InputCommon::Polling::DevicePoller>> device_pollers; | ||
| 68 | |||
| 69 | /// A flag to indicate if keyboard keys are okay when configuring an input. If this is false, | ||
| 70 | /// keyboard events are ignored. | ||
| 71 | bool want_keyboard_keys = false; | ||
| 72 | 45 | ||
| 73 | /// Load configuration settings. | 46 | /// Load configuration settings. |
| 74 | void loadConfiguration(); | 47 | void loadConfiguration(); |
| 75 | /// Restore all buttons to their default values. | 48 | /// Restore all buttons to their default values. |
| 76 | void restoreDefaults(); | 49 | void restoreDefaults(); |
| 77 | /// Clear all input configuration | ||
| 78 | void ClearAll(); | ||
| 79 | 50 | ||
| 80 | /// Update UI to reflect current configuration. | 51 | std::unique_ptr<Ui::ConfigureInput> ui; |
| 81 | void updateButtonLabels(); | ||
| 82 | |||
| 83 | /// Called when the button was pressed. | ||
| 84 | void handleClick(QPushButton* button, | ||
| 85 | std::function<void(const Common::ParamPackage&)> new_input_setter, | ||
| 86 | InputCommon::Polling::DeviceType type); | ||
| 87 | |||
| 88 | /// Finish polling and configure input using the input_setter | ||
| 89 | void setPollingResult(const Common::ParamPackage& params, bool abort); | ||
| 90 | 52 | ||
| 91 | /// Handle key press events. | 53 | std::array<QCheckBox*, 8> players_enabled; |
| 92 | void keyPressEvent(QKeyEvent* event) override; | 54 | std::array<QComboBox*, 8> player_controller; |
| 55 | std::array<QPushButton*, 8> player_configure; | ||
| 93 | }; | 56 | }; |
diff --git a/src/yuzu/configuration/configure_input.ui b/src/yuzu/configuration/configure_input.ui index 8a019a693..f12896b47 100644 --- a/src/yuzu/configuration/configure_input.ui +++ b/src/yuzu/configuration/configure_input.ui | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | <rect> | 6 | <rect> |
| 7 | <x>0</x> | 7 | <x>0</x> |
| 8 | <y>0</y> | 8 | <y>0</y> |
| 9 | <width>343</width> | 9 | <width>473</width> |
| 10 | <height>677</height> | 10 | <height>677</height> |
| 11 | </rect> | 11 | </rect> |
| 12 | </property> | 12 | </property> |
| @@ -15,740 +15,474 @@ | |||
| 15 | </property> | 15 | </property> |
| 16 | <layout class="QVBoxLayout" name="verticalLayout_5"> | 16 | <layout class="QVBoxLayout" name="verticalLayout_5"> |
| 17 | <item> | 17 | <item> |
| 18 | <layout class="QGridLayout" name="buttons"> | 18 | <layout class="QVBoxLayout" name="verticalLayout"> |
| 19 | <item row="3" column="1"> | 19 | <item> |
| 20 | <widget class="QGroupBox" name="misc"> | 20 | <widget class="QGroupBox" name="gridGroupBox"> |
| 21 | <property name="title"> | 21 | <property name="title"> |
| 22 | <string>Misc.</string> | 22 | <string>Players</string> |
| 23 | </property> | ||
| 24 | <property name="flat"> | ||
| 25 | <bool>false</bool> | ||
| 26 | </property> | ||
| 27 | <property name="checkable"> | ||
| 28 | <bool>false</bool> | ||
| 29 | </property> | 23 | </property> |
| 30 | <layout class="QGridLayout" name="gridLayout_6"> | 24 | <layout class="QGridLayout" name="gridLayout"> |
| 31 | <item row="0" column="0"> | 25 | <item row="1" column="2"> |
| 32 | <layout class="QVBoxLayout" name="buttonMiscMinusVerticalLayout"> | 26 | <widget class="QComboBox" name="player1_combobox"> |
| 33 | <item> | 27 | <property name="minimumSize"> |
| 34 | <widget class="QLabel" name="labelMinus"> | 28 | <size> |
| 35 | <property name="text"> | 29 | <width>110</width> |
| 36 | <string>Minus:</string> | 30 | <height>0</height> |
| 37 | </property> | 31 | </size> |
| 38 | </widget> | 32 | </property> |
| 39 | </item> | 33 | </widget> |
| 40 | <item> | ||
| 41 | <widget class="QPushButton" name="buttonMinus"> | ||
| 42 | <property name="text"> | ||
| 43 | <string/> | ||
| 44 | </property> | ||
| 45 | </widget> | ||
| 46 | </item> | ||
| 47 | </layout> | ||
| 48 | </item> | 34 | </item> |
| 49 | <item row="0" column="1"> | 35 | <item row="1" column="3"> |
| 50 | <layout class="QVBoxLayout" name="buttonMiscPlusVerticalLayout"> | 36 | <widget class="QPushButton" name="player1_configure"> |
| 51 | <item> | 37 | <property name="text"> |
| 52 | <widget class="QLabel" name="labelPlus"> | 38 | <string>Configure</string> |
| 53 | <property name="text"> | 39 | </property> |
| 54 | <string>Plus:</string> | 40 | </widget> |
| 55 | </property> | ||
| 56 | </widget> | ||
| 57 | </item> | ||
| 58 | <item> | ||
| 59 | <widget class="QPushButton" name="buttonPlus"> | ||
| 60 | <property name="text"> | ||
| 61 | <string/> | ||
| 62 | </property> | ||
| 63 | </widget> | ||
| 64 | </item> | ||
| 65 | </layout> | ||
| 66 | </item> | 41 | </item> |
| 67 | <item row="1" column="0"> | 42 | <item row="0" column="2"> |
| 68 | <layout class="QVBoxLayout" name="buttonMiscHomeVerticalLayout"> | 43 | <widget class="QLabel" name="label"> |
| 69 | <item> | 44 | <property name="text"> |
| 70 | <widget class="QLabel" name="labelHome"> | 45 | <string>Controller Type</string> |
| 71 | <property name="text"> | 46 | </property> |
| 72 | <string>Home:</string> | 47 | <property name="alignment"> |
| 73 | </property> | 48 | <set>Qt::AlignCenter</set> |
| 74 | </widget> | 49 | </property> |
| 75 | </item> | 50 | </widget> |
| 76 | <item> | ||
| 77 | <widget class="QPushButton" name="buttonHome"> | ||
| 78 | <property name="text"> | ||
| 79 | <string/> | ||
| 80 | </property> | ||
| 81 | </widget> | ||
| 82 | </item> | ||
| 83 | </layout> | ||
| 84 | </item> | 51 | </item> |
| 85 | <item row="1" column="1"> | 52 | <item row="1" column="1"> |
| 86 | <layout class="QVBoxLayout" name="buttonMiscScrCapVerticalLayout"> | 53 | <widget class="QCheckBox" name="player1_checkbox"> |
| 87 | <item> | 54 | <property name="text"> |
| 88 | <widget class="QLabel" name="labelScrCap"> | 55 | <string>Player 1</string> |
| 89 | <property name="text"> | 56 | </property> |
| 90 | <string>Screen | 57 | </widget> |
| 91 | Capture:</string> | 58 | </item> |
| 92 | </property> | 59 | <item row="7" column="1"> |
| 93 | </widget> | 60 | <widget class="QCheckBox" name="player7_checkbox"> |
| 94 | </item> | 61 | <property name="text"> |
| 95 | <item> | 62 | <string>Player 7</string> |
| 96 | <widget class="QPushButton" name="buttonScreenshot"> | 63 | </property> |
| 97 | <property name="text"> | 64 | </widget> |
| 98 | <string/> | 65 | </item> |
| 99 | </property> | 66 | <item row="4" column="1"> |
| 100 | </widget> | 67 | <widget class="QCheckBox" name="player4_checkbox"> |
| 101 | </item> | 68 | <property name="text"> |
| 102 | </layout> | 69 | <string>Player 4</string> |
| 70 | </property> | ||
| 71 | </widget> | ||
| 72 | </item> | ||
| 73 | <item row="5" column="1"> | ||
| 74 | <widget class="QCheckBox" name="player5_checkbox"> | ||
| 75 | <property name="text"> | ||
| 76 | <string>Player 5</string> | ||
| 77 | </property> | ||
| 78 | </widget> | ||
| 79 | </item> | ||
| 80 | <item row="6" column="1"> | ||
| 81 | <widget class="QCheckBox" name="player6_checkbox"> | ||
| 82 | <property name="text"> | ||
| 83 | <string>Player 6</string> | ||
| 84 | </property> | ||
| 85 | </widget> | ||
| 86 | </item> | ||
| 87 | <item row="8" column="1"> | ||
| 88 | <widget class="QCheckBox" name="player8_checkbox"> | ||
| 89 | <property name="text"> | ||
| 90 | <string>Player 8</string> | ||
| 91 | </property> | ||
| 92 | </widget> | ||
| 93 | </item> | ||
| 94 | <item row="3" column="1"> | ||
| 95 | <widget class="QCheckBox" name="player3_checkbox"> | ||
| 96 | <property name="text"> | ||
| 97 | <string>Player 3</string> | ||
| 98 | </property> | ||
| 99 | </widget> | ||
| 103 | </item> | 100 | </item> |
| 104 | <item row="2" column="1"> | 101 | <item row="2" column="1"> |
| 105 | <spacer name="verticalSpacer"> | 102 | <widget class="QCheckBox" name="player2_checkbox"> |
| 106 | <property name="orientation"> | 103 | <property name="text"> |
| 107 | <enum>Qt::Vertical</enum> | 104 | <string>Player 2</string> |
| 108 | </property> | 105 | </property> |
| 109 | <property name="sizeHint" stdset="0"> | 106 | </widget> |
| 107 | </item> | ||
| 108 | <item row="2" column="2"> | ||
| 109 | <widget class="QComboBox" name="player2_combobox"> | ||
| 110 | <property name="minimumSize"> | ||
| 110 | <size> | 111 | <size> |
| 111 | <width>20</width> | 112 | <width>110</width> |
| 112 | <height>40</height> | 113 | <height>0</height> |
| 113 | </size> | 114 | </size> |
| 114 | </property> | 115 | </property> |
| 115 | </spacer> | 116 | </widget> |
| 116 | </item> | 117 | </item> |
| 117 | </layout> | 118 | <item row="3" column="2"> |
| 118 | </widget> | 119 | <widget class="QComboBox" name="player3_combobox"> |
| 119 | </item> | 120 | <property name="minimumSize"> |
| 120 | <item row="0" column="0"> | 121 | <size> |
| 121 | <widget class="QGroupBox" name="faceButtons"> | 122 | <width>110</width> |
| 122 | <property name="title"> | 123 | <height>0</height> |
| 123 | <string>Face Buttons</string> | 124 | </size> |
| 124 | </property> | 125 | </property> |
| 125 | <property name="flat"> | 126 | </widget> |
| 126 | <bool>false</bool> | ||
| 127 | </property> | ||
| 128 | <property name="checkable"> | ||
| 129 | <bool>false</bool> | ||
| 130 | </property> | ||
| 131 | <layout class="QGridLayout" name="gridLayout"> | ||
| 132 | <item row="0" column="0"> | ||
| 133 | <layout class="QVBoxLayout" name="buttonFaceButtonsAVerticalLayout"> | ||
| 134 | <item> | ||
| 135 | <widget class="QLabel" name="labelA"> | ||
| 136 | <property name="text"> | ||
| 137 | <string>A:</string> | ||
| 138 | </property> | ||
| 139 | </widget> | ||
| 140 | </item> | ||
| 141 | <item> | ||
| 142 | <widget class="QPushButton" name="buttonA"> | ||
| 143 | <property name="text"> | ||
| 144 | <string/> | ||
| 145 | </property> | ||
| 146 | </widget> | ||
| 147 | </item> | ||
| 148 | </layout> | ||
| 149 | </item> | 127 | </item> |
| 150 | <item row="0" column="1"> | 128 | <item row="4" column="2"> |
| 151 | <layout class="QVBoxLayout" name="buttonFaceButtonsBVerticalLayout"> | 129 | <widget class="QComboBox" name="player4_combobox"> |
| 152 | <item> | 130 | <property name="minimumSize"> |
| 153 | <widget class="QLabel" name="labelB"> | 131 | <size> |
| 154 | <property name="text"> | 132 | <width>110</width> |
| 155 | <string>B:</string> | 133 | <height>0</height> |
| 156 | </property> | 134 | </size> |
| 157 | </widget> | 135 | </property> |
| 158 | </item> | 136 | </widget> |
| 159 | <item> | ||
| 160 | <widget class="QPushButton" name="buttonB"> | ||
| 161 | <property name="text"> | ||
| 162 | <string/> | ||
| 163 | </property> | ||
| 164 | </widget> | ||
| 165 | </item> | ||
| 166 | </layout> | ||
| 167 | </item> | 137 | </item> |
| 168 | <item row="1" column="0"> | 138 | <item row="5" column="2"> |
| 169 | <layout class="QVBoxLayout" name="buttonFaceButtonsXVerticalLayout"> | 139 | <widget class="QComboBox" name="player5_combobox"> |
| 170 | <item> | 140 | <property name="minimumSize"> |
| 171 | <widget class="QLabel" name="labelX"> | 141 | <size> |
| 172 | <property name="text"> | 142 | <width>110</width> |
| 173 | <string>X:</string> | 143 | <height>0</height> |
| 174 | </property> | 144 | </size> |
| 175 | </widget> | 145 | </property> |
| 176 | </item> | 146 | </widget> |
| 177 | <item> | ||
| 178 | <widget class="QPushButton" name="buttonX"> | ||
| 179 | <property name="text"> | ||
| 180 | <string/> | ||
| 181 | </property> | ||
| 182 | </widget> | ||
| 183 | </item> | ||
| 184 | </layout> | ||
| 185 | </item> | 147 | </item> |
| 186 | <item row="1" column="1"> | 148 | <item row="6" column="2"> |
| 187 | <layout class="QVBoxLayout" name="buttonFaceButtonsYVerticalLayout"> | 149 | <widget class="QComboBox" name="player6_combobox"> |
| 188 | <item> | 150 | <property name="minimumSize"> |
| 189 | <widget class="QLabel" name="labelY"> | 151 | <size> |
| 190 | <property name="text"> | 152 | <width>110</width> |
| 191 | <string>Y:</string> | 153 | <height>0</height> |
| 192 | </property> | 154 | </size> |
| 193 | </widget> | 155 | </property> |
| 194 | </item> | 156 | </widget> |
| 195 | <item> | ||
| 196 | <widget class="QPushButton" name="buttonY"> | ||
| 197 | <property name="text"> | ||
| 198 | <string/> | ||
| 199 | </property> | ||
| 200 | </widget> | ||
| 201 | </item> | ||
| 202 | </layout> | ||
| 203 | </item> | 157 | </item> |
| 204 | </layout> | 158 | <item row="7" column="2"> |
| 205 | </widget> | 159 | <widget class="QComboBox" name="player7_combobox"> |
| 206 | </item> | 160 | <property name="minimumSize"> |
| 207 | <item row="0" column="1"> | 161 | <size> |
| 208 | <widget class="QGroupBox" name="Dpad"> | 162 | <width>110</width> |
| 209 | <property name="title"> | 163 | <height>0</height> |
| 210 | <string>Directional Pad</string> | 164 | </size> |
| 211 | </property> | 165 | </property> |
| 212 | <property name="flat"> | 166 | </widget> |
| 213 | <bool>false</bool> | ||
| 214 | </property> | ||
| 215 | <property name="checkable"> | ||
| 216 | <bool>false</bool> | ||
| 217 | </property> | ||
| 218 | <layout class="QGridLayout" name="gridLayout_2"> | ||
| 219 | <item row="1" column="0"> | ||
| 220 | <layout class="QVBoxLayout" name="buttonDpadUpVerticalLayout"> | ||
| 221 | <item> | ||
| 222 | <widget class="QLabel" name="labelDpadUp"> | ||
| 223 | <property name="text"> | ||
| 224 | <string>Up:</string> | ||
| 225 | </property> | ||
| 226 | </widget> | ||
| 227 | </item> | ||
| 228 | <item> | ||
| 229 | <widget class="QPushButton" name="buttonDpadUp"> | ||
| 230 | <property name="text"> | ||
| 231 | <string/> | ||
| 232 | </property> | ||
| 233 | </widget> | ||
| 234 | </item> | ||
| 235 | </layout> | ||
| 236 | </item> | 167 | </item> |
| 237 | <item row="1" column="1"> | 168 | <item row="8" column="2"> |
| 238 | <layout class="QVBoxLayout" name="buttonDpadDownVerticalLayout"> | 169 | <widget class="QComboBox" name="player8_combobox"> |
| 239 | <item> | 170 | <property name="minimumSize"> |
| 240 | <widget class="QLabel" name="labelDpadDown"> | 171 | <size> |
| 241 | <property name="text"> | 172 | <width>110</width> |
| 242 | <string>Down:</string> | 173 | <height>0</height> |
| 243 | </property> | 174 | </size> |
| 244 | </widget> | 175 | </property> |
| 245 | </item> | 176 | </widget> |
| 246 | <item> | 177 | </item> |
| 247 | <widget class="QPushButton" name="buttonDpadDown"> | 178 | <item row="2" column="3"> |
| 248 | <property name="text"> | 179 | <widget class="QPushButton" name="player2_configure"> |
| 249 | <string/> | 180 | <property name="text"> |
| 250 | </property> | 181 | <string>Configure</string> |
| 251 | </widget> | 182 | </property> |
| 252 | </item> | 183 | </widget> |
| 253 | </layout> | 184 | </item> |
| 185 | <item row="3" column="3"> | ||
| 186 | <widget class="QPushButton" name="player3_configure"> | ||
| 187 | <property name="text"> | ||
| 188 | <string>Configure</string> | ||
| 189 | </property> | ||
| 190 | </widget> | ||
| 191 | </item> | ||
| 192 | <item row="4" column="3"> | ||
| 193 | <widget class="QPushButton" name="player4_configure"> | ||
| 194 | <property name="text"> | ||
| 195 | <string>Configure</string> | ||
| 196 | </property> | ||
| 197 | </widget> | ||
| 198 | </item> | ||
| 199 | <item row="5" column="3"> | ||
| 200 | <widget class="QPushButton" name="player5_configure"> | ||
| 201 | <property name="text"> | ||
| 202 | <string>Configure</string> | ||
| 203 | </property> | ||
| 204 | </widget> | ||
| 205 | </item> | ||
| 206 | <item row="6" column="3"> | ||
| 207 | <widget class="QPushButton" name="player6_configure"> | ||
| 208 | <property name="text"> | ||
| 209 | <string>Configure</string> | ||
| 210 | </property> | ||
| 211 | </widget> | ||
| 212 | </item> | ||
| 213 | <item row="7" column="3"> | ||
| 214 | <widget class="QPushButton" name="player7_configure"> | ||
| 215 | <property name="text"> | ||
| 216 | <string>Configure</string> | ||
| 217 | </property> | ||
| 218 | </widget> | ||
| 219 | </item> | ||
| 220 | <item row="8" column="3"> | ||
| 221 | <widget class="QPushButton" name="player8_configure"> | ||
| 222 | <property name="text"> | ||
| 223 | <string>Configure</string> | ||
| 224 | </property> | ||
| 225 | </widget> | ||
| 254 | </item> | 226 | </item> |
| 255 | <item row="0" column="0"> | 227 | <item row="0" column="0"> |
| 256 | <layout class="QVBoxLayout" name="buttonDpadLeftVerticalLayout"> | 228 | <spacer name="horizontalSpacer"> |
| 257 | <item> | 229 | <property name="orientation"> |
| 258 | <widget class="QLabel" name="labelDpadLeft"> | 230 | <enum>Qt::Horizontal</enum> |
| 259 | <property name="text"> | 231 | </property> |
| 260 | <string>Left:</string> | 232 | <property name="sizeHint" stdset="0"> |
| 261 | </property> | 233 | <size> |
| 262 | </widget> | 234 | <width>40</width> |
| 263 | </item> | 235 | <height>20</height> |
| 264 | <item> | 236 | </size> |
| 265 | <widget class="QPushButton" name="buttonDpadLeft"> | 237 | </property> |
| 266 | <property name="text"> | 238 | </spacer> |
| 267 | <string/> | 239 | </item> |
| 268 | </property> | 240 | <item row="0" column="4"> |
| 269 | </widget> | 241 | <spacer name="horizontalSpacer_2"> |
| 270 | </item> | 242 | <property name="orientation"> |
| 271 | </layout> | 243 | <enum>Qt::Horizontal</enum> |
| 244 | </property> | ||
| 245 | <property name="sizeHint" stdset="0"> | ||
| 246 | <size> | ||
| 247 | <width>40</width> | ||
| 248 | <height>20</height> | ||
| 249 | </size> | ||
| 250 | </property> | ||
| 251 | </spacer> | ||
| 272 | </item> | 252 | </item> |
| 273 | <item row="0" column="1"> | 253 | <item row="0" column="1"> |
| 274 | <layout class="QVBoxLayout" name="buttonDpadRightVerticalLayout"> | 254 | <widget class="QLabel" name="label_2"> |
| 275 | <item> | 255 | <property name="text"> |
| 276 | <widget class="QLabel" name="labelDpadRight"> | 256 | <string>Enabled</string> |
| 277 | <property name="text"> | 257 | </property> |
| 278 | <string>Right:</string> | 258 | <property name="alignment"> |
| 279 | </property> | 259 | <set>Qt::AlignCenter</set> |
| 280 | </widget> | 260 | </property> |
| 281 | </item> | 261 | </widget> |
| 282 | <item> | ||
| 283 | <widget class="QPushButton" name="buttonDpadRight"> | ||
| 284 | <property name="text"> | ||
| 285 | <string/> | ||
| 286 | </property> | ||
| 287 | </widget> | ||
| 288 | </item> | ||
| 289 | </layout> | ||
| 290 | </item> | 262 | </item> |
| 291 | </layout> | 263 | </layout> |
| 292 | </widget> | 264 | </widget> |
| 293 | </item> | 265 | </item> |
| 294 | <item row="3" column="0"> | 266 | <item> |
| 295 | <widget class="QGroupBox" name="shoulderButtons"> | 267 | <widget class="QGroupBox" name="gridGroupBox"> |
| 296 | <property name="title"> | 268 | <property name="title"> |
| 297 | <string>Shoulder Buttons</string> | 269 | <string>Handheld</string> |
| 298 | </property> | ||
| 299 | <property name="flat"> | ||
| 300 | <bool>false</bool> | ||
| 301 | </property> | ||
| 302 | <property name="checkable"> | ||
| 303 | <bool>false</bool> | ||
| 304 | </property> | 270 | </property> |
| 305 | <layout class="QGridLayout" name="gridLayout_3"> | 271 | <layout class="QGridLayout" name="gridLayout_2"> |
| 306 | <item row="0" column="0"> | 272 | <item row="1" column="2"> |
| 307 | <layout class="QVBoxLayout" name="buttonShoulderButtonsLVerticalLayout"> | 273 | <spacer name="horizontalSpacer_5"> |
| 308 | <item> | 274 | <property name="orientation"> |
| 309 | <widget class="QLabel" name="labelL"> | 275 | <enum>Qt::Horizontal</enum> |
| 310 | <property name="text"> | 276 | </property> |
| 311 | <string>L:</string> | 277 | <property name="sizeType"> |
| 312 | </property> | 278 | <enum>QSizePolicy::Fixed</enum> |
| 313 | </widget> | 279 | </property> |
| 314 | </item> | 280 | <property name="sizeHint" stdset="0"> |
| 315 | <item> | 281 | <size> |
| 316 | <widget class="QPushButton" name="buttonL"> | 282 | <width>72</width> |
| 317 | <property name="text"> | 283 | <height>20</height> |
| 318 | <string/> | 284 | </size> |
| 319 | </property> | 285 | </property> |
| 320 | </widget> | 286 | </spacer> |
| 321 | </item> | ||
| 322 | </layout> | ||
| 323 | </item> | 287 | </item> |
| 324 | <item row="0" column="1"> | 288 | <item row="1" column="4"> |
| 325 | <layout class="QVBoxLayout" name="buttonShoulderButtonsRVerticalLayout"> | 289 | <spacer name="horizontalSpacer_4"> |
| 326 | <item> | 290 | <property name="orientation"> |
| 327 | <widget class="QLabel" name="labelR"> | 291 | <enum>Qt::Horizontal</enum> |
| 328 | <property name="text"> | 292 | </property> |
| 329 | <string>R:</string> | 293 | <property name="sizeHint" stdset="0"> |
| 330 | </property> | 294 | <size> |
| 331 | </widget> | 295 | <width>40</width> |
| 332 | </item> | 296 | <height>20</height> |
| 333 | <item> | 297 | </size> |
| 334 | <widget class="QPushButton" name="buttonR"> | 298 | </property> |
| 335 | <property name="text"> | 299 | </spacer> |
| 336 | <string/> | 300 | </item> |
| 337 | </property> | 301 | <item row="1" column="3"> |
| 338 | </widget> | 302 | <widget class="QPushButton" name="handheld_configure"> |
| 339 | </item> | 303 | <property name="text"> |
| 340 | </layout> | 304 | <string>Configure</string> |
| 305 | </property> | ||
| 306 | </widget> | ||
| 341 | </item> | 307 | </item> |
| 342 | <item row="1" column="0"> | 308 | <item row="1" column="0"> |
| 343 | <layout class="QVBoxLayout" name="buttonShoulderButtonsZLVerticalLayout"> | 309 | <spacer name="horizontalSpacer_3"> |
| 344 | <item> | 310 | <property name="orientation"> |
| 345 | <widget class="QLabel" name="labelZL"> | 311 | <enum>Qt::Horizontal</enum> |
| 346 | <property name="text"> | 312 | </property> |
| 347 | <string>ZL:</string> | 313 | <property name="sizeHint" stdset="0"> |
| 348 | </property> | 314 | <size> |
| 349 | </widget> | 315 | <width>40</width> |
| 350 | </item> | 316 | <height>20</height> |
| 351 | <item> | 317 | </size> |
| 352 | <widget class="QPushButton" name="buttonZL"> | 318 | </property> |
| 353 | <property name="text"> | 319 | </spacer> |
| 354 | <string/> | ||
| 355 | </property> | ||
| 356 | </widget> | ||
| 357 | </item> | ||
| 358 | </layout> | ||
| 359 | </item> | 320 | </item> |
| 360 | <item row="1" column="1"> | 321 | <item row="1" column="1"> |
| 361 | <layout class="QVBoxLayout" name="buttonShoulderButtonsZRVerticalLayout"> | 322 | <widget class="QCheckBox" name="handheld_connected"> |
| 362 | <item> | 323 | <property name="text"> |
| 363 | <widget class="QLabel" name="labelZR"> | 324 | <string>Connected</string> |
| 364 | <property name="text"> | 325 | </property> |
| 365 | <string>ZR:</string> | 326 | </widget> |
| 366 | </property> | ||
| 367 | </widget> | ||
| 368 | </item> | ||
| 369 | <item> | ||
| 370 | <widget class="QPushButton" name="buttonZR"> | ||
| 371 | <property name="text"> | ||
| 372 | <string/> | ||
| 373 | </property> | ||
| 374 | </widget> | ||
| 375 | </item> | ||
| 376 | </layout> | ||
| 377 | </item> | ||
| 378 | <item row="2" column="0"> | ||
| 379 | <layout class="QVBoxLayout" name="buttonShoulderButtonsSLVerticalLayout"> | ||
| 380 | <item> | ||
| 381 | <widget class="QLabel" name="labelSL"> | ||
| 382 | <property name="text"> | ||
| 383 | <string>SL:</string> | ||
| 384 | </property> | ||
| 385 | </widget> | ||
| 386 | </item> | ||
| 387 | <item> | ||
| 388 | <widget class="QPushButton" name="buttonSL"> | ||
| 389 | <property name="text"> | ||
| 390 | <string/> | ||
| 391 | </property> | ||
| 392 | </widget> | ||
| 393 | </item> | ||
| 394 | </layout> | ||
| 395 | </item> | 327 | </item> |
| 396 | <item row="2" column="1"> | 328 | <item row="0" column="1"> |
| 397 | <layout class="QVBoxLayout" name="buttonShoulderButtonsSRVerticalLayout"> | 329 | <widget class="QCheckBox" name="use_docked_mode"> |
| 398 | <item> | 330 | <property name="text"> |
| 399 | <widget class="QLabel" name="labelSR"> | 331 | <string>Use Docked Mode</string> |
| 400 | <property name="text"> | 332 | </property> |
| 401 | <string>SR:</string> | 333 | </widget> |
| 402 | </property> | ||
| 403 | </widget> | ||
| 404 | </item> | ||
| 405 | <item> | ||
| 406 | <widget class="QPushButton" name="buttonSR"> | ||
| 407 | <property name="text"> | ||
| 408 | <string/> | ||
| 409 | </property> | ||
| 410 | </widget> | ||
| 411 | </item> | ||
| 412 | </layout> | ||
| 413 | </item> | 334 | </item> |
| 414 | </layout> | 335 | </layout> |
| 415 | </widget> | 336 | </widget> |
| 416 | </item> | 337 | </item> |
| 417 | <item row="1" column="1"> | 338 | <item> |
| 418 | <widget class="QGroupBox" name="RStick"> | 339 | <widget class="QGroupBox" name="gridGroupBox"> |
| 419 | <property name="title"> | 340 | <property name="title"> |
| 420 | <string>Right Stick</string> | 341 | <string>Other</string> |
| 421 | </property> | ||
| 422 | <property name="alignment"> | ||
| 423 | <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> | ||
| 424 | </property> | 342 | </property> |
| 425 | <property name="flat"> | 343 | <layout class="QGridLayout" name="gridLayout_3"> |
| 426 | <bool>false</bool> | ||
| 427 | </property> | ||
| 428 | <property name="checkable"> | ||
| 429 | <bool>false</bool> | ||
| 430 | </property> | ||
| 431 | <layout class="QGridLayout" name="gridLayout_5"> | ||
| 432 | <item row="1" column="1"> | 344 | <item row="1" column="1"> |
| 433 | <layout class="QVBoxLayout" name="buttonRStickDownVerticalLayout"> | 345 | <widget class="QCheckBox" name="keyboard_enabled"> |
| 434 | <item> | 346 | <property name="minimumSize"> |
| 435 | <widget class="QLabel" name="labelRStickDown"> | 347 | <size> |
| 436 | <property name="text"> | 348 | <width>0</width> |
| 437 | <string>Down:</string> | 349 | <height>23</height> |
| 438 | </property> | 350 | </size> |
| 439 | </widget> | 351 | </property> |
| 440 | </item> | ||
| 441 | <item> | ||
| 442 | <widget class="QPushButton" name="buttonRStickDown"> | ||
| 443 | <property name="text"> | ||
| 444 | <string/> | ||
| 445 | </property> | ||
| 446 | </widget> | ||
| 447 | </item> | ||
| 448 | </layout> | ||
| 449 | </item> | ||
| 450 | <item row="0" column="1"> | ||
| 451 | <layout class="QVBoxLayout" name="buttonRStickRightVerticalLayout"> | ||
| 452 | <item> | ||
| 453 | <widget class="QLabel" name="labelRStickRight"> | ||
| 454 | <property name="text"> | ||
| 455 | <string>Right:</string> | ||
| 456 | </property> | ||
| 457 | </widget> | ||
| 458 | </item> | ||
| 459 | <item> | ||
| 460 | <widget class="QPushButton" name="buttonRStickRight"> | ||
| 461 | <property name="text"> | ||
| 462 | <string/> | ||
| 463 | </property> | ||
| 464 | </widget> | ||
| 465 | </item> | ||
| 466 | </layout> | ||
| 467 | </item> | ||
| 468 | <item row="3" column="0" colspan="2"> | ||
| 469 | <widget class="QPushButton" name="buttonRStickAnalog"> | ||
| 470 | <property name="text"> | 352 | <property name="text"> |
| 471 | <string>Set Analog Stick</string> | 353 | <string>Keyboard</string> |
| 472 | </property> | 354 | </property> |
| 473 | </widget> | 355 | </widget> |
| 474 | </item> | 356 | </item> |
| 475 | <item row="0" column="0"> | ||
| 476 | <layout class="QVBoxLayout" name="buttonRStickLeftVerticalLayout"> | ||
| 477 | <item> | ||
| 478 | <widget class="QLabel" name="labelRStickLeft"> | ||
| 479 | <property name="text"> | ||
| 480 | <string>Left:</string> | ||
| 481 | </property> | ||
| 482 | </widget> | ||
| 483 | </item> | ||
| 484 | <item> | ||
| 485 | <widget class="QPushButton" name="buttonRStickLeft"> | ||
| 486 | <property name="text"> | ||
| 487 | <string/> | ||
| 488 | </property> | ||
| 489 | </widget> | ||
| 490 | </item> | ||
| 491 | </layout> | ||
| 492 | </item> | ||
| 493 | <item row="1" column="0"> | ||
| 494 | <layout class="QVBoxLayout" name="buttonRStickUpVerticalLayout"> | ||
| 495 | <item> | ||
| 496 | <widget class="QLabel" name="labelRStickUp"> | ||
| 497 | <property name="text"> | ||
| 498 | <string>Up:</string> | ||
| 499 | </property> | ||
| 500 | </widget> | ||
| 501 | </item> | ||
| 502 | <item> | ||
| 503 | <widget class="QPushButton" name="buttonRStickUp"> | ||
| 504 | <property name="text"> | ||
| 505 | <string/> | ||
| 506 | </property> | ||
| 507 | </widget> | ||
| 508 | </item> | ||
| 509 | </layout> | ||
| 510 | </item> | ||
| 511 | <item row="2" column="0"> | ||
| 512 | <layout class="QVBoxLayout" name="buttonRStickPressedVerticalLayout"> | ||
| 513 | <item> | ||
| 514 | <widget class="QLabel" name="labelRStickPressed"> | ||
| 515 | <property name="text"> | ||
| 516 | <string>Pressed:</string> | ||
| 517 | </property> | ||
| 518 | </widget> | ||
| 519 | </item> | ||
| 520 | <item> | ||
| 521 | <widget class="QPushButton" name="buttonRStick"> | ||
| 522 | <property name="text"> | ||
| 523 | <string/> | ||
| 524 | </property> | ||
| 525 | </widget> | ||
| 526 | </item> | ||
| 527 | </layout> | ||
| 528 | </item> | ||
| 529 | <item row="2" column="1"> | 357 | <item row="2" column="1"> |
| 530 | <layout class="QVBoxLayout" name="buttonRStickModVerticalLayout"> | 358 | <widget class="QCheckBox" name="debug_enabled"> |
| 531 | <item> | 359 | <property name="text"> |
| 532 | <widget class="QLabel" name="labelRStickMod"> | 360 | <string>Debug Controller</string> |
| 533 | <property name="text"> | 361 | </property> |
| 534 | <string>Modifier:</string> | 362 | </widget> |
| 535 | </property> | ||
| 536 | </widget> | ||
| 537 | </item> | ||
| 538 | <item> | ||
| 539 | <widget class="QPushButton" name="buttonRStickMod"> | ||
| 540 | <property name="text"> | ||
| 541 | <string/> | ||
| 542 | </property> | ||
| 543 | </widget> | ||
| 544 | </item> | ||
| 545 | </layout> | ||
| 546 | </item> | 363 | </item> |
| 547 | </layout> | 364 | <item row="3" column="1"> |
| 548 | </widget> | 365 | <widget class="QCheckBox" name="touchscreen_enabled"> |
| 549 | </item> | ||
| 550 | <item row="1" column="0"> | ||
| 551 | <widget class="QGroupBox" name="LStick"> | ||
| 552 | <property name="title"> | ||
| 553 | <string>Left Stick</string> | ||
| 554 | </property> | ||
| 555 | <property name="flat"> | ||
| 556 | <bool>false</bool> | ||
| 557 | </property> | ||
| 558 | <property name="checkable"> | ||
| 559 | <bool>false</bool> | ||
| 560 | </property> | ||
| 561 | <layout class="QGridLayout" name="gridLayout_4"> | ||
| 562 | <item row="1" column="1"> | ||
| 563 | <layout class="QVBoxLayout" name="buttonLStickDownVerticalLayout"> | ||
| 564 | <item> | ||
| 565 | <widget class="QLabel" name="labelLStickDown"> | ||
| 566 | <property name="text"> | ||
| 567 | <string>Down:</string> | ||
| 568 | </property> | ||
| 569 | </widget> | ||
| 570 | </item> | ||
| 571 | <item> | ||
| 572 | <widget class="QPushButton" name="buttonLStickDown"> | ||
| 573 | <property name="text"> | ||
| 574 | <string/> | ||
| 575 | </property> | ||
| 576 | </widget> | ||
| 577 | </item> | ||
| 578 | </layout> | ||
| 579 | </item> | ||
| 580 | <item row="4" column="0" colspan="2"> | ||
| 581 | <widget class="QPushButton" name="buttonLStickAnalog"> | ||
| 582 | <property name="text"> | 366 | <property name="text"> |
| 583 | <string>Set Analog Stick</string> | 367 | <string>Touchscreen</string> |
| 584 | </property> | 368 | </property> |
| 585 | </widget> | 369 | </widget> |
| 586 | </item> | 370 | </item> |
| 587 | <item row="0" column="1"> | 371 | <item row="0" column="1"> |
| 588 | <layout class="QVBoxLayout" name="buttonLStickRightVerticalLayout"> | 372 | <widget class="QCheckBox" name="mouse_enabled"> |
| 589 | <item> | 373 | <property name="minimumSize"> |
| 590 | <widget class="QLabel" name="labelLStickRight"> | 374 | <size> |
| 591 | <property name="text"> | 375 | <width>0</width> |
| 592 | <string>Right:</string> | 376 | <height>23</height> |
| 593 | </property> | 377 | </size> |
| 594 | </widget> | 378 | </property> |
| 595 | </item> | 379 | <property name="text"> |
| 596 | <item> | 380 | <string>Mouse</string> |
| 597 | <widget class="QPushButton" name="buttonLStickRight"> | 381 | </property> |
| 598 | <property name="text"> | 382 | </widget> |
| 599 | <string/> | 383 | </item> |
| 600 | </property> | 384 | <item row="0" column="4"> |
| 601 | </widget> | 385 | <spacer name="horizontalSpacer_7"> |
| 602 | </item> | 386 | <property name="orientation"> |
| 603 | </layout> | 387 | <enum>Qt::Horizontal</enum> |
| 388 | </property> | ||
| 389 | <property name="sizeHint" stdset="0"> | ||
| 390 | <size> | ||
| 391 | <width>40</width> | ||
| 392 | <height>20</height> | ||
| 393 | </size> | ||
| 394 | </property> | ||
| 395 | </spacer> | ||
| 396 | </item> | ||
| 397 | <item row="0" column="2"> | ||
| 398 | <spacer name="horizontalSpacer_8"> | ||
| 399 | <property name="orientation"> | ||
| 400 | <enum>Qt::Horizontal</enum> | ||
| 401 | </property> | ||
| 402 | <property name="sizeType"> | ||
| 403 | <enum>QSizePolicy::Fixed</enum> | ||
| 404 | </property> | ||
| 405 | <property name="sizeHint" stdset="0"> | ||
| 406 | <size> | ||
| 407 | <width>76</width> | ||
| 408 | <height>20</height> | ||
| 409 | </size> | ||
| 410 | </property> | ||
| 411 | </spacer> | ||
| 604 | </item> | 412 | </item> |
| 605 | <item row="0" column="0"> | 413 | <item row="0" column="0"> |
| 606 | <layout class="QVBoxLayout" name="buttonLStickLeftVerticalLayout"> | 414 | <spacer name="horizontalSpacer_6"> |
| 607 | <item> | 415 | <property name="orientation"> |
| 608 | <widget class="QLabel" name="labelLStickLeft"> | 416 | <enum>Qt::Horizontal</enum> |
| 609 | <property name="text"> | 417 | </property> |
| 610 | <string>Left:</string> | 418 | <property name="sizeHint" stdset="0"> |
| 611 | </property> | 419 | <size> |
| 612 | </widget> | 420 | <width>40</width> |
| 613 | </item> | 421 | <height>20</height> |
| 614 | <item> | 422 | </size> |
| 615 | <widget class="QPushButton" name="buttonLStickLeft"> | 423 | </property> |
| 616 | <property name="text"> | 424 | </spacer> |
| 617 | <string/> | ||
| 618 | </property> | ||
| 619 | </widget> | ||
| 620 | </item> | ||
| 621 | </layout> | ||
| 622 | </item> | 425 | </item> |
| 623 | <item row="1" column="0"> | 426 | <item row="3" column="3"> |
| 624 | <layout class="QVBoxLayout" name="buttonLStickUpVerticalLayout"> | 427 | <widget class="QPushButton" name="touchscreen_advanced"> |
| 625 | <item> | 428 | <property name="text"> |
| 626 | <widget class="QLabel" name="labelLStickUp"> | 429 | <string>Advanced</string> |
| 627 | <property name="text"> | 430 | </property> |
| 628 | <string>Up:</string> | 431 | </widget> |
| 629 | </property> | ||
| 630 | </widget> | ||
| 631 | </item> | ||
| 632 | <item> | ||
| 633 | <widget class="QPushButton" name="buttonLStickUp"> | ||
| 634 | <property name="text"> | ||
| 635 | <string/> | ||
| 636 | </property> | ||
| 637 | </widget> | ||
| 638 | </item> | ||
| 639 | </layout> | ||
| 640 | </item> | ||
| 641 | <item row="3" column="0"> | ||
| 642 | <layout class="QVBoxLayout" name="buttonLStickModVerticalLayout"> | ||
| 643 | <item> | ||
| 644 | <widget class="QLabel" name="labelLStickMod"> | ||
| 645 | <property name="text"> | ||
| 646 | <string>Modifier:</string> | ||
| 647 | </property> | ||
| 648 | </widget> | ||
| 649 | </item> | ||
| 650 | <item> | ||
| 651 | <widget class="QPushButton" name="buttonLStickMod"> | ||
| 652 | <property name="text"> | ||
| 653 | <string/> | ||
| 654 | </property> | ||
| 655 | </widget> | ||
| 656 | </item> | ||
| 657 | </layout> | ||
| 658 | </item> | 432 | </item> |
| 659 | <item row="3" column="1"> | 433 | <item row="2" column="3"> |
| 660 | <layout class="QVBoxLayout" name="buttonLStickPressedVerticalLayout" stretch="0,0"> | 434 | <widget class="QPushButton" name="debug_configure"> |
| 661 | <item> | 435 | <property name="text"> |
| 662 | <widget class="QLabel" name="labelLStickPressed"> | 436 | <string>Configure</string> |
| 663 | <property name="text"> | 437 | </property> |
| 664 | <string>Pressed:</string> | 438 | </widget> |
| 665 | </property> | 439 | </item> |
| 666 | </widget> | 440 | <item row="0" column="3"> |
| 667 | </item> | 441 | <widget class="QPushButton" name="mouse_advanced"> |
| 668 | <item> | 442 | <property name="text"> |
| 669 | <widget class="QPushButton" name="buttonLStick"> | 443 | <string>Advanced</string> |
| 670 | <property name="text"> | 444 | </property> |
| 671 | <string/> | 445 | </widget> |
| 672 | </property> | ||
| 673 | </widget> | ||
| 674 | </item> | ||
| 675 | </layout> | ||
| 676 | </item> | 446 | </item> |
| 677 | </layout> | 447 | </layout> |
| 678 | </widget> | 448 | </widget> |
| 679 | </item> | 449 | </item> |
| 680 | </layout> | ||
| 681 | </item> | ||
| 682 | <item> | ||
| 683 | <layout class="QHBoxLayout" name="horizontalLayout"> | ||
| 684 | <item> | 450 | <item> |
| 685 | <spacer name="horizontalSpacer"> | 451 | <spacer name="verticalSpacer"> |
| 686 | <property name="orientation"> | 452 | <property name="orientation"> |
| 687 | <enum>Qt::Horizontal</enum> | 453 | <enum>Qt::Vertical</enum> |
| 688 | </property> | 454 | </property> |
| 689 | <property name="sizeHint" stdset="0"> | 455 | <property name="sizeHint" stdset="0"> |
| 690 | <size> | 456 | <size> |
| 691 | <width>40</width> | 457 | <width>20</width> |
| 692 | <height>20</height> | 458 | <height>40</height> |
| 693 | </size> | 459 | </size> |
| 694 | </property> | 460 | </property> |
| 695 | </spacer> | 461 | </spacer> |
| 696 | </item> | 462 | </item> |
| 697 | <item> | 463 | <item> |
| 698 | <widget class="QPushButton" name="buttonClearAll"> | 464 | <layout class="QHBoxLayout" name="horizontalLayout"> |
| 699 | <property name="sizePolicy"> | 465 | <item> |
| 700 | <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> | 466 | <widget class="QPushButton" name="restore_defaults_button"> |
| 701 | <horstretch>0</horstretch> | 467 | <property name="text"> |
| 702 | <verstretch>0</verstretch> | 468 | <string>Restore Defaults</string> |
| 703 | </sizepolicy> | 469 | </property> |
| 704 | </property> | 470 | </widget> |
| 705 | <property name="sizeIncrement"> | 471 | </item> |
| 706 | <size> | 472 | <item> |
| 707 | <width>0</width> | 473 | <spacer name="horizontalSpacer_9"> |
| 708 | <height>0</height> | 474 | <property name="orientation"> |
| 709 | </size> | 475 | <enum>Qt::Horizontal</enum> |
| 710 | </property> | 476 | </property> |
| 711 | <property name="baseSize"> | 477 | <property name="sizeHint" stdset="0"> |
| 712 | <size> | 478 | <size> |
| 713 | <width>0</width> | 479 | <width>40</width> |
| 714 | <height>0</height> | 480 | <height>20</height> |
| 715 | </size> | 481 | </size> |
| 716 | </property> | 482 | </property> |
| 717 | <property name="layoutDirection"> | 483 | </spacer> |
| 718 | <enum>Qt::LeftToRight</enum> | 484 | </item> |
| 719 | </property> | 485 | </layout> |
| 720 | <property name="text"> | ||
| 721 | <string>Clear All</string> | ||
| 722 | </property> | ||
| 723 | </widget> | ||
| 724 | </item> | ||
| 725 | <item> | ||
| 726 | <widget class="QPushButton" name="buttonRestoreDefaults"> | ||
| 727 | <property name="sizePolicy"> | ||
| 728 | <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> | ||
| 729 | <horstretch>0</horstretch> | ||
| 730 | <verstretch>0</verstretch> | ||
| 731 | </sizepolicy> | ||
| 732 | </property> | ||
| 733 | <property name="sizeIncrement"> | ||
| 734 | <size> | ||
| 735 | <width>0</width> | ||
| 736 | <height>0</height> | ||
| 737 | </size> | ||
| 738 | </property> | ||
| 739 | <property name="baseSize"> | ||
| 740 | <size> | ||
| 741 | <width>0</width> | ||
| 742 | <height>0</height> | ||
| 743 | </size> | ||
| 744 | </property> | ||
| 745 | <property name="layoutDirection"> | ||
| 746 | <enum>Qt::LeftToRight</enum> | ||
| 747 | </property> | ||
| 748 | <property name="text"> | ||
| 749 | <string>Restore Defaults</string> | ||
| 750 | </property> | ||
| 751 | </widget> | ||
| 752 | </item> | 486 | </item> |
| 753 | </layout> | 487 | </layout> |
| 754 | </item> | 488 | </item> |