From 21b823792d03e6a68131761ad3df17dfee232dae Mon Sep 17 00:00:00 2001 From: GriffinR Date: Thu, 6 Mar 2025 16:56:37 -0500 Subject: [PATCH] Remove redundant key sequence list --- include/ui/multikeyedit.h | 5 ++-- src/ui/multikeyedit.cpp | 54 +++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/include/ui/multikeyedit.h b/include/ui/multikeyedit.h index 27231330..9a8faa10 100644 --- a/include/ui/multikeyedit.h +++ b/include/ui/multikeyedit.h @@ -37,15 +37,14 @@ signals: void customContextMenuRequested(const QPoint &pos); private: - QVector keySequenceEdit_vec; - QList keySequence_list; // Used to track changes + QVector keySequenceEdits; void addNewKeySequenceEdit(); void alignKeySequencesLeft(); void setFocusToLastNonEmptyKeySequenceEdit(); private slots: - void onEditingFinished(); + void onEditingFinished(QKeySequenceEdit *sender); void showDefaultContextMenu(QLineEdit *lineEdit, const QPoint &pos); }; diff --git a/src/ui/multikeyedit.cpp b/src/ui/multikeyedit.cpp index fcf38480..cf11210f 100644 --- a/src/ui/multikeyedit.cpp +++ b/src/ui/multikeyedit.cpp @@ -8,9 +8,7 @@ MultiKeyEdit::MultiKeyEdit(QWidget *parent, int fieldCount) : - QWidget(parent), - keySequenceEdit_vec(QVector()), - keySequence_list(QList()) + QWidget(parent) { setLayout(new QHBoxLayout(this)); layout()->setContentsMargins(0, 0, 0, 0); @@ -48,36 +46,36 @@ bool MultiKeyEdit::eventFilter(QObject *watched, QEvent *event) { } int MultiKeyEdit::fieldCount() const { - return keySequenceEdit_vec.count(); + return this->keySequenceEdits.count(); } void MultiKeyEdit::setFieldCount(int count) { if (count < 1) count = 1; - while (keySequenceEdit_vec.count() < count) + while (this->keySequenceEdits.count() < count) addNewKeySequenceEdit(); - while (keySequenceEdit_vec.count() > count) - delete keySequenceEdit_vec.takeLast(); + while (this->keySequenceEdits.count() > count) + delete this->keySequenceEdits.takeLast(); alignKeySequencesLeft(); } QList MultiKeyEdit::keySequences() const { QList current_keySequences; - for (auto *kse : keySequenceEdit_vec) + for (auto *kse : this->keySequenceEdits) if (!kse->keySequence().isEmpty()) current_keySequences.append(kse->keySequence()); return current_keySequences; } bool MultiKeyEdit::removeOne(const QKeySequence &keySequence) { - for (auto *keySequenceEdit : keySequenceEdit_vec) { + for (auto *keySequenceEdit : this->keySequenceEdits) { if (keySequenceEdit->keySequence() == keySequence) { - keySequence_list.removeOne(keySequence); keySequenceEdit->clear(); alignKeySequencesLeft(); + setFocusToLastNonEmptyKeySequenceEdit(); return true; } } @@ -108,29 +106,28 @@ void MultiKeyEdit::setClearButtonEnabled(bool enable) { } void MultiKeyEdit::clear() { - for (auto *keySequenceEdit : keySequenceEdit_vec) + for (auto *keySequenceEdit : this->keySequenceEdits) keySequenceEdit->clear(); - keySequence_list.clear(); } void MultiKeyEdit::setKeySequences(const QList &keySequences) { clear(); - keySequence_list = keySequences; - int minCount = qMin(keySequenceEdit_vec.count(), keySequence_list.count()); + int minCount = qMin(this->keySequenceEdits.count(), keySequences.count()); for (int i = 0; i < minCount; ++i) - keySequenceEdit_vec[i]->setKeySequence(keySequence_list[i]); + this->keySequenceEdits[i]->setKeySequence(keySequences.at(i)); } void MultiKeyEdit::addKeySequence(const QKeySequence &keySequence) { - keySequenceEdit_vec.last()->setKeySequence(keySequence); + this->keySequenceEdits.last()->setKeySequence(keySequence); alignKeySequencesLeft(); } void MultiKeyEdit::addNewKeySequenceEdit() { auto *keySequenceEdit = new QKeySequenceEdit(this); keySequenceEdit->installEventFilter(this); - connect(keySequenceEdit, &QKeySequenceEdit::editingFinished, - this, &MultiKeyEdit::onEditingFinished); + connect(keySequenceEdit, &QKeySequenceEdit::editingFinished, [this, keySequenceEdit] { + onEditingFinished(keySequenceEdit); + }); connect(keySequenceEdit, &QKeySequenceEdit::keySequenceChanged, this, &MultiKeyEdit::keySequenceChanged); @@ -149,7 +146,7 @@ void MultiKeyEdit::addNewKeySequenceEdit() { } layout()->addWidget(keySequenceEdit); - keySequenceEdit_vec.append(keySequenceEdit); + this->keySequenceEdits.append(keySequenceEdit); } // Shift all key sequences left if there are any empty QKeySequenceEdit's. @@ -160,7 +157,7 @@ void MultiKeyEdit::alignKeySequencesLeft() { } void MultiKeyEdit::setFocusToLastNonEmptyKeySequenceEdit() { - for (auto it = keySequenceEdit_vec.rbegin(); it != keySequenceEdit_vec.rend(); ++it) { + for (auto it = this->keySequenceEdits.rbegin(); it != this->keySequenceEdits.rend(); ++it) { if (!(*it)->keySequence().isEmpty()) { (*it)->setFocus(); return; @@ -168,12 +165,19 @@ void MultiKeyEdit::setFocusToLastNonEmptyKeySequenceEdit() { } } -void MultiKeyEdit::onEditingFinished() { - auto *keySequenceEdit = qobject_cast(sender()); - if (keySequenceEdit && keySequence_list.contains(keySequenceEdit->keySequence())) - removeOne(keySequenceEdit->keySequence()); +void MultiKeyEdit::onEditingFinished(QKeySequenceEdit *sender) { + if (!sender) return; + alignKeySequencesLeft(); - setFocusToLastNonEmptyKeySequenceEdit(); + + // Remove duplicate key sequences, if any + if (!sender->keySequence().isEmpty()) { + for (const auto &edit : this->keySequenceEdits) { + if (edit != sender && edit->keySequence() == sender->keySequence()) { + removeOne(edit->keySequence()); + } + } + } emit editingFinished(); }