Skip to content

Commit

Permalink
Merge branch 'ShortcutsEditor' into testing_0.37
Browse files Browse the repository at this point in the history
  • Loading branch information
foldynl committed Jun 20, 2024
2 parents 7a82332 + f20ecaf commit 8aa2d13
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 9 deletions.
8 changes: 5 additions & 3 deletions models/ShortcutEditorModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -109,11 +109,13 @@ Qt::ItemFlags ShortcutEditorModel::flags(const QModelIndex &index) const
}

const QAction *ShortcutEditorModel::findShortcut(const QList<QAction *> &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;
}

Expand Down
3 changes: 2 additions & 1 deletion models/ShortcutEditorModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ class ShortcutEditorModel : public QAbstractTableModel
QStringList builtInStaticActionList;

const QAction *findShortcut(const QList<QAction *> &list,
const QString&);
const QAction *currAction,
const QString&) const;
};

#endif // SHORTCUTEDITORMODEL_H
61 changes: 56 additions & 5 deletions ui/StyleItemDelegate.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
#include <QDebug>
#include <QTextEdit>
#include <QKeySequenceEdit>
#include <QHBoxLayout>
#include <QPushButton>
#include <QApplication>

#include "core/LogLocale.h"
#include "core/Gridsquare.h"
Expand Down Expand Up @@ -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
Expand All @@ -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;
}
Expand All @@ -518,15 +569,15 @@ class ShortcutDelegate : public QStyledItemDelegate

void setEditorData(QWidget* editor, const QModelIndex& index) const
{
QKeySequenceEdit *keySequenceEdit = static_cast<QKeySequenceEdit *>(editor);
KeySequenceEdit *keySequenceEdit = static_cast<KeySequenceEdit *>(editor);
if ( keySequenceEdit )
keySequenceEdit->setKeySequence(index.model()->data(index, Qt::EditRole).toString());
}

void setModelData(QWidget* editor, QAbstractItemModel* model,
const QModelIndex& index) const
{
const QKeySequenceEdit *keySequenceEdit = static_cast<QKeySequenceEdit *>(editor);
const KeySequenceEdit *keySequenceEdit = static_cast<KeySequenceEdit *>(editor);
if ( ! keySequenceEdit )
return;

Expand All @@ -536,7 +587,7 @@ class ShortcutDelegate : public QStyledItemDelegate
private slots:
void commitAndCloseEditor()
{
QKeySequenceEdit *editor = static_cast<QKeySequenceEdit *>(sender());
KeySequenceEdit *editor = static_cast<KeySequenceEdit *>(sender());
emit commitData(editor);
emit closeEditor(editor);
}
Expand Down

0 comments on commit 8aa2d13

Please sign in to comment.