# HG changeset patch # User Wuzzy # Date 1557247514 -7200 # Node ID 4d5df8d35a95536de159991cdb73310cb6424f76 # Parent 4596357d002d115446c9ac7312d6eef111d79969 Display a warning when the same key is used multiple times diff -r 4596357d002d -r 4d5df8d35a95 ChangeLog.txt --- a/ChangeLog.txt Tue May 07 16:08:27 2019 +0200 +++ b/ChangeLog.txt Tue May 07 18:45:14 2019 +0200 @@ -97,6 +97,7 @@ + Restructure credits page + More intelligent automatic mission selection in campaign screen + New data directory for video thumbnails: Data/VideoThumbnails + + Display a warning when the same key is used multiple times * Fix renaming a video leading to loss of thumbnail after restart * Fix controls list failing to display correct key names with regards to keyboard layout * Fix force-locked schemes getting unlocked when changing map types diff -r 4596357d002d -r 4d5df8d35a95 QTfrontend/ui/page/pageeditteam.cpp --- a/QTfrontend/ui/page/pageeditteam.cpp Tue May 07 16:08:27 2019 +0200 +++ b/QTfrontend/ui/page/pageeditteam.cpp Tue May 07 18:45:14 2019 +0200 @@ -605,6 +605,7 @@ else qDebug() << "Binds: cannot find" << team.keyBind(i); } + binder->checkConflicts(); } HWTeam PageEditTeam::data() @@ -678,4 +679,5 @@ { for (int i = 0; i < BINDS_NUMBER; i++) binder->setBindIndex(i, 0); + binder->checkConflicts(); } diff -r 4596357d002d -r 4d5df8d35a95 QTfrontend/ui/page/pageoptions.cpp --- a/QTfrontend/ui/page/pageoptions.cpp Tue May 07 16:08:27 2019 +0200 +++ b/QTfrontend/ui/page/pageoptions.cpp Tue May 07 18:45:14 2019 +0200 @@ -1218,6 +1218,7 @@ QModelIndexList mdl = binds->match(binds->index(0, 0), Qt::UserRole + 1, value, 1, Qt::MatchExactly); if(mdl.size() == 1) binder->setBindIndex(i, mdl[0].row()); } + binder->checkConflicts(); } currentTab = index; @@ -1258,4 +1259,5 @@ if(ret != -1) bindUpdated(i); } + binder->checkConflicts(); } diff -r 4596357d002d -r 4d5df8d35a95 QTfrontend/ui/widget/keybinder.cpp --- a/QTfrontend/ui/widget/keybinder.cpp Tue May 07 16:08:27 2019 +0200 +++ b/QTfrontend/ui/widget/keybinder.cpp Tue May 07 18:45:14 2019 +0200 @@ -38,6 +38,7 @@ { this->defaultText = defaultText; enableSignal = false; + p_hasConflicts = false; // Two-column tab layout QHBoxLayout * pageKeysLayout = new QHBoxLayout(this); @@ -90,6 +91,12 @@ helpLabel->setStyleSheet("color: #130F2A; background: #F6CB1C; border: solid 4px #F6CB1C; border-radius: 10px; padding: auto 20px;"); helpLabel->setFixedHeight(24); rightLayout->addWidget(helpLabel, 0, Qt::AlignCenter); + conflictLabel = new QLabel(); + conflictLabel->setText(tr("Warning: The same key is assigned multiple times!")); + conflictLabel->setStyleSheet("color: #FFFFFF; background: #E31A1A; border: solid 4px #E31A1A; border-radius: 10px; padding: auto 20px;"); + conflictLabel->setFixedHeight(24); + conflictLabel->setHidden(true); + rightLayout->addWidget(conflictLabel, 0, Qt::AlignCenter); // Category list and bind table row heights const int rowHeight = 20; @@ -265,6 +272,7 @@ if (CBBind[i] == sender()) { emit bindUpdate(i); + checkConflicts(); break; } } @@ -298,6 +306,63 @@ } } +// check if the given key is bound multiple times +bool KeyBinder::checkConflictsWith(int compareTo, bool updateState) +{ + // TODO: Make conflict check more efficient + for(int i=0; icurrentData(Qt::UserRole + 1).toString(); + QString bind2 = CBBind[compareTo]->currentData(Qt::UserRole + 1).toString(); + if(bind1 == "none" || bind2 == "none" || bind1 == "default" || bind2 == "default") + continue; + // TODO: For team key binds, also check collisions with global key binds + if(bind1 == bind2) + { + if(updateState) + { + p_hasConflicts = true; + conflictLabel->setHidden(false); + } + return true; + } + } + if(updateState) + { + p_hasConflicts = false; + conflictLabel->setHidden(true); + } + return false; +} + +// check if any key is bound multiple times and causing a conflict +bool KeyBinder::checkConflicts() +{ + bool conflict = false; + for(int i=0; isetHidden(false); + return true; + } + } + p_hasConflicts = false; + conflictLabel->setHidden(true); + return false; +} + +bool KeyBinder::hasConflicts() +{ + return p_hasConflicts; +} + // Set a combobox's index void KeyBinder::setBindIndex(int keyIndex, int bindIndex) { diff -r 4596357d002d -r 4d5df8d35a95 QTfrontend/ui/widget/keybinder.h --- a/QTfrontend/ui/widget/keybinder.h Tue May 07 16:08:27 2019 +0200 +++ b/QTfrontend/ui/widget/keybinder.h Tue May 07 18:45:14 2019 +0200 @@ -29,6 +29,7 @@ class QTableWidget; class QBoxLayout; class QComboBox; +class QLabel; // USAGE NOTE: Every time the widget comes into view, you must call resetInterface() @@ -43,6 +44,9 @@ void setBindIndex(int keyIndex, int bindIndex); int bindIndex(int keyIndex); void resetInterface(); + bool hasConflicts(); + bool checkConflicts(); + bool checkConflictsWith(int bind, bool updateState); private: QHash * bindComboBoxCellMappings; @@ -51,8 +55,10 @@ QListWidget * catList; QBoxLayout *bindingsPages; QComboBox * CBBind[BINDS_NUMBER]; + QLabel * conflictLabel; QString defaultText; bool enableSignal; + bool p_hasConflicts; signals: void bindUpdate(int bindID);