From fc269c6273922308f318e80f06be42fa03674abb Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Thu, 20 Jan 2022 18:49:25 +0100 Subject: [PATCH] [Macro] Use a key catcher line edit to get modifier(s) for recent macros --- src/Gui/DlgSettingsMacro.ui | 12 ++----- src/Gui/DlgSettingsMacroImp.cpp | 6 ++-- src/Gui/Widgets.cpp | 60 +++++++++++++++++++++++++++++++++ src/Gui/Widgets.h | 16 +++++++++ 4 files changed, 83 insertions(+), 11 deletions(-) diff --git a/src/Gui/DlgSettingsMacro.ui b/src/Gui/DlgSettingsMacro.ui index 7ec3cebad1..d89bf02073 100644 --- a/src/Gui/DlgSettingsMacro.ui +++ b/src/Gui/DlgSettingsMacro.ui @@ -336,16 +336,10 @@ - + Keyboard modifiers, default = Ctrl+Shift+ - - ShortcutModifiers - - - RecentMacros - @@ -369,9 +363,9 @@ - Gui::PrefLineEdit + Gui::ModifierLineEdit QLineEdit -
Gui/PrefWidgets.h
+
Gui/Widgets.h
Gui::PrefSpinBox diff --git a/src/Gui/DlgSettingsMacroImp.cpp b/src/Gui/DlgSettingsMacroImp.cpp index cfd8534aa1..f8f2b7c16c 100644 --- a/src/Gui/DlgSettingsMacroImp.cpp +++ b/src/Gui/DlgSettingsMacroImp.cpp @@ -82,7 +82,8 @@ void DlgSettingsMacroImp::saveSettings() ui->FileLogCheckBox->onSave(); ui->MacroPath_2->onSave(); ui->RecentMacros->onSave(); - ui->ShortcutModifiers->onSave(); + ParameterGrp::handle hGrp = WindowParameter::getDefaultParameter()->GetGroup("RecentMacros"); + hGrp->SetASCII("ShortcutModifiers", qPrintable(ui->ShortcutModifiers->text())); ui->ShortcutCount->onSave(); setRecentMacroSize(); } @@ -97,7 +98,8 @@ void DlgSettingsMacroImp::loadSettings() ui->FileLogCheckBox->onRestore(); ui->MacroPath_2->onRestore(); ui->RecentMacros->onRestore(); - ui->ShortcutModifiers->onRestore(); + ParameterGrp::handle hGrp = WindowParameter::getDefaultParameter()->GetGroup("RecentMacros"); + ui->ShortcutModifiers->setText(QString::fromStdString(hGrp->GetASCII("ShortcutModifiers", "Ctrl+Shift+"))); ui->ShortcutCount->onRestore(); } diff --git a/src/Gui/Widgets.cpp b/src/Gui/Widgets.cpp index 1d59ed587f..d82932572b 100644 --- a/src/Gui/Widgets.cpp +++ b/src/Gui/Widgets.cpp @@ -463,6 +463,66 @@ void AccelLineEdit::keyPressEvent ( QKeyEvent * e) // ------------------------------------------------------------------------------ +/* TRANSLATOR Gui::ModifierLineEdit */ + +/** + * Constructs a line edit with no text. + * The \a parent argument is sent to the QLineEdit constructor. + */ +ModifierLineEdit::ModifierLineEdit ( QWidget * parent ) + : QLineEdit(parent) +{ + setPlaceholderText(tr("none")); +} + +/** + * Checks which modifiers are pressed and show it as text. + */ +void ModifierLineEdit::keyPressEvent ( QKeyEvent * e) +{ + int key = e->key(); + Qt::KeyboardModifiers state = e->modifiers(); + + switch(key) { + case Qt::Key_Backspace: + case Qt::Key_Delete: + clear(); + return; + case Qt::Key_Control: + case Qt::Key_Shift: + case Qt::Key_Alt: + case Qt::Key_Meta: + break;; + default: + return; + } + + clear(); + QString txtLine; + + // 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); + } + + setText(txtLine); +} + +// ------------------------------------------------------------------------------ + #if QT_VERSION >= 0x050200 ClearLineEdit::ClearLineEdit (QWidget * parent) : QLineEdit(parent) diff --git a/src/Gui/Widgets.h b/src/Gui/Widgets.h index 06790174df..11113744db 100644 --- a/src/Gui/Widgets.h +++ b/src/Gui/Widgets.h @@ -149,6 +149,22 @@ private: // ------------------------------------------------------------------------------ +/** + * The ModifierLineEdit class provides a lineedit to specify modifiers. + */ +class GuiExport ModifierLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + ModifierLineEdit(QWidget * parent=0); + +protected: + void keyPressEvent(QKeyEvent * e); +}; + +// ------------------------------------------------------------------------------ + /** * The ClearLineEdit class adds a clear button at the right side. * http://stackoverflow.com/questions/21232224/qlineedit-with-custom-button