summaryrefslogtreecommitdiffhomepage
path: root/gui
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-11-11 06:14:00 +0100
committerStanislaw Halik <sthalik@misaki.pl>2015-11-11 06:14:00 +0100
commit2d90e4039c6dd1aab00c738f9bbc70a4949cd583 (patch)
tree9150b0f8732c51f767a705272bede9345c274901 /gui
parent2521a7918783758928a58f6032ca6fad53a89c01 (diff)
allow for binding joystick buttons to shortcut functions
Win32 only Issue: #118
Diffstat (limited to 'gui')
-rw-r--r--gui/keyboard.h16
-rw-r--r--gui/options-dialog.cpp44
-rw-r--r--gui/options-dialog.hpp2
3 files changed, 46 insertions, 16 deletions
diff --git a/gui/keyboard.h b/gui/keyboard.h
index 03edacc7..aa4b4a24 100644
--- a/gui/keyboard.h
+++ b/gui/keyboard.h
@@ -20,10 +20,17 @@ public:
#ifdef _WIN32
, w([&](Key& k)
{
- Qt::KeyboardModifiers m;
- QKeySequence k_;
- if (win_key::to_qt(k, k_, m))
- key_pressed(static_cast<QVariant>(k_).toInt() | m);
+ if(k.guid != "")
+ {
+ joystick_button_pressed(k.guid, k.keycode);
+ }
+ else
+ {
+ Qt::KeyboardModifiers m;
+ QKeySequence k_;
+ if (win_key::to_qt(k, k_, m))
+ key_pressed(static_cast<QVariant>(k_).toInt() | m);
+ }
}, this->winId())
#endif
{
@@ -47,4 +54,5 @@ public:
#endif
signals:
void key_pressed(QKeySequence k);
+ void joystick_button_pressed(QString guid, int idx);
};
diff --git a/gui/options-dialog.cpp b/gui/options-dialog.cpp
index 2778be0f..c8bf668d 100644
--- a/gui/options-dialog.cpp
+++ b/gui/options-dialog.cpp
@@ -12,9 +12,18 @@
#include <QLayout>
#include <QDialog>
+static QString kopts_to_string(const Shortcuts::key_opts& kopts)
+{
+ if (static_cast<QString>(kopts.guid) != "")
+ return "Joystick button " + QString::number(kopts.button);
+ if (static_cast<QString>(kopts.keycode) == "")
+ return "None";
+ return kopts.keycode;
+}
+
OptionsDialog::OptionsDialog()
{
- ui.setupUi( this );
+ ui.setupUi(this);
connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK()));
connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel()));
@@ -53,18 +62,20 @@ OptionsDialog::OptionsDialog()
tie_setting(s.s_main.center_method, ui.center_method);
- connect(ui.bind_center, &QPushButton::pressed, [&]() -> void { bind_key(s.center.keycode, ui.center_text); });
- connect(ui.bind_zero, &QPushButton::pressed, [&]() -> void { bind_key(s.zero.keycode, ui.zero_text); });
- connect(ui.bind_toggle, &QPushButton::pressed, [&]() -> void { bind_key(s.toggle.keycode, ui.toggle_text); });
+ connect(ui.bind_center, &QPushButton::pressed, [&]() -> void { bind_key(s.center, ui.center_text); });
+ connect(ui.bind_zero, &QPushButton::pressed, [&]() -> void { bind_key(s.zero, ui.zero_text); });
+ connect(ui.bind_toggle, &QPushButton::pressed, [&]() -> void { bind_key(s.toggle, ui.toggle_text); });
- ui.center_text->setText(s.center.keycode == "" ? "None" : static_cast<QString>(s.center.keycode));
- ui.toggle_text->setText(s.toggle.keycode == "" ? "None" : static_cast<QString>(s.toggle.keycode));
- ui.zero_text->setText(s.zero.keycode == "" ? "None" : static_cast<QString>(s.zero.keycode));
+ ui.center_text->setText(kopts_to_string(s.center));
+ ui.toggle_text->setText(kopts_to_string(s.toggle));
+ ui.zero_text->setText(kopts_to_string(s.zero));
}
-void OptionsDialog::bind_key(value<QString>& ret, QLabel* label)
+void OptionsDialog::bind_key(Shortcuts::key_opts& kopts, QLabel* label)
{
- ret = "";
+ kopts.button = -1;
+ kopts.guid = "";
+ kopts.keycode = "";
QDialog d;
auto l = new QHBoxLayout;
l->setMargin(0);
@@ -73,9 +84,20 @@ void OptionsDialog::bind_key(value<QString>& ret, QLabel* label)
d.setLayout(l);
d.setFixedSize(QSize(500, 300));
d.setWindowFlags(Qt::Dialog);
- connect(k, &KeyboardListener::key_pressed, [&] (QKeySequence s) -> void { ret = s.toString(QKeySequence::PortableText); d.close(); });
+ connect(k, &KeyboardListener::key_pressed, [&] (QKeySequence s) -> void {
+ kopts.keycode = s.toString(QKeySequence::PortableText);
+ kopts.guid = "";
+ kopts.button = -1;
+ d.close();
+ });
+ connect(k, &KeyboardListener::joystick_button_pressed, [&](QString guid, int idx) -> void {
+ kopts.guid = guid;
+ kopts.keycode = "";
+ kopts.button = idx;
+ d.close();
+ });
d.exec();
- label->setText(ret == "" ? "None" : static_cast<QString>(ret));
+ label->setText(kopts_to_string(kopts));
delete k;
delete l;
}
diff --git a/gui/options-dialog.hpp b/gui/options-dialog.hpp
index 3ef99d06..308b5b0f 100644
--- a/gui/options-dialog.hpp
+++ b/gui/options-dialog.hpp
@@ -19,5 +19,5 @@ private:
private slots:
void doOK();
void doCancel();
- void bind_key(value<QString>& ret, QLabel* label);
+ void bind_key(Shortcuts::key_opts &kopts, QLabel* label);
};