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::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