Play-/Source/ui_unix/ControllerConfig/controllerconfigdialog.cpp

127 lines
5.3 KiB
C++
Raw Normal View History

2016-09-06 00:23:31 +01:00
#include "controllerconfigdialog.h"
#include "ui_controllerconfigdialog.h"
#include <QRegularExpression>
#include <QLabel>
#include <QFile>
#include <QAbstractButton>
#include <QPushButton>
#include "bindingmodel.h"
#include "ControllerInfo.h"
#include "inputeventselectiondialog.h"
2016-09-06 00:23:31 +01:00
ControllerConfigDialog::ControllerConfigDialog(CInputBindingManager* inputBindingManager, CInputProviderQtKey* qtKeyInputProvider, QWidget* parent)
2018-04-30 21:01:23 +01:00
: QDialog(parent)
, ui(new Ui::ControllerConfigDialog)
, m_inputManager(inputBindingManager)
, m_qtKeyInputProvider(qtKeyInputProvider)
2016-09-06 00:23:31 +01:00
{
ui->setupUi(this);
PrepareBindingsView();
}
2016-09-06 00:23:31 +01:00
ControllerConfigDialog::~ControllerConfigDialog()
{
delete ui;
}
void ControllerConfigDialog::PrepareBindingsView()
{
2018-04-30 21:01:23 +01:00
CBindingModel* model = new CBindingModel(this);
model->Setup(m_inputManager);
model->setHeaderData(0, Qt::Orientation::Horizontal, QVariant("Button"), Qt::DisplayRole);
model->setHeaderData(1, Qt::Orientation::Horizontal, QVariant("Binding Type"), Qt::DisplayRole);
model->setHeaderData(2, Qt::Orientation::Horizontal, QVariant("Binding Value"), Qt::DisplayRole);
ui->tableView->setModel(model);
ui->tableView->horizontalHeader()->setStretchLastSection(true);
ui->tableView->resizeColumnsToContents();
2016-09-06 00:23:31 +01:00
}
2018-04-30 21:01:23 +01:00
void ControllerConfigDialog::on_buttonBox_clicked(QAbstractButton* button)
{
if(button == ui->buttonBox->button(QDialogButtonBox::Ok))
{
m_inputManager->Save();
}
2018-04-30 21:01:23 +01:00
else if(button == ui->buttonBox->button(QDialogButtonBox::Apply))
{
m_inputManager->Save();
}
2018-04-30 21:01:23 +01:00
else if(button == ui->buttonBox->button(QDialogButtonBox::RestoreDefaults))
{
2018-04-30 21:01:23 +01:00
switch(ui->tabWidget->currentIndex())
{
case 0:
2018-11-19 19:11:39 -05:00
AutoConfigureKeyboard(m_inputManager);
static_cast<CBindingModel*>(ui->tableView->model())->Refresh();
2018-04-30 21:01:23 +01:00
break;
}
}
2018-04-30 21:01:23 +01:00
else if(button == ui->buttonBox->button(QDialogButtonBox::Cancel))
{
m_inputManager->Load();
}
2016-09-06 00:23:31 +01:00
}
2018-04-30 21:01:23 +01:00
void ControllerConfigDialog::on_tableView_doubleClicked(const QModelIndex& index)
{
2018-01-10 20:31:37 +00:00
OpenBindConfigDialog(index.row());
}
void ControllerConfigDialog::on_ConfigAllButton_clicked()
2016-09-06 00:23:31 +01:00
{
for(int i = 0; i < PS2::CControllerInfo::MAX_BUTTONS; ++i)
{
2018-01-10 20:31:37 +00:00
if(!OpenBindConfigDialog(i))
{
break;
}
}
2016-09-06 00:23:31 +01:00
}
2018-01-10 20:31:37 +00:00
2018-11-19 19:11:39 -05:00
void ControllerConfigDialog::AutoConfigureKeyboard(CInputBindingManager* bindingManager)
{
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::START, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Return));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::SELECT, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Backspace));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::DPAD_LEFT, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Left));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::DPAD_RIGHT, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Right));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::DPAD_UP, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Up));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::DPAD_DOWN, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Down));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::SQUARE, CInputProviderQtKey::MakeBindingTarget(Qt::Key_A));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::CROSS, CInputProviderQtKey::MakeBindingTarget(Qt::Key_Z));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::TRIANGLE, CInputProviderQtKey::MakeBindingTarget(Qt::Key_S));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::CIRCLE, CInputProviderQtKey::MakeBindingTarget(Qt::Key_X));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::L1, CInputProviderQtKey::MakeBindingTarget(Qt::Key_1));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::L2, CInputProviderQtKey::MakeBindingTarget(Qt::Key_2));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::L3, CInputProviderQtKey::MakeBindingTarget(Qt::Key_3));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::R1, CInputProviderQtKey::MakeBindingTarget(Qt::Key_8));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::R2, CInputProviderQtKey::MakeBindingTarget(Qt::Key_9));
bindingManager->SetSimpleBinding(0, PS2::CControllerInfo::R3, CInputProviderQtKey::MakeBindingTarget(Qt::Key_0));
2018-11-19 19:11:39 -05:00
bindingManager->SetSimulatedAxisBinding(0, PS2::CControllerInfo::ANALOG_LEFT_X,
2018-11-19 19:11:39 -05:00
CInputProviderQtKey::MakeBindingTarget(Qt::Key_F),
CInputProviderQtKey::MakeBindingTarget(Qt::Key_H));
bindingManager->SetSimulatedAxisBinding(0, PS2::CControllerInfo::ANALOG_LEFT_Y,
2018-11-19 19:11:39 -05:00
CInputProviderQtKey::MakeBindingTarget(Qt::Key_T),
CInputProviderQtKey::MakeBindingTarget(Qt::Key_G));
bindingManager->SetSimulatedAxisBinding(0, PS2::CControllerInfo::ANALOG_RIGHT_X,
2018-11-19 19:11:39 -05:00
CInputProviderQtKey::MakeBindingTarget(Qt::Key_J),
CInputProviderQtKey::MakeBindingTarget(Qt::Key_L));
bindingManager->SetSimulatedAxisBinding(0, PS2::CControllerInfo::ANALOG_RIGHT_Y,
2018-11-19 19:11:39 -05:00
CInputProviderQtKey::MakeBindingTarget(Qt::Key_I),
CInputProviderQtKey::MakeBindingTarget(Qt::Key_K));
}
2018-01-10 20:31:37 +00:00
int ControllerConfigDialog::OpenBindConfigDialog(int index)
{
std::string button(PS2::CControllerInfo::m_buttonName[index]);
2018-04-30 21:01:23 +01:00
std::transform(button.begin(), button.end(), button.begin(), ::toupper);
2018-01-10 20:31:37 +00:00
InputEventSelectionDialog IESD(this);
IESD.Setup(button.c_str(), m_inputManager, m_qtKeyInputProvider, static_cast<PS2::CControllerInfo::BUTTON>(index));
2018-01-10 20:31:37 +00:00
auto res = IESD.exec();
return res;
}