diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index bee7311d..e81c6d26 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -94,6 +94,7 @@ SET(cockatrice_SOURCES src/qt-json/json.cpp src/soundengine.cpp src/pending_command.cpp + src/shortcutssettings.cpp ${VERSION_STRING_CPP} ) diff --git a/cockatrice/src/abstractcounter.cpp b/cockatrice/src/abstractcounter.cpp index 6e6393e7..3eb7ae0b 100644 --- a/cockatrice/src/abstractcounter.cpp +++ b/cockatrice/src/abstractcounter.cpp @@ -1,5 +1,6 @@ #include "abstractcounter.h" #include "player.h" +#include "settingscache.h" #include #include #include @@ -65,9 +66,17 @@ void AbstractCounter::retranslateUi() void AbstractCounter::setShortcutsActive() { if (name == "life") { - aSet->setShortcut(QKeySequence("Ctrl+L")); - aDec->setShortcut(QKeySequence("F11")); - aInc->setShortcut(QKeySequence("F12")); + aSet->setShortcuts(settingsCache->shortcuts().getShortcut( + "AbstractCounter/aSet", + QKeySequence("Ctrl+L"))); + + aDec->setShortcuts(settingsCache->shortcuts().getShortcut( + "AbstractCounter/aDec", + QKeySequence("F11"))); + + aInc->setShortcuts(settingsCache->shortcuts().getShortcut( + "AbstractCounter/aInc", + QKeySequence("F12"))); } } diff --git a/cockatrice/src/dlg_load_deck_from_clipboard.cpp b/cockatrice/src/dlg_load_deck_from_clipboard.cpp index 67051c19..2a479212 100644 --- a/cockatrice/src/dlg_load_deck_from_clipboard.cpp +++ b/cockatrice/src/dlg_load_deck_from_clipboard.cpp @@ -10,6 +10,7 @@ #include #include "dlg_load_deck_from_clipboard.h" #include "deck_loader.h" +#include "settingscache.h" DlgLoadDeckFromClipboard::DlgLoadDeckFromClipboard(QWidget *parent) : QDialog(parent), deckList(0) @@ -17,7 +18,9 @@ DlgLoadDeckFromClipboard::DlgLoadDeckFromClipboard(QWidget *parent) contentsEdit = new QPlainTextEdit; refreshButton = new QPushButton(tr("&Refresh")); - refreshButton->setShortcut(QKeySequence("F5")); + refreshButton->setShortcut(settingsCache->shortcuts().getSingleShortcut( + "DlgLoadDeckFromClipboard/refreshButton", + QKeySequence("F5"))); connect(refreshButton, SIGNAL(clicked()), this, SLOT(actRefresh())); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); diff --git a/cockatrice/src/gameview.cpp b/cockatrice/src/gameview.cpp index 1c4a6984..9eb2942e 100644 --- a/cockatrice/src/gameview.cpp +++ b/cockatrice/src/gameview.cpp @@ -1,5 +1,6 @@ #include "gameview.h" #include "gamescene.h" +#include "settingscache.h" #include #include #include @@ -19,7 +20,9 @@ GameView::GameView(QGraphicsScene *scene, QWidget *parent) connect(scene, SIGNAL(sigStopRubberBand()), this, SLOT(stopRubberBand())); aCloseMostRecentZoneView = new QAction(this); - aCloseMostRecentZoneView->setShortcut(QKeySequence("Esc")); + aCloseMostRecentZoneView->setShortcuts(settingsCache->shortcuts().getShortcut( + "GameView/aCloseMostRecentZoneView", + QKeySequence("Esc"))); connect(aCloseMostRecentZoneView, SIGNAL(triggered()), scene, SLOT(closeMostRecentZoneView())); addAction(aCloseMostRecentZoneView); diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 6e3eca54..f247f056 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -691,25 +691,44 @@ void Player::retranslateUi() aFlip->setText(tr("&Flip")); aPeek->setText(tr("&Peek at card face")); aClone->setText(tr("&Clone")); - aClone->setShortcut(QKeySequence("Ctrl+J")); + aClone->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aClone", QKeySequence("Ctrl+J"))); + aAttach->setText(tr("Attac&h to card...")); - aAttach->setShortcut(QKeySequence("Ctrl+A")); + aAttach->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aAttach", QKeySequence("Ctrl+A"))); + aUnattach->setText(tr("Unattac&h")); aDrawArrow->setText(tr("&Draw arrow...")); + aIncP->setText(tr("&Increase power")); - aIncP->setShortcut(QKeySequence("Ctrl++")); + aIncP->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/IncP", QKeySequence("Ctrl++"))); + aDecP->setText(tr("&Decrease power")); - aDecP->setShortcut(QKeySequence("Ctrl+-")); + aDecP->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aDecP", QKeySequence("Ctrl+-"))); + aIncT->setText(tr("I&ncrease toughness")); - aIncT->setShortcut(QKeySequence("Alt++")); + aIncT->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aIncT", QKeySequence("Alt++"))); + aDecT->setText(tr("D&ecrease toughness")); - aDecT->setShortcut(QKeySequence("Alt+-")); + aDecT->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aDecT", QKeySequence("Alt+-"))); + aIncPT->setText(tr("In&crease power and toughness")); - aIncPT->setShortcut(QKeySequence("Ctrl+Alt++")); + aIncPT->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aIncPT", QKeySequence("Ctrl+Alt++"))); + aDecPT->setText(tr("Dec&rease power and toughness")); - aDecPT->setShortcut(QKeySequence("Ctrl+Alt+-")); + aDecPT->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aDecPT", QKeySequence("Ctrl+Alt+-"))); + aSetPT->setText(tr("Set &power and toughness...")); - aSetPT->setShortcut(QKeySequence("Ctrl+P")); + aSetPT->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aSetPT", QKeySequence("Ctrl+P"))); + aSetAnnotation->setText(tr("&Set annotation...")); QStringList counterColors; counterColors.append(tr("Red")); @@ -725,7 +744,8 @@ void Player::retranslateUi() aMoveToBottomLibrary->setText(tr("&Bottom of library")); aMoveToHand->setText(tr("&Hand")); aMoveToGraveyard->setText(tr("&Graveyard")); - aMoveToGraveyard->setShortcut(QKeySequence("Ctrl+Del")); + aMoveToGraveyard->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aMoveToGraveyard", QKeySequence("Ctrl+Del"))); aMoveToExile->setText(tr("&Exile")); QMapIterator zoneIterator(zones); @@ -737,20 +757,50 @@ void Player::setShortcutsActive() { shortcutsActive = true; - aViewSideboard->setShortcut(QKeySequence("Ctrl+F3")); - aViewLibrary->setShortcut(QKeySequence("F3")); - aViewTopCards->setShortcut(QKeySequence("Ctrl+W")); - aViewGraveyard->setShortcut(QKeySequence("F4")); - aDrawCard->setShortcut(QKeySequence("Ctrl+D")); - aDrawCards->setShortcut(QKeySequence("Ctrl+E")); - aUndoDraw->setShortcut(QKeySequence("Ctrl+Shift+D")); - aMulligan->setShortcut(QKeySequence("Ctrl+M")); - aShuffle->setShortcut(QKeySequence("Ctrl+S")); - aUntapAll->setShortcut(QKeySequence("Ctrl+U")); - aRollDie->setShortcut(QKeySequence("Ctrl+I")); - aCreateToken->setShortcut(QKeySequence("Ctrl+T")); - aCreateAnotherToken->setShortcut(QKeySequence("Ctrl+G")); - aAlwaysRevealTopCard->setShortcut(QKeySequence("Ctrl+N")); + aViewSideboard->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aViewSideboard", QKeySequence("Ctrl+F3"))); + + aViewLibrary->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aViewLibrary", QKeySequence("F3"))); + + aViewTopCards->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aViewTopCards", QKeySequence("Ctrl+W"))); + + aViewGraveyard->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aViewGraveyard", QKeySequence("F4"))); + + aDrawCard->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aDrawCard", QKeySequence("Ctrl+D"))); + + aDrawCards->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aDrawCards", QKeySequence("Ctrl+E"))); + + aUndoDraw->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aUndoDraw", QKeySequence("Ctrl+Shift+D"))); + + aMulligan->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aMulligan", QKeySequence("Ctrl+M"))); + + aShuffle->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aShuffle", QKeySequence("Ctrl+S"))); + + aUntapAll->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aUntapAll", QKeySequence("Ctrl+U"))); + + aRollDie->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aRollDie", QKeySequence("Ctrl+I"))); + + aCreateToken->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aCreateToken", + QKeySequence("Ctrl+T"))); + + aCreateAnotherToken->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aCreateAnotherToken", + QKeySequence("Ctrl+G"))); + + aAlwaysRevealTopCard->setShortcuts(settingsCache->shortcuts().getShortcut( + "Player/aAlwaysRevealTopCard", + QKeySequence("Ctrl+N"))); QMapIterator counterIterator(counters); while (counterIterator.hasNext()) @@ -788,10 +838,15 @@ 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(QString("Ctrl+%1").arg((i + 1) % 10))); + if (i <= 10){ + newAction->setShortcut(QKeySequence(base + QString::number((i + 1) % 10))); + } connect(newAction, SIGNAL(triggered()), this, SLOT(actSayMessage())); sayMenu->addAction(newAction); } @@ -805,13 +860,20 @@ void Player::setDeck(const DeckLoader &_deck) createPredefinedTokenMenu->clear(); predefinedTokens.clear(); InnerDecklistNode *tokenZone = dynamic_cast(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(); predefinedTokens.append(tokenName); QAction *a = createPredefinedTokenMenu->addAction(tokenName); if (i < 10) - a->setShortcut(QKeySequence("Alt+" + QString::number((i + 1) % 10))); + { + a->setShortcut(QKeySequence(base + QString::number((i + 1) % 10))); + } connect(a, SIGNAL(triggered()), this, SLOT(actCreatePredefinedToken())); } } diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index b46746a5..33141680 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -6,17 +6,17 @@ #include #endif -QString SettingsCache::getLayoutsSettingsPath() +QString SettingsCache::getSettingsPath() { QString file = ""; #ifndef PORTABLE_BUILD - #if QT_VERSION >= 0x050000 +#if QT_VERSION >= 0x050000 file = QStandardPaths::writableLocation(QStandardPaths::DataLocation); #else file = QDesktopServices::storageLocation(QDesktopServices::DataLocation); #endif - file.append("/settings/layouts/"); + file.append("/settings/"); #endif return file; @@ -25,6 +25,7 @@ QString SettingsCache::getLayoutsSettingsPath() SettingsCache::SettingsCache() { settings = new QSettings(this); + shortcutsSettings = new ShortcutsSettings(getSettingsPath(),this); lang = settings->value("personal/lang").toString(); keepalive = settings->value("personal/keepalive", 5).toInt(); @@ -118,8 +119,8 @@ SettingsCache::SettingsCache() spectatorsCanSeeEverything = settings->value("game/spectatorscanseeeverything", false).toBool(); clientID = settings->value("personal/clientid", "notset").toString(); - QString file = getLayoutsSettingsPath(); - file.append("deckLayout.ini"); + QString file = getSettingsPath(); + file.append("layouts/deckLayout.ini"); QSettings layout_settings(file , QSettings::IniFormat); deckEditorLayoutState = layout_settings.value("layouts/deckEditor_state").toByteArray(); @@ -497,8 +498,8 @@ void SettingsCache::setDeckEditorLayoutState(const QByteArray &value) { deckEditorLayoutState = value; - QString file = getLayoutsSettingsPath(); - file.append("deckLayout.ini"); + QString file = getSettingsPath(); + file.append("layouts/deckLayout.ini"); QSettings layout_settings(file , QSettings::IniFormat); layout_settings.setValue("layouts/deckEditor_state",value); } @@ -507,8 +508,8 @@ void SettingsCache::setDeckEditorGeometry(const QByteArray &value) { deckEditorGeometry = value; - QString file = getLayoutsSettingsPath(); - file.append("deckLayout.ini"); + QString file = getSettingsPath(); + file.append("layouts/deckLayout.ini"); QSettings layout_settings(file , QSettings::IniFormat); layout_settings.setValue("layouts/deckEditor_geometry",value); } @@ -517,8 +518,8 @@ void SettingsCache::setDeckEditorCardSize(const QSize &value) { deckEditorCardSize = value; - QString file = getLayoutsSettingsPath(); - file.append("deckLayout.ini"); + QString file = getSettingsPath(); + file.append("layouts/deckLayout.ini"); QSettings layout_settings(file , QSettings::IniFormat); layout_settings.setValue("layouts/deckEditor_CardSize",value); } @@ -527,8 +528,8 @@ void SettingsCache::setDeckEditorDeckSize(const QSize &value) { deckEditorDeckSize = value; - QString file = getLayoutsSettingsPath(); - file.append("deckLayout.ini"); + QString file = getSettingsPath(); + file.append("layouts/deckLayout.ini"); QSettings layout_settings(file , QSettings::IniFormat); layout_settings.setValue("layouts/deckEditor_DeckSize",value); } @@ -537,8 +538,8 @@ void SettingsCache::setDeckEditorFilterSize(const QSize &value) { deckEditorFilterSize = value; - QString file = getLayoutsSettingsPath(); - file.append("deckLayout.ini"); + QString file = getSettingsPath(); + file.append("layouts/deckLayout.ini"); QSettings layout_settings(file , QSettings::IniFormat); layout_settings.setValue("layouts/deckEditor_FilterSize",value); } diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index c3e5f86b..bb275cbb 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -4,6 +4,7 @@ #include #include #include +#include "shortcutssettings.h" // the falbacks are used for cards without a muid #define PIC_URL_DEFAULT "http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=!cardid!&type=card" @@ -45,7 +46,7 @@ signals: void masterVolumeChanged(int value); private: QSettings *settings; - + ShortcutsSettings *shortcutsSettings; QByteArray mainWindowGeometry; QString lang; QString deckPath, replaysPath, picsPath, cardDatabasePath, tokenDatabasePath; @@ -102,7 +103,7 @@ private: int keepalive; QByteArray deckEditorLayoutState, deckEditorGeometry; QSize deckEditorFilterSize, deckEditorDeckSize, deckEditorCardSize; - QString getLayoutsSettingsPath(); + QString getSettingsPath(); public: SettingsCache(); @@ -187,6 +188,7 @@ public: void setDeckEditorDeckSize(const QSize &value); QSize getDeckEditorFilterSize() const { return deckEditorFilterSize; } void setDeckEditorFilterSize(const QSize &value); + ShortcutsSettings& shortcuts() const { return *shortcutsSettings; } public slots: void setMainWindowGeometry(const QByteArray &_mainWindowGeometry); diff --git a/cockatrice/src/shortcutssettings.cpp b/cockatrice/src/shortcutssettings.cpp new file mode 100644 index 00000000..399f9667 --- /dev/null +++ b/cockatrice/src/shortcutssettings.cpp @@ -0,0 +1,102 @@ +#include "shortcutssettings.h" + +#include +QList ShortcutsSettings::parseSecuenceString(QString stringSecuence) +{ + QStringList secuences = stringSecuence.split(";"); + QList secuenceList; + for(QStringList::const_iterator ss = secuences.cbegin(); ss != secuences.cend(); ++ss) + { + secuenceList.append(QKeySequence(*ss, QKeySequence::PortableText)); + } + + return secuenceList; +} + +ShortcutsSettings::ShortcutsSettings(QString settingsPath, QObject *parent) : QObject(parent) +{ + this->settingsFilePath = settingsPath; + this->settingsFilePath.append("shortcuts.ini"); + 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 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 secuenceList = parseSecuenceString(stringSecuence); + defaultShortCuts.insert(*it, secuenceList); + } + shortCutsFile.endGroup(); +} + +QList ShortcutsSettings::getShortcut(QString name, QList defaultShortCut) +{ + if(shortCuts.contains(name)) + return shortCuts.value(name); + + setShortcuts(name, defaultShortCut); + + defaultShortCuts[name] = defaultShortCut; + + QSettings shortCutsFile(settingsFilePath, QSettings::IniFormat); + shortCutsFile.beginGroup("Defaults"); + shortCutsFile.setValue(name, stringifySecuence(defaultShortCut)); + shortCutsFile.endGroup(); + return defaultShortCut; +} + +QList ShortcutsSettings::getShortcut(QString name, QKeySequence defaultShortCut) +{ + return getShortcut(name, QList() << defaultShortCut); +} + +QKeySequence ShortcutsSettings::getSingleShortcut(QString name, QKeySequence defaultShortCut) +{ + return getShortcut(name,defaultShortCut).at(0); +} + +QList ShortcutsSettings::getDefaultShortCut(QString name) +{ + return defaultShortCuts.value(name); +} + +QString ShortcutsSettings::stringifySecuence(QList secuence) const +{ + QString stringSecuence; + for(int i=0; i < secuence.size(); ++i) + { + stringSecuence.append(secuence.at(i).toString(QKeySequence::PortableText)); + if(i < secuence.size() - 1) + stringSecuence.append(";"); + } + + return stringSecuence; +} + +void ShortcutsSettings::setShortcuts(QString name, QList secuence) +{ + shortCuts[name] = secuence; + + QSettings shortCutsFile(settingsFilePath, QSettings::IniFormat); + shortCutsFile.beginGroup("Custom"); + QString stringSecuence = stringifySecuence(secuence); + shortCutsFile.setValue(name, stringSecuence); + shortCutsFile.endGroup(); +} + +void ShortcutsSettings::setShortcuts(QString name, QKeySequence secuence) +{ + setShortcuts(name, QList() << secuence); +} + diff --git a/cockatrice/src/shortcutssettings.h b/cockatrice/src/shortcutssettings.h new file mode 100644 index 00000000..f0aa795d --- /dev/null +++ b/cockatrice/src/shortcutssettings.h @@ -0,0 +1,37 @@ +#ifndef SHORTCUTSSETTINGS_H +#define SHORTCUTSSETTINGS_H + +#include +#include +#include +#include + +class ShortcutsSettings : public QObject +{ + Q_OBJECT +public: + ShortcutsSettings(QString settingsFilePath, QObject *parent = 0); + ~ShortcutsSettings() { } + + QList getShortcut(QString name, QList defaultShortCut); + QList getShortcut(QString name, QKeySequence defaultShortCut); + QKeySequence getSingleShortcut(QString name, QKeySequence defaultShortCut); + QList getDefaultShortCut(QString name); + + void setShortcuts(QString name, QList secuence); + void setShortcuts(QString name, QKeySequence secuence); + +signals: + +public slots: + +private: + QString settingsFilePath; + QMap > shortCuts; + QMap > defaultShortCuts; + + QString stringifySecuence(QList secuence) const; + QList parseSecuenceString(QString stringSecuence); +}; + +#endif // SHORTCUTSSETTINGS_H diff --git a/cockatrice/src/tab_deck_editor.cpp b/cockatrice/src/tab_deck_editor.cpp index 390acd42..ab442089 100644 --- a/cockatrice/src/tab_deck_editor.cpp +++ b/cockatrice/src/tab_deck_editor.cpp @@ -254,26 +254,44 @@ void TabDeckEditor::createFiltersDock() void TabDeckEditor::createMenus() { aNewDeck = new QAction(QString(), this); - aNewDeck->setShortcuts(QKeySequence::New); + aNewDeck->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aNewDeck", + QKeySequence::New)); connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck())); + aLoadDeck = new QAction(QString(), this); - aLoadDeck->setShortcuts(QKeySequence::Open); + aLoadDeck->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aLoadDeck", + QKeySequence::Open)); connect(aLoadDeck, SIGNAL(triggered()), this, SLOT(actLoadDeck())); + aSaveDeck = new QAction(QString(), this); - aSaveDeck->setShortcuts(QKeySequence::Save); + 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())); + aLoadDeckFromClipboard = new QAction(QString(), this); connect(aLoadDeckFromClipboard, SIGNAL(triggered()), this, SLOT(actLoadDeckFromClipboard())); - aLoadDeckFromClipboard->setShortcuts(QKeySequence::Paste); + aLoadDeckFromClipboard->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aLoadDeckFromClipboard", + QKeySequence::Paste)); + aSaveDeckToClipboard = new QAction(QString(), this); connect(aSaveDeckToClipboard, SIGNAL(triggered()), this, SLOT(actSaveDeckToClipboard())); - aSaveDeckToClipboard->setShortcuts(QKeySequence::Copy); + aSaveDeckToClipboard->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aSaveDeckToClipboard", + QKeySequence::Copy)); + aPrintDeck = new QAction(QString(), this); - aPrintDeck->setShortcuts(QKeySequence::Print); + 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())); aClose = new QAction(QString(), this); @@ -514,7 +532,9 @@ void TabDeckEditor::retranslateUi() aClearFilterAll->setText(tr("&Clear all filters")); aClearFilterOne->setText(tr("Delete selected")); - aClearFilterOne->setShortcut(QKeySequence("Backspace")); + aClearFilterOne->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aClearFilterOne", + QKeySequence("Backspace"))); nameLabel->setText(tr("Deck &name:")); commentsLabel->setText(tr("&Comments:")); @@ -533,17 +553,27 @@ void TabDeckEditor::retranslateUi() aAnalyzeDeck->setText(tr("&Analyze deck on deckstats.net")); aOpenCustomFolder->setText(tr("Open custom image folder")); aClose->setText(tr("&Close")); - aClose->setShortcut(QKeySequence("Ctrl+Q")); + aClose->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aClose", + QKeySequence("Ctrl+Q"))); aAddCard->setText(tr("Add card to &maindeck")); aAddCardToSideboard->setText(tr("Add card to &sideboard")); aRemoveCard->setText(tr("&Remove row")); - aRemoveCard->setShortcut(QKeySequence("Del")); + aRemoveCard->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aRemoveCard", + QKeySequence("Del"))); + aIncrement->setText(tr("&Increment number")); - aIncrement->setShortcut(QKeySequence("+")); + aIncrement->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aIncrement", + QKeySequence("+"))); + aDecrement->setText(tr("&Decrement number")); - aDecrement->setShortcut(QKeySequence("-")); + aDecrement->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabDeckEditor/aDecrement", + QKeySequence("-"))); deckMenu->setTitle(tr("&Deck Editor")); dbMenu->setTitle(tr("C&ard Database")); diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index a99f8517..83fa5420 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -125,9 +125,13 @@ DeckViewContainer::DeckViewContainer(int _playerId, TabGame *parent) void DeckViewContainer::retranslateUi() { loadLocalButton->setText(tr("Load local deck")); - loadLocalButton->setShortcut(QKeySequence("Ctrl+O")); + loadLocalButton->setShortcut(settingsCache->shortcuts().getSingleShortcut( + "DeckViewContainer/loadLocalButton", + QKeySequence("Ctrl+O"))); loadRemoteButton->setText(tr("Load deck from server")); - loadRemoteButton->setShortcut(QKeySequence("Ctrl+Alt+O")); + loadRemoteButton->setShortcut(settingsCache->shortcuts().getSingleShortcut( + "DeckViewContainer/loadRemoteButton", + QKeySequence("Ctrl+Alt+O"))); readyStartButton->setText(tr("Ready to s&tart")); updateSideboardLockButtonText(); } @@ -469,12 +473,12 @@ TabGame::TabGame(TabSupervisor *_tabSupervisor, QList &_client QAction *temp = new QAction(QString(), this); connect(temp, SIGNAL(triggered()), this, SLOT(actPhaseAction())); switch (i) { - case 0: temp->setShortcut(QKeySequence("F5")); break; - case 2: temp->setShortcut(QKeySequence("F6")); break; - case 3: temp->setShortcut(QKeySequence("F7")); break; - case 4: temp->setShortcut(QKeySequence("F8")); break; - case 9: temp->setShortcut(QKeySequence("F9")); break; - case 10: temp->setShortcut(QKeySequence("F10")); break; + 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; default: ; } phasesMenu->addAction(temp); @@ -545,37 +549,57 @@ void TabGame::retranslateUi() gameMenu->setTitle(tr("&Game")); if (aNextPhase) { aNextPhase->setText(tr("Next &phase")); - aNextPhase->setShortcuts(QList() << QKeySequence("Ctrl+Space") << QKeySequence("Tab")); + aNextPhase->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aNextPhase", + QList() + << QKeySequence("Ctrl+Space") + << QKeySequence("Tab"))); } if (aNextTurn) { aNextTurn->setText(tr("Next &turn")); - aNextTurn->setShortcuts(QList() << QKeySequence("Ctrl+Return") << QKeySequence("Ctrl+Enter")); + aNextTurn->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aNextTurn", + QList() + << QKeySequence("Ctrl+Return") + << QKeySequence("Ctrl+Enter"))); } if (aRemoveLocalArrows) { aRemoveLocalArrows->setText(tr("&Remove all local arrows")); - aRemoveLocalArrows->setShortcut(QKeySequence("Ctrl+R")); + aRemoveLocalArrows->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aRemoveLocalArrows", + QKeySequence("Ctrl+R"))); } if (aRotateViewCW) { aRotateViewCW->setText(tr("Rotate View Cl&ockwise")); - aRotateViewCW->setShortcut(QKeySequence("Ctrl+]")); + aRotateViewCW->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aRotateViewCW", + QKeySequence("Ctrl+]"))); } if (aRotateViewCCW) { aRotateViewCCW->setText(tr("Rotate View Co&unterclockwise")); - aRotateViewCCW->setShortcut(QKeySequence("Ctrl+[")); + aRotateViewCCW->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aRotateViewCCW", + QKeySequence("Ctrl+["))); } if (aGameInfo) aGameInfo->setText(tr("Game &information")); if (aConcede) { aConcede->setText(tr("&Concede")); - aConcede->setShortcut(QKeySequence("F2")); + aConcede->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aRotateViewCCW", + QKeySequence("F2"))); } if (aLeaveGame) { aLeaveGame->setText(tr("&Leave game")); - aLeaveGame->setShortcut(QKeySequence("Ctrl+Q")); + aLeaveGame->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aLeaveGame", + QKeySequence("Ctrl+Q"))); } if (aCloseReplay) { aCloseReplay->setText(tr("C&lose replay")); - aCloseReplay->setShortcut(QKeySequence("Ctrl+Q")); + aCloseReplay->setShortcuts(settingsCache->shortcuts().getShortcut( + "TabGame/aCloseReplay", + QKeySequence("Ctrl+Q"))); } if (sayLabel) diff --git a/cockatrice/src/tab_room.cpp b/cockatrice/src/tab_room.cpp index 545901ce..53e4de7f 100644 --- a/cockatrice/src/tab_room.cpp +++ b/cockatrice/src/tab_room.cpp @@ -59,7 +59,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerI QMenu *chatSettingsMenu = new QMenu(this); aClearChat = chatSettingsMenu->addAction(QString()); - aClearChat->setShortcut(QKeySequence("F12")); + aClearChat->setShortcuts(settingsCache->shortcuts().getShortcut("tab_room/aClearChat", QKeySequence("F12"))); connect(aClearChat, SIGNAL(triggered()), this, SLOT(actClearChat())); chatSettingsMenu->addSeparator(); diff --git a/cockatrice/src/window_main.cpp b/cockatrice/src/window_main.cpp index 4c979729..291299fe 100644 --- a/cockatrice/src/window_main.cpp +++ b/cockatrice/src/window_main.cpp @@ -458,7 +458,7 @@ void MainWindow::retranslateUi() aWatchReplay->setText(tr("&Watch replay...")); aDeckEditor->setText(tr("&Deck editor")); aFullScreen->setText(tr("&Full screen")); - aFullScreen->setShortcut(QKeySequence("Ctrl+F")); + aFullScreen->setShortcuts(settingsCache->shortcuts().getShortcut("MainWindow/aFullScreen", QKeySequence("Ctrl+F"))); aRegister->setText(tr("&Register to server...")); aSettings->setText(tr("&Settings...")); aExit->setText(tr("&Exit")); diff --git a/oracle/CMakeLists.txt b/oracle/CMakeLists.txt index fd442f26..c91e958e 100644 --- a/oracle/CMakeLists.txt +++ b/oracle/CMakeLists.txt @@ -13,6 +13,7 @@ SET(oracle_SOURCES src/oracleimporter.cpp ../cockatrice/src/carddatabase.cpp ../cockatrice/src/settingscache.cpp + ../cockatrice/src/shortcutssettings.cpp ../cockatrice/src/qt-json/json.cpp )