From f243acc43adf023c86348b28328b39769486aac7 Mon Sep 17 00:00:00 2001 From: Ladislav Foldyna Date: Thu, 20 Jun 2024 15:27:39 +0200 Subject: [PATCH 1/2] Settings: Added Clear button to the Shortcuts editor --- ui/StyleItemDelegate.h | 61 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/ui/StyleItemDelegate.h b/ui/StyleItemDelegate.h index ce567f20..eac51c02 100644 --- a/ui/StyleItemDelegate.h +++ b/ui/StyleItemDelegate.h @@ -14,6 +14,9 @@ #include #include #include +#include +#include +#include #include "core/LogLocale.h" #include "core/Gridsquare.h" @@ -491,6 +494,54 @@ private slots: } }; +class KeySequenceEdit : public QWidget +{ + Q_OBJECT + +public: + KeySequenceEdit(QWidget* parent = nullptr) : QWidget(parent) + { + + QHBoxLayout* layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + QPushButton* clearButton = new QPushButton(QLatin1String(), this); + QIcon clearIcon = QApplication::style()->standardIcon(QStyle::SP_LineEditClearButton); + clearButton->setIcon(clearIcon); + clearButton->setToolTip(tr("Clear")); + + keySequenceEdit = new QKeySequenceEdit(this); + layout->addWidget(keySequenceEdit); + layout->addWidget(clearButton); + connect(clearButton, &QPushButton::clicked, this, [=]() + { + keySequenceEdit->clear(); + emit editingFinished(); + }); + connect(keySequenceEdit, &QKeySequenceEdit::editingFinished, this, [=]() + { + emit editingFinished(); + }); + + setFocusProxy(keySequenceEdit); + } + + void setKeySequence(const QKeySequence &keySequence) + { + keySequenceEdit->setKeySequence(keySequence); + } + + QKeySequence keySequence() const + { + return keySequenceEdit->keySequence(); + } + +signals: + void editingFinished(); + +private: + QKeySequenceEdit* keySequenceEdit; +}; + class ShortcutDelegate : public QStyledItemDelegate { Q_OBJECT @@ -503,8 +554,8 @@ class ShortcutDelegate : public QStyledItemDelegate const QStyleOptionViewItem&, const QModelIndex&) const { - QKeySequenceEdit *editor = new QKeySequenceEdit(parent); - connect(editor, &QKeySequenceEdit::editingFinished, this, + KeySequenceEdit *editor = new KeySequenceEdit(parent); + connect(editor, &KeySequenceEdit::editingFinished, this, &ShortcutDelegate::commitAndCloseEditor); return editor; } @@ -518,7 +569,7 @@ class ShortcutDelegate : public QStyledItemDelegate void setEditorData(QWidget* editor, const QModelIndex& index) const { - QKeySequenceEdit *keySequenceEdit = static_cast(editor); + KeySequenceEdit *keySequenceEdit = static_cast(editor); if ( keySequenceEdit ) keySequenceEdit->setKeySequence(index.model()->data(index, Qt::EditRole).toString()); } @@ -526,7 +577,7 @@ class ShortcutDelegate : public QStyledItemDelegate void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const { - const QKeySequenceEdit *keySequenceEdit = static_cast(editor); + const KeySequenceEdit *keySequenceEdit = static_cast(editor); if ( ! keySequenceEdit ) return; @@ -536,7 +587,7 @@ class ShortcutDelegate : public QStyledItemDelegate private slots: void commitAndCloseEditor() { - QKeySequenceEdit *editor = static_cast(sender()); + KeySequenceEdit *editor = static_cast(sender()); emit commitData(editor); emit closeEditor(editor); } From f20ecaf34bb61452bcb2c3fea532933b75794f8f Mon Sep 17 00:00:00 2001 From: Ladislav Foldyna Date: Thu, 20 Jun 2024 15:41:43 +0200 Subject: [PATCH 2/2] Settings: Suppressed warning with the same shortcut for the same action --- models/ShortcutEditorModel.cpp | 8 +++++--- models/ShortcutEditorModel.h | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/models/ShortcutEditorModel.cpp b/models/ShortcutEditorModel.cpp index f28548b6..69c66a58 100644 --- a/models/ShortcutEditorModel.cpp +++ b/models/ShortcutEditorModel.cpp @@ -82,7 +82,7 @@ bool ShortcutEditorModel::setData(const QModelIndex &index, const QVariant &valu return false; } - if ( findShortcut(actionList, newShortcutString) ) + if ( findShortcut(actionList, action, newShortcutString) ) { emit conflictDetected(tr("Conflict with a user-defined shortcut")); return false; @@ -109,11 +109,13 @@ Qt::ItemFlags ShortcutEditorModel::flags(const QModelIndex &index) const } const QAction *ShortcutEditorModel::findShortcut(const QList &list, - const QString &shortcut) + const QAction *currAction, + const QString &shortcut) const { for ( const QAction* action : list ) { - if ( action->shortcut().toString(QKeySequence::NativeText) == shortcut ) + if ( action->shortcut().toString(QKeySequence::NativeText) == shortcut + && action != currAction ) return action; } diff --git a/models/ShortcutEditorModel.h b/models/ShortcutEditorModel.h index b5208762..ed1d67c5 100644 --- a/models/ShortcutEditorModel.h +++ b/models/ShortcutEditorModel.h @@ -32,7 +32,8 @@ class ShortcutEditorModel : public QAbstractTableModel QStringList builtInStaticActionList; const QAction *findShortcut(const QList &list, - const QString&); + const QAction *currAction, + const QString&) const; }; #endif // SHORTCUTEDITORMODEL_H