From 95114eccc774bbb0fbeade8904aafa4f9b6d143d Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 02:50:52 +0200 Subject: initial impl of arbitrary keybindings Issue: #118 Linux and OSX likely broken for now. --- opentrack/shortcuts.cpp | 44 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) (limited to 'opentrack/shortcuts.cpp') diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index ed1701c7..190c4003 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -7,6 +7,7 @@ */ #include "shortcuts.h" +#include "global-shortcuts.h" #include #if defined(_WIN32) @@ -124,38 +125,25 @@ void KeybindingWorker::run() { void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) { #if !defined(_WIN32) - const int idx = k.key_index; - if (!key) - key = std::make_shared(); - else { - key->setEnabled(false); - key->setShortcut(QKeySequence::UnknownKey); - } - if (idx > 0) + key->setEnabled(false); + key->setShortcut(QKeySequence::UnknownKey); + + if (k.keycode) { - QString seq(global_key_sequences.value(idx, "")); - if (!seq.isEmpty()) - { - if (k.shift) - seq = "Shift+" + seq; - if (k.alt) - seq = "Alt+" + seq; - if (k.ctrl) - seq = "Ctrl+" + seq; - key->setShortcut(QKeySequence::fromString(seq, QKeySequence::PortableText)); - key->setEnabled(); - } + key->setShortcut(Qt::KeySequence(k.keycode)); + key->setEnabled(); } +} #else key = K(); - int idx = k.key_index; - key.keycode = 0; - key.shift = key.alt = key.ctrl = 0; - if (idx > 0 && idx < global_windows_key_sequences.size()) - key.keycode = global_windows_key_sequences[idx]; - key.shift = k.shift; - key.alt = k.alt; - key.ctrl = k.ctrl; + int idx = 0; + Qt::KeyboardModifiers mods = Qt::NoModifier; + if (k.keycode != Qt::Key_unknown) + win_key::from_qt(QKeySequence(k.keycode), idx, mods); + key.shift = !!(mods & Qt::ShiftModifier); + key.alt = !!(mods & Qt::AltModifier); + key.ctrl = !!(mods & Qt::ControlModifier); + key.keycode = idx; #endif } -- cgit v1.2.3 From 5ca330e1fd5890ad4504abd5c63f2802e0d2bb87 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 03:23:29 +0200 Subject: shortcuts: linux work --- opentrack/shortcuts.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'opentrack/shortcuts.cpp') diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 190c4003..56071418 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -125,12 +125,18 @@ void KeybindingWorker::run() { void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) { #if !defined(_WIN32) - key->setEnabled(false); - key->setShortcut(QKeySequence::UnknownKey); + + if (key) + { + key->setEnabled(false); + key->setShortcut(QKeySequence::UnknownKey); + } + + key = std::make_shared(); if (k.keycode) { - key->setShortcut(Qt::KeySequence(k.keycode)); + key->setShortcut(QKeySequence(k.keycode)); key->setEnabled(); } } @@ -144,8 +150,8 @@ void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) key.alt = !!(mods & Qt::AltModifier); key.ctrl = !!(mods & Qt::ControlModifier); key.keycode = idx; -#endif } +#endif void Shortcuts::reload() { #ifndef _WIN32 -- cgit v1.2.3 From 37c10386155bc4fed4db910fcd5c7662347f576e Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 05:07:05 +0200 Subject: shortcuts: prototyped for Linux --- opentrack/shortcuts.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'opentrack/shortcuts.cpp') diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 56071418..d68da30e 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -125,15 +125,13 @@ void KeybindingWorker::run() { void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) { #if !defined(_WIN32) - - if (key) - { + if (!key) + key = std::make_shared(); + else { key->setEnabled(false); key->setShortcut(QKeySequence::UnknownKey); } - key = std::make_shared(); - if (k.keycode) { key->setShortcut(QKeySequence(k.keycode)); -- cgit v1.2.3 From 8494245b92e02f982a506ed044a555db239bd4d6 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 05:18:01 +0200 Subject: shortcuts: store .ini value as portable string --- facetracknoir/options-dialog.cpp | 14 +++++++------- facetracknoir/options-dialog.hpp | 2 +- opentrack/shortcuts.cpp | 15 +++++++++++---- opentrack/shortcuts.h | 4 ++-- 4 files changed, 21 insertions(+), 14 deletions(-) (limited to 'opentrack/shortcuts.cpp') diff --git a/facetracknoir/options-dialog.cpp b/facetracknoir/options-dialog.cpp index 1d8e636a..8ac95b71 100644 --- a/facetracknoir/options-dialog.cpp +++ b/facetracknoir/options-dialog.cpp @@ -54,14 +54,14 @@ OptionsDialog::OptionsDialog() 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); }); - ui.center_text->setText(QKeySequence(s.center.keycode).toString()); - ui.zero_text->setText(QKeySequence(s.zero.keycode).toString()); - ui.toggle_text->setText(QKeySequence(s.toggle.keycode).toString()); + ui.center_text->setText(s.center.keycode == "" ? "None" : static_cast(s.center.keycode)); + ui.toggle_text->setText(s.toggle.keycode == "" ? "None" : static_cast(s.toggle.keycode)); + ui.zero_text->setText(s.zero.keycode == "" ? "None" : static_cast(s.zero.keycode)); } -void OptionsDialog::bind_key(value& ret, QLabel* label) +void OptionsDialog::bind_key(value& ret, QLabel* label) { - ret = 0; + ret = ""; QDialog d; auto l = new QHBoxLayout; l->setMargin(0); @@ -70,9 +70,9 @@ void OptionsDialog::bind_key(value& ret, QLabel* label) d.setLayout(l); d.setFixedSize(QSize(500, 500)); d.setWindowFlags(Qt::Dialog); - connect(k, &KeyboardListener::key_pressed, [&] (QKeySequence s) -> void { ret = static_cast(s).toInt(); d.close(); }); + connect(k, &KeyboardListener::key_pressed, [&] (QKeySequence s) -> void { ret = s.toString(QKeySequence::PortableText); d.close(); }); d.exec(); - label->setText(QKeySequence(ret).toString()); + label->setText(ret == "" ? "None" : static_cast(ret)); delete k; delete l; } diff --git a/facetracknoir/options-dialog.hpp b/facetracknoir/options-dialog.hpp index 0ab9849d..9ad656a4 100644 --- a/facetracknoir/options-dialog.hpp +++ b/facetracknoir/options-dialog.hpp @@ -18,5 +18,5 @@ private: private slots: void doOK(); void doCancel(); - void bind_key(value& ret, QLabel* label); + void bind_key(value& ret, QLabel* label); }; diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index d68da30e..81393ae3 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -132,18 +132,25 @@ void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) key->setShortcut(QKeySequence::UnknownKey); } - if (k.keycode) + if (k.keycode != "") { - key->setShortcut(QKeySequence(k.keycode)); + key->setShortcut(QKeySequence::fromString(k.keycode, QKeySequence::PortableText)); key->setEnabled(); } } #else key = K(); int idx = 0; + QKeySequence seq;; + + if (k.keycode == "") + code = QKeySequence(Qt::Key_unknown); + else + code = QKeySequence::fromString(k.keycode, QKeySequence::PortableText) + Qt::KeyboardModifiers mods = Qt::NoModifier; - if (k.keycode != Qt::Key_unknown) - win_key::from_qt(QKeySequence(k.keycode), idx, mods); + if (code != Qt::Key_unknown) + win_key::from_qt(code, idx, mods); key.shift = !!(mods & Qt::ShiftModifier); key.alt = !!(mods & Qt::AltModifier); key.ctrl = !!(mods & Qt::ControlModifier); diff --git a/opentrack/shortcuts.h b/opentrack/shortcuts.h index 6a9a6f77..2d7fec54 100644 --- a/opentrack/shortcuts.h +++ b/opentrack/shortcuts.h @@ -27,10 +27,10 @@ using namespace options; extern QList global_key_sequences; struct key_opts { - value keycode; + value keycode; key_opts(pbundle b, const QString& name) : - keycode(b, QString("keycode-%1").arg(name), 0) + keycode(b, QString("keycode-%1").arg(name), "") {} }; -- cgit v1.2.3 From 1ac8544eaa1e67baa05651e2c9c7ab0888b1cc57 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 05:53:38 +0200 Subject: fix build --- opentrack/shortcuts.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'opentrack/shortcuts.cpp') diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 81393ae3..78b56cce 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -141,12 +141,12 @@ void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) #else key = K(); int idx = 0; - QKeySequence seq;; + QKeySequence code; if (k.keycode == "") code = QKeySequence(Qt::Key_unknown); else - code = QKeySequence::fromString(k.keycode, QKeySequence::PortableText) + code = QKeySequence::fromString(k.keycode, QKeySequence::PortableText); Qt::KeyboardModifiers mods = Qt::NoModifier; if (code != Qt::Key_unknown) -- cgit v1.2.3 From 39d87e711d3eed36d4fecf48250becaa8cbdfb56 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 06:59:31 +0200 Subject: rename to win32-shortcuts.cpp --- opentrack/global-shortcuts.cpp | 162 ----------------------------------------- opentrack/global-shortcuts.h | 18 ----- opentrack/shortcuts.cpp | 2 +- opentrack/win32-shortcuts.cpp | 162 +++++++++++++++++++++++++++++++++++++++++ opentrack/win32-shortcuts.h | 18 +++++ 5 files changed, 181 insertions(+), 181 deletions(-) delete mode 100644 opentrack/global-shortcuts.cpp delete mode 100644 opentrack/global-shortcuts.h create mode 100644 opentrack/win32-shortcuts.cpp create mode 100644 opentrack/win32-shortcuts.h (limited to 'opentrack/shortcuts.cpp') diff --git a/opentrack/global-shortcuts.cpp b/opentrack/global-shortcuts.cpp deleted file mode 100644 index f719e766..00000000 --- a/opentrack/global-shortcuts.cpp +++ /dev/null @@ -1,162 +0,0 @@ -#if defined(_WIN32) -# ifndef DIRECTINPUT_VERSION -# define DIRECTINPUT_VERSION 0x800 -# endif -# include -# include - -#include -#include -#include -#include -#include "global-shortcuts.h" - -QList windows_key_mods = - QList({ - win_key(DIK_LCONTROL, Qt::Key::Key_Control), - win_key(DIK_RCONTROL, Qt::Key::Key_Control), - win_key(DIK_LALT, Qt::Key::Key_Alt), - win_key(DIK_RALT, Qt::Key::Key_Alt), - win_key(DIK_LSHIFT, Qt::Key::Key_Shift), - win_key(DIK_RSHIFT, Qt::Key::Key_Shift), - win_key(DIK_LWIN, Qt::Key::Key_unknown), - win_key(DIK_RWIN, Qt::Key::Key_unknown) - }); - -QList windows_key_sequences = - QList({ - win_key(DIK_F1, Qt::Key::Key_F1 ), - win_key(DIK_F2, Qt::Key::Key_F2 ), - win_key(DIK_F3, Qt::Key::Key_F3 ), - win_key(DIK_F4, Qt::Key::Key_F4 ), - win_key(DIK_F5, Qt::Key::Key_F5 ), - win_key(DIK_F6, Qt::Key::Key_F6 ), - win_key(DIK_F7, Qt::Key::Key_F7 ), - win_key(DIK_F8, Qt::Key::Key_F8 ), - win_key(DIK_F9, Qt::Key::Key_F9 ), - win_key(DIK_F10, Qt::Key::Key_F10 ), - win_key(DIK_F11, Qt::Key::Key_F11 ), - win_key(DIK_F12, Qt::Key::Key_F12 ), - win_key(DIK_LEFT, Qt::Key::Key_Left ), - win_key(DIK_RIGHT, Qt::Key::Key_Right ), - win_key(DIK_UP, Qt::Key::Key_Up ), - win_key(DIK_DOWN, Qt::Key::Key_Down ), - win_key(DIK_PRIOR, Qt::Key::Key_PageUp ), - win_key(DIK_NEXT, Qt::Key::Key_PageDown ), - win_key(DIK_HOME, Qt::Key::Key_Home ), - win_key(DIK_END, Qt::Key::Key_End ), - win_key(DIK_BACK, Qt::Key::Key_Backspace ), - win_key(DIK_COMMA, Qt::Key::Key_Comma ), - win_key(DIK_PERIOD, Qt::Key::Key_Period ), - win_key(DIK_LBRACKET, Qt::Key::Key_BracketLeft ), - win_key(DIK_RBRACKET, Qt::Key::Key_BracketRight ), - win_key(DIK_SEMICOLON, Qt::Key::Key_Semicolon ), - win_key(DIK_SLASH, Qt::Key::Key_Slash ), - win_key(DIK_BACKSLASH, Qt::Key::Key_Backslash ), - win_key(DIK_BACKSPACE, Qt::Key::Key_Backspace ), - win_key(DIK_APOSTROPHE, Qt::Key::Key_Apostrophe ), - win_key(DIK_GRAVE, Qt::Key::Key_QuoteLeft ), - win_key(DIK_MINUS, Qt::Key::Key_Minus ), - win_key(DIK_EQUALS, Qt::Key::Key_Equal ), - win_key(DIK_PERIOD, Qt::Key::Key_Period ), - win_key(DIK_F1, Qt::Key::Key_F1 ), - win_key(DIK_F2, Qt::Key::Key_F2 ), - win_key(DIK_F3, Qt::Key::Key_F3 ), - win_key(DIK_F4, Qt::Key::Key_F4 ), - win_key(DIK_F5, Qt::Key::Key_F5 ), - win_key(DIK_F6, Qt::Key::Key_F6 ), - win_key(DIK_F7, Qt::Key::Key_F7 ), - win_key(DIK_F8, Qt::Key::Key_F8 ), - win_key(DIK_F9, Qt::Key::Key_F9 ), - win_key(DIK_F10, Qt::Key::Key_F10 ), - win_key(DIK_F11, Qt::Key::Key_F11 ), - win_key(DIK_F12, Qt::Key::Key_F12 ), - win_key(DIK_0, Qt::Key::Key_0 ), - win_key(DIK_1, Qt::Key::Key_1 ), - win_key(DIK_2, Qt::Key::Key_2 ), - win_key(DIK_3, Qt::Key::Key_3 ), - win_key(DIK_4, Qt::Key::Key_4 ), - win_key(DIK_5, Qt::Key::Key_5 ), - win_key(DIK_6, Qt::Key::Key_6 ), - win_key(DIK_7, Qt::Key::Key_7 ), - win_key(DIK_8, Qt::Key::Key_8 ), - win_key(DIK_9, Qt::Key::Key_9 ), - win_key(DIK_A, Qt::Key::Key_A ), - win_key(DIK_B, Qt::Key::Key_B ), - win_key(DIK_C, Qt::Key::Key_C ), - win_key(DIK_D, Qt::Key::Key_D ), - win_key(DIK_E, Qt::Key::Key_E ), - win_key(DIK_F, Qt::Key::Key_F ), - win_key(DIK_G, Qt::Key::Key_G ), - win_key(DIK_H, Qt::Key::Key_H ), - win_key(DIK_I, Qt::Key::Key_I ), - win_key(DIK_J, Qt::Key::Key_J ), - win_key(DIK_K, Qt::Key::Key_K ), - win_key(DIK_L, Qt::Key::Key_L ), - win_key(DIK_M, Qt::Key::Key_M ), - win_key(DIK_N, Qt::Key::Key_N ), - win_key(DIK_O, Qt::Key::Key_O ), - win_key(DIK_P, Qt::Key::Key_P ), - win_key(DIK_Q, Qt::Key::Key_Q ), - win_key(DIK_R, Qt::Key::Key_R ), - win_key(DIK_S, Qt::Key::Key_S ), - win_key(DIK_T, Qt::Key::Key_T ), - win_key(DIK_U, Qt::Key::Key_U ), - win_key(DIK_V, Qt::Key::Key_V ), - win_key(DIK_W, Qt::Key::Key_W ), - win_key(DIK_X, Qt::Key::Key_X ), - win_key(DIK_Y, Qt::Key::Key_Y ), - win_key(DIK_Z, Qt::Key::Key_Z ), - win_key(DIK_RETURN, Qt::Key::Key_Return), - win_key(DIK_INSERT, Qt::Key::Key_Insert), - }); - -bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) -{ - auto qt = static_cast(qt_).toInt(); - auto our_mods = qt & Qt::KeyboardModifierMask; -#ifdef _WIN32 - const auto our_mods_ = our_mods; - our_mods |= Qt::ShiftModifier; - switch (qt & ~Qt::ShiftModifier) - { - case Qt::Key::Key_BraceLeft: qt = Qt::Key::Key_BracketLeft; break; - case Qt::Key::Key_BraceRight: qt = Qt::Key::Key_BracketRight; break; - case Qt::Key::Key_ParenLeft: qt = Qt::Key::Key_9; break; - case Qt::Key::Key_ParenRight: qt = Qt::Key::Key_0; break; - - case Qt::Key::Key_Exclam: qt = Qt::Key::Key_1; break; - case Qt::Key::Key_At: qt = Qt::Key::Key_2; break; - case Qt::Key::Key_NumberSign: qt = Qt::Key::Key_3; break; - case Qt::Key::Key_Dollar: qt = Qt::Key::Key_4; break; - case Qt::Key::Key_Percent: qt = Qt::Key::Key_5; break; - case Qt::Key::Key_AsciiCircum: qt = Qt::Key::Key_6; break; - case Qt::Key::Key_Ampersand: qt = Qt::Key::Key_7; break; - case Qt::Key::Key_Asterisk: qt = Qt::Key::Key_8; break; - - case Qt::Key::Key_Underscore: qt = Qt::Key::Key_Minus; break; - case Qt::Key::Key_Plus: qt = Qt::Key::Key_Equal; break; - - case Qt::Key::Key_Colon: qt = Qt::Key::Key_Semicolon; break; - case Qt::Key::Key_QuoteDbl: qt = Qt::Key::Key_Apostrophe; break; - case Qt::Key::Key_Less: qt = Qt::Key::Key_Comma; break; - case Qt::Key::Key_Question: qt = Qt::Key::Key_Slash; break; - case Qt::Key::Key_Bar: qt = Qt::Key::Key_Backslash; break; - default: our_mods = our_mods_; break; - } -#endif - - const auto key = qt & ~Qt::KeyboardModifierMask; - for (auto& wk : windows_key_sequences) - { - if (wk.qt == key) - { - dik = wk.win; - mods = static_cast(our_mods); - return true; - } - } - return false; -} - -#endif diff --git a/opentrack/global-shortcuts.h b/opentrack/global-shortcuts.h deleted file mode 100644 index 8167036d..00000000 --- a/opentrack/global-shortcuts.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#ifdef _WIN32 - -struct win_key; - -extern QList windows_key_mods; -extern QList windows_key_sequences; - -struct win_key -{ - win_key(int win, Qt::Key qt) : win(win), qt(qt) {} - int win; - Qt::Key qt; - static bool from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers &mods); -}; - -#endif diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 78b56cce..1dd77e4c 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -7,11 +7,11 @@ */ #include "shortcuts.h" -#include "global-shortcuts.h" #include #if defined(_WIN32) #include +#include "win32-shortcuts.h" void KeybindingWorker::set_keys(Key kCenter_, Key kToggle_, Key kZero_) { diff --git a/opentrack/win32-shortcuts.cpp b/opentrack/win32-shortcuts.cpp new file mode 100644 index 00000000..dbf4f9fd --- /dev/null +++ b/opentrack/win32-shortcuts.cpp @@ -0,0 +1,162 @@ +#if defined(_WIN32) +# ifndef DIRECTINPUT_VERSION +# define DIRECTINPUT_VERSION 0x800 +# endif +# include +# include + +#include +#include +#include +#include +#include "win32-shortcuts.h" + +QList windows_key_mods = + QList({ + win_key(DIK_LCONTROL, Qt::Key::Key_Control), + win_key(DIK_RCONTROL, Qt::Key::Key_Control), + win_key(DIK_LALT, Qt::Key::Key_Alt), + win_key(DIK_RALT, Qt::Key::Key_Alt), + win_key(DIK_LSHIFT, Qt::Key::Key_Shift), + win_key(DIK_RSHIFT, Qt::Key::Key_Shift), + win_key(DIK_LWIN, Qt::Key::Key_unknown), + win_key(DIK_RWIN, Qt::Key::Key_unknown) + }); + +QList windows_key_sequences = + QList({ + win_key(DIK_F1, Qt::Key::Key_F1 ), + win_key(DIK_F2, Qt::Key::Key_F2 ), + win_key(DIK_F3, Qt::Key::Key_F3 ), + win_key(DIK_F4, Qt::Key::Key_F4 ), + win_key(DIK_F5, Qt::Key::Key_F5 ), + win_key(DIK_F6, Qt::Key::Key_F6 ), + win_key(DIK_F7, Qt::Key::Key_F7 ), + win_key(DIK_F8, Qt::Key::Key_F8 ), + win_key(DIK_F9, Qt::Key::Key_F9 ), + win_key(DIK_F10, Qt::Key::Key_F10 ), + win_key(DIK_F11, Qt::Key::Key_F11 ), + win_key(DIK_F12, Qt::Key::Key_F12 ), + win_key(DIK_LEFT, Qt::Key::Key_Left ), + win_key(DIK_RIGHT, Qt::Key::Key_Right ), + win_key(DIK_UP, Qt::Key::Key_Up ), + win_key(DIK_DOWN, Qt::Key::Key_Down ), + win_key(DIK_PRIOR, Qt::Key::Key_PageUp ), + win_key(DIK_NEXT, Qt::Key::Key_PageDown ), + win_key(DIK_HOME, Qt::Key::Key_Home ), + win_key(DIK_END, Qt::Key::Key_End ), + win_key(DIK_BACK, Qt::Key::Key_Backspace ), + win_key(DIK_COMMA, Qt::Key::Key_Comma ), + win_key(DIK_PERIOD, Qt::Key::Key_Period ), + win_key(DIK_LBRACKET, Qt::Key::Key_BracketLeft ), + win_key(DIK_RBRACKET, Qt::Key::Key_BracketRight ), + win_key(DIK_SEMICOLON, Qt::Key::Key_Semicolon ), + win_key(DIK_SLASH, Qt::Key::Key_Slash ), + win_key(DIK_BACKSLASH, Qt::Key::Key_Backslash ), + win_key(DIK_BACKSPACE, Qt::Key::Key_Backspace ), + win_key(DIK_APOSTROPHE, Qt::Key::Key_Apostrophe ), + win_key(DIK_GRAVE, Qt::Key::Key_QuoteLeft ), + win_key(DIK_MINUS, Qt::Key::Key_Minus ), + win_key(DIK_EQUALS, Qt::Key::Key_Equal ), + win_key(DIK_PERIOD, Qt::Key::Key_Period ), + win_key(DIK_F1, Qt::Key::Key_F1 ), + win_key(DIK_F2, Qt::Key::Key_F2 ), + win_key(DIK_F3, Qt::Key::Key_F3 ), + win_key(DIK_F4, Qt::Key::Key_F4 ), + win_key(DIK_F5, Qt::Key::Key_F5 ), + win_key(DIK_F6, Qt::Key::Key_F6 ), + win_key(DIK_F7, Qt::Key::Key_F7 ), + win_key(DIK_F8, Qt::Key::Key_F8 ), + win_key(DIK_F9, Qt::Key::Key_F9 ), + win_key(DIK_F10, Qt::Key::Key_F10 ), + win_key(DIK_F11, Qt::Key::Key_F11 ), + win_key(DIK_F12, Qt::Key::Key_F12 ), + win_key(DIK_0, Qt::Key::Key_0 ), + win_key(DIK_1, Qt::Key::Key_1 ), + win_key(DIK_2, Qt::Key::Key_2 ), + win_key(DIK_3, Qt::Key::Key_3 ), + win_key(DIK_4, Qt::Key::Key_4 ), + win_key(DIK_5, Qt::Key::Key_5 ), + win_key(DIK_6, Qt::Key::Key_6 ), + win_key(DIK_7, Qt::Key::Key_7 ), + win_key(DIK_8, Qt::Key::Key_8 ), + win_key(DIK_9, Qt::Key::Key_9 ), + win_key(DIK_A, Qt::Key::Key_A ), + win_key(DIK_B, Qt::Key::Key_B ), + win_key(DIK_C, Qt::Key::Key_C ), + win_key(DIK_D, Qt::Key::Key_D ), + win_key(DIK_E, Qt::Key::Key_E ), + win_key(DIK_F, Qt::Key::Key_F ), + win_key(DIK_G, Qt::Key::Key_G ), + win_key(DIK_H, Qt::Key::Key_H ), + win_key(DIK_I, Qt::Key::Key_I ), + win_key(DIK_J, Qt::Key::Key_J ), + win_key(DIK_K, Qt::Key::Key_K ), + win_key(DIK_L, Qt::Key::Key_L ), + win_key(DIK_M, Qt::Key::Key_M ), + win_key(DIK_N, Qt::Key::Key_N ), + win_key(DIK_O, Qt::Key::Key_O ), + win_key(DIK_P, Qt::Key::Key_P ), + win_key(DIK_Q, Qt::Key::Key_Q ), + win_key(DIK_R, Qt::Key::Key_R ), + win_key(DIK_S, Qt::Key::Key_S ), + win_key(DIK_T, Qt::Key::Key_T ), + win_key(DIK_U, Qt::Key::Key_U ), + win_key(DIK_V, Qt::Key::Key_V ), + win_key(DIK_W, Qt::Key::Key_W ), + win_key(DIK_X, Qt::Key::Key_X ), + win_key(DIK_Y, Qt::Key::Key_Y ), + win_key(DIK_Z, Qt::Key::Key_Z ), + win_key(DIK_RETURN, Qt::Key::Key_Return), + win_key(DIK_INSERT, Qt::Key::Key_Insert), + }); + +bool win_key::from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers& mods) +{ + auto qt = static_cast(qt_).toInt(); + auto our_mods = qt & Qt::KeyboardModifierMask; +#ifdef _WIN32 + const auto our_mods_ = our_mods; + our_mods |= Qt::ShiftModifier; + switch (qt & ~Qt::ShiftModifier) + { + case Qt::Key::Key_BraceLeft: qt = Qt::Key::Key_BracketLeft; break; + case Qt::Key::Key_BraceRight: qt = Qt::Key::Key_BracketRight; break; + case Qt::Key::Key_ParenLeft: qt = Qt::Key::Key_9; break; + case Qt::Key::Key_ParenRight: qt = Qt::Key::Key_0; break; + + case Qt::Key::Key_Exclam: qt = Qt::Key::Key_1; break; + case Qt::Key::Key_At: qt = Qt::Key::Key_2; break; + case Qt::Key::Key_NumberSign: qt = Qt::Key::Key_3; break; + case Qt::Key::Key_Dollar: qt = Qt::Key::Key_4; break; + case Qt::Key::Key_Percent: qt = Qt::Key::Key_5; break; + case Qt::Key::Key_AsciiCircum: qt = Qt::Key::Key_6; break; + case Qt::Key::Key_Ampersand: qt = Qt::Key::Key_7; break; + case Qt::Key::Key_Asterisk: qt = Qt::Key::Key_8; break; + + case Qt::Key::Key_Underscore: qt = Qt::Key::Key_Minus; break; + case Qt::Key::Key_Plus: qt = Qt::Key::Key_Equal; break; + + case Qt::Key::Key_Colon: qt = Qt::Key::Key_Semicolon; break; + case Qt::Key::Key_QuoteDbl: qt = Qt::Key::Key_Apostrophe; break; + case Qt::Key::Key_Less: qt = Qt::Key::Key_Comma; break; + case Qt::Key::Key_Question: qt = Qt::Key::Key_Slash; break; + case Qt::Key::Key_Bar: qt = Qt::Key::Key_Backslash; break; + default: our_mods = our_mods_; break; + } +#endif + + const auto key = qt & ~Qt::KeyboardModifierMask; + for (auto& wk : windows_key_sequences) + { + if (wk.qt == key) + { + dik = wk.win; + mods = static_cast(our_mods); + return true; + } + } + return false; +} + +#endif diff --git a/opentrack/win32-shortcuts.h b/opentrack/win32-shortcuts.h new file mode 100644 index 00000000..8167036d --- /dev/null +++ b/opentrack/win32-shortcuts.h @@ -0,0 +1,18 @@ +#pragma once + +#ifdef _WIN32 + +struct win_key; + +extern QList windows_key_mods; +extern QList windows_key_sequences; + +struct win_key +{ + win_key(int win, Qt::Key qt) : win(win), qt(qt) {} + int win; + Qt::Key qt; + static bool from_qt(QKeySequence qt_, int& dik, Qt::KeyboardModifiers &mods); +}; + +#endif -- cgit v1.2.3 From 0f445ac2661b5454d491936bb780196b13d1f4ea Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 25 Jul 2015 07:03:25 +0200 Subject: shortcuts: remove duplication --- opentrack/shortcuts.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'opentrack/shortcuts.cpp') diff --git a/opentrack/shortcuts.cpp b/opentrack/shortcuts.cpp index 1dd77e4c..63cd9088 100644 --- a/opentrack/shortcuts.cpp +++ b/opentrack/shortcuts.cpp @@ -128,8 +128,8 @@ void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) if (!key) key = std::make_shared(); else { - key->setEnabled(false); key->setShortcut(QKeySequence::UnknownKey); + key->setEnabled(false); } if (k.keycode != "") @@ -159,23 +159,6 @@ void Shortcuts::bind_keyboard_shortcut(K &key, key_opts& k) #endif void Shortcuts::reload() { -#ifndef _WIN32 - if (keyCenter) - { - keyCenter->setShortcut(QKeySequence::UnknownKey); - keyCenter->setEnabled(false); - } - if (keyToggle) - { - keyToggle->setShortcut(QKeySequence::UnknownKey); - keyToggle->setEnabled(false); - } - if (keyZero) - { - keyZero->setShortcut(QKeySequence::UnknownKey); - keyZero->setEnabled(false); - } -#endif bind_keyboard_shortcut(keyCenter, s.center); bind_keyboard_shortcut(keyToggle, s.toggle); bind_keyboard_shortcut(keyZero, s.zero); -- cgit v1.2.3