summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/configuration/configure_input.cpp63
1 files changed, 46 insertions, 17 deletions
diff --git a/src/yuzu/configuration/configure_input.cpp b/src/yuzu/configuration/configure_input.cpp
index cd7520f29..af735196d 100644
--- a/src/yuzu/configuration/configure_input.cpp
+++ b/src/yuzu/configuration/configure_input.cpp
@@ -166,34 +166,63 @@ void ConfigureInput::restoreDefaults() {
166} 166}
167 167
168void ConfigureInput::updateButtonLabels() { 168void ConfigureInput::updateButtonLabels() {
169 QString non_keyboard(tr("[non-keyboard]")); 169 QString unknown_mapping(tr("[unknown]"));
170 170
171 auto KeyToText = [&non_keyboard](const Common::ParamPackage& param) { 171 auto ButtonToText = [&unknown_mapping](const Common::ParamPackage& param) {
172 if (!param.Has("engine")) { 172 if (!param.Has("engine")) {
173 return QString("[not set]"); 173 return QString("[not set]");
174 } else if (param.Get("engine", "") != "keyboard") { 174 } else if (param.Get("engine", "") == "keyboard") {
175 return non_keyboard;
176 } else {
177 return getKeyName(param.Get("code", 0)); 175 return getKeyName(param.Get("code", 0));
176 } else if (param.Get("engine", "") == "sdl") {
177 QString text = QString("Joystick %1").arg(param.Get("joystick", "").c_str());
178 if (param.Has("hat")) {
179 text += QString(" Hat %1 %2")
180 .arg(param.Get("hat", "").c_str(), param.Get("direction", "").c_str());
181 }
182 if (param.Has("axis")) {
183 text += QString(" Axis %1%2")
184 .arg(param.Get("axis", "").c_str(), param.Get("direction", "").c_str());
185 }
186 if (param.Has("button")) {
187 text += QString(" Button %1").arg(param.Get("button", "").c_str());
188 }
189 return text;
190 } else {
191 return unknown_mapping;
192 }
193 };
194 auto AnalogToText = [&unknown_mapping, &ButtonToText](const Common::ParamPackage& param,
195 const std::string& dir) {
196 if (!param.Has("engine")) {
197 return QString("[not set]");
198 } else if (param.Get("engine", "") == "analog_from_button") {
199 return ButtonToText(Common::ParamPackage{param.Get(dir, "")});
200 } else if (param.Get("engine", "") == "sdl") {
201 if (dir == "modifier") {
202 return QString("[unused]");
203 }
204
205 QString text = QString("Joystick %1").arg(param.Get("joystick", "").c_str());
206 if (dir == "left" || dir == "right") {
207 text += QString(" Axis %1").arg(param.Get("axis_x", "").c_str());
208 } else if (dir == "up" || dir == "down") {
209 text += QString(" Axis %1").arg(param.Get("axis_y", "").c_str());
210 }
211 return text;
212 } else {
213 return unknown_mapping;
178 } 214 }
179 }; 215 };
180 216
181 for (int button = 0; button < Settings::NativeButton::NumButtons; button++) { 217 for (int button = 0; button < Settings::NativeButton::NumButtons; button++) {
182 button_map[button]->setText(KeyToText(buttons_param[button])); 218 button_map[button]->setText(ButtonToText(buttons_param[button]));
183 } 219 }
184 220
185 for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) { 221 for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; analog_id++) {
186 if (analogs_param[analog_id].Get("engine", "") != "analog_from_button") { 222 for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) {
187 for (QPushButton* button : analog_map_buttons[analog_id]) { 223 if (analog_map_buttons[analog_id][sub_button_id]) {
188 if (button) 224 analog_map_buttons[analog_id][sub_button_id]->setText(
189 button->setText(non_keyboard); 225 AnalogToText(analogs_param[analog_id], analog_sub_buttons[sub_button_id]));
190 }
191 } else {
192 for (int sub_button_id = 0; sub_button_id < ANALOG_SUB_BUTTONS_NUM; sub_button_id++) {
193 Common::ParamPackage param(
194 analogs_param[analog_id].Get(analog_sub_buttons[sub_button_id], ""));
195 if (analog_map_buttons[analog_id][sub_button_id])
196 analog_map_buttons[analog_id][sub_button_id]->setText(KeyToText(param));
197 } 226 }
198 } 227 }
199 analog_map_stick[analog_id]->setText("Set Analog Stick"); 228 analog_map_stick[analog_id]->setText("Set Analog Stick");