tiny refactoring around the input config dialog

This commit is contained in:
RSDuck 2023-03-02 14:41:46 +01:00
parent ca221381e9
commit 4ba7a2c5e6
2 changed files with 91 additions and 71 deletions

View File

@ -25,7 +25,6 @@
#include "types.h"
#include "Platform.h"
#include "Config.h"
#include "MapButton.h"
#include "Input.h"
@ -38,51 +37,6 @@ InputConfigDialog* InputConfigDialog::currentDlg = nullptr;
const int dskeyorder[12] = {0, 1, 10, 11, 5, 4, 6, 7, 9, 8, 2, 3};
const char* dskeylabels[12] = {"A", "B", "X", "Y", "Left", "Right", "Up", "Down", "L", "R", "Select", "Start"};
const int hk_addons[] =
{
HK_SolarSensorIncrease,
HK_SolarSensorDecrease,
};
const char* hk_addons_labels[] =
{
"[Boktai] Sunlight + ",
"[Boktai] Sunlight - ",
};
const int hk_general[] =
{
HK_Pause,
HK_Reset,
HK_FrameStep,
HK_FastForward,
HK_FastForwardToggle,
HK_FullscreenToggle,
HK_Lid,
HK_Mic,
HK_SwapScreens,
HK_SwapScreenEmphasis
};
const char* hk_general_labels[] =
{
"Pause/resume",
"Reset",
"Frame step",
"Fast forward",
"Toggle FPS limit",
"Toggle fullscreen",
"Close/open lid",
"Microphone",
"Swap screens",
"Swap screen emphasis"
};
const int keypad_num = 12;
const int hk_addons_num = 2;
const int hk_general_num = 10;
InputConfigDialog::InputConfigDialog(QWidget* parent) : QDialog(parent), ui(new Ui::InputConfigDialog)
{
ui->setupUi(this);
@ -94,20 +48,24 @@ InputConfigDialog::InputConfigDialog(QWidget* parent) : QDialog(parent), ui(new
keypadJoyMap[i] = Config::JoyMapping[dskeyorder[i]];
}
for (int i = 0; i < hk_addons_num; i++)
int i = 0;
for (int hotkey : hk_addons)
{
addonsKeyMap[i] = Config::HKKeyMapping[hk_addons[i]];
addonsJoyMap[i] = Config::HKJoyMapping[hk_addons[i]];
addonsKeyMap[i] = Config::HKKeyMapping[hotkey];
addonsJoyMap[i] = Config::HKJoyMapping[hotkey];
i++;
}
for (int i = 0; i < hk_general_num; i++)
i = 0;
for (int hotkey : hk_general)
{
hkGeneralKeyMap[i] = Config::HKKeyMapping[hk_general[i]];
hkGeneralJoyMap[i] = Config::HKJoyMapping[hk_general[i]];
hkGeneralKeyMap[i] = Config::HKKeyMapping[hotkey];
hkGeneralJoyMap[i] = Config::HKJoyMapping[hotkey];
i++;
}
populatePage(ui->tabAddons, hk_addons_num, hk_addons_labels, addonsKeyMap, addonsJoyMap);
populatePage(ui->tabHotkeysGeneral, hk_general_num, hk_general_labels, hkGeneralKeyMap, hkGeneralJoyMap);
populatePage(ui->tabAddons, hk_addons_labels, addonsKeyMap, addonsJoyMap);
populatePage(ui->tabHotkeysGeneral, hk_general_labels, hkGeneralKeyMap, hkGeneralJoyMap);
int njoy = SDL_NumJoysticks();
if (njoy > 0)
@ -162,7 +120,9 @@ void InputConfigDialog::setupKeypadPage()
}
}
void InputConfigDialog::populatePage(QWidget* page, int num, const char** labels, int* keymap, int* joymap)
void InputConfigDialog::populatePage(QWidget* page,
const std::initializer_list<const char*>& labels,
int* keymap, int* joymap)
{
// kind of a hack
bool ishotkey = (page != ui->tabInput);
@ -176,15 +136,17 @@ void InputConfigDialog::populatePage(QWidget* page, int num, const char** labels
main_layout->addWidget(group);
group_layout = new QGridLayout();
group_layout->setSpacing(1);
for (int i = 0; i < num; i++)
int i = 0;
for (const char* labelStr : labels)
{
QLabel* label = new QLabel(QString(labels[i])+":");
QLabel* label = new QLabel(QString(labelStr)+":");
KeyMapButton* btn = new KeyMapButton(&keymap[i], ishotkey);
group_layout->addWidget(label, i, 0);
group_layout->addWidget(btn, i, 1);
i++;
}
group_layout->setRowStretch(num, 1);
group_layout->setRowStretch(labels.size(), 1);
group->setLayout(group_layout);
group->setMinimumWidth(275);
@ -192,15 +154,17 @@ void InputConfigDialog::populatePage(QWidget* page, int num, const char** labels
main_layout->addWidget(group);
group_layout = new QGridLayout();
group_layout->setSpacing(1);
for (int i = 0; i < num; i++)
i = 0;
for (const char* labelStr : labels)
{
QLabel* label = new QLabel(QString(labels[i])+":");
QLabel* label = new QLabel(QString(labelStr)+":");
JoyMapButton* btn = new JoyMapButton(&joymap[i], ishotkey);
group_layout->addWidget(label, i, 0);
group_layout->addWidget(btn, i, 1);
i++;
}
group_layout->setRowStretch(num, 1);
group_layout->setRowStretch(labels.size(), 1);
group->setLayout(group_layout);
group->setMinimumWidth(275);
@ -215,16 +179,20 @@ void InputConfigDialog::on_InputConfigDialog_accepted()
Config::JoyMapping[dskeyorder[i]] = keypadJoyMap[i];
}
for (int i = 0; i < hk_addons_num; i++)
int i = 0;
for (int hotkey : hk_addons)
{
Config::HKKeyMapping[hk_addons[i]] = addonsKeyMap[i];
Config::HKJoyMapping[hk_addons[i]] = addonsJoyMap[i];
Config::HKKeyMapping[hotkey] = addonsKeyMap[i];
Config::HKJoyMapping[hotkey] = addonsJoyMap[i];
i++;
}
for (int i = 0; i < hk_general_num; i++)
i = 0;
for (int hotkey : hk_general)
{
Config::HKKeyMapping[hk_general[i]] = hkGeneralKeyMap[i];
Config::HKJoyMapping[hk_general[i]] = hkGeneralJoyMap[i];
Config::HKKeyMapping[hotkey] = hkGeneralKeyMap[i];
Config::HKJoyMapping[hotkey] = hkGeneralJoyMap[i];
i++;
}
Config::JoystickID = Input::JoystickID;

View File

@ -21,6 +21,56 @@
#include <QDialog>
#include <QPushButton>
#include <initializer_list>
#include "Config.h"
static constexpr int keypad_num = 12;
static constexpr std::initializer_list<int> hk_addons =
{
HK_SolarSensorIncrease,
HK_SolarSensorDecrease,
};
static constexpr std::initializer_list<const char*> hk_addons_labels =
{
"[Boktai] Sunlight + ",
"[Boktai] Sunlight - ",
};
static_assert(hk_addons.size() == hk_addons_labels.size());
static constexpr std::initializer_list<int> hk_general =
{
HK_Pause,
HK_Reset,
HK_FrameStep,
HK_FastForward,
HK_FastForwardToggle,
HK_FullscreenToggle,
HK_Lid,
HK_Mic,
HK_SwapScreens,
HK_SwapScreenEmphasis
};
static constexpr std::initializer_list<const char*> hk_general_labels =
{
"Pause/resume",
"Reset",
"Frame step",
"Fast forward",
"Toggle FPS limit",
"Toggle fullscreen",
"Close/open lid",
"Microphone",
"Swap screens",
"Swap screen emphasis"
};
static_assert(hk_general.size() == hk_general_labels.size());
namespace Ui { class InputConfigDialog; }
class InputConfigDialog;
@ -60,14 +110,16 @@ private slots:
void on_cbxJoystick_currentIndexChanged(int id);
private:
void populatePage(QWidget* page, int num, const char** labels, int* keymap, int* joymap);
void populatePage(QWidget* page,
const std::initializer_list<const char*>& labels,
int* keymap, int* joymap);
void setupKeypadPage();
Ui::InputConfigDialog* ui;
int keypadKeyMap[12], keypadJoyMap[12];
int addonsKeyMap[2], addonsJoyMap[2];
int hkGeneralKeyMap[9], hkGeneralJoyMap[9];
int keypadKeyMap[12], keypadJoyMap[12];
int addonsKeyMap[hk_addons.size()], addonsJoyMap[hk_addons.size()];
int hkGeneralKeyMap[hk_general.size()], hkGeneralJoyMap[hk_general.size()];
};