Hotfix/2950 delete filters with keyboard (#3097)
* Shortcut setting checks for invalid keys * Different message shown for invalid keys and used keys; warning message is displayed on start if conflic is detected * Only shortcuts related to deck-builder are checked
This commit is contained in:
parent
11ad677fe8
commit
f302154df7
3 changed files with 77 additions and 19 deletions
|
@ -139,19 +139,23 @@ int SequenceEdit::translateModifiers(Qt::KeyboardModifiers state, const QString
|
||||||
|
|
||||||
void SequenceEdit::finishShortcut()
|
void SequenceEdit::finishShortcut()
|
||||||
{
|
{
|
||||||
QKeySequence secuence(keys);
|
QKeySequence sequence(keys);
|
||||||
if (!secuence.isEmpty() && valid) {
|
if (!sequence.isEmpty() && valid) {
|
||||||
QString secuenceString = secuence.toString();
|
QString sequenceString = sequence.toString();
|
||||||
if (settingsCache->shortcuts().isValid(shorcutName, secuenceString)) {
|
if (settingsCache->shortcuts().isKeyAllowed(shorcutName, sequenceString)) {
|
||||||
if (!lineEdit->text().isEmpty()) {
|
if (settingsCache->shortcuts().isValid(shorcutName, sequenceString)) {
|
||||||
if (lineEdit->text().contains(secuenceString)) {
|
if (!lineEdit->text().isEmpty()) {
|
||||||
return;
|
if (lineEdit->text().contains(sequenceString)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lineEdit->setText(lineEdit->text() + ";");
|
||||||
}
|
}
|
||||||
lineEdit->setText(lineEdit->text() + ";");
|
lineEdit->setText(lineEdit->text() + sequenceString);
|
||||||
|
} else {
|
||||||
|
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Shortcut already in use"));
|
||||||
}
|
}
|
||||||
lineEdit->setText(lineEdit->text() + secuenceString);
|
|
||||||
} else {
|
} else {
|
||||||
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Shortcut already in use"));
|
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Invalid key"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "shortcutssettings.h"
|
#include "shortcutssettings.h"
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
@ -18,13 +19,39 @@ ShortcutsSettings::ShortcutsSettings(QString settingsPath, QObject *parent) : QO
|
||||||
shortCutsFile.beginGroup("Custom");
|
shortCutsFile.beginGroup("Custom");
|
||||||
const QStringList customKeys = shortCutsFile.allKeys();
|
const QStringList customKeys = shortCutsFile.allKeys();
|
||||||
|
|
||||||
|
QMap<QString, QString> invalidItems;
|
||||||
for (QStringList::const_iterator it = customKeys.constBegin(); it != customKeys.constEnd(); ++it) {
|
for (QStringList::const_iterator it = customKeys.constBegin(); it != customKeys.constEnd(); ++it) {
|
||||||
QString stringSequence = shortCutsFile.value(*it).toString();
|
QString stringSequence = shortCutsFile.value(*it).toString();
|
||||||
QList<QKeySequence> SequenceList = parseSequenceString(stringSequence);
|
// check whether shortcut is forbidden
|
||||||
shortCuts.insert(*it, SequenceList);
|
if (isKeyAllowed(*it, stringSequence)) {
|
||||||
|
QList<QKeySequence> SequenceList = parseSequenceString(stringSequence);
|
||||||
|
shortCuts.insert(*it, SequenceList);
|
||||||
|
} else {
|
||||||
|
invalidItems.insert(*it, stringSequence);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
shortCutsFile.endGroup();
|
shortCutsFile.endGroup();
|
||||||
|
|
||||||
|
if (!invalidItems.isEmpty()) {
|
||||||
|
// warning message in case of invalid items
|
||||||
|
QMessageBox msgBox;
|
||||||
|
msgBox.setIcon(QMessageBox::Warning);
|
||||||
|
msgBox.setText(tr("Your configuration file contained invalid shortcuts.\n"
|
||||||
|
"Please check your shortcut settings!"));
|
||||||
|
QString detailedMessage = tr("The following shortcuts have been set to default:\n");
|
||||||
|
for (QMap<QString, QString>::const_iterator item = invalidItems.constBegin();
|
||||||
|
item != invalidItems.constEnd(); ++item) {
|
||||||
|
detailedMessage += item.key() + " - \"" + item.value() + "\"\n";
|
||||||
|
}
|
||||||
|
msgBox.setDetailedText(detailedMessage);
|
||||||
|
msgBox.exec();
|
||||||
|
|
||||||
|
// set default shortcut where stored value was invalid
|
||||||
|
for (const QString &key : invalidItems.keys()) {
|
||||||
|
setShortcuts(key, getDefaultShortcutString(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,21 +125,47 @@ void ShortcutsSettings::setShortcuts(QString name, QString Sequences)
|
||||||
setShortcuts(std::move(name), parseSequenceString(std::move(Sequences)));
|
setShortcuts(std::move(name), parseSequenceString(std::move(Sequences)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ShortcutsSettings::isKeyAllowed(QString name, QString Sequences)
|
||||||
|
{
|
||||||
|
// if the shortcut is not to be used in deck-editor then it doesn't matter
|
||||||
|
if (name.startsWith("Player")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
QString checkSequence = Sequences.split(";").last();
|
||||||
|
QStringList forbiddenKeys = (QStringList() << "Del"
|
||||||
|
<< "Backspace"
|
||||||
|
<< "Down"
|
||||||
|
<< "Up"
|
||||||
|
<< "Left"
|
||||||
|
<< "Right"
|
||||||
|
<< "Return"
|
||||||
|
<< "Enter"
|
||||||
|
<< "Menu"
|
||||||
|
<< "Ctrl+Alt+-"
|
||||||
|
<< "Ctrl+Alt+="
|
||||||
|
<< "Ctrl+Alt+["
|
||||||
|
<< "Ctrl+Alt+]"
|
||||||
|
<< "Tab"
|
||||||
|
<< "Space"
|
||||||
|
<< "S");
|
||||||
|
if (forbiddenKeys.contains(checkSequence)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ShortcutsSettings::isValid(QString name, QString Sequences)
|
bool ShortcutsSettings::isValid(QString name, QString Sequences)
|
||||||
{
|
{
|
||||||
QString checkKey = name.left(name.indexOf("/"));
|
|
||||||
|
|
||||||
QString checkSequence = Sequences.split(";").last();
|
QString checkSequence = Sequences.split(";").last();
|
||||||
|
QString checkKey = name.left(name.indexOf("/"));
|
||||||
|
|
||||||
QList<QString> allKeys = shortCuts.keys();
|
QList<QString> allKeys = shortCuts.keys();
|
||||||
for (const auto &key : allKeys) {
|
for (const auto &key : allKeys) {
|
||||||
if (key.startsWith(checkKey) || key.startsWith("MainWindow") || checkKey.startsWith("MainWindow")) {
|
if (key.startsWith(checkKey) || key.startsWith("MainWindow") || checkKey.startsWith("MainWindow")) {
|
||||||
QString storedSequence = stringifySequence(shortCuts.value(key));
|
QString storedSequence = stringifySequence(shortCuts.value(key));
|
||||||
QStringList stringSequences = storedSequence.split(";");
|
QStringList stringSequences = storedSequence.split(";");
|
||||||
for (int j = 0; j < stringSequences.size(); j++) {
|
if (stringSequences.contains(checkSequence)) {
|
||||||
if (checkSequence == stringSequences.at(j)) {
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,7 +215,7 @@ void ShortcutsSettings::fillDefaultShorcuts()
|
||||||
defaultShortCuts["TabDeckEditor/aNewDeck"] = parseSequenceString("Ctrl+N");
|
defaultShortCuts["TabDeckEditor/aNewDeck"] = parseSequenceString("Ctrl+N");
|
||||||
defaultShortCuts["TabDeckEditor/aOpenCustomFolder"] = parseSequenceString("");
|
defaultShortCuts["TabDeckEditor/aOpenCustomFolder"] = parseSequenceString("");
|
||||||
defaultShortCuts["TabDeckEditor/aPrintDeck"] = parseSequenceString("Ctrl+P");
|
defaultShortCuts["TabDeckEditor/aPrintDeck"] = parseSequenceString("Ctrl+P");
|
||||||
defaultShortCuts["TabDeckEditor/aRemoveCard"] = parseSequenceString("Del");
|
defaultShortCuts["TabDeckEditor/aRemoveCard"] = parseSequenceString("");
|
||||||
defaultShortCuts["TabDeckEditor/aResetLayout"] = parseSequenceString("");
|
defaultShortCuts["TabDeckEditor/aResetLayout"] = parseSequenceString("");
|
||||||
defaultShortCuts["TabDeckEditor/aSaveDeck"] = parseSequenceString("Ctrl+S");
|
defaultShortCuts["TabDeckEditor/aSaveDeck"] = parseSequenceString("Ctrl+S");
|
||||||
defaultShortCuts["TabDeckEditor/aSaveDeckAs"] = parseSequenceString("");
|
defaultShortCuts["TabDeckEditor/aSaveDeckAs"] = parseSequenceString("");
|
||||||
|
|
|
@ -22,6 +22,7 @@ public:
|
||||||
void setShortcuts(QString name, QKeySequence Sequence);
|
void setShortcuts(QString name, QKeySequence Sequence);
|
||||||
void setShortcuts(QString name, QString Sequences);
|
void setShortcuts(QString name, QString Sequences);
|
||||||
|
|
||||||
|
bool isKeyAllowed(QString name, QString Sequences);
|
||||||
bool isValid(QString name, QString Sequences);
|
bool isValid(QString name, QString Sequences);
|
||||||
|
|
||||||
void resetAllShortcuts();
|
void resetAllShortcuts();
|
||||||
|
|
Loading…
Reference in a new issue