mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Input GUI: Add tab to remap controls (#1900)
This commit is contained in:
		
							parent
							
								
									47fcd68b01
								
							
						
					
					
						commit
						e91327c86a
					
				
					 9 changed files with 825 additions and 8 deletions
				
			
		|  | @ -23,6 +23,7 @@ set(SRCS | ||||||
|             configure_dialog.cpp |             configure_dialog.cpp | ||||||
|             configure_general.cpp |             configure_general.cpp | ||||||
|             configure_system.cpp |             configure_system.cpp | ||||||
|  |             configure_input.cpp | ||||||
|             game_list.cpp |             game_list.cpp | ||||||
|             hotkeys.cpp |             hotkeys.cpp | ||||||
|             main.cpp |             main.cpp | ||||||
|  | @ -54,6 +55,7 @@ set(HEADERS | ||||||
|             configure_dialog.h |             configure_dialog.h | ||||||
|             configure_general.h |             configure_general.h | ||||||
|             configure_system.h |             configure_system.h | ||||||
|  |             configure_input.h | ||||||
|             game_list.h |             game_list.h | ||||||
|             game_list_p.h |             game_list_p.h | ||||||
|             hotkeys.h |             hotkeys.h | ||||||
|  | @ -72,6 +74,7 @@ set(UIS | ||||||
|             configure_debug.ui |             configure_debug.ui | ||||||
|             configure_general.ui |             configure_general.ui | ||||||
|             configure_system.ui |             configure_system.ui | ||||||
|  |             configure_input.ui | ||||||
|             hotkeys.ui |             hotkeys.ui | ||||||
|             main.ui |             main.ui | ||||||
|             ) |             ) | ||||||
|  |  | ||||||
|  | @ -3,14 +3,11 @@ | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #include <QSettings> | #include <QSettings> | ||||||
| #include <QString> |  | ||||||
| #include <QStringList> |  | ||||||
| 
 | 
 | ||||||
| #include "citra_qt/config.h" | #include "citra_qt/config.h" | ||||||
| #include "citra_qt/ui_settings.h" | #include "citra_qt/ui_settings.h" | ||||||
| 
 | 
 | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| #include "core/settings.h" |  | ||||||
| 
 | 
 | ||||||
| Config::Config() { | Config::Config() { | ||||||
|     // TODO: Don't hardcode the path; let the frontend decide where to put the config files.
 |     // TODO: Don't hardcode the path; let the frontend decide where to put the config files.
 | ||||||
|  | @ -21,7 +18,7 @@ Config::Config() { | ||||||
|     Reload(); |     Reload(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static const std::array<QVariant, Settings::NativeInput::NUM_INPUTS> defaults = { | const std::array<QVariant, Settings::NativeInput::NUM_INPUTS> Config::defaults = { | ||||||
|     // directly mapped keys
 |     // directly mapped keys
 | ||||||
|     Qt::Key_A, Qt::Key_S, Qt::Key_Z, Qt::Key_X, |     Qt::Key_A, Qt::Key_S, Qt::Key_Z, Qt::Key_X, | ||||||
|     Qt::Key_Q, Qt::Key_W, Qt::Key_1, Qt::Key_2, |     Qt::Key_Q, Qt::Key_W, Qt::Key_1, Qt::Key_2, | ||||||
|  | @ -191,7 +188,7 @@ void Config::SaveValues() { | ||||||
|     qt_config->endGroup(); |     qt_config->endGroup(); | ||||||
| 
 | 
 | ||||||
|     qt_config->beginGroup("Shortcuts"); |     qt_config->beginGroup("Shortcuts"); | ||||||
|     for (auto shortcut : UISettings::values.shortcuts ) { |     for (auto shortcut : UISettings::values.shortcuts) { | ||||||
|         qt_config->setValue(shortcut.first + "/KeySeq", shortcut.second.first); |         qt_config->setValue(shortcut.first + "/KeySeq", shortcut.second.first); | ||||||
|         qt_config->setValue(shortcut.first + "/Context", shortcut.second.second); |         qt_config->setValue(shortcut.first + "/Context", shortcut.second.second); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -1,10 +1,13 @@ | ||||||
| // Copyright 2014 Citra Emulator Project
 | // Copyright 2014 Citra Emulator Project
 | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <string> | #include <string> | ||||||
|  | #include <QVariant> | ||||||
|  | 
 | ||||||
|  | #include "core/settings.h" | ||||||
| 
 | 
 | ||||||
| class QSettings; | class QSettings; | ||||||
| 
 | 
 | ||||||
|  | @ -20,4 +23,5 @@ public: | ||||||
| 
 | 
 | ||||||
|     void Reload(); |     void Reload(); | ||||||
|     void Save(); |     void Save(); | ||||||
|  |     static const std::array<QVariant, Settings::NativeInput::NUM_INPUTS> defaults; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ | ||||||
|        <string>System</string> |        <string>System</string> | ||||||
|       </attribute> |       </attribute> | ||||||
|      </widget> |      </widget> | ||||||
|      <widget class="QWidget" name="inputTab"> |      <widget class="ConfigureInput" name="inputTab"> | ||||||
|       <attribute name="title"> |       <attribute name="title"> | ||||||
|        <string>Input</string> |        <string>Input</string> | ||||||
|       </attribute> |       </attribute> | ||||||
|  | @ -80,6 +80,12 @@ | ||||||
|    <header>configure_debug.h</header> |    <header>configure_debug.h</header> | ||||||
|    <container>1</container> |    <container>1</container> | ||||||
|   </customwidget> |   </customwidget> | ||||||
|  |    <customwidget> | ||||||
|  |      <class>ConfigureInput</class> | ||||||
|  |      <extends>QWidget</extends> | ||||||
|  |      <header>configure_input.h</header> | ||||||
|  |      <container>1</container> | ||||||
|  |    </customwidget> | ||||||
|  </customwidgets> |  </customwidgets> | ||||||
|  <resources/> |  <resources/> | ||||||
|  <connections> |  <connections> | ||||||
|  |  | ||||||
|  | @ -30,6 +30,7 @@ void ConfigureDialog::setConfiguration() { | ||||||
| void ConfigureDialog::applyConfiguration() { | void ConfigureDialog::applyConfiguration() { | ||||||
|     ui->generalTab->applyConfiguration(); |     ui->generalTab->applyConfiguration(); | ||||||
|     ui->systemTab->applyConfiguration(); |     ui->systemTab->applyConfiguration(); | ||||||
|  |     ui->inputTab->applyConfiguration(); | ||||||
|     ui->audioTab->applyConfiguration(); |     ui->audioTab->applyConfiguration(); | ||||||
|     ui->debugTab->applyConfiguration(); |     ui->debugTab->applyConfiguration(); | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										149
									
								
								src/citra_qt/configure_input.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										149
									
								
								src/citra_qt/configure_input.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,149 @@ | ||||||
|  | // Copyright 2016 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #include <memory> | ||||||
|  | #include <utility> | ||||||
|  | #include <QTimer> | ||||||
|  | 
 | ||||||
|  | #include "citra_qt/configure_input.h" | ||||||
|  | 
 | ||||||
|  | ConfigureInput::ConfigureInput(QWidget* parent) : QWidget(parent), ui(std::make_unique<Ui::ConfigureInput>()) { | ||||||
|  |     ui->setupUi(this); | ||||||
|  | 
 | ||||||
|  |     // Initialize mapping of input enum to UI button.
 | ||||||
|  |     input_mapping = { | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::A, ui->buttonA) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::B, ui->buttonB) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::X, ui->buttonX) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::Y, ui->buttonY) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::L, ui->buttonL) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::R, ui->buttonR) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::ZL, ui->buttonZL) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::ZR, ui->buttonZR) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::START, ui->buttonStart) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::SELECT, ui->buttonSelect) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::HOME, ui->buttonHome) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::DUP, ui->buttonDpadUp) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::DDOWN, ui->buttonDpadDown) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::DLEFT, ui->buttonDpadLeft) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::DRIGHT, ui->buttonDpadRight) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CUP, ui->buttonCStickUp) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CDOWN, ui->buttonCStickDown) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CLEFT, ui->buttonCStickLeft) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CRIGHT, ui->buttonCStickRight) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CIRCLE_UP, ui->buttonCircleUp) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CIRCLE_DOWN, ui->buttonCircleDown) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CIRCLE_LEFT, ui->buttonCircleLeft) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CIRCLE_RIGHT, ui->buttonCircleRight) }, | ||||||
|  |         { std::make_pair(Settings::NativeInput::Values::CIRCLE_MODIFIER, ui->buttonCircleMod) }, | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     // Attach handle click method to each button click.
 | ||||||
|  |     for (const auto& entry : input_mapping) { | ||||||
|  |         connect(entry.second, SIGNAL(released()), this, SLOT(handleClick())); | ||||||
|  |     } | ||||||
|  |     connect(ui->buttonRestoreDefaults, SIGNAL(released()), this, SLOT(restoreDefaults())); | ||||||
|  |     setFocusPolicy(Qt::ClickFocus); | ||||||
|  |     timer = new QTimer(this); | ||||||
|  |     timer->setSingleShot(true); | ||||||
|  |     connect(timer, &QTimer::timeout, this, [&]() { key_pressed = Qt::Key_Escape; setKey(); }); | ||||||
|  |     this->setConfiguration(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::handleClick() { | ||||||
|  |     QPushButton* sender = qobject_cast<QPushButton*>(QObject::sender()); | ||||||
|  |     previous_mapping = sender->text(); | ||||||
|  |     sender->setText(tr("[waiting]")); | ||||||
|  |     sender->setFocus(); | ||||||
|  |     grabKeyboard(); | ||||||
|  |     grabMouse(); | ||||||
|  |     changing_button = sender; | ||||||
|  |     timer->start(5000); //Cancel after 5 seconds
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::applyConfiguration() { | ||||||
|  |     for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) { | ||||||
|  |         int value = getKeyValue(input_mapping[Settings::NativeInput::Values(i)]->text()); | ||||||
|  |         Settings::values.input_mappings[Settings::NativeInput::All[i]] = value; | ||||||
|  |     } | ||||||
|  |     Settings::Apply(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::setConfiguration() { | ||||||
|  |     for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) { | ||||||
|  |         QString keyValue = getKeyName(Settings::values.input_mappings[i]); | ||||||
|  |         input_mapping[Settings::NativeInput::Values(i)]->setText(keyValue); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::keyPressEvent(QKeyEvent* event) { | ||||||
|  |     if (!changing_button) | ||||||
|  |         return; | ||||||
|  |     if (!event || event->key() == Qt::Key_unknown) | ||||||
|  |         return; | ||||||
|  |     key_pressed = event->key(); | ||||||
|  |     timer->stop(); | ||||||
|  |     setKey(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::setKey() { | ||||||
|  |     const QString key_value = getKeyName(key_pressed); | ||||||
|  |     if (key_pressed == Qt::Key_Escape) | ||||||
|  |         changing_button->setText(previous_mapping); | ||||||
|  |     else | ||||||
|  |         changing_button->setText(key_value); | ||||||
|  |     removeDuplicates(key_value); | ||||||
|  |     key_pressed = Qt::Key_unknown; | ||||||
|  |     releaseKeyboard(); | ||||||
|  |     releaseMouse(); | ||||||
|  |     changing_button = nullptr; | ||||||
|  |     previous_mapping = nullptr; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | QString ConfigureInput::getKeyName(int key_code) const { | ||||||
|  |     if (key_code == Qt::Key_Shift) | ||||||
|  |         return tr("Shift"); | ||||||
|  |     if (key_code == Qt::Key_Control) | ||||||
|  |         return tr("Ctrl"); | ||||||
|  |     if (key_code == Qt::Key_Alt) | ||||||
|  |         return tr("Alt"); | ||||||
|  |     if (key_code == Qt::Key_Meta) | ||||||
|  |         return ""; | ||||||
|  |     if (key_code == -1) | ||||||
|  |         return ""; | ||||||
|  | 
 | ||||||
|  |     return QKeySequence(key_code).toString(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Qt::Key ConfigureInput::getKeyValue(const QString& text) const { | ||||||
|  |     if (text == "Shift") | ||||||
|  |         return Qt::Key_Shift; | ||||||
|  |     if (text == "Ctrl") | ||||||
|  |         return Qt::Key_Control; | ||||||
|  |     if (text == "Alt") | ||||||
|  |         return Qt::Key_Alt; | ||||||
|  |     if (text == "Meta") | ||||||
|  |         return Qt::Key_unknown; | ||||||
|  |     if (text == "") | ||||||
|  |         return Qt::Key_unknown; | ||||||
|  | 
 | ||||||
|  |     return Qt::Key(QKeySequence(text)[0]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::removeDuplicates(const QString& newValue) { | ||||||
|  |     for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) { | ||||||
|  |         if (changing_button != input_mapping[Settings::NativeInput::Values(i)]) { | ||||||
|  |             const QString oldValue = input_mapping[Settings::NativeInput::Values(i)]->text(); | ||||||
|  |             if (newValue == oldValue) | ||||||
|  |                 input_mapping[Settings::NativeInput::Values(i)]->setText(""); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void ConfigureInput::restoreDefaults() { | ||||||
|  |     for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) { | ||||||
|  |         const QString keyValue = getKeyName(Config::defaults[i].toInt()); | ||||||
|  |         input_mapping[Settings::NativeInput::Values(i)]->setText(keyValue); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										63
									
								
								src/citra_qt/configure_input.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/citra_qt/configure_input.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | ||||||
|  | // Copyright 2016 Citra Emulator Project
 | ||||||
|  | // Licensed under GPLv2 or any later version
 | ||||||
|  | // Refer to the license.txt file included.
 | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <QWidget> | ||||||
|  | #include <QKeyEvent> | ||||||
|  | 
 | ||||||
|  | #include "citra_qt/config.h" | ||||||
|  | #include "core/settings.h" | ||||||
|  | #include "ui_configure_input.h" | ||||||
|  | 
 | ||||||
|  | class QPushButton; | ||||||
|  | class QString; | ||||||
|  | class QTimer; | ||||||
|  | 
 | ||||||
|  | namespace Ui { | ||||||
|  |     class ConfigureInput; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class ConfigureInput : public QWidget { | ||||||
|  |     Q_OBJECT | ||||||
|  | 
 | ||||||
|  | public: | ||||||
|  |     explicit ConfigureInput(QWidget* parent = nullptr); | ||||||
|  | 
 | ||||||
|  |     /// Save all button configurations to settings file
 | ||||||
|  |     void applyConfiguration(); | ||||||
|  | 
 | ||||||
|  | private: | ||||||
|  |     std::unique_ptr<Ui::ConfigureInput> ui; | ||||||
|  |     std::map<Settings::NativeInput::Values, QPushButton*> input_mapping; | ||||||
|  |     int key_pressed; | ||||||
|  |     QPushButton* changing_button = nullptr; ///< button currently waiting for key press.
 | ||||||
|  |     QString previous_mapping; | ||||||
|  |     QTimer* timer; | ||||||
|  | 
 | ||||||
|  |     /// Load configuration settings into button text
 | ||||||
|  |     void setConfiguration(); | ||||||
|  | 
 | ||||||
|  |     /// Check all inputs for duplicate keys. Clears out any other button with the same value as this button's new value.
 | ||||||
|  |     void removeDuplicates(const QString& newValue); | ||||||
|  | 
 | ||||||
|  |     /// Handle key press event for input tab when a button is 'waiting'.
 | ||||||
|  |     void keyPressEvent(QKeyEvent* event) override; | ||||||
|  | 
 | ||||||
|  |     /// Convert key ASCII value to its' letter/name
 | ||||||
|  |     QString getKeyName(int key_code) const; | ||||||
|  | 
 | ||||||
|  |     /// Convert letter/name of key to its ASCII value.
 | ||||||
|  |     Qt::Key getKeyValue(const QString& text) const; | ||||||
|  | 
 | ||||||
|  |     /// Set button text to name of key pressed.
 | ||||||
|  |     void setKey(); | ||||||
|  | 
 | ||||||
|  | private slots: | ||||||
|  |     /// Event handler for all button released() event.
 | ||||||
|  |     void handleClick(); | ||||||
|  | 
 | ||||||
|  |     /// Restore all buttons to their default values.
 | ||||||
|  |     void restoreDefaults(); | ||||||
|  | }; | ||||||
							
								
								
									
										593
									
								
								src/citra_qt/configure_input.ui
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										593
									
								
								src/citra_qt/configure_input.ui
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,593 @@ | ||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <ui version="4.0"> | ||||||
|  |  <class>ConfigureInput</class> | ||||||
|  |  <widget class="QWidget" name="ConfigureInput"> | ||||||
|  |   <property name="geometry"> | ||||||
|  |    <rect> | ||||||
|  |     <x>0</x> | ||||||
|  |     <y>0</y> | ||||||
|  |     <width>370</width> | ||||||
|  |     <height>534</height> | ||||||
|  |    </rect> | ||||||
|  |   </property> | ||||||
|  |   <property name="windowTitle"> | ||||||
|  |    <string>ConfigureInput</string> | ||||||
|  |   </property> | ||||||
|  |   <layout class="QVBoxLayout" name="verticalLayout_5"> | ||||||
|  |    <item> | ||||||
|  |     <layout class="QGridLayout" name="gridLayout_7"> | ||||||
|  |      <item row="0" column="0"> | ||||||
|  |       <widget class="QGroupBox" name="faceButtons"> | ||||||
|  |        <property name="title"> | ||||||
|  |         <string>Face Buttons</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="flat"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <layout class="QGridLayout" name="gridLayout"> | ||||||
|  |         <item row="0" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>A:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonA"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_2"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_2"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>B:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonB"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_3"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_3"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>X:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonX"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_4"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Y:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonY"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |        </layout> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item row="0" column="1"> | ||||||
|  |       <widget class="QGroupBox" name="faceButtons_2"> | ||||||
|  |        <property name="title"> | ||||||
|  |         <string>Directional Pad</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="flat"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <layout class="QGridLayout" name="gridLayout_2"> | ||||||
|  |         <item row="1" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_12"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_34"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Up:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonDpadUp"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_9"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_35"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Down:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonDpadDown"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_10"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_32"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Left:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonDpadLeft"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_11"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_33"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Right:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonDpadRight"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |        </layout> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item row="1" column="0"> | ||||||
|  |       <widget class="QGroupBox" name="faceButtons_3"> | ||||||
|  |        <property name="title"> | ||||||
|  |         <string>Shoulder Buttons</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="flat"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <layout class="QGridLayout" name="gridLayout_3"> | ||||||
|  |         <item row="0" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_13"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_17"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>L:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonL"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_14"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_19"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>R:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonR"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_15"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_20"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>ZL:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonZL"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_16"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_18"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>ZR:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonZR"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |        </layout> | ||||||
|  |        <zorder></zorder> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item row="1" column="1"> | ||||||
|  |       <widget class="QGroupBox" name="faceButtons_4"> | ||||||
|  |        <property name="title"> | ||||||
|  |         <string>Circle Pad</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="flat"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <layout class="QGridLayout" name="gridLayout_4"> | ||||||
|  |         <item row="0" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_17"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_21"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Left:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCircleLeft"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_18"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_23"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Right:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCircleRight"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_19"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_24"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Up:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCircleUp"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_20"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_22"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Down:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCircleDown"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |        </layout> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item row="2" column="0"> | ||||||
|  |       <widget class="QGroupBox" name="faceButtons_5"> | ||||||
|  |        <property name="title"> | ||||||
|  |         <string>C-Stick</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="flat"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <layout class="QGridLayout" name="gridLayout_5"> | ||||||
|  |         <item row="0" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_21"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_25"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Left:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCStickLeft"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_22"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_27"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Right:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCStickRight"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_23"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_28"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Up:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCStickUp"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_24"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_26"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Down:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCStickDown"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |        </layout> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |      <item row="2" column="1"> | ||||||
|  |       <widget class="QGroupBox" name="faceButtons_6"> | ||||||
|  |        <property name="title"> | ||||||
|  |         <string>Misc.</string> | ||||||
|  |        </property> | ||||||
|  |        <property name="flat"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <property name="checkable"> | ||||||
|  |         <bool>false</bool> | ||||||
|  |        </property> | ||||||
|  |        <layout class="QGridLayout" name="gridLayout_6"> | ||||||
|  |         <item row="0" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_25"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_29"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Start:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonStart"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="0" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_26"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_30"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Select:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonSelect"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="0"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_27"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_31"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Home:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonHome"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |         <item row="1" column="1"> | ||||||
|  |          <layout class="QVBoxLayout" name="verticalLayout_28"> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QLabel" name="label_34"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string>Circle Mod:</string> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |           <item> | ||||||
|  |            <widget class="QPushButton" name="buttonCircleMod"> | ||||||
|  |             <property name="text"> | ||||||
|  |              <string/> | ||||||
|  |             </property> | ||||||
|  |            </widget> | ||||||
|  |           </item> | ||||||
|  |          </layout> | ||||||
|  |         </item> | ||||||
|  |        </layout> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |     </layout> | ||||||
|  |    </item> | ||||||
|  |    <item> | ||||||
|  |     <layout class="QHBoxLayout" name="horizontalLayout"> | ||||||
|  |      <item> | ||||||
|  |       <spacer name="horizontalSpacer"> | ||||||
|  |        <property name="orientation"> | ||||||
|  |         <enum>Qt::Horizontal</enum> | ||||||
|  |        </property> | ||||||
|  |        <property name="sizeHint" stdset="0"> | ||||||
|  |         <size> | ||||||
|  |          <width>40</width> | ||||||
|  |          <height>20</height> | ||||||
|  |         </size> | ||||||
|  |        </property> | ||||||
|  |       </spacer> | ||||||
|  |      </item> | ||||||
|  |      <item> | ||||||
|  |       <widget class="QPushButton" name="buttonRestoreDefaults"> | ||||||
|  |        <property name="sizePolicy"> | ||||||
|  |         <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> | ||||||
|  |          <horstretch>0</horstretch> | ||||||
|  |          <verstretch>0</verstretch> | ||||||
|  |         </sizepolicy> | ||||||
|  |        </property> | ||||||
|  |        <property name="sizeIncrement"> | ||||||
|  |         <size> | ||||||
|  |          <width>0</width> | ||||||
|  |          <height>0</height> | ||||||
|  |         </size> | ||||||
|  |        </property> | ||||||
|  |        <property name="baseSize"> | ||||||
|  |         <size> | ||||||
|  |          <width>0</width> | ||||||
|  |          <height>0</height> | ||||||
|  |         </size> | ||||||
|  |        </property> | ||||||
|  |        <property name="layoutDirection"> | ||||||
|  |         <enum>Qt::LeftToRight</enum> | ||||||
|  |        </property> | ||||||
|  |        <property name="text"> | ||||||
|  |         <string>Restore Defaults</string> | ||||||
|  |        </property> | ||||||
|  |       </widget> | ||||||
|  |      </item> | ||||||
|  |     </layout> | ||||||
|  |    </item> | ||||||
|  |   </layout> | ||||||
|  |  </widget> | ||||||
|  |  <resources/> | ||||||
|  |  <connections/> | ||||||
|  | </ui> | ||||||
|  | @ -513,6 +513,7 @@ void GMainWindow::OnConfigure() { | ||||||
|     if (result == QDialog::Accepted) |     if (result == QDialog::Accepted) | ||||||
|     { |     { | ||||||
|         configureDialog.applyConfiguration(); |         configureDialog.applyConfiguration(); | ||||||
|  |         render_window->ReloadSetKeymaps(); | ||||||
|         config->Save(); |         config->Save(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue