From 55cf9ddeaa6724bf8cba7f4c907058e78d2af3be Mon Sep 17 00:00:00 2001 From: Simon Pasquet Date: Tue, 26 Aug 2014 10:31:54 -0300 Subject: [PATCH] Customized keyboard shortcuts now accept up to 4 keys --- src/Gui/Widgets.cpp | 117 +++++++++++++++++++++----------------------- src/Gui/Widgets.h | 3 ++ 2 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp index 16b36508c..9d63c5b93 100644 --- a/src/Gui/Widgets.cpp +++ b/src/Gui/Widgets.cpp @@ -361,6 +361,7 @@ AccelLineEdit::AccelLineEdit ( QWidget * parent ) : QLineEdit(parent) { setText(tr("none")); + keyPressedCount = 0; } /** @@ -368,72 +369,68 @@ AccelLineEdit::AccelLineEdit ( QWidget * parent ) */ void AccelLineEdit::keyPressEvent ( QKeyEvent * e) { - QString txt; - setText(tr("none")); + QString txtLine = text(); int key = e->key(); Qt::KeyboardModifiers state = e->modifiers(); - if (key == Qt::Key_Control) - return; - else if (key == Qt::Key_Shift) - return; - else if (key == Qt::Key_Alt) - return; - else if (state == Qt::NoModifier && key == Qt::Key_Backspace) - return; // clears the edit field + // Backspace clears the shortcut + // If a modifier is pressed without any other key, return. + // AltGr is not a modifier but doesn't have a QtSring representation. + switch(key) { + case Qt::Key_Backspace: + if (state == Qt::NoModifier){ + keyPressedCount = 0; + setText(tr("none")); + } + case Qt::Key_Control: + case Qt::Key_Shift: + case Qt::Key_Alt: + case Qt::Key_Meta: + case Qt::Key_AltGr: + return; + - switch(state) - { - case Qt::ControlModifier: - { - QKeySequence ks(Qt::CTRL+key); - txt += (QString)(ks); - setText(txt); - } break; - case Qt::AltModifier: - { - QKeySequence ks(Qt::ALT+key); - txt += (QString)(ks); - setText(txt); - } break; - case Qt::ShiftModifier: - { - QKeySequence ks(Qt::SHIFT+key); - txt += (QString)(ks); - setText(txt); - } break; - case Qt::ControlModifier+Qt::AltModifier: - { - QKeySequence ks(Qt::CTRL+Qt::ALT+key); - txt += (QString)(ks); - setText(txt); - } break; - case Qt::ControlModifier+Qt::ShiftModifier: - { - QKeySequence ks(Qt::CTRL+Qt::SHIFT+key); - txt += (QString)(ks); - setText(txt); - } break; - case Qt::ShiftModifier+Qt::AltModifier: - { - QKeySequence ks(Qt::SHIFT+Qt::ALT+key); - txt += (QString)(ks); - setText(txt); - } break; - case Qt::ControlModifier+Qt::AltModifier+Qt::ShiftModifier: - { - QKeySequence ks(Qt::CTRL+Qt::ALT+Qt::SHIFT+key); - txt += (QString)(ks); - setText(txt); - } break; - default: - { - QKeySequence ks(key); - txt += (QString)(ks); - setText(txt); - } break; + default: + break; } + + // 4 keys are allowed for QShortcut + switch(keyPressedCount) { + case 4: + keyPressedCount = 0; + case 0: + txtLine.clear(); + break; + default: + txtLine += QString::fromAscii(","); + break; + } + + // Handles modifiers applying a mask. + if ((state & Qt::ControlModifier) == Qt::ControlModifier) { + QKeySequence ks(Qt::CTRL); + txtLine += ks.toString(QKeySequence::NativeText); + } + if (( state & Qt::AltModifier) == Qt::AltModifier) { + QKeySequence ks(Qt::ALT); + txtLine += ks.toString(QKeySequence::NativeText); + } + if (( state & Qt::ShiftModifier) == Qt::ShiftModifier) { + QKeySequence ks(Qt::SHIFT); + txtLine += ks.toString(QKeySequence::NativeText); + } + if (( state & Qt::MetaModifier) == Qt::MetaModifier) { + QKeySequence ks(Qt::META); + txtLine += ks.toString(QKeySequence::NativeText); + } + + // Handles normal keys + QKeySequence ks(key); + txtLine += ks.toString(QKeySequence::NativeText); + + setText(txtLine); + keyPressedCount ++ ; } // ------------------------------------------------------------------------------ diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index 622422865..8302f89f5 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -126,6 +126,9 @@ public: protected: void keyPressEvent ( QKeyEvent * e); + +private: + int keyPressedCount; }; // ------------------------------------------------------------------------------