From bb710c8d207337d4d0cc2a6657e954bbc2823e7f Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 18:30:59 +0200 Subject: initial implementation To-be-reviewed-by: mm0zct --- facetracknoir/facetracknoir.cpp | 15 +- facetracknoir/facetracknoir.h | 3 + facetracknoir/ftnoir_keyboardshortcuts.ui | 305 ++++++++++++++++++------------ facetracknoir/shortcuts.cpp | 103 ++++++++-- facetracknoir/shortcuts.h | 7 +- facetracknoir/tracker.cpp | 8 +- facetracknoir/tracker.h | 1 + 7 files changed, 283 insertions(+), 159 deletions(-) diff --git a/facetracknoir/facetracknoir.cpp b/facetracknoir/facetracknoir.cpp index eb24b320..dddcd4e4 100644 --- a/facetracknoir/facetracknoir.cpp +++ b/facetracknoir/facetracknoir.cpp @@ -95,6 +95,7 @@ FaceTrackNoIR::FaceTrackNoIR(QWidget *parent, Qt::WindowFlags flags) : keybindingWorker(NULL), #else keyCenter(0), + keyToggle(0), #endif timUpdateHeadPose(this), pTrackerDialog(NULL), @@ -973,12 +974,18 @@ void FaceTrackNoIR::shortcutRecentered() { if (tracker) { -#if defined(_WIN32) - MessageBeep(MB_OK); -#else QApplication::beep(); -#endif qDebug() << "Center"; tracker->do_center = true; } } + +void FaceTrackNoIR::shortcutToggled() +{ + if (tracker) + { + QApplication::beep(); + qDebug() << "Toggle"; + tracker->enabled = !tracker->enabled; + } +} diff --git a/facetracknoir/facetracknoir.h b/facetracknoir/facetracknoir.h index 6c087c43..8f510d78 100644 --- a/facetracknoir/facetracknoir.h +++ b/facetracknoir/facetracknoir.h @@ -91,12 +91,15 @@ public: #if defined(_WIN32) Key keyCenter; + Key keyToggle; KeybindingWorker* keybindingWorker; #else QxtGlobalShortcut* keyCenter; + QxtGlobalShortcut* keyToggle; #endif public slots: void shortcutRecentered(); + void shortcutToggled(); private: HeadPoseData pose; diff --git a/facetracknoir/ftnoir_keyboardshortcuts.ui b/facetracknoir/ftnoir_keyboardshortcuts.ui index e70b7536..66ab004f 100644 --- a/facetracknoir/ftnoir_keyboardshortcuts.ui +++ b/facetracknoir/ftnoir_keyboardshortcuts.ui @@ -6,10 +6,16 @@ 0 0 - 289 - 81 + 337 + 122 + + + 0 + 0 + + FaceTrackNoIR Keyboard and Mouse shortcuts @@ -26,8 +32,8 @@ - 180 - 50 + 120 + 90 100 23 @@ -57,8 +63,8 @@ - 74 - 50 + 230 + 90 100 23 @@ -85,131 +91,178 @@ OK - - - - 179 - 19 - 101 - 20 - - - - - 90 - 0 - - - - Select Number - - - QComboBox::InsertAlphabetically - - - - - - 210 - 0 - 46 - 16 - - - - - 0 - 0 - - - - Keyboard - - - Qt::AlignCenter - - - false - - - - - - 141 - 21 - 36 - 17 - - - - - 50 - 16777215 - - - - Alt - - - + 5 - 23 - 33 - 16 - - - - - 0 - 0 - - - - Center - - - false - - - - - - 95 - 21 - 40 - 17 - - - - - 50 - 16777215 - - - - Ctrl - - - - - - 44 - 21 - 45 - 17 + 0 + 321 + 75 - - - 50 - 16777215 - - - - Shift - + + + + + + 0 + 0 + + + + Keyboard + + + Qt::AlignCenter + + + false + + + + + + + + 0 + 0 + + + + Center + + + false + + + + + + + + 50 + 16777215 + + + + Shift + + + + + + + + 50 + 16777215 + + + + Ctrl + + + + + + + + 50 + 16777215 + + + + Alt + + + + + + + + 90 + 0 + + + + Select Number + + + QComboBox::InsertAlphabetically + + + + + + + + 0 + 0 + + + + Toggle + + + false + + + + + + + + 50 + 16777215 + + + + Shift + + + + + + + + 50 + 16777215 + + + + Ctrl + + + + + + + + 50 + 16777215 + + + + Alt + + + + + + + + 90 + 0 + + + + Select Number + + + QComboBox::InsertAlphabetically + + + + diff --git a/facetracknoir/shortcuts.cpp b/facetracknoir/shortcuts.cpp index 43c1019d..aae70bac 100644 --- a/facetracknoir/shortcuts.cpp +++ b/facetracknoir/shortcuts.cpp @@ -17,6 +17,7 @@ KeyboardShortcutDialog::KeyboardShortcutDialog( FaceTrackNoIR *ftnoir, QWidget * for ( int i = 0; i < global_key_sequences.size(); i++) { ui.cbxCenterKey->addItem(global_key_sequences.at(i)); + ui.cbxToggleKey->addItem(global_key_sequences.at(i)); } loadSettings(); @@ -38,7 +39,6 @@ void KeyboardShortcutDialog::doOK() { mainApp->bindKeyboardShortcuts(); } -// override show event void KeyboardShortcutDialog::showEvent ( QShowEvent * event ) { loadSettings(); } @@ -76,11 +76,7 @@ void KeyboardShortcutDialog::doCancel() { } } -// -// Load the current Settings from the currently 'active' INI-file. -// void KeyboardShortcutDialog::loadSettings() { - qDebug() << "loadSettings says: Starting "; QSettings settings("opentrack"); // Registry settings (in HK_USER) QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); @@ -90,24 +86,82 @@ void KeyboardShortcutDialog::loadSettings() { iniFile.beginGroup ( "KB_Shortcuts" ); - ui.chkCenterShift->setChecked (iniFile.value ( "Shift_Center", 0 ).toBool()); - ui.chkCenterCtrl->setChecked (iniFile.value ( "Ctrl_Center", 0 ).toBool()); - ui.chkCenterAlt->setChecked (iniFile.value ( "Alt_Center", 0 ).toBool()); + const char* names[] = { + "Center", "Togggle" + }; + + QComboBox* checkboxen[] = { + ui.cbxCenterKey, + ui.cbxToggleKey + }; + + QCheckBox* boxen[2][3] = { + { + ui.chkCenterShift, + ui.chkCenterCtrl, + ui.chkCenterAlt + }, + { + ui.chkToggleShift, + ui.chkToggleCtrl, + ui.chkToggleAlt + } + }; + + const char* modnames[] = { + "Shift", "Ctrl", "Alt" + }; + + const char* keynames[] = { + "Center", "Toggle" + }; - ui.cbxCenterKey->setCurrentIndex(iniFile.value("Key_index_Center", 0).toInt()); + const int KEY_COUNT = 2; + const int MODIFIERS = 3; + + for (int i = 0; i < KEY_COUNT; i++) + { + for (int m = 0; i < MODIFIERS; i++) + { + boxen[i][m]->setChecked (iniFile.value ( modnames[m] + QString("_") + QString(keynames[i]), 0 ).toBool()); + } + checkboxen[i]->setCurrentIndex(iniFile.value("Key_index_" + QString(names[i]), 0).toInt()); + } iniFile.endGroup (); settingsDirty = false; - } -// -// Save the current Settings to the currently 'active' INI-file. -// void KeyboardShortcutDialog::save() { + const char* keynames[] = { + "Center", "Toggle" + }; + + QComboBox* checkboxen[] = { + ui.cbxCenterKey, + ui.cbxToggleKey + }; + + const char* modnames[] = { + "Shift", "Ctrl", "Alt" + }; + + QCheckBox* boxen[2][3] = { + { + ui.chkCenterShift, + ui.chkCenterCtrl, + ui.chkCenterAlt + }, + { + ui.chkToggleShift, + ui.chkToggleCtrl, + ui.chkToggleAlt + } + }; - qDebug() << "save() says: started"; + const int MODIFIERS = 3; + const int KEY_COUNT = 2; QSettings settings("opentrack"); // Registry settings (in HK_USER) @@ -115,12 +169,18 @@ void KeyboardShortcutDialog::save() { QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) iniFile.beginGroup ( "KB_Shortcuts" ); - iniFile.setValue ( "Key_index_Center", ui.cbxCenterKey->currentIndex() ); - iniFile.setValue ( "Shift_Center", ui.chkCenterShift->isChecked() ); - iniFile.setValue ( "Ctrl_Center", ui.chkCenterCtrl->isChecked() ); - iniFile.setValue ( "Alt_Center", ui.chkCenterAlt->isChecked() ); - iniFile.endGroup (); + for (int i = 0; i < KEY_COUNT; i++) + { + iniFile.setValue ( "Key_index_" + QString(keynames[i]), + checkboxen[i]->currentIndex() ); + for (int m = 0; i < MODIFIERS; i++) + { + iniFile.setValue(modnames[m] + QString("_") + keynames[i], !!boxen[i][m]->isChecked()); + } + } + + iniFile.endGroup(); settingsDirty = false; } @@ -137,8 +197,8 @@ KeybindingWorkerImpl::~KeybindingWorkerImpl() { din->Release(); } -KeybindingWorkerImpl::KeybindingWorkerImpl(FaceTrackNoIR& w, Key keyCenter) -: din(0), dinkeyboard(0), kCenter(keyCenter), window(w), should_quit(true) +KeybindingWorkerImpl::KeybindingWorkerImpl(FaceTrackNoIR& w, Key keyCenter, Key keyToggle) +: din(0), dinkeyboard(0), kCenter(keyCenter), ktoggle(keyTogle), window(w), should_quit(true) { if (DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&din, NULL) != DI_OK) { qDebug() << "setup DirectInput8 Creation failed!" << GetLastError(); @@ -219,6 +279,7 @@ void KeybindingWorkerImpl::run() { } PROCESS_KEY(kCenter, shortcutRecentered); + PROCESS_KEY(kToggle, shortcutToggled); Sleep(25); } diff --git a/facetracknoir/shortcuts.h b/facetracknoir/shortcuts.h index 05c36520..9fd83af3 100644 --- a/facetracknoir/shortcuts.h +++ b/facetracknoir/shortcuts.h @@ -64,17 +64,18 @@ private: LPDIRECTINPUT8 din; LPDIRECTINPUTDEVICE8 dinkeyboard; Key kCenter; + Key kToggle; FaceTrackNoIR& window; public: volatile bool should_quit; ~KeybindingWorkerImpl(); - KeybindingWorkerImpl(FaceTrackNoIR& w, Key keyCenter); + KeybindingWorkerImpl(FaceTrackNoIR& w, Key keyCenter, Key keyToggle); void run(); }; #else class KeybindingWorkerImpl { public: - KeybindingWorkerImpl(FaceTrackNoIR& w, Key keyCenter); + KeybindingWorkerImpl(FaceTrackNoIR& w, Key keyCenter, Key keyToggle); void run() {} }; #endif @@ -82,7 +83,7 @@ public: class KeybindingWorker : public QThread, public KeybindingWorkerImpl { Q_OBJECT public: - KeybindingWorker(FaceTrackNoIR& w, Key keyCenter) : KeybindingWorkerImpl(w, keyCenter) + KeybindingWorker(FaceTrackNoIR& w, Key keyCenter, Key keyToggle) : KeybindingWorkerImpl(w, keyCenter, keyToggle) { } void run() { diff --git a/facetracknoir/tracker.cpp b/facetracknoir/tracker.cpp index b965140b..d1218098 100644 --- a/facetracknoir/tracker.cpp +++ b/facetracknoir/tracker.cpp @@ -31,7 +31,8 @@ /** constructor **/ Tracker::Tracker( FaceTrackNoIR *parent ) : should_quit(false), - do_center(false) + do_center(false), + enabled(true) { // Retieve the pointer to the parent mainApp = parent; @@ -145,17 +146,14 @@ void Tracker::run() { get_curve(new_camera.axes[i], output_camera.axes[i], mainApp->axis(i)); } - // // Send the headpose to the game - // - if (Libraries->pProtocol) { + if (Libraries->pProtocol && enabled) { gameoutput_camera = output_camera; Libraries->pProtocol->sendHeadposeToGame( gameoutput_camera.axes, newpose ); // degrees & centimeters } } } - //for lower cpu load msleep(8); } #if defined(_WIN32) diff --git a/facetracknoir/tracker.h b/facetracknoir/tracker.h index 885fc1e2..28f8dc99 100644 --- a/facetracknoir/tracker.h +++ b/facetracknoir/tracker.h @@ -108,6 +108,7 @@ public: volatile bool should_quit; // following are now protected by hTrackMutex volatile bool do_center; // Center head-position, using the shortkey + volatile bool enabled; T6DOF output_camera; }; -- cgit v1.2.3 From 0bdfd9d5a8738a442710be06ae5619ff40462f06 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 19:04:11 +0200 Subject: fix typo Signed-off-by: Stanislaw Halik --- facetracknoir/shortcuts.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/facetracknoir/shortcuts.cpp b/facetracknoir/shortcuts.cpp index aae70bac..4256e932 100644 --- a/facetracknoir/shortcuts.cpp +++ b/facetracknoir/shortcuts.cpp @@ -87,7 +87,7 @@ void KeyboardShortcutDialog::loadSettings() { iniFile.beginGroup ( "KB_Shortcuts" ); const char* names[] = { - "Center", "Togggle" + "Center", "Toggle" }; QComboBox* checkboxen[] = { -- cgit v1.2.3 From 861265697c04897ed63c6a5760d8f379dcd354af Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 20:56:46 +0200 Subject: while here, clean up -Wall -Wextra -pedantic Signed-off-by: Stanislaw Halik --- facetracknoir/curve-config.cpp | 2 +- facetracknoir/curve-config.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/facetracknoir/curve-config.cpp b/facetracknoir/curve-config.cpp index 36caa5c0..117e5803 100644 --- a/facetracknoir/curve-config.cpp +++ b/facetracknoir/curve-config.cpp @@ -35,7 +35,7 @@ void CurveConfigurationDialog::doOK() { } // override show event -void CurveConfigurationDialog::showEvent ( QShowEvent * event ) { +void CurveConfigurationDialog::showEvent ( QShowEvent * ) { loadSettings(); } diff --git a/facetracknoir/curve-config.h b/facetracknoir/curve-config.h index d02f1587..a9073840 100644 --- a/facetracknoir/curve-config.h +++ b/facetracknoir/curve-config.h @@ -22,6 +22,6 @@ private: private slots: void doOK(); void doCancel(); - void curveChanged( bool change ) { settingsDirty = true; } - void curveChanged( int change ) { settingsDirty = true; } + void curveChanged( bool ) { settingsDirty = true; } + void curveChanged( int ) { settingsDirty = true; } }; -- cgit v1.2.3 From dfb30c9b033f980aaa702a8b7594f3e5113ad843 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 20:56:55 +0200 Subject: fix wrong colors Signed-off-by: Stanislaw Halik --- facetracknoir/ftnoir_keyboardshortcuts.ui | 43 ++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/facetracknoir/ftnoir_keyboardshortcuts.ui b/facetracknoir/ftnoir_keyboardshortcuts.ui index 66ab004f..0bbd42ff 100644 --- a/facetracknoir/ftnoir_keyboardshortcuts.ui +++ b/facetracknoir/ftnoir_keyboardshortcuts.ui @@ -6,8 +6,8 @@ 0 0 - 337 - 122 + 335 + 120 @@ -16,6 +16,43 @@ 0 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + + + 141 + 143 + 145 + + + + + + FaceTrackNoIR Keyboard and Mouse shortcuts @@ -91,7 +128,7 @@ OK - + 5 -- cgit v1.2.3 From 3240f3d4f1f7e084dcb4bb2c4dbda563ce62aa6e Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 20:57:03 +0200 Subject: while here, remove dead code Signed-off-by: Stanislaw Halik --- facetracknoir/main.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/facetracknoir/main.cpp b/facetracknoir/main.cpp index 5a52c034..cf7ff6fb 100644 --- a/facetracknoir/main.cpp +++ b/facetracknoir/main.cpp @@ -28,7 +28,6 @@ #include #include #include -#include #if defined(_WIN32) # include @@ -40,14 +39,6 @@ int main(int argc, char** argv) QApplication::setAttribute(Qt::AA_X11InitThreads, true); QApplication app(argc, argv); -#if 0 - - QFont font; - font.setFamily(font.defaultFamily()); - font.setPointSize(9); - font.setStyleStrategy(QFont::PreferAntialias); - app.setFont(font); -#endif FaceTrackNoIR w; QDesktopWidget desktop; -- cgit v1.2.3 From ee1bc50aea27ab75bd50b62f393f6f51cdc3aa53 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 20:57:19 +0200 Subject: remove dead code Signed-off-by: Stanislaw Halik --- facetracknoir/shortcuts.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/facetracknoir/shortcuts.h b/facetracknoir/shortcuts.h index 9fd83af3..a98211a8 100644 --- a/facetracknoir/shortcuts.h +++ b/facetracknoir/shortcuts.h @@ -17,7 +17,7 @@ public: explicit KeyboardShortcutDialog( FaceTrackNoIR *ftnoir, QWidget *parent ); virtual ~KeyboardShortcutDialog(); - void showEvent ( QShowEvent * event ); + void showEvent (QShowEvent *); private: Ui::UICKeyboardShortcutDialog ui; -- cgit v1.2.3 From df7969c687a0e6a5e6cbed8cabaf11c51058d35a Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 20:57:35 +0200 Subject: don't even display headpose when off Signed-off-by: Stanislaw Halik --- facetracknoir/tracker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/facetracknoir/tracker.cpp b/facetracknoir/tracker.cpp index d1218098..53b3ffd3 100644 --- a/facetracknoir/tracker.cpp +++ b/facetracknoir/tracker.cpp @@ -122,7 +122,7 @@ void Tracker::run() { Libraries->pFilter->Initialize(); } - if (confid) { + if (confid && enabled) { // get values for (int i = 0; i < 6; i++) target_camera.axes[i] = mainApp->axis(i).headPos; @@ -147,7 +147,7 @@ void Tracker::run() { } // Send the headpose to the game - if (Libraries->pProtocol && enabled) { + if (Libraries->pProtocol) { gameoutput_camera = output_camera; Libraries->pProtocol->sendHeadposeToGame( gameoutput_camera.axes, newpose ); // degrees & centimeters } -- cgit v1.2.3 From 015547df5de7dcfaa60bfa6f8ac30b1f9c91385a Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 16 Oct 2013 20:57:56 +0200 Subject: fix the damn mess Signed-off-by: Stanislaw Halik --- facetracknoir/facetracknoir.cpp | 119 ++++++++++-------- facetracknoir/facetracknoir.h | 10 +- facetracknoir/facetracknoir.ui | 270 +--------------------------------------- facetracknoir/shortcuts.cpp | 19 ++- 4 files changed, 86 insertions(+), 332 deletions(-) diff --git a/facetracknoir/facetracknoir.cpp b/facetracknoir/facetracknoir.cpp index dddcd4e4..af630bea 100644 --- a/facetracknoir/facetracknoir.cpp +++ b/facetracknoir/facetracknoir.cpp @@ -91,12 +91,12 @@ static void fill_combobox(const QString& filter, QList& list, Q // FaceTrackNoIR::FaceTrackNoIR(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), - #if defined(_WIN32) - keybindingWorker(NULL), - #else - keyCenter(0), - keyToggle(0), - #endif +#if defined(_WIN32) + keybindingWorker(NULL), +#else + keyCenter(this), + keyToggle(this), +#endif timUpdateHeadPose(this), pTrackerDialog(NULL), pSecondTrackerDialog(NULL), @@ -182,6 +182,9 @@ FaceTrackNoIR::FaceTrackNoIR(QWidget *parent, Qt::WindowFlags flags) : ui.lcdNumOutputRotX->setVisible(false); ui.lcdNumOutputRotY->setVisible(false); ui.lcdNumOutputRotZ->setVisible(false); + + connect(&keyCenter, SIGNAL(activated()), this, SLOT(shortcutRecentered())); + connect(&keyToggle, SIGNAL(activated()), this, SLOT(shortcutToggled())); } /** destructor stops the engine and quits the faceapi **/ @@ -545,7 +548,7 @@ void FaceTrackNoIR::startTracker( ) { } #if defined(_WIN32) - keybindingWorker = new KeybindingWorker(*this, keyCenter); + keybindingWorker = new KeybindingWorker(*this, &keyCenter, &keyToggle); keybindingWorker->start(); #endif @@ -913,79 +916,97 @@ void FaceTrackNoIR::profileSelected(int index) loadSettings(); } -void FaceTrackNoIR::bindKeyboardShortcuts() -{ - QSettings settings("opentrack"); // Registry settings (in HK_USER) - - QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); - QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) - iniFile.beginGroup ( "KB_Shortcuts" ); - int idxCenter = iniFile.value("Key_index_Center", 0).toInt(); - #if !defined(_WIN32) - if (keyCenter) { - delete keyCenter; - keyCenter = NULL; - } - - if (idxCenter > 0) +void FaceTrackNoIR::bind_keyboard_shortcut(QxtGlobalShortcut& key, const QString label, QSettings& iniFile) +{ + const int idx = iniFile.value("Key_index_" + label, 0).toInt(); + key.setShortcut(QKeySequence::fromString("")); + key.setDisabled(); + QString seq(global_key_sequences.value(idx, "")); + if (idx > 0) { - QString seq(global_key_sequences.value(idxCenter, "")); if (!seq.isEmpty()) { - if (iniFile.value("Shift_Center", false).toBool()) + if (iniFile.value(QString("Shift_%1").arg(label), false).toBool()) seq = "Shift+" + seq; - if (iniFile.value("Alt_Center", false).toBool()) + if (iniFile.value(QString("Alt_%1").arg(label), false).toBool()) seq = "Alt+" + seq; - if (iniFile.value("Ctrl_Center", false).toBool()) + if (iniFile.value(QString("Ctrl_%1").arg(label), false).toBool()) seq = "Ctrl+" + seq; - keyCenter = new QxtGlobalShortcut(QKeySequence(seq), this); - connect(keyCenter, SIGNAL(activated()), this, SLOT(shortcutRecentered())); + key.setShortcut(QKeySequence::fromString(seq, QKeySequence::NativeText)); + key.setEnabled(); } } +} #else - keyCenter.keycode = 0; - keyCenter.shift = keyCenter.alt = keyCenter.ctrl = 0; - if (idxCenter > 0 && idxCenter < global_windows_key_sequences.size()) - keyCenter.keycode = global_windows_key_sequences[idxCenter]; - keyCenter.shift = iniFile.value("Shift_Center", false).toBool(); - keyCenter.alt = iniFile.value("Alt_Center", false).toBool(); - keyCenter.ctrl = iniFile.value("Ctrl_Center", false).toBool(); +static void bind_keyboard_shotcut(Key& key, const QString label, QSettings& iniFile) +{ + const int idx = iniFile.value("Key_index_" + label, 0).toInt(); + if (idx > 0) + { + key.keycode = 0; + key.shift = key.alt = key.ctrl = 0; + if (idx < global_windows_key_sequences.size()) + key.keycode = global_windows_key_sequences[idx]; + key.shift = iniFile.value(QString("Shift_").arg(label), false).toBool(); + key.alt = iniFile.value(QString("Alt_").arg(label), false).toBool(); + key.ctrl = iniFile.value(QString("Ctrl_").arg(label), false).toBool(); + } +} #endif - iniFile.endGroup (); + +void FaceTrackNoIR::bindKeyboardShortcuts() +{ + QSettings settings("opentrack"); // Registry settings (in HK_USER) + + QString currentFile = settings.value ( "SettingsFile", QCoreApplication::applicationDirPath() + "/settings/default.ini" ).toString(); + QSettings iniFile( currentFile, QSettings::IniFormat ); // Application settings (in INI-file) + iniFile.beginGroup ( "KB_Shortcuts" ); +#if !defined(_WIN32) + bind_keyboard_shortcut(keyCenter, "Center", iniFile); + bind_keyboard_shortcut(keyToggle, "Toggle", iniFile); +#else + bind_keyboard_shortcut(&keyCenter, "Center", iniFile)); + bind_keyboard_shortcut(&keyToggle, "Toggle", iniFile)); +#endif + iniFile.endGroup (); + if (tracker) /* running already */ { #if defined(_WIN32) - if (keybindingWorker) - { - keybindingWorker->should_quit = true; - keybindingWorker->wait(); - delete keybindingWorker; - keybindingWorker = NULL; - } - keybindingWorker = new KeybindingWorker(*this, keyCenter); - keybindingWorker->start(); + if (keybindingWorker) + { + keybindingWorker->should_quit = true; + keybindingWorker->wait(); + delete keybindingWorker; + keybindingWorker = NULL; + } + const int idx_center = iniFile.value("Key_index_Center", 0).toInt(); + const int idx_toggle = iniFile.value("Key_index_Toggle", 0).toInt(); + keybindingWorker = new KeybindingWorker(*this, keyCenter, keyToggle); + keybindingWorker->start(); #endif } } void FaceTrackNoIR::shortcutRecentered() { + QApplication::beep(); + + qDebug() << "Center"; if (tracker) { - QApplication::beep(); - qDebug() << "Center"; tracker->do_center = true; } } void FaceTrackNoIR::shortcutToggled() { + QApplication::beep(); + qDebug() << "Toggle"; if (tracker) { - QApplication::beep(); - qDebug() << "Toggle"; tracker->enabled = !tracker->enabled; } } diff --git a/facetracknoir/facetracknoir.h b/facetracknoir/facetracknoir.h index 8f510d78..bfeb2d38 100644 --- a/facetracknoir/facetracknoir.h +++ b/facetracknoir/facetracknoir.h @@ -94,8 +94,8 @@ public: Key keyToggle; KeybindingWorker* keybindingWorker; #else - QxtGlobalShortcut* keyCenter; - QxtGlobalShortcut* keyToggle; + QxtGlobalShortcut keyCenter; + QxtGlobalShortcut keyToggle; #endif public slots: void shortcutRecentered(); @@ -112,7 +112,6 @@ private: IProtocolDialog* pProtocolDialog; // Pointer to Protocol dialog instance (in DLL) IFilterDialog* pFilterDialog; // Pointer to Filter dialog instance (in DLL) - /** Widget variables **/ QWidget *_keyboard_shortcuts; QWidget *_curve_config; @@ -120,12 +119,15 @@ private: void GetCameraNameDX(); void loadSettings(); - void setupFaceTrackNoIR(); QList dlopen_filters; QList dlopen_trackers; QList dlopen_protocols; +#ifndef _WIN32 + void bind_keyboard_shortcut(QxtGlobalShortcut& key, const QString label, QSettings& iniFile); +#endif + bool looping; private slots: diff --git a/facetracknoir/facetracknoir.ui b/facetracknoir/facetracknoir.ui index 0578e2f6..2f35e29b 100644 --- a/facetracknoir/facetracknoir.ui +++ b/facetracknoir/facetracknoir.ui @@ -181,259 +181,6 @@ QGroupBox { 419 - - - - - - - 0 - 0 - 0 - - - - - - - 89 - 89 - 89 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - 89 - 89 - 89 - - - - - - - 89 - 89 - 89 - - - - - - - 192 - 192 - 192 - - - - - - - 0 - 0 - 0 - - - - - - - 72 - 72 - 72 - - - - - - - - - 0 - 0 - 0 - - - - - - - 89 - 89 - 89 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - 89 - 89 - 89 - - - - - - - 89 - 89 - 89 - - - - - - - 192 - 192 - 192 - - - - - - - 0 - 0 - 0 - - - - - - - 72 - 72 - 72 - - - - - - - - - 0 - 0 - 0 - - - - - - - 89 - 89 - 89 - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - 89 - 89 - 89 - - - - - - - 89 - 89 - 89 - - - - - - - 192 - 192 - 192 - - - - - - - 0 - 0 - 0 - - - - - - - 72 - 72 - 72 - - - - - - false @@ -1464,7 +1211,6 @@ background:none; * { - text-color: white; color: white; } @@ -1727,8 +1473,7 @@ color:white; - color: white; -text-color: white; + color: white; QFrame::NoFrame @@ -1750,19 +1495,6 @@ text-color: white; - groupBox - lcdNumZ - lcdNumY - label_8 - label_9 - lcdNumRotY - label_4 - lcdNumRotX - label_7 - lcdNumRotZ - lcdNumX - label_5 - label_6 diff --git a/facetracknoir/shortcuts.cpp b/facetracknoir/shortcuts.cpp index 4256e932..1cd967e0 100644 --- a/facetracknoir/shortcuts.cpp +++ b/facetracknoir/shortcuts.cpp @@ -39,7 +39,7 @@ void KeyboardShortcutDialog::doOK() { mainApp->bindKeyboardShortcuts(); } -void KeyboardShortcutDialog::showEvent ( QShowEvent * event ) { +void KeyboardShortcutDialog::showEvent ( QShowEvent * ) { loadSettings(); } @@ -90,7 +90,7 @@ void KeyboardShortcutDialog::loadSettings() { "Center", "Toggle" }; - QComboBox* checkboxen[] = { + QComboBox* comboboxen[] = { ui.cbxCenterKey, ui.cbxToggleKey }; @@ -121,11 +121,11 @@ void KeyboardShortcutDialog::loadSettings() { for (int i = 0; i < KEY_COUNT; i++) { - for (int m = 0; i < MODIFIERS; i++) + for (int m = 0; m < MODIFIERS; m++) { - boxen[i][m]->setChecked (iniFile.value ( modnames[m] + QString("_") + QString(keynames[i]), 0 ).toBool()); + boxen[i][m]->setChecked (iniFile.value ( QString("%1_%2").arg(modnames[m], keynames[i]), 0).toBool()); } - checkboxen[i]->setCurrentIndex(iniFile.value("Key_index_" + QString(names[i]), 0).toInt()); + comboboxen[i]->setCurrentIndex(iniFile.value(QString("Key_index_%1").arg(names[i]), 0).toInt()); } iniFile.endGroup (); @@ -138,7 +138,7 @@ void KeyboardShortcutDialog::save() { "Center", "Toggle" }; - QComboBox* checkboxen[] = { + QComboBox* comboboxen[] = { ui.cbxCenterKey, ui.cbxToggleKey }; @@ -172,12 +172,11 @@ void KeyboardShortcutDialog::save() { for (int i = 0; i < KEY_COUNT; i++) { - iniFile.setValue ( "Key_index_" + QString(keynames[i]), - checkboxen[i]->currentIndex() ); - for (int m = 0; i < MODIFIERS; i++) + for (int m = 0; m < MODIFIERS; m++) { - iniFile.setValue(modnames[m] + QString("_") + keynames[i], !!boxen[i][m]->isChecked()); + iniFile.setValue(QString("%1_%2").arg(modnames[m], keynames[i]), boxen[i][m]->isChecked()); } + iniFile.setValue(QString("Key_index_%1").arg(keynames[i]), comboboxen[i]->currentIndex()); } iniFile.endGroup(); -- cgit v1.2.3