mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-06 07:12:14 +01:00
555 lines
21 KiB
C++
555 lines
21 KiB
C++
|
|
#include <QCheckBox>
|
||
|
|
#include <QGroupBox>
|
||
|
|
#include <QPushButton>
|
||
|
|
#include <QVBoxLayout>
|
||
|
|
#include <QHBoxLayout>
|
||
|
|
#include <QLabel>
|
||
|
|
#include <QAction>
|
||
|
|
#include <QButtonGroup>
|
||
|
|
|
||
|
|
#include "stdafx.h"
|
||
|
|
#include "pad_settings_dialog.h"
|
||
|
|
|
||
|
|
// TODO: rewrite with std::chrono or QTimer
|
||
|
|
#include <time.h>
|
||
|
|
|
||
|
|
static const int PadButtonWidth = 60;
|
||
|
|
|
||
|
|
extern keyboard_pad_config g_kbpad_config;
|
||
|
|
|
||
|
|
pad_settings_dialog::pad_settings_dialog(QWidget *parent) : QDialog(parent)
|
||
|
|
{
|
||
|
|
// Left Analog Stick
|
||
|
|
QGroupBox *roundStickL = new QGroupBox(tr("Left Analog Stick"));
|
||
|
|
QVBoxLayout *roundStickLMainVBox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundStickLVBox = new QVBoxLayout;
|
||
|
|
QHBoxLayout *roundStickLHBox1 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundStickLHBox2 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundStickLHBox3 = new QHBoxLayout;
|
||
|
|
b_up_lstick = new QPushButton(tr("W"));
|
||
|
|
b_left_lstick = new QPushButton(tr("A"));
|
||
|
|
b_right_lstick = new QPushButton(tr("D"));
|
||
|
|
b_down_lstick = new QPushButton(tr("S"));
|
||
|
|
roundStickLHBox1->addWidget(b_up_lstick);
|
||
|
|
roundStickLHBox2->addWidget(b_left_lstick);
|
||
|
|
roundStickLHBox2->addWidget(b_right_lstick);
|
||
|
|
roundStickLHBox3->addWidget(b_down_lstick);
|
||
|
|
roundStickLVBox->addLayout(roundStickLHBox1);
|
||
|
|
roundStickLVBox->addLayout(roundStickLHBox2);
|
||
|
|
roundStickLVBox->addLayout(roundStickLHBox3);
|
||
|
|
roundStickL->setLayout(roundStickLVBox);
|
||
|
|
roundStickLMainVBox->addWidget(roundStickL);
|
||
|
|
roundStickLMainVBox->addStretch();
|
||
|
|
b_up_lstick->setFixedWidth(PadButtonWidth);
|
||
|
|
b_left_lstick->setFixedWidth(PadButtonWidth);
|
||
|
|
b_right_lstick->setFixedWidth(PadButtonWidth);
|
||
|
|
b_down_lstick->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// D-Pad
|
||
|
|
QGroupBox *roundPadControls = new QGroupBox(tr("D-Pad"));
|
||
|
|
QVBoxLayout *roundPadControlsMainVBox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadControlsVBox = new QVBoxLayout;
|
||
|
|
QHBoxLayout *roundPadControlsHBox1 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundPadControlsHBox2 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundPadControlsHBox3 = new QHBoxLayout;
|
||
|
|
b_up = new QPushButton(tr("Up"));
|
||
|
|
b_left = new QPushButton(tr("Left"));
|
||
|
|
b_right = new QPushButton(tr("Right"));
|
||
|
|
b_down = new QPushButton(tr("Down"));
|
||
|
|
roundPadControlsHBox1->addWidget(b_up);
|
||
|
|
roundPadControlsHBox2->addWidget(b_left);
|
||
|
|
roundPadControlsHBox2->addWidget(b_right);
|
||
|
|
roundPadControlsHBox3->addWidget(b_down);
|
||
|
|
roundPadControlsVBox->addLayout(roundPadControlsHBox1);
|
||
|
|
roundPadControlsVBox->addLayout(roundPadControlsHBox2);
|
||
|
|
roundPadControlsVBox->addLayout(roundPadControlsHBox3);
|
||
|
|
roundPadControls->setLayout(roundPadControlsVBox);
|
||
|
|
roundPadControlsMainVBox->addWidget(roundPadControls);
|
||
|
|
roundPadControlsMainVBox->addStretch();
|
||
|
|
b_up->setFixedWidth(PadButtonWidth);
|
||
|
|
b_left->setFixedWidth(PadButtonWidth);
|
||
|
|
b_right->setFixedWidth(PadButtonWidth);
|
||
|
|
b_down->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// Left Shifts
|
||
|
|
QGroupBox *roundPadShiftsL = new QGroupBox(tr("Left Shifts"));
|
||
|
|
QGroupBox *roundPadL1 = new QGroupBox(tr("L1"));
|
||
|
|
QGroupBox *roundPadL2 = new QGroupBox(tr("L2"));
|
||
|
|
QGroupBox *roundPadL3 = new QGroupBox(tr("L3"));
|
||
|
|
QVBoxLayout *roundPadShiftsLVbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadL1Vbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadL2Vbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadL3Vbox = new QVBoxLayout;
|
||
|
|
b_shift_l1 = new QPushButton(tr("Q"));
|
||
|
|
b_shift_l2 = new QPushButton(tr("R"));
|
||
|
|
b_shift_l3 = new QPushButton(tr("F"));
|
||
|
|
roundPadL1Vbox->addWidget(b_shift_l1);
|
||
|
|
roundPadL2Vbox->addWidget(b_shift_l2);
|
||
|
|
roundPadL3Vbox->addWidget(b_shift_l3);
|
||
|
|
roundPadL1->setLayout(roundPadL1Vbox);
|
||
|
|
roundPadL2->setLayout(roundPadL2Vbox);
|
||
|
|
roundPadL3->setLayout(roundPadL3Vbox);
|
||
|
|
roundPadShiftsLVbox->addWidget(roundPadL1);
|
||
|
|
roundPadShiftsLVbox->addWidget(roundPadL2);
|
||
|
|
roundPadShiftsLVbox->addWidget(roundPadL3);
|
||
|
|
roundPadShiftsL->setLayout(roundPadShiftsLVbox);
|
||
|
|
b_shift_l1->setFixedWidth(PadButtonWidth);
|
||
|
|
b_shift_l2->setFixedWidth(PadButtonWidth);
|
||
|
|
b_shift_l3->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// Start / Select
|
||
|
|
QGroupBox *roundPadSystem = new QGroupBox(tr("System"));
|
||
|
|
QGroupBox *roundPadSelect = new QGroupBox(tr("Select"));
|
||
|
|
QGroupBox *roundPadStart = new QGroupBox(tr("Start"));
|
||
|
|
QVBoxLayout *roundPadSystemMainVbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadSystemVbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadSelectVbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadStartVbox = new QVBoxLayout;
|
||
|
|
b_select = new QPushButton(tr("Space"));
|
||
|
|
b_start = new QPushButton(tr("Enter"));
|
||
|
|
roundPadSelectVbox->addWidget(b_select);
|
||
|
|
roundPadStartVbox->addWidget(b_start);
|
||
|
|
roundPadSelect->setLayout(roundPadSelectVbox);
|
||
|
|
roundPadStart->setLayout(roundPadStartVbox);
|
||
|
|
roundPadSystemVbox->addWidget(roundPadSelect);
|
||
|
|
roundPadSystemVbox->addWidget(roundPadStart);
|
||
|
|
roundPadSystem->setLayout(roundPadSystemVbox);
|
||
|
|
roundPadSystemMainVbox->addWidget(roundPadSystem);
|
||
|
|
roundPadSystemMainVbox->addStretch();
|
||
|
|
b_select->setFixedWidth(PadButtonWidth);
|
||
|
|
b_start->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// Right Shifts
|
||
|
|
QGroupBox *roundPadShiftsR = new QGroupBox(tr("Right Shifts"));
|
||
|
|
QGroupBox *roundPadR1 = new QGroupBox(tr("R1"));
|
||
|
|
QGroupBox *roundPadR2 = new QGroupBox(tr("R2"));
|
||
|
|
QGroupBox *roundPadR3 = new QGroupBox(tr("R3"));
|
||
|
|
QVBoxLayout *roundPadShiftsRVbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadR1Vbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadR2Vbox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundPadR3Vbox = new QVBoxLayout;
|
||
|
|
b_shift_r1 = new QPushButton(tr("E"));
|
||
|
|
b_shift_r2 = new QPushButton(tr("T"));
|
||
|
|
b_shift_r3 = new QPushButton(tr("G"));
|
||
|
|
roundPadR1Vbox->addWidget(b_shift_r1);
|
||
|
|
roundPadR2Vbox->addWidget(b_shift_r2);
|
||
|
|
roundPadR3Vbox->addWidget(b_shift_r3);
|
||
|
|
roundPadR1->setLayout(roundPadR1Vbox);
|
||
|
|
roundPadR2->setLayout(roundPadR2Vbox);
|
||
|
|
roundPadR3->setLayout(roundPadR3Vbox);
|
||
|
|
roundPadShiftsRVbox->addWidget(roundPadR1);
|
||
|
|
roundPadShiftsRVbox->addWidget(roundPadR2);
|
||
|
|
roundPadShiftsRVbox->addWidget(roundPadR3);
|
||
|
|
roundPadShiftsR->setLayout(roundPadShiftsRVbox);
|
||
|
|
b_shift_r1->setFixedWidth(PadButtonWidth);
|
||
|
|
b_shift_r2->setFixedWidth(PadButtonWidth);
|
||
|
|
b_shift_r3->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// Action buttons
|
||
|
|
QGroupBox *roundpad_buttons = new QGroupBox(tr("Buttons"));
|
||
|
|
QGroupBox *roundPadSquare = new QGroupBox(tr("Square"));
|
||
|
|
QGroupBox *roundPadCross = new QGroupBox(tr("Cross"));
|
||
|
|
QGroupBox *roundPadCircle = new QGroupBox(tr("Circle"));
|
||
|
|
QGroupBox *roundPadTriangle = new QGroupBox(tr("Triangle"));
|
||
|
|
QVBoxLayout *roundpad_buttonsVBox = new QVBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox1 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox2 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox3 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox21 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox22 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox23 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundpad_buttonsHBox24 = new QHBoxLayout;
|
||
|
|
b_triangle = new QPushButton(tr("V"));
|
||
|
|
b_square = new QPushButton(tr("Z"));
|
||
|
|
b_circle = new QPushButton(tr("C"));
|
||
|
|
b_cross = new QPushButton(tr("X"));
|
||
|
|
roundpad_buttonsHBox21->addWidget(b_triangle);
|
||
|
|
roundpad_buttonsHBox22->addWidget(b_square);
|
||
|
|
roundpad_buttonsHBox23->addWidget(b_circle);
|
||
|
|
roundpad_buttonsHBox24->addWidget(b_cross);
|
||
|
|
roundPadTriangle->setLayout(roundpad_buttonsHBox21);
|
||
|
|
roundPadSquare->setLayout(roundpad_buttonsHBox22);
|
||
|
|
roundPadCircle->setLayout(roundpad_buttonsHBox23);
|
||
|
|
roundPadCross->setLayout(roundpad_buttonsHBox24);
|
||
|
|
roundpad_buttonsHBox1->addStretch();
|
||
|
|
roundpad_buttonsHBox1->addWidget(roundPadTriangle);
|
||
|
|
roundpad_buttonsHBox1->addStretch();
|
||
|
|
roundpad_buttonsHBox2->addWidget(roundPadSquare);
|
||
|
|
roundpad_buttonsHBox2->addWidget(roundPadCircle);
|
||
|
|
roundpad_buttonsHBox3->addStretch();
|
||
|
|
roundpad_buttonsHBox3->addWidget(roundPadCross);
|
||
|
|
roundpad_buttonsHBox3->addStretch();
|
||
|
|
roundpad_buttonsVBox->addLayout(roundpad_buttonsHBox1);
|
||
|
|
roundpad_buttonsVBox->addLayout(roundpad_buttonsHBox2);
|
||
|
|
roundpad_buttonsVBox->addLayout(roundpad_buttonsHBox3);
|
||
|
|
roundpad_buttons->setLayout(roundpad_buttonsVBox);
|
||
|
|
b_triangle->setFixedWidth(PadButtonWidth);
|
||
|
|
b_square->setFixedWidth(PadButtonWidth);
|
||
|
|
b_circle->setFixedWidth(PadButtonWidth);
|
||
|
|
b_cross->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// Right Analog Stick
|
||
|
|
QGroupBox *roundStickR = new QGroupBox(tr("Right Analog Stick"));
|
||
|
|
QVBoxLayout *roundStickRMainVBox = new QVBoxLayout;
|
||
|
|
QVBoxLayout *roundStickRVBox = new QVBoxLayout;
|
||
|
|
QHBoxLayout *roundStickRHBox1 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundStickRHBox2 = new QHBoxLayout;
|
||
|
|
QHBoxLayout *roundStickRHBox3 = new QHBoxLayout;
|
||
|
|
b_up_rstick = new QPushButton(tr("PgUp"));
|
||
|
|
b_left_rstick = new QPushButton(tr("Home"));
|
||
|
|
b_right_rstick = new QPushButton(tr("End"));
|
||
|
|
b_down_rstick = new QPushButton(tr("PgDown"));
|
||
|
|
roundStickRHBox1->addWidget(b_up_rstick);
|
||
|
|
roundStickRHBox2->addWidget(b_left_rstick);
|
||
|
|
roundStickRHBox2->addWidget(b_right_rstick);
|
||
|
|
roundStickRHBox3->addWidget(b_down_rstick);
|
||
|
|
roundStickRVBox->addLayout(roundStickRHBox1);
|
||
|
|
roundStickRVBox->addLayout(roundStickRHBox2);
|
||
|
|
roundStickRVBox->addLayout(roundStickRHBox3);
|
||
|
|
roundStickR->setLayout(roundStickRVBox);
|
||
|
|
roundStickRMainVBox->addWidget(roundStickR);
|
||
|
|
roundStickRMainVBox->addStretch();
|
||
|
|
b_up_rstick->setFixedWidth(PadButtonWidth);
|
||
|
|
b_left_rstick->setFixedWidth(PadButtonWidth);
|
||
|
|
b_right_rstick->setFixedWidth(PadButtonWidth);
|
||
|
|
b_down_rstick->setFixedWidth(PadButtonWidth);
|
||
|
|
|
||
|
|
// Buttons
|
||
|
|
b_reset = new QPushButton(tr("By default"));
|
||
|
|
|
||
|
|
b_ok = new QPushButton(tr("OK"));
|
||
|
|
|
||
|
|
b_cancel = new QPushButton(tr("Cancel"));
|
||
|
|
b_cancel->setDefault(true);
|
||
|
|
connect(b_cancel, &QAbstractButton::clicked, this, &QWidget::close);
|
||
|
|
|
||
|
|
// Handling
|
||
|
|
QButtonGroup *padButtons = new QButtonGroup(this);
|
||
|
|
padButtons->addButton(b_left_lstick, 1);
|
||
|
|
padButtons->addButton(b_down_lstick, 2);
|
||
|
|
padButtons->addButton(b_right_lstick, 3);
|
||
|
|
padButtons->addButton(b_up_lstick, 4);
|
||
|
|
|
||
|
|
padButtons->addButton(b_left, 5);
|
||
|
|
padButtons->addButton(b_down, 6);
|
||
|
|
padButtons->addButton(b_right, 7);
|
||
|
|
padButtons->addButton(b_up, 8);
|
||
|
|
|
||
|
|
padButtons->addButton(b_shift_l1, 9);
|
||
|
|
padButtons->addButton(b_shift_l2, 10);
|
||
|
|
padButtons->addButton(b_shift_l3, 11);
|
||
|
|
|
||
|
|
padButtons->addButton(b_start, 12);
|
||
|
|
padButtons->addButton(b_select, 13);
|
||
|
|
|
||
|
|
padButtons->addButton(b_shift_r1, 14);
|
||
|
|
padButtons->addButton(b_shift_r2, 15);
|
||
|
|
padButtons->addButton(b_shift_r3, 16);
|
||
|
|
|
||
|
|
padButtons->addButton(b_square, 17);
|
||
|
|
padButtons->addButton(b_cross, 18);
|
||
|
|
padButtons->addButton(b_circle, 19);
|
||
|
|
padButtons->addButton(b_triangle, 20);
|
||
|
|
|
||
|
|
padButtons->addButton(b_left_rstick, 21);
|
||
|
|
padButtons->addButton(b_down_rstick, 22);
|
||
|
|
padButtons->addButton(b_right_rstick, 23);
|
||
|
|
padButtons->addButton(b_up_rstick, 24);
|
||
|
|
|
||
|
|
padButtons->addButton(b_reset, 25);
|
||
|
|
padButtons->addButton(b_ok, 26);
|
||
|
|
padButtons->addButton(b_cancel, 27);
|
||
|
|
|
||
|
|
connect(padButtons, SIGNAL(buttonClicked(int)), this, SLOT(OnPadButtonClicked(int)));
|
||
|
|
|
||
|
|
// Main layout
|
||
|
|
QHBoxLayout *hbox1 = new QHBoxLayout;
|
||
|
|
hbox1->addLayout(roundStickLMainVBox);
|
||
|
|
hbox1->addLayout(roundPadControlsMainVBox);
|
||
|
|
hbox1->addWidget(roundPadShiftsL);
|
||
|
|
hbox1->addLayout(roundPadSystemMainVbox);
|
||
|
|
hbox1->addWidget(roundPadShiftsR);
|
||
|
|
hbox1->addWidget(roundpad_buttons);
|
||
|
|
hbox1->addLayout(roundStickRMainVBox);
|
||
|
|
|
||
|
|
QHBoxLayout *hbox2 = new QHBoxLayout;
|
||
|
|
hbox2->addWidget(b_reset);
|
||
|
|
hbox2->addStretch();
|
||
|
|
hbox2->addWidget(b_ok);
|
||
|
|
hbox2->addWidget(b_cancel);
|
||
|
|
|
||
|
|
QVBoxLayout *vbox = new QVBoxLayout;
|
||
|
|
vbox->addLayout(hbox1);
|
||
|
|
vbox->addLayout(hbox2);
|
||
|
|
setLayout(vbox);
|
||
|
|
|
||
|
|
setWindowTitle(tr("Input Settings"));
|
||
|
|
|
||
|
|
g_kbpad_config.load();
|
||
|
|
UpdateLabel();
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::keyPressEvent(QKeyEvent *keyEvent)
|
||
|
|
{
|
||
|
|
m_key_pressed = true;
|
||
|
|
|
||
|
|
cfg::int32* entry = nullptr;
|
||
|
|
|
||
|
|
switch (m_button_id)
|
||
|
|
{
|
||
|
|
case id_pad_lstick_left: entry = &g_kbpad_config.left_stick_left; break;
|
||
|
|
case id_pad_lstick_down: entry = &g_kbpad_config.left_stick_down; break;
|
||
|
|
case id_pad_lstick_right: entry = &g_kbpad_config.left_stick_right; break;
|
||
|
|
case id_pad_lstick_up: entry = &g_kbpad_config.left_stick_up; break;
|
||
|
|
|
||
|
|
case id_pad_left: entry = &g_kbpad_config.left; break;
|
||
|
|
case id_pad_down: entry = &g_kbpad_config.down; break;
|
||
|
|
case id_pad_right: entry = &g_kbpad_config.right; break;
|
||
|
|
case id_pad_up: entry = &g_kbpad_config.up; break;
|
||
|
|
|
||
|
|
case id_pad_l1: entry = &g_kbpad_config.l1; break;
|
||
|
|
case id_pad_l2: entry = &g_kbpad_config.l2; break;
|
||
|
|
case id_pad_l3: entry = &g_kbpad_config.l3; break;
|
||
|
|
|
||
|
|
case id_pad_start: entry = &g_kbpad_config.start; break;
|
||
|
|
case id_pad_select: entry = &g_kbpad_config.select; break;
|
||
|
|
|
||
|
|
case id_pad_r1: entry = &g_kbpad_config.r1; break;
|
||
|
|
case id_pad_r2: entry = &g_kbpad_config.r2; break;
|
||
|
|
case id_pad_r3: entry = &g_kbpad_config.r3; break;
|
||
|
|
|
||
|
|
case id_pad_square: entry = &g_kbpad_config.square; break;
|
||
|
|
case id_pad_cross: entry = &g_kbpad_config.cross; break;
|
||
|
|
case id_pad_circle: entry = &g_kbpad_config.circle; break;
|
||
|
|
case id_pad_triangle: entry = &g_kbpad_config.triangle; break;
|
||
|
|
case id_pad_rstick_left: entry = &g_kbpad_config.right_stick_left; break;
|
||
|
|
case id_pad_rstick_down: entry = &g_kbpad_config.right_stick_down; break;
|
||
|
|
case id_pad_rstick_right: entry = &g_kbpad_config.right_stick_right; break;
|
||
|
|
case id_pad_rstick_up: entry = &g_kbpad_config.right_stick_up; break;
|
||
|
|
|
||
|
|
case 0: break;
|
||
|
|
default: LOG_ERROR(HLE, "Unknown button ID: %d", m_button_id); break;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (entry)
|
||
|
|
{
|
||
|
|
// TODO: do not modify config
|
||
|
|
entry->from_string(std::to_string(keyEvent->key()));
|
||
|
|
}
|
||
|
|
|
||
|
|
SwitchButtons(true); // enable all buttons
|
||
|
|
m_button_id = 0; // reset current button id
|
||
|
|
m_key_pressed = false;
|
||
|
|
UpdateLabel();
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::UpdateLabel()
|
||
|
|
{
|
||
|
|
// Get button labels from .ini
|
||
|
|
b_up_lstick->setText(GetKeyName(g_kbpad_config.left_stick_up));
|
||
|
|
b_down_lstick->setText(GetKeyName(g_kbpad_config.left_stick_down));
|
||
|
|
b_left_lstick->setText(GetKeyName(g_kbpad_config.left_stick_left));
|
||
|
|
b_right_lstick->setText(GetKeyName(g_kbpad_config.left_stick_right));
|
||
|
|
|
||
|
|
b_up->setText(GetKeyName(g_kbpad_config.up));
|
||
|
|
b_down->setText(GetKeyName(g_kbpad_config.down));
|
||
|
|
b_left->setText(GetKeyName(g_kbpad_config.left));
|
||
|
|
b_right->setText(GetKeyName(g_kbpad_config.right));
|
||
|
|
|
||
|
|
b_shift_l1->setText(GetKeyName(g_kbpad_config.l1));
|
||
|
|
b_shift_l2->setText(GetKeyName(g_kbpad_config.l2));
|
||
|
|
b_shift_l3->setText(GetKeyName(g_kbpad_config.l3));
|
||
|
|
|
||
|
|
b_start->setText(GetKeyName(g_kbpad_config.start));
|
||
|
|
b_select->setText(GetKeyName(g_kbpad_config.select));
|
||
|
|
|
||
|
|
b_shift_r1->setText(GetKeyName(g_kbpad_config.r1));
|
||
|
|
b_shift_r2->setText(GetKeyName(g_kbpad_config.r2));
|
||
|
|
b_shift_r3->setText(GetKeyName(g_kbpad_config.r3));
|
||
|
|
|
||
|
|
b_square->setText(GetKeyName(g_kbpad_config.square));
|
||
|
|
b_cross->setText(GetKeyName(g_kbpad_config.cross));
|
||
|
|
b_circle->setText(GetKeyName(g_kbpad_config.circle));
|
||
|
|
b_triangle->setText(GetKeyName(g_kbpad_config.triangle));
|
||
|
|
|
||
|
|
b_up_rstick->setText(GetKeyName(g_kbpad_config.right_stick_up));
|
||
|
|
b_down_rstick->setText(GetKeyName(g_kbpad_config.right_stick_down));
|
||
|
|
b_left_rstick->setText(GetKeyName(g_kbpad_config.right_stick_left));
|
||
|
|
b_right_rstick->setText(GetKeyName(g_kbpad_config.right_stick_right));
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::UpdateTimerLabel(const u32 id)
|
||
|
|
{
|
||
|
|
// Lambda used to update label. The 47 is magical.
|
||
|
|
auto UpdateLabel = [=](QPushButton* target) {
|
||
|
|
target->setText(QString::number(m_seconds + 47));
|
||
|
|
};
|
||
|
|
|
||
|
|
switch (id)
|
||
|
|
{
|
||
|
|
case id_pad_lstick_left: UpdateLabel(b_left_lstick); break;
|
||
|
|
case id_pad_lstick_down: UpdateLabel(b_down_lstick); break;
|
||
|
|
case id_pad_lstick_right: UpdateLabel(b_right_lstick); break;
|
||
|
|
case id_pad_lstick_up: UpdateLabel(b_up_lstick); break;
|
||
|
|
|
||
|
|
case id_pad_left: UpdateLabel(b_left); break;
|
||
|
|
case id_pad_down: UpdateLabel(b_down); break;
|
||
|
|
case id_pad_right: UpdateLabel(b_right); break;
|
||
|
|
case id_pad_up: UpdateLabel(b_up); break;
|
||
|
|
|
||
|
|
case id_pad_l1: UpdateLabel(b_shift_l1); break;
|
||
|
|
case id_pad_l2: UpdateLabel(b_shift_l2); break;
|
||
|
|
case id_pad_l3: UpdateLabel(b_shift_l3); break;
|
||
|
|
|
||
|
|
case id_pad_start: UpdateLabel(b_start); break;
|
||
|
|
case id_pad_select: UpdateLabel(b_select); break;
|
||
|
|
|
||
|
|
case id_pad_r1: UpdateLabel(b_shift_r1); break;
|
||
|
|
case id_pad_r2: UpdateLabel(b_shift_r2); break;
|
||
|
|
case id_pad_r3: UpdateLabel(b_shift_r3); break;
|
||
|
|
|
||
|
|
case id_pad_square: UpdateLabel(b_square); break;
|
||
|
|
case id_pad_cross: UpdateLabel(b_cross); break;
|
||
|
|
case id_pad_circle: UpdateLabel(b_circle); break;
|
||
|
|
case id_pad_triangle: UpdateLabel(b_triangle); break;
|
||
|
|
|
||
|
|
case id_pad_rstick_left: UpdateLabel(b_left_rstick); break;
|
||
|
|
case id_pad_rstick_down: UpdateLabel(b_down_rstick); break;
|
||
|
|
case id_pad_rstick_right: UpdateLabel(b_right_rstick); break;
|
||
|
|
case id_pad_rstick_up: UpdateLabel(b_up_rstick); break;
|
||
|
|
|
||
|
|
default: LOG_ERROR(HLE, "Unknown button ID: %d", id); break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::SwitchButtons(const bool IsEnabled)
|
||
|
|
{
|
||
|
|
b_up_lstick->setEnabled(IsEnabled);
|
||
|
|
b_down_lstick->setEnabled(IsEnabled);
|
||
|
|
b_left_lstick->setEnabled(IsEnabled);
|
||
|
|
b_right_lstick->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_up->setEnabled(IsEnabled);
|
||
|
|
b_down->setEnabled(IsEnabled);
|
||
|
|
b_left->setEnabled(IsEnabled);
|
||
|
|
b_right->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_shift_l1->setEnabled(IsEnabled);
|
||
|
|
b_shift_l2->setEnabled(IsEnabled);
|
||
|
|
b_shift_l3->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_start->setEnabled(IsEnabled);
|
||
|
|
b_select->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_shift_r1->setEnabled(IsEnabled);
|
||
|
|
b_shift_r2->setEnabled(IsEnabled);
|
||
|
|
b_shift_r3->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_square->setEnabled(IsEnabled);
|
||
|
|
b_cross->setEnabled(IsEnabled);
|
||
|
|
b_circle->setEnabled(IsEnabled);
|
||
|
|
b_triangle->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_up_rstick->setEnabled(IsEnabled);
|
||
|
|
b_down_rstick->setEnabled(IsEnabled);
|
||
|
|
b_left_rstick->setEnabled(IsEnabled);
|
||
|
|
b_right_rstick->setEnabled(IsEnabled);
|
||
|
|
|
||
|
|
b_ok->setEnabled(IsEnabled);
|
||
|
|
b_cancel->setEnabled(IsEnabled);
|
||
|
|
b_reset->setEnabled(IsEnabled);
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::RunTimer(const u32 seconds, const u32 id)
|
||
|
|
{
|
||
|
|
m_seconds = seconds;
|
||
|
|
clock_t t1, t2;
|
||
|
|
t1 = t2 = clock() / CLOCKS_PER_SEC;
|
||
|
|
while (m_seconds)
|
||
|
|
{
|
||
|
|
if (t1 / CLOCKS_PER_SEC + 1 <= (t2 = clock()) / CLOCKS_PER_SEC)
|
||
|
|
{
|
||
|
|
UpdateTimerLabel(id);
|
||
|
|
m_seconds--;
|
||
|
|
t1 = t2;
|
||
|
|
}
|
||
|
|
|
||
|
|
if (m_key_pressed)
|
||
|
|
{
|
||
|
|
m_seconds = 0;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::Init(const u32 max_connect)
|
||
|
|
{
|
||
|
|
memset(&m_info, 0, sizeof(PadInfo));
|
||
|
|
m_info.max_connect = max_connect;
|
||
|
|
LoadSettings();
|
||
|
|
m_info.now_connect = std::min(m_pads.size(), (size_t)max_connect);
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::LoadSettings()
|
||
|
|
{
|
||
|
|
g_kbpad_config.load();
|
||
|
|
|
||
|
|
//Fixed assign change, default is both sensor and press off
|
||
|
|
m_pads.emplace_back(
|
||
|
|
CELL_PAD_STATUS_CONNECTED | CELL_PAD_STATUS_ASSIGN_CHANGES,
|
||
|
|
CELL_PAD_SETTING_PRESS_OFF | CELL_PAD_SETTING_SENSOR_OFF,
|
||
|
|
CELL_PAD_CAPABILITY_PS3_CONFORMITY | CELL_PAD_CAPABILITY_PRESS_MODE,
|
||
|
|
CELL_PAD_DEV_TYPE_STANDARD);
|
||
|
|
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.left, CELL_PAD_CTRL_LEFT);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.down, CELL_PAD_CTRL_DOWN);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.right, CELL_PAD_CTRL_RIGHT);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.up, CELL_PAD_CTRL_UP);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.start, CELL_PAD_CTRL_START);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.r3, CELL_PAD_CTRL_R3);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.l3, CELL_PAD_CTRL_L3);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL1, g_kbpad_config.select, CELL_PAD_CTRL_SELECT);
|
||
|
|
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.square, CELL_PAD_CTRL_SQUARE);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.cross, CELL_PAD_CTRL_CROSS);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.circle, CELL_PAD_CTRL_CIRCLE);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.triangle, CELL_PAD_CTRL_TRIANGLE);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.r1, CELL_PAD_CTRL_R1);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.l1, CELL_PAD_CTRL_L1);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.r2, CELL_PAD_CTRL_R2);
|
||
|
|
m_pads[0].m_buttons.emplace_back(CELL_PAD_BTN_OFFSET_DIGITAL2, g_kbpad_config.l2, CELL_PAD_CTRL_L2);
|
||
|
|
|
||
|
|
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_LEFT_X, g_kbpad_config.left_stick_left, g_kbpad_config.left_stick_right);
|
||
|
|
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_LEFT_Y, g_kbpad_config.left_stick_up, g_kbpad_config.left_stick_down);
|
||
|
|
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_X, g_kbpad_config.right_stick_left, g_kbpad_config.right_stick_right);
|
||
|
|
m_pads[0].m_sticks.emplace_back(CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_Y, g_kbpad_config.right_stick_up, g_kbpad_config.right_stick_down);
|
||
|
|
}
|
||
|
|
|
||
|
|
const QString pad_settings_dialog::GetKeyName(const u32 keyCode)
|
||
|
|
{
|
||
|
|
//TODO what about numpad?
|
||
|
|
return QKeySequence(keyCode).toString();
|
||
|
|
}
|
||
|
|
|
||
|
|
void pad_settings_dialog::OnPadButtonClicked(int id)
|
||
|
|
{
|
||
|
|
if (id != id_reset_parameters && id != id_ok)
|
||
|
|
{
|
||
|
|
m_button_id = id;
|
||
|
|
SwitchButtons(false); // disable all buttons, needed for using Space, Enter and other specific buttons
|
||
|
|
//RunTimer(3, event.GetId()); // TODO: Currently, timer disabled. Use by later, have some strange problems
|
||
|
|
//SwitchButtons(true); // needed, if timer enabled
|
||
|
|
UpdateLabel();
|
||
|
|
}
|
||
|
|
|
||
|
|
else
|
||
|
|
{
|
||
|
|
switch (id)
|
||
|
|
{
|
||
|
|
case id_reset_parameters: g_kbpad_config.from_default(); UpdateLabel(); break;
|
||
|
|
case id_ok: g_kbpad_config.save(); QDialog::accept(); break;
|
||
|
|
case id_cancel: break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|