Configurable shortcuts

This commit is contained in:
marco 2015-08-09 20:48:21 +02:00
parent b0bf94e378
commit beaa4e9383
17 changed files with 1075 additions and 409 deletions

View file

@ -67,15 +67,15 @@ void AbstractCounter::setShortcutsActive()
{
if (name == "life") {
aSet->setShortcuts(settingsCache->shortcuts().getShortcut(
"AbstractCounter/aSet",
"Player/aSet",
QKeySequence("Ctrl+L")));
aDec->setShortcuts(settingsCache->shortcuts().getShortcut(
"AbstractCounter/aDec",
"Player/aDec",
QKeySequence("F11")));
aInc->setShortcuts(settingsCache->shortcuts().getShortcut(
"AbstractCounter/aInc",
"Player/aInc",
QKeySequence("F12")));
}
}

View file

@ -28,6 +28,7 @@
#include "settingscache.h"
#include "priceupdater.h"
#include "soundengine.h"
#include "sequenceEdit/shortcutstab.h"
#define LINKING_FAQ_URL "https://github.com/Cockatrice/Cockatrice/wiki/Custom-Download-URLs"
@ -858,6 +859,7 @@ DlgSettings::DlgSettings(QWidget *parent)
pagesWidget->addWidget(new DeckEditorSettingsPage);
pagesWidget->addWidget(new MessagesSettingsPage);
pagesWidget->addWidget(new SoundSettingsPage);
pagesWidget->addWidget(new ShortcutsTab);
createIcons();
contentsWidget->setCurrentRow(0);
@ -912,6 +914,11 @@ void DlgSettings::createIcons()
soundButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
soundButton->setIcon(QIcon(":/resources/icon_config_sound.svg"));
shortcutsButton = new QListWidgetItem(contentsWidget);
shortcutsButton->setTextAlignment(Qt::AlignHCenter);
shortcutsButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
shortcutsButton->setIcon(QIcon(":/resources/icon_config_shorcuts.svg"));
connect(contentsWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(changePage(QListWidgetItem *, QListWidgetItem *)));
}
@ -1021,6 +1028,7 @@ void DlgSettings::retranslateUi()
deckEditorButton->setText(tr("Deck Editor"));
messagesButton->setText(tr("Chat"));
soundButton->setText(tr("Sound"));
shortcutsButton->setText(tr("Shortcuts"));
for (int i = 0; i < pagesWidget->count(); i++)
dynamic_cast<AbstractSettingsPage *>(pagesWidget->widget(i))->retranslateUi();

View file

@ -223,6 +223,7 @@ private:
QListWidget *contentsWidget;
QStackedWidget *pagesWidget;
QListWidgetItem *generalButton, *appearanceButton, *userInterfaceButton, *deckEditorButton, *messagesButton, *soundButton;
QListWidgetItem *shortcutsButton;
void createIcons();
void retranslateUi();
protected:

View file

@ -21,7 +21,7 @@ GameView::GameView(QGraphicsScene *scene, QWidget *parent)
aCloseMostRecentZoneView = new QAction(this);
aCloseMostRecentZoneView->setShortcuts(settingsCache->shortcuts().getShortcut(
"GameView/aCloseMostRecentZoneView",
"Player/aCloseMostRecentZoneView",
QKeySequence("Esc")));
connect(aCloseMostRecentZoneView, SIGNAL(triggered()), scene, SLOT(closeMostRecentZoneView()));
addAction(aCloseMostRecentZoneView);

View file

@ -616,6 +616,7 @@ void Player::retranslateUi()
{
aViewGraveyard->setText(tr("&View graveyard"));
aViewRfg->setText(tr("&View exile"));
playerMenu->setTitle(tr("Player \"%1\"").arg(QString::fromStdString(userInfo->name())));
graveMenu->setTitle(tr("&Graveyard"));
rfgMenu->setTitle(tr("&Exile"));
@ -682,14 +683,32 @@ void Player::retranslateUi()
}
aPlay->setText(tr("&Play"));
aPlay->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aPlay", QKeySequence()));
aHide->setText(tr("&Hide"));
aPlayFacedown->setText(tr("Play &Face Down"));
aTap->setText(tr("&Tap"));
aTap->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aTap", QKeySequence()));
aUntap->setText(tr("&Untap"));
aUntap->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aUntap", QKeySequence()));
aDoesntUntap->setText(tr("Toggle &normal untapping"));
aDoesntUntap->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aDoesntUntap", QKeySequence()));
aFlip->setText(tr("&Flip"));
aFlip->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aFlip", QKeySequence()));
aPeek->setText(tr("&Peek at card face"));
aPeek->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aPeek", QKeySequence()));
aClone->setText(tr("&Clone"));
aClone->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aClone", QKeySequence("Ctrl+J")));
@ -699,7 +718,12 @@ void Player::retranslateUi()
"Player/aAttach", QKeySequence("Ctrl+A")));
aUnattach->setText(tr("Unattac&h"));
aUnattach->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aUnattach", QKeySequence()));
aDrawArrow->setText(tr("&Draw arrow..."));
aDrawArrow->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aDrawArrow", QKeySequence()));
aIncP->setText(tr("&Increase power"));
aIncP->setShortcuts(settingsCache->shortcuts().getShortcut(
@ -730,24 +754,71 @@ void Player::retranslateUi()
"Player/aSetPT", QKeySequence("Ctrl+P")));
aSetAnnotation->setText(tr("&Set annotation..."));
aSetAnnotation->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aSetAnnotation", QKeySequence()));
QStringList counterColors;
counterColors.append(tr("Red"));
counterColors.append(tr("Yellow"));
counterColors.append(tr("Green"));
for (int i = 0; i < aAddCounter.size(); ++i)
QList<QKeySequence> addCCShortCuts;
addCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aCCRed", QKeySequence()));
addCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aCCYellow", QKeySequence()));
addCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aCCGreen", QKeySequence()));
QList<QKeySequence> removeCCShortCuts;
removeCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aRCRed", QKeySequence()));
removeCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aRCYellow", QKeySequence()));
removeCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aRCGreen", QKeySequence()));
QList<QKeySequence> setCCShortCuts;
setCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aSCRed", QKeySequence()));
setCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aSCYellow", QKeySequence()));
setCCShortCuts.append(settingsCache->shortcuts().getSingleShortcut(
"Player/aSCGreen", QKeySequence()));
for (int i = 0; i < aAddCounter.size(); ++i){
aAddCounter[i]->setText(tr("&Add counter (%1)").arg(counterColors[i]));
for (int i = 0; i < aRemoveCounter.size(); ++i)
aAddCounter[i]->setShortcut(addCCShortCuts[i]);
}
for (int i = 0; i < aRemoveCounter.size(); ++i){
aRemoveCounter[i]->setText(tr("&Remove counter (%1)").arg(counterColors[i]));
for (int i = 0; i < aSetCounter.size(); ++i)
aRemoveCounter[i]->setShortcut(removeCCShortCuts[i]);
}
for (int i = 0; i < aSetCounter.size(); ++i){
aSetCounter[i]->setText(tr("&Set counters (%1)...").arg(counterColors[i]));
aSetCounter[i]->setShortcut(setCCShortCuts[i]);
}
aMoveToTopLibrary->setText(tr("&Top of library"));
aMoveToTopLibrary->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aMoveToTopLibrary", QKeySequence()));
aMoveToBottomLibrary->setText(tr("&Bottom of library"));
aMoveToBottomLibrary->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aMoveToBottomLibrary", QKeySequence()));
aMoveToHand->setText(tr("&Hand"));
aMoveToHand->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aMoveToHand", QKeySequence()));
aMoveToGraveyard->setText(tr("&Graveyard"));
aMoveToGraveyard->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aMoveToGraveyard", QKeySequence("Ctrl+Del")));
aMoveToExile->setText(tr("&Exile"));
aMoveToExile->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aMoveToExile", QKeySequence()));
QMapIterator<QString, CardZone *> zoneIterator(zones);
while (zoneIterator.hasNext())
zoneIterator.next().value()->retranslateUi();
@ -769,6 +840,9 @@ void Player::setShortcutsActive()
aViewGraveyard->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aViewGraveyard", QKeySequence("F4")));
aViewRfg->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aViewRfg", QKeySequence()));
aDrawCard->setShortcuts(settingsCache->shortcuts().getShortcut(
"Player/aDrawCard", QKeySequence("Ctrl+D")));
@ -838,14 +912,11 @@ void Player::initSayMenu()
QSettings settings;
settings.beginGroup("messages");
int count = settings.value("count", 0).toInt();
QString base = settingsCache->shortcuts().getSingleShortcut(
"Player/say", QKeySequence("Ctrl")).toString();
base = base.append("+");
for (int i = 0; i < count; i++) {
QAction *newAction = new QAction(settings.value(QString("msg%1").arg(i)).toString(), this);
if (i <= 10){
newAction->setShortcut(QKeySequence(base + QString::number((i + 1) % 10)));
newAction->setShortcut(QKeySequence("Ctrl+" + QString::number((i + 1) % 10)));
}
connect(newAction, SIGNAL(triggered()), this, SLOT(actSayMessage()));
sayMenu->addAction(newAction);
@ -861,10 +932,6 @@ void Player::setDeck(const DeckLoader &_deck)
predefinedTokens.clear();
InnerDecklistNode *tokenZone = dynamic_cast<InnerDecklistNode *>(deck->getRoot()->findChild("tokens"));
QString base = settingsCache->shortcuts().getSingleShortcut(
"Player/token", QKeySequence("Alt")).toString();
base = base.append("+");
if (tokenZone)
for (int i = 0; i < tokenZone->size(); ++i) {
const QString tokenName = tokenZone->at(i)->getName();
@ -872,7 +939,7 @@ void Player::setDeck(const DeckLoader &_deck)
QAction *a = createPredefinedTokenMenu->addAction(tokenName);
if (i < 10)
{
a->setShortcut(QKeySequence(base + QString::number((i + 1) % 10)));
a->setShortcut(QKeySequence("Alt+" + QString::number((i + 1) % 10)));
}
connect(a, SIGNAL(triggered()), this, SLOT(actCreatePredefinedToken()));
}

View file

@ -0,0 +1,150 @@
#include "secuenceedit.h"
#include "../settingscache.h"
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QEvent>
#include <QKeyEvent>
#include <QToolTip>
SecuenceEdit::SecuenceEdit(QString name, QWidget *parent) : QWidget(parent)
{
this->shorcutName = name;
currentKey = 0;
maxKeys = 4;
keys = 0;
valid = false;
lineEdit = new QLineEdit(this);
clearButton = new QPushButton("", this);
defaultButton = new QPushButton("", this);
lineEdit->setMinimumWidth(100);
clearButton->setMaximumWidth(lineEdit->height());
defaultButton->setMaximumWidth(lineEdit->height());
clearButton->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
defaultButton->setIcon(QIcon(":/resources/icon_update.png"));
QHBoxLayout *layout = new QHBoxLayout(this);
layout->setContentsMargins(0,0,0,0);
layout->setSpacing(0);
layout->addWidget(lineEdit);
layout->addWidget(clearButton);
layout->addWidget(defaultButton);
connect(clearButton,SIGNAL(clicked()),this,SLOT(removeLastShortcut()));
connect(defaultButton,SIGNAL(clicked()),this,SLOT(restoreDefault()));
lineEdit->installEventFilter(this);
lineEdit->setText(settingsCache->shortcuts().getShortcutString(name));
}
QString SecuenceEdit::getSecuence()
{
return lineEdit->text();
}
void SecuenceEdit::removeLastShortcut()
{
QString secuences = lineEdit->text();
if(!secuences.isEmpty())
{
if(secuences.lastIndexOf(";") > 0){
QString valid = secuences.left(secuences.lastIndexOf(";"));
lineEdit->setText(valid);
}
else
lineEdit->clear();
updateSettings();
}
}
void SecuenceEdit::restoreDefault()
{
lineEdit->setText(settingsCache->shortcuts().getDefaultShortcutString(shorcutName));
updateSettings();
}
bool SecuenceEdit::eventFilter(QObject *, QEvent * event)
{
if(event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease)
{
QKeyEvent * keyEvent = (QKeyEvent *) event;
if(event->type() == QEvent::KeyPress && !keyEvent->isAutoRepeat())
processKey(keyEvent);
else if (event->type() == QEvent::KeyRelease && !keyEvent->isAutoRepeat())
finishShortcut();
return true;
}
return false;
}
void SecuenceEdit::processKey(QKeyEvent* e)
{
int key = e->key();
if(key != Qt::Key_Control && key != Qt::Key_Shift
&& key != Qt::Key_Meta && key != Qt::Key_Alt)
{
valid = true;
key |= translateModifiers(e->modifiers(), e->text());
}
keys = key;
currentKey++;
if(currentKey >= key)
finishShortcut();
}
int SecuenceEdit::translateModifiers(Qt::KeyboardModifiers state, const QString &text)
{
int result = 0;
// The shift modifier only counts when it is not used to type a symbol
// that is only reachable using the shift key anyway
if ((state & Qt::ShiftModifier) && (text.isEmpty() ||
!text.at(0).isPrint() ||
text.at(0).isLetterOrNumber() ||
text.at(0).isSpace()))
result |= Qt::SHIFT;
if (state & Qt::ControlModifier)
result |= Qt::CTRL;
if (state & Qt::MetaModifier)
result |= Qt::META;
if (state & Qt::AltModifier)
result |= Qt::ALT;
return result;
}
void SecuenceEdit::finishShortcut()
{
QKeySequence secuence(keys);
if(!secuence.isEmpty() && valid)
{
QString secuenceString = secuence.toString();
if(settingsCache->shortcuts().isValid(shorcutName,secuenceString))
{
if(!lineEdit->text().isEmpty())
{
if(lineEdit->text().contains(secuenceString))
return;
lineEdit->setText(lineEdit->text() + ";");
}
lineEdit->setText(lineEdit->text() + secuenceString);
}
else
{
QToolTip::showText(lineEdit->mapToGlobal(QPoint()), tr("Shortcut already in use"));
}
}
currentKey = 0;
keys = 0;
valid = false;
updateSettings();
}
void SecuenceEdit::updateSettings()
{
settingsCache->shortcuts().setShortcuts(shorcutName,lineEdit->text());
}

View file

@ -0,0 +1,40 @@
#ifndef SECUENCEEDIT_H
#define SECUENCEEDIT_H
#include <QWidget>
#include <QKeySequence>
class QLineEdit;
class QPushButton;
class QEvent;
class SecuenceEdit : public QWidget
{
Q_OBJECT
public:
SecuenceEdit(QString shorcutName, QWidget *parent = 0);
QString getSecuence();
signals:
private slots:
void removeLastShortcut();
void restoreDefault();
protected:
bool eventFilter(QObject *, QEvent *event);
private:
QString shorcutName;
QLineEdit *lineEdit;
QPushButton *clearButton;
QPushButton *defaultButton;
int keys;
int currentKey;
int maxKeys;
bool valid;
void processKey(QKeyEvent *e);
int translateModifiers(Qt::KeyboardModifiers state, const QString &text);
void finishShortcut();
void updateSettings();
};
#endif // SECUENCEEDIT_H

View file

@ -0,0 +1,18 @@
#include "shortcutstab.h"
#include "ui_shortcutstab.h"
ShortcutsTab::ShortcutsTab() :
ui(new Ui::shortcutsTab)
{
ui->setupUi(this);
}
void ShortcutsTab::retranslateUi()
{
ui->retranslateUi(this);
}
ShortcutsTab::~ShortcutsTab()
{
delete ui;
}

View file

@ -0,0 +1,25 @@
#ifndef SHORTCUTSTAB_H
#define SHORTCUTSTAB_H
#include <QWidget>
#include "../dlg_settings.h"
namespace Ui {
class shortcutsTab;
}
class ShortcutsTab : public AbstractSettingsPage
{
Q_OBJECT
public:
ShortcutsTab();
void retranslateUi();
~ShortcutsTab();
private:
Ui::shortcutsTab *ui;
};
#endif // SHORTCUTSTAB_H

View file

@ -1,43 +1,38 @@
#include "shortcutssettings.h"
#include <QDebug>
QList<QKeySequence> ShortcutsSettings::parseSecuenceString(QString stringSecuence)
{
QStringList secuences = stringSecuence.split(";");
QList<QKeySequence> secuenceList;
for(QStringList::const_iterator ss = secuences.cbegin(); ss != secuences.cend(); ++ss)
{
secuenceList.append(QKeySequence(*ss, QKeySequence::PortableText));
}
return secuenceList;
}
#include <QFile>
ShortcutsSettings::ShortcutsSettings(QString settingsPath, QObject *parent) : QObject(parent)
{
this->settingsFilePath = settingsPath;
this->settingsFilePath.append("shortcuts.ini");
fillDefaultShorcuts();
shortCuts = QMap<QString,QList<QKeySequence> >(defaultShortCuts);
bool exists = QFile(settingsFilePath).exists();
QSettings shortCutsFile(settingsFilePath, QSettings::IniFormat);
shortCutsFile.beginGroup("Custom");
const QStringList customKeys = shortCutsFile.allKeys();
for(QStringList::const_iterator it = customKeys.cbegin(); it != customKeys.cend(); ++it)
{
QString stringSecuence = shortCutsFile.value(*it).toString();
QList<QKeySequence> secuenceList = parseSecuenceString(stringSecuence);
shortCuts.insert(*it, secuenceList);
}
shortCutsFile.endGroup();
if(exists){
shortCutsFile.beginGroup("Custom");
const QStringList customKeys = shortCutsFile.allKeys();
for(QStringList::const_iterator it = customKeys.cbegin(); it != customKeys.cend(); ++it)
{
QString stringSecuence = shortCutsFile.value(*it).toString();
QList<QKeySequence> secuenceList = parseSecuenceString(stringSecuence);
shortCuts.insert(*it, secuenceList);
}
shortCutsFile.endGroup();
shortCutsFile.beginGroup("Defaults");
const QStringList defaultKeys = shortCutsFile.allKeys();
for(QStringList::const_iterator it = defaultKeys.cbegin(); it != defaultKeys.cend(); ++it)
{
QString stringSecuence = shortCutsFile.value(*it).toString();
QList<QKeySequence> secuenceList = parseSecuenceString(stringSecuence);
defaultShortCuts.insert(*it, secuenceList);
shortCutsFile.beginGroup("Defaults");
const QStringList defaultKeys = shortCutsFile.allKeys();
for(QStringList::const_iterator it = defaultKeys.cbegin(); it != defaultKeys.cend(); ++it)
{
QString stringSecuence = shortCutsFile.value(*it).toString();
QList<QKeySequence> secuenceList = parseSecuenceString(stringSecuence);
defaultShortCuts.insert(*it, secuenceList);
}
shortCutsFile.endGroup();
}
shortCutsFile.endGroup();
}
QList<QKeySequence> ShortcutsSettings::getShortcut(QString name, QList<QKeySequence> defaultShortCut)
@ -66,9 +61,14 @@ QKeySequence ShortcutsSettings::getSingleShortcut(QString name, QKeySequence def
return getShortcut(name,defaultShortCut).at(0);
}
QList<QKeySequence> ShortcutsSettings::getDefaultShortCut(QString name)
QString ShortcutsSettings::getDefaultShortcutString(QString name)
{
return defaultShortCuts.value(name);
return stringifySecuence(defaultShortCuts.value(name));
}
QString ShortcutsSettings::getShortcutString(QString name)
{
return stringifySecuence(shortCuts.value(name));
}
QString ShortcutsSettings::stringifySecuence(QList<QKeySequence> secuence) const
@ -84,6 +84,18 @@ QString ShortcutsSettings::stringifySecuence(QList<QKeySequence> secuence) const
return stringSecuence;
}
QList<QKeySequence> ShortcutsSettings::parseSecuenceString(QString stringSecuence)
{
QStringList secuences = stringSecuence.split(";");
QList<QKeySequence> secuenceList;
for(QStringList::const_iterator ss = secuences.cbegin(); ss != secuences.cend(); ++ss)
{
secuenceList.append(QKeySequence(*ss, QKeySequence::PortableText));
}
return secuenceList;
}
void ShortcutsSettings::setShortcuts(QString name, QList<QKeySequence> secuence)
{
shortCuts[name] = secuence;
@ -100,3 +112,136 @@ void ShortcutsSettings::setShortcuts(QString name, QKeySequence secuence)
setShortcuts(name, QList<QKeySequence>() << secuence);
}
void ShortcutsSettings::setShortcuts(QString name, QString secuences)
{
setShortcuts(name,parseSecuenceString(secuences));
}
bool ShortcutsSettings::isValid(QString name, QString secuences)
{
QString checkKey = name.left(name.indexOf("/"));
QStringList stringSecuences = secuences.split(";");
QList<QString> allKeys = shortCuts.keys();
for(int i=0; i < allKeys.size(); i++){
QString key = allKeys.at(i);
if(key.startsWith(checkKey) || key.startsWith("MainWindow") || checkKey.startsWith("MainWindow"))
{
QString storedSecuence = stringifySecuence(shortCuts.value(key));
for(int j = 0; j < stringSecuences.size(); j++)
{
if(storedSecuence.contains(stringSecuences.at(j)))
return false;
}
}
}
return true;
}
void ShortcutsSettings::fillDefaultShorcuts()
{
defaultShortCuts["MainWindow/aCheckCardUpdates"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aConnect"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aDeckEditor"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aDisconnect"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aExit"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aFullScreen"] = parseSecuenceString("Ctrl+F");
defaultShortCuts["MainWindow/aRegister"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aSettings"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aSinglePlayer"] = parseSecuenceString("");
defaultShortCuts["MainWindow/aWatchReplay"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aAnalyzeDeck"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aClearFilterAll"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aClearFilterOne"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aClose"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aDecrement"] = parseSecuenceString("-");
defaultShortCuts["TabDeckEditor/aEditSets"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aEditTokens"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aIncrement"] = parseSecuenceString("+");
defaultShortCuts["TabDeckEditor/aLoadDeck"] = parseSecuenceString("Ctrl+O");
defaultShortCuts["TabDeckEditor/aLoadDeckFromClipboard"] = parseSecuenceString("Ctrl+V");
defaultShortCuts["TabDeckEditor/aNewDeck"] = parseSecuenceString("Ctrl+N");
defaultShortCuts["TabDeckEditor/aOpenCustomFolder"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aPrintDeck"] = parseSecuenceString("Ctrl+P");
defaultShortCuts["TabDeckEditor/aRemoveCard"] = parseSecuenceString("Del");
defaultShortCuts["TabDeckEditor/aResetLayout"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aSaveDeck"] = parseSecuenceString("Ctrl+S");
defaultShortCuts["TabDeckEditor/aSaveDeckAs"] = parseSecuenceString("");
defaultShortCuts["TabDeckEditor/aSaveDeckToClipboard"] = parseSecuenceString("Ctrl+C");
defaultShortCuts["DeckViewContainer/loadLocalButton"] = parseSecuenceString("Ctrl+O");
defaultShortCuts["DeckViewContainer/loadRemoteButton"] = parseSecuenceString("Ctrl+Alt+O");
defaultShortCuts["Player/aDec"] = parseSecuenceString("F11");
defaultShortCuts["Player/aInc"] = parseSecuenceString("F12");
defaultShortCuts["Player/aSet"] = parseSecuenceString("Ctrl+L");
defaultShortCuts["Player/aCloseMostRecentZoneView"] = parseSecuenceString("Esc");
defaultShortCuts["Player/IncP"] = parseSecuenceString("Ctrl++");
defaultShortCuts["Player/aAlwaysRevealTopCard"] = parseSecuenceString("Ctrl+N");
defaultShortCuts["Player/aAttach"] = parseSecuenceString("Ctrl+A");
defaultShortCuts["Player/aCCGreen"] = parseSecuenceString("");
defaultShortCuts["Player/aCCRed"] = parseSecuenceString("");
defaultShortCuts["Player/aCCYellow"] = parseSecuenceString("");
defaultShortCuts["Player/aClone"] = parseSecuenceString("Ctrl+J");
defaultShortCuts["Player/aCreateAnotherToken"] = parseSecuenceString("Ctrl+G");
defaultShortCuts["Player/aCreateToken"] = parseSecuenceString("Ctrl+T");
defaultShortCuts["Player/aDecP"] = parseSecuenceString("Ctrl+-");
defaultShortCuts["Player/aDecPT"] = parseSecuenceString("Ctrl+Alt+-");
defaultShortCuts["Player/aDecT"] = parseSecuenceString("Alt+-");
defaultShortCuts["Player/aDoesntUntap"] = parseSecuenceString("");
defaultShortCuts["Player/aDrawArrow"] = parseSecuenceString("");
defaultShortCuts["Player/aDrawCard"] = parseSecuenceString("Ctrl+D");
defaultShortCuts["Player/aDrawCards"] = parseSecuenceString("Ctrl+E");
defaultShortCuts["Player/aFlip"] = parseSecuenceString("");
defaultShortCuts["Player/aIncPT"] = parseSecuenceString("Ctrl+Alt++");
defaultShortCuts["Player/aIncT"] = parseSecuenceString("Alt++");
defaultShortCuts["Player/aMoveToBottomLibrary"] = parseSecuenceString("");
defaultShortCuts["Player/aMoveToExile"] = parseSecuenceString("");
defaultShortCuts["Player/aMoveToGraveyard"] = parseSecuenceString("Ctrl+Del");
defaultShortCuts["Player/aMoveToHand"] = parseSecuenceString("");
defaultShortCuts["Player/aMoveToTopLibrary"] = parseSecuenceString("");
defaultShortCuts["Player/aMulligan"] = parseSecuenceString("Ctrl+M");
defaultShortCuts["Player/aPeek"] = parseSecuenceString("");
defaultShortCuts["Player/aPlay"] = parseSecuenceString("");
defaultShortCuts["Player/aRCGreen"] = parseSecuenceString("");
defaultShortCuts["Player/aRCRed"] = parseSecuenceString("");
defaultShortCuts["Player/aRCYellow"] = parseSecuenceString("");
defaultShortCuts["Player/aRollDie"] = parseSecuenceString("Ctrl+I");
defaultShortCuts["Player/aSCGreen"] = parseSecuenceString("");
defaultShortCuts["Player/aSCRed"] = parseSecuenceString("");
defaultShortCuts["Player/aSCYellow"] = parseSecuenceString("");
defaultShortCuts["Player/aSetAnnotation"] = parseSecuenceString("");
defaultShortCuts["Player/aSetPT"] = parseSecuenceString("Ctrl+P");
defaultShortCuts["Player/aShuffle"] = parseSecuenceString("Ctrl+S");
defaultShortCuts["Player/aTap"] = parseSecuenceString("");
defaultShortCuts["Player/aUnattach"] = parseSecuenceString("");
defaultShortCuts["Player/aUndoDraw"] = parseSecuenceString("Ctrl+Shift+D");
defaultShortCuts["Player/aUntap"] = parseSecuenceString("");
defaultShortCuts["Player/aUntapAll"] = parseSecuenceString("Ctrl+U");
defaultShortCuts["Player/aViewGraveyard"] = parseSecuenceString("F4");
defaultShortCuts["Player/aViewLibrary"] = parseSecuenceString("F3");
defaultShortCuts["Player/aViewRfg"] = parseSecuenceString("");
defaultShortCuts["Player/aViewSideboard"] = parseSecuenceString("Ctrl+F3");
defaultShortCuts["Player/aViewTopCards"] = parseSecuenceString("Ctrl+W");
defaultShortCuts["Player/aConcede"] = parseSecuenceString("F2");
defaultShortCuts["Player/aLeaveGame"] = parseSecuenceString("Ctrl+Q");
defaultShortCuts["Player/aNextPhase"] = parseSecuenceString("Ctrl+Space;Tab");
defaultShortCuts["Player/aNextTurn"] = parseSecuenceString("Ctrl+Return;Ctrl+Enter");
defaultShortCuts["Player/aRemoveLocalArrows"] = parseSecuenceString("Ctrl+R");
defaultShortCuts["Player/aRotateViewCCW"] = parseSecuenceString("Ctrl+[");
defaultShortCuts["Player/aRotateViewCW"] = parseSecuenceString("Ctrl+]");
defaultShortCuts["Player/phase0"] = parseSecuenceString("F5");
defaultShortCuts["Player/phase1"] = parseSecuenceString("");
defaultShortCuts["Player/phase10"] = parseSecuenceString("F10");
defaultShortCuts["Player/phase2"] = parseSecuenceString("F6");
defaultShortCuts["Player/phase3"] = parseSecuenceString("F7");
defaultShortCuts["Player/phase4"] = parseSecuenceString("F8");
defaultShortCuts["Player/phase5"] = parseSecuenceString("");
defaultShortCuts["Player/phase6"] = parseSecuenceString("");
defaultShortCuts["Player/phase7"] = parseSecuenceString("");
defaultShortCuts["Player/phase8"] = parseSecuenceString("");
defaultShortCuts["Player/phase9"] = parseSecuenceString("F9");
}

View file

@ -16,19 +16,20 @@ public:
QList<QKeySequence> getShortcut(QString name, QList<QKeySequence> defaultShortCut);
QList<QKeySequence> getShortcut(QString name, QKeySequence defaultShortCut);
QKeySequence getSingleShortcut(QString name, QKeySequence defaultShortCut);
QList<QKeySequence> getDefaultShortCut(QString name);
QString getDefaultShortcutString(QString name);
QString getShortcutString(QString name);
void setShortcuts(QString name, QList<QKeySequence> secuence);
void setShortcuts(QString name, QKeySequence secuence);
void setShortcuts(QString name, QString secuences);
signals:
public slots:
bool isValid(QString name, QString secuences);
private:
QString settingsFilePath;
QMap<QString,QList<QKeySequence> > shortCuts;
QMap<QString,QList<QKeySequence> > defaultShortCuts;
void fillDefaultShorcuts();
QString stringifySecuence(QList<QKeySequence> secuence) const;
QList<QKeySequence> parseSecuenceString(QString stringSecuence);

View file

@ -254,26 +254,28 @@ void TabDeckEditor::createFiltersDock()
void TabDeckEditor::createMenus()
{
aNewDeck = new QAction(QString(), this);
connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck()));
aNewDeck->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aNewDeck",
QKeySequence::New));
connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck()));
aLoadDeck = new QAction(QString(), this);
connect(aLoadDeck, SIGNAL(triggered()), this, SLOT(actLoadDeck()));
aLoadDeck->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aLoadDeck",
QKeySequence::Open));
connect(aLoadDeck, SIGNAL(triggered()), this, SLOT(actLoadDeck()));
aSaveDeck = new QAction(QString(), this);
connect(aSaveDeck, SIGNAL(triggered()), this, SLOT(actSaveDeck()));
aSaveDeck->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aSaveDeck",
QKeySequence::Save));
connect(aSaveDeck, SIGNAL(triggered()), this, SLOT(actSaveDeck()));
aSaveDeckAs = new QAction(QString(), this);
// aSaveDeckAs->setShortcuts(QKeySequence::SaveAs);
connect(aSaveDeckAs, SIGNAL(triggered()), this, SLOT(actSaveDeckAs()));
aSaveDeckAs->setShortcuts(QKeySequence::SaveAs);
aSaveDeckAs->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aSaveDeckAs", QKeySequence()));
aLoadDeckFromClipboard = new QAction(QString(), this);
connect(aLoadDeckFromClipboard, SIGNAL(triggered()), this, SLOT(actLoadDeckFromClipboard()));
@ -288,24 +290,39 @@ void TabDeckEditor::createMenus()
QKeySequence::Copy));
aPrintDeck = new QAction(QString(), this);
connect(aPrintDeck, SIGNAL(triggered()), this, SLOT(actPrintDeck()));
aPrintDeck->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aPrintDeck",QKeySequence::Print));
connect(aPrintDeck, SIGNAL(triggered()), this, SLOT(actPrintDeck()));
aAnalyzeDeck = new QAction(QString(), this);
connect(aAnalyzeDeck, SIGNAL(triggered()), this, SLOT(actAnalyzeDeck()));
aAnalyzeDeck->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aAnalyzeDeck", QKeySequence()));
aClose = new QAction(QString(), this);
connect(aClose, SIGNAL(triggered()), this, SLOT(closeRequest()));
aClose->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aClose", QKeySequence()));
aOpenCustomFolder = new QAction(QString(), this);
connect(aOpenCustomFolder, SIGNAL(triggered()), this, SLOT(actOpenCustomFolder()));
aOpenCustomFolder->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aOpenCustomFolder", QKeySequence()));
aEditSets = new QAction(QString(), this);
connect(aEditSets, SIGNAL(triggered()), this, SLOT(actEditSets()));
aEditSets->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aEditSets", QKeySequence()));
aEditTokens = new QAction(QString(), this);
connect(aEditTokens, SIGNAL(triggered()), this, SLOT(actEditTokens()));
aEditTokens->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aEditTokens", QKeySequence()));
aResetLayout = new QAction(QString(), this);
connect(aResetLayout,SIGNAL(triggered()),this,SLOT(restartLayout()));
aResetLayout->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aResetLayout", QKeySequence()));
deckMenu = new QMenu(this);
deckMenu->addAction(aNewDeck);
@ -328,10 +345,14 @@ void TabDeckEditor::createMenus()
aClearFilterAll = new QAction(QString(), this);
aClearFilterAll->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
connect(aClearFilterAll, SIGNAL(triggered()), this, SLOT(actClearFilterAll()));
aClearFilterAll->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aClearFilterAll", QKeySequence()));
aClearFilterOne = new QAction(QString(), this);
aClearFilterOne->setIcon(QIcon(":/resources/decrement.svg"));
connect(aClearFilterOne, SIGNAL(triggered()), this, SLOT(actClearFilterOne()));
aClearFilterOne->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabDeckEditor/aClearFilterOne", QKeySequence()));
dbMenu = new QMenu(this);
dbMenu->addAction(aEditSets);

View file

@ -473,12 +473,17 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList<AbstractClient *> &_client
QAction *temp = new QAction(QString(), this);
connect(temp, SIGNAL(triggered()), this, SLOT(actPhaseAction()));
switch (i) {
case 0: temp->setShortcuts(settingsCache->shortcuts().getShortcut("TabGame/phase0" ,QKeySequence("F5"))); break;
case 2: temp->setShortcuts(settingsCache->shortcuts().getShortcut("TabGame/phase2" ,QKeySequence("F6"))); break;
case 3: temp->setShortcuts(settingsCache->shortcuts().getShortcut("TabGame/phase3" ,QKeySequence("F7"))); break;
case 4: temp->setShortcuts(settingsCache->shortcuts().getShortcut("TabGame/phase4" ,QKeySequence("F8"))); break;
case 9: temp->setShortcuts(settingsCache->shortcuts().getShortcut("TabGame/phase9" ,QKeySequence("F9"))); break;
case 10:temp->setShortcuts(settingsCache->shortcuts().getShortcut("TabGame/phase10" ,QKeySequence("F10"))); break;
case 0: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase0" ,QKeySequence("F5"))); break;
case 1: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase1" ,QKeySequence())); break;
case 2: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase2" ,QKeySequence("F6"))); break;
case 3: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase3" ,QKeySequence("F7"))); break;
case 4: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase4" ,QKeySequence("F8"))); break;
case 5: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase5" ,QKeySequence())); break;
case 6: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase6" ,QKeySequence())); break;
case 7: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase7" ,QKeySequence())); break;
case 8: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase8" ,QKeySequence())); break;
case 9: temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase9" ,QKeySequence("F9"))); break;
case 10:temp->setShortcuts(settingsCache->shortcuts().getShortcut("Player/phase10" ,QKeySequence("F10"))); break;
default: ;
}
phasesMenu->addAction(temp);
@ -550,7 +555,7 @@ void TabGame::retranslateUi()
if (aNextPhase) {
aNextPhase->setText(tr("Next &phase"));
aNextPhase->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aNextPhase",
"Player/aNextPhase",
QList<QKeySequence>()
<< QKeySequence("Ctrl+Space")
<< QKeySequence("Tab")));
@ -558,7 +563,7 @@ void TabGame::retranslateUi()
if (aNextTurn) {
aNextTurn->setText(tr("Next &turn"));
aNextTurn->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aNextTurn",
"Player/aNextTurn",
QList<QKeySequence>()
<< QKeySequence("Ctrl+Return")
<< QKeySequence("Ctrl+Enter")));
@ -566,19 +571,19 @@ void TabGame::retranslateUi()
if (aRemoveLocalArrows) {
aRemoveLocalArrows->setText(tr("&Remove all local arrows"));
aRemoveLocalArrows->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aRemoveLocalArrows",
"Player/aRemoveLocalArrows",
QKeySequence("Ctrl+R")));
}
if (aRotateViewCW) {
aRotateViewCW->setText(tr("Rotate View Cl&ockwise"));
aRotateViewCW->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aRotateViewCW",
"Player/aRotateViewCW",
QKeySequence("Ctrl+]")));
}
if (aRotateViewCCW) {
aRotateViewCCW->setText(tr("Rotate View Co&unterclockwise"));
aRotateViewCCW->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aRotateViewCCW",
"Player/aRotateViewCCW",
QKeySequence("Ctrl+[")));
}
if (aGameInfo)
@ -586,19 +591,19 @@ void TabGame::retranslateUi()
if (aConcede) {
aConcede->setText(tr("&Concede"));
aConcede->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aRotateViewCCW",
"Player/aConcede",
QKeySequence("F2")));
}
if (aLeaveGame) {
aLeaveGame->setText(tr("&Leave game"));
aLeaveGame->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aLeaveGame",
"Player/aLeaveGame",
QKeySequence("Ctrl+Q")));
}
if (aCloseReplay) {
aCloseReplay->setText(tr("C&lose replay"));
aCloseReplay->setShortcuts(settingsCache->shortcuts().getShortcut(
"TabGame/aCloseReplay",
"Player/aCloseReplay",
QKeySequence("Ctrl+Q")));
}

View file

@ -453,24 +453,54 @@ void MainWindow::retranslateUi()
setClientStatusTitle();
aConnect->setText(tr("&Connect..."));
aConnect->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aConnect", QKeySequence()));
aDisconnect->setText(tr("&Disconnect"));
aDisconnect->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aDisconnect", QKeySequence()));
aSinglePlayer->setText(tr("Start &local game..."));
aSinglePlayer->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aSinglePlayer", QKeySequence()));
aWatchReplay->setText(tr("&Watch replay..."));
aWatchReplay->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aWatchReplay", QKeySequence()));
aDeckEditor->setText(tr("&Deck editor"));
aDeckEditor->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aDeckEditor", QKeySequence()));
aFullScreen->setText(tr("&Full screen"));
aFullScreen->setShortcuts(settingsCache->shortcuts().getShortcut("MainWindow/aFullScreen", QKeySequence("Ctrl+F")));
aFullScreen->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aFullScreen", QKeySequence("Ctrl+F")));
aRegister->setText(tr("&Register to server..."));
aRegister->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aRegister", QKeySequence()));
aSettings->setText(tr("&Settings..."));
aSettings->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aSettings", QKeySequence()));
aExit->setText(tr("&Exit"));
aExit->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aExit", QKeySequence()));
#if defined(__APPLE__) /* For OSX */
cockatriceMenu->setTitle(tr("A&ctions"));
#else
cockatriceMenu->setTitle(tr("&Cockatrice"));
#endif
aAbout->setText(tr("&About Cockatrice"));
helpMenu->setTitle(tr("&Help"));
aCheckCardUpdates->setText(tr("Check for card updates..."));
aCheckCardUpdates->setShortcuts(settingsCache->shortcuts().getShortcut(
"MainWindow/aCheckCardUpdates",
QKeySequence()));
tabSupervisor->retranslateUi();
}