new zone view code

This commit is contained in:
Max-Wilhelm Bruker 2010-03-08 15:55:35 +01:00
parent ad3f4ba9e8
commit 26a77d9e40
27 changed files with 474 additions and 397 deletions

View file

@ -12,7 +12,8 @@ enum CardItemType {
typeCard = QGraphicsItem::UserType + 1, typeCard = QGraphicsItem::UserType + 1,
typeCardDrag = QGraphicsItem::UserType + 2, typeCardDrag = QGraphicsItem::UserType + 2,
typeZone = QGraphicsItem::UserType + 3, typeZone = QGraphicsItem::UserType + 3,
typeOther = QGraphicsItem::UserType + 4 typeZoneView = QGraphicsItem::UserType + 4,
typeOther = QGraphicsItem::UserType + 5
}; };
class AbstractCardItem : public QObject, public AbstractGraphicsItem { class AbstractCardItem : public QObject, public AbstractGraphicsItem {

View file

@ -1,9 +1,11 @@
#include "carddragitem.h" #include "carddragitem.h"
#include "cardzone.h" #include "cardzone.h"
#include "tablezone.h" #include "tablezone.h"
#include "zoneviewzone.h"
#include <QGraphicsScene> #include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent> #include <QGraphicsSceneMouseEvent>
#include <QCursor> #include <QCursor>
#include <QDebug>
CardDragItem::CardDragItem(AbstractCardItem *_item, int _id, const QPointF &_hotSpot, bool _faceDown, AbstractCardDragItem *parentDrag) CardDragItem::CardDragItem(AbstractCardItem *_item, int _id, const QPointF &_hotSpot, bool _faceDown, AbstractCardDragItem *parentDrag)
: AbstractCardDragItem(_item, _hotSpot, parentDrag), id(_id), faceDown(_faceDown), currentZone(0) : AbstractCardDragItem(_item, _hotSpot, parentDrag), id(_id), faceDown(_faceDown), currentZone(0)
@ -14,10 +16,17 @@ void CardDragItem::updatePosition(const QPointF &cursorScenePos)
{ {
QList<QGraphicsItem *> colliding = scene()->items(cursorScenePos); QList<QGraphicsItem *> colliding = scene()->items(cursorScenePos);
CardZone *cardZone = 0;
ZoneViewZone *zoneViewZone = 0;
for (int i = colliding.size() - 1; i >= 0; i--) {
if (!zoneViewZone) zoneViewZone = qgraphicsitem_cast<ZoneViewZone *>(colliding.at(i));
if (!cardZone) cardZone = qgraphicsitem_cast<CardZone *>(colliding.at(i));
}
CardZone *cursorZone = 0; CardZone *cursorZone = 0;
for (int i = colliding.size() - 1; i >= 0; i--) if (zoneViewZone)
if ((cursorZone = qgraphicsitem_cast<CardZone *>(colliding.at(i)))) cursorZone = zoneViewZone;
break; else if (cardZone)
cursorZone = cardZone;
if (!cursorZone) if (!cursorZone)
return; return;
currentZone = cursorZone; currentZone = cursorZone;

View file

@ -1,5 +1,6 @@
#include "cardlist.h" #include "cardlist.h"
#include "carditem.h" #include "carditem.h"
#include "carddatabase.h"
CardList::CardList(bool _contentsKnown) CardList::CardList(bool _contentsKnown)
: QList<CardItem *>(), contentsKnown(_contentsKnown) : QList<CardItem *>(), contentsKnown(_contentsKnown)
@ -32,15 +33,27 @@ CardItem *CardList::findCard(const int id, const bool remove, int *position)
} }
class CardList::compareFunctor { class CardList::compareFunctor {
private:
int flags;
public: public:
compareFunctor(int _flags) : flags(_flags)
{
}
inline bool operator()(CardItem *a, CardItem *b) const inline bool operator()(CardItem *a, CardItem *b) const
{ {
return a->getName() < b->getName(); if (flags & SortByType) {
QString t1 = a->getInfo()->getMainCardType();
QString t2 = b->getInfo()->getMainCardType();
if ((t1 == t2) && (flags & SortByName))
return a->getName() < b->getName();
return t1 < t2;
} else
return a->getName() < b->getName();
} }
}; };
void CardList::sort() void CardList::sort(int flags)
{ {
compareFunctor cf; compareFunctor cf(flags);
qSort(begin(), end(), cf); qSort(begin(), end(), cf);
} }

View file

@ -11,10 +11,11 @@ private:
protected: protected:
bool contentsKnown; bool contentsKnown;
public: public:
enum SortFlags { SortByName = 1, SortByType = 2 };
CardList(bool _contentsKnown); CardList(bool _contentsKnown);
CardItem *findCard(const int id, const bool remove, int *position = NULL); CardItem *findCard(const int id, const bool remove, int *position = NULL);
bool getContentsKnown() const { return contentsKnown; } bool getContentsKnown() const { return contentsKnown; }
void sort(); void sort(int flags = SortByName);
}; };
#endif #endif

View file

@ -167,9 +167,6 @@ void GeneralSettingsPage::retranslateUi()
AppearanceSettingsPage::AppearanceSettingsPage() AppearanceSettingsPage::AppearanceSettingsPage()
{ {
zoneBgGroupBox = new QGroupBox;
QSettings settings;
handBgLabel = new QLabel; handBgLabel = new QLabel;
handBgEdit = new QLineEdit(settingsCache->getHandBgPath()); handBgEdit = new QLineEdit(settingsCache->getHandBgPath());
handBgEdit->setReadOnly(true); handBgEdit->setReadOnly(true);
@ -199,9 +196,9 @@ AppearanceSettingsPage::AppearanceSettingsPage()
zoneBgGrid->addWidget(playerAreaBgEdit, 2, 1); zoneBgGrid->addWidget(playerAreaBgEdit, 2, 1);
zoneBgGrid->addWidget(playerAreaBgButton, 2, 2); zoneBgGrid->addWidget(playerAreaBgButton, 2, 2);
zoneBgGroupBox = new QGroupBox;
zoneBgGroupBox->setLayout(zoneBgGrid); zoneBgGroupBox->setLayout(zoneBgGrid);
tableGroupBox = new QGroupBox;
economicGridCheckBox = new QCheckBox; economicGridCheckBox = new QCheckBox;
economicGridCheckBox->setChecked(settingsCache->getEconomicGrid()); economicGridCheckBox->setChecked(settingsCache->getEconomicGrid());
connect(economicGridCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setEconomicGrid(int))); connect(economicGridCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setEconomicGrid(int)));
@ -209,20 +206,21 @@ AppearanceSettingsPage::AppearanceSettingsPage()
QGridLayout *tableGrid = new QGridLayout; QGridLayout *tableGrid = new QGridLayout;
tableGrid->addWidget(economicGridCheckBox, 0, 0, 1, 2); tableGrid->addWidget(economicGridCheckBox, 0, 0, 1, 2);
tableGroupBox = new QGroupBox;
tableGroupBox->setLayout(tableGrid); tableGroupBox->setLayout(tableGrid);
zoneViewGroupBox = new QGroupBox; zoneViewSortByNameCheckBox = new QCheckBox;
settings.beginGroup("zoneview"); zoneViewSortByNameCheckBox->setChecked(settingsCache->getZoneViewSortByName());
connect(zoneViewSortByNameCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setZoneViewSortByName(int)));
zoneViewSortingCheckBox = new QCheckBox; zoneViewSortByTypeCheckBox = new QCheckBox;
zoneViewSortingCheckBox->setChecked(settings.value("sorting").toInt()); zoneViewSortByTypeCheckBox->setChecked(settingsCache->getZoneViewSortByType());
connect(zoneViewSortingCheckBox, SIGNAL(stateChanged(int)), this, SLOT(zoneViewSortingCheckBoxChanged(int))); connect(zoneViewSortByTypeCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setZoneViewSortByType(int)));
settings.endGroup();
QGridLayout *zoneViewGrid = new QGridLayout; QGridLayout *zoneViewGrid = new QGridLayout;
zoneViewGrid->addWidget(zoneViewSortingCheckBox, 0, 0, 1, 2); zoneViewGrid->addWidget(zoneViewSortByNameCheckBox, 0, 0, 1, 2);
zoneViewGrid->addWidget(zoneViewSortByTypeCheckBox, 1, 0, 1, 2);
zoneViewGroupBox = new QGroupBox;
zoneViewGroupBox->setLayout(zoneViewGrid); zoneViewGroupBox->setLayout(zoneViewGrid);
QVBoxLayout *mainLayout = new QVBoxLayout; QVBoxLayout *mainLayout = new QVBoxLayout;
@ -245,7 +243,8 @@ void AppearanceSettingsPage::retranslateUi()
economicGridCheckBox->setText(tr("Economic layout")); economicGridCheckBox->setText(tr("Economic layout"));
zoneViewGroupBox->setTitle(tr("Zone view layout")); zoneViewGroupBox->setTitle(tr("Zone view layout"));
zoneViewSortingCheckBox->setText(tr("Sort alphabetically by default")); zoneViewSortByNameCheckBox->setText(tr("Sort by name"));
zoneViewSortByTypeCheckBox->setText(tr("Sort by type"));
} }
void AppearanceSettingsPage::handBgButtonClicked() void AppearanceSettingsPage::handBgButtonClicked()
@ -278,15 +277,6 @@ void AppearanceSettingsPage::playerAreaBgButtonClicked()
settingsCache->setPlayerBgPath(path); settingsCache->setPlayerBgPath(path);
} }
void AppearanceSettingsPage::zoneViewSortingCheckBoxChanged(int state)
{
QSettings settings;
settings.beginGroup("zoneview");
settings.setValue("sorting", state);
emit zoneViewSortingChanged(state);
}
UserInterfaceSettingsPage::UserInterfaceSettingsPage() UserInterfaceSettingsPage::UserInterfaceSettingsPage()
{ {
doubleClickToPlayCheckBox = new QCheckBox; doubleClickToPlayCheckBox = new QCheckBox;

View file

@ -52,16 +52,14 @@ private slots:
void handBgButtonClicked(); void handBgButtonClicked();
void tableBgButtonClicked(); void tableBgButtonClicked();
void playerAreaBgButtonClicked(); void playerAreaBgButtonClicked();
void zoneViewSortingCheckBoxChanged(int state);
signals: signals:
void handBgChanged(const QString &path); void handBgChanged(const QString &path);
void tableBgChanged(const QString &path); void tableBgChanged(const QString &path);
void playerAreaBgChanged(const QString &path); void playerAreaBgChanged(const QString &path);
void zoneViewSortingChanged(int state);
private: private:
QLabel *handBgLabel, *tableBgLabel, *playerAreaBgLabel; QLabel *handBgLabel, *tableBgLabel, *playerAreaBgLabel;
QLineEdit *handBgEdit, *tableBgEdit, *playerAreaBgEdit; QLineEdit *handBgEdit, *tableBgEdit, *playerAreaBgEdit;
QCheckBox *economicGridCheckBox, *zoneViewSortingCheckBox; QCheckBox *economicGridCheckBox, *zoneViewSortByNameCheckBox, *zoneViewSortByTypeCheckBox;
QGroupBox *zoneBgGroupBox, *tableGroupBox, *zoneViewGroupBox; QGroupBox *zoneBgGroupBox, *tableGroupBox, *zoneViewGroupBox;
public: public:
AppearanceSettingsPage(); AppearanceSettingsPage();

View file

@ -2,6 +2,7 @@
#include "player.h" #include "player.h"
#include "zoneviewwidget.h" #include "zoneviewwidget.h"
#include "zoneviewzone.h" #include "zoneviewzone.h"
#include <QAction>
GameScene::GameScene(QObject *parent) GameScene::GameScene(QObject *parent)
: QGraphicsScene(parent) : QGraphicsScene(parent)
@ -78,7 +79,7 @@ void GameScene::toggleZoneView(Player *player, const QString &zoneName, int numb
} }
} }
ZoneViewWidget *item = new ZoneViewWidget(this, player, player->getZones().value(zoneName), numberCards); ZoneViewWidget *item = new ZoneViewWidget(player, player->getZones().value(zoneName), numberCards);
views.append(item); views.append(item);
connect(item, SIGNAL(closePressed(ZoneViewWidget *)), this, SLOT(removeZoneView(ZoneViewWidget *))); connect(item, SIGNAL(closePressed(ZoneViewWidget *)), this, SLOT(removeZoneView(ZoneViewWidget *)));
addItem(item); addItem(item);
@ -95,3 +96,9 @@ void GameScene::clearViews()
for (int i = 0; i < views.size(); ++i) for (int i = 0; i < views.size(); ++i)
views[i]->close(); views[i]->close();
} }
void GameScene::closeMostRecentZoneView()
{
if (!views.isEmpty())
views.last()->close();
}

View file

@ -25,6 +25,7 @@ public slots:
void addPlayer(Player *player); void addPlayer(Player *player);
void removePlayer(Player *player); void removePlayer(Player *player);
void clearViews(); void clearViews();
void closeMostRecentZoneView();
private slots: private slots:
void rearrange(); void rearrange();
}; };

View file

@ -1,4 +1,5 @@
#include "gameview.h" #include "gameview.h"
#include <QAction>
GameView::GameView(QGraphicsScene *scene, QWidget *parent) GameView::GameView(QGraphicsScene *scene, QWidget *parent)
: QGraphicsView(scene, parent) : QGraphicsView(scene, parent)
@ -7,9 +8,13 @@ GameView::GameView(QGraphicsScene *scene, QWidget *parent)
setRenderHints(QPainter::TextAntialiasing | QPainter::Antialiasing/* | QPainter::SmoothPixmapTransform*/); setRenderHints(QPainter::TextAntialiasing | QPainter::Antialiasing/* | QPainter::SmoothPixmapTransform*/);
setDragMode(RubberBandDrag); setDragMode(RubberBandDrag);
setViewportUpdateMode(BoundingRectViewportUpdate); setViewportUpdateMode(BoundingRectViewportUpdate);
setFocusPolicy(Qt::NoFocus);
connect(scene, SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(updateSceneRect(const QRectF &))); connect(scene, SIGNAL(sceneRectChanged(const QRectF &)), this, SLOT(updateSceneRect(const QRectF &)));
aCloseMostRecentZoneView = new QAction(this);
aCloseMostRecentZoneView->setShortcut(tr("Esc"));
connect(aCloseMostRecentZoneView, SIGNAL(triggered()), scene, SLOT(closeMostRecentZoneView()));
addAction(aCloseMostRecentZoneView);
} }
void GameView::resizeEvent(QResizeEvent *event) void GameView::resizeEvent(QResizeEvent *event)

View file

@ -5,6 +5,8 @@
class GameView : public QGraphicsView { class GameView : public QGraphicsView {
Q_OBJECT Q_OBJECT
private:
QAction *aCloseMostRecentZoneView;
protected: protected:
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);
public slots: public slots:

View file

@ -32,12 +32,14 @@
#include "window_main.h" #include "window_main.h"
#include "carddatabase.h" #include "carddatabase.h"
#include "settingscache.h" #include "settingscache.h"
#include "pingpixmapgenerator.h"
//Q_IMPORT_PLUGIN(qjpeg) //Q_IMPORT_PLUGIN(qjpeg)
CardDatabase *db; CardDatabase *db;
QTranslator *translator; QTranslator *translator;
SettingsCache *settingsCache; SettingsCache *settingsCache;
PingPixmapGenerator *pingPixmapGenerator;
void myMessageOutput(QtMsgType /*type*/, const char *msg) void myMessageOutput(QtMsgType /*type*/, const char *msg)
{ {
@ -61,6 +63,7 @@ int main(int argc, char *argv[])
settingsCache = new SettingsCache; settingsCache = new SettingsCache;
db = new CardDatabase; db = new CardDatabase;
pingPixmapGenerator = new PingPixmapGenerator;
QString localeName;// = QLocale::system().name(); QString localeName;// = QLocale::system().name();
QTranslator qtTranslator; QTranslator qtTranslator;
@ -88,6 +91,7 @@ int main(int argc, char *argv[])
int retval = app.exec(); int retval = app.exec();
delete pingPixmapGenerator;
delete db; delete db;
delete settingsCache; delete settingsCache;

View file

@ -1,8 +1,6 @@
#include "pingpixmapgenerator.h" #include "pingpixmapgenerator.h"
#include <QPainter> #include <QPainter>
QMap<int, QPixmap> PingPixmapGenerator::pmCache;
QPixmap PingPixmapGenerator::generatePixmap(int size, int value, int max) QPixmap PingPixmapGenerator::generatePixmap(int size, int value, int max)
{ {
int key = size * 1000000 + max * 1000 + value; int key = size * 1000000 + max * 1000 + value;

View file

@ -6,9 +6,11 @@
class PingPixmapGenerator { class PingPixmapGenerator {
private: private:
static QMap<int, QPixmap> pmCache; QMap<int, QPixmap> pmCache;
public: public:
static QPixmap generatePixmap(int size, int value, int max); QPixmap generatePixmap(int size, int value, int max);
}; };
extern PingPixmapGenerator *pingPixmapGenerator;
#endif #endif

View file

@ -218,6 +218,9 @@ Player::Player(const QString &_name, int _id, bool _local, Client *_client, TabG
cardMenu->addAction(aSetCounters); cardMenu->addAction(aSetCounters);
cardMenu->addSeparator(); cardMenu->addSeparator();
moveMenu = cardMenu->addMenu(QString()); moveMenu = cardMenu->addMenu(QString());
playerMenu->addSeparator();
playerMenu->addMenu(cardMenu);
moveMenu->addAction(aMoveToTopLibrary); moveMenu->addAction(aMoveToTopLibrary);
moveMenu->addAction(aMoveToBottomLibrary); moveMenu->addAction(aMoveToBottomLibrary);

View file

@ -80,7 +80,7 @@ void PlayerListWidget::updatePing(int playerId, int pingTime)
QTreeWidgetItem *twi = players.value(playerId, 0); QTreeWidgetItem *twi = players.value(playerId, 0);
if (!twi) if (!twi)
return; return;
twi->setIcon(0, QIcon(PingPixmapGenerator::generatePixmap(10, pingTime, 10))); twi->setIcon(0, QIcon(pingPixmapGenerator->generatePixmap(10, pingTime, 10)));
} }
void PlayerListWidget::setGameStarted(bool _gameStarted) void PlayerListWidget::setGameStarted(bool _gameStarted)

View file

@ -87,3 +87,15 @@ void SettingsCache::setEconomicGrid(int _economicGrid)
settings->setValue("table/economic", economicGrid); settings->setValue("table/economic", economicGrid);
emit economicGridChanged(); emit economicGridChanged();
} }
void SettingsCache::setZoneViewSortByName(int _zoneViewSortByName)
{
zoneViewSortByName = _zoneViewSortByName;
settings->setValue("zoneview/sortbyname", zoneViewSortByName);
}
void SettingsCache::setZoneViewSortByType(int _zoneViewSortByType)
{
zoneViewSortByType = _zoneViewSortByType;
settings->setValue("zoneview/sortbytype", zoneViewSortByType);
}

View file

@ -25,6 +25,7 @@ private:
bool picDownload; bool picDownload;
bool doubleClickToPlay; bool doubleClickToPlay;
bool economicGrid; bool economicGrid;
bool zoneViewSortByName, zoneViewSortByType;
public: public:
SettingsCache(); SettingsCache();
QString getLang() const { return lang; } QString getLang() const { return lang; }
@ -37,6 +38,8 @@ public:
bool getPicDownload() const { return picDownload; } bool getPicDownload() const { return picDownload; }
bool getDoubleClickToPlay() const { return doubleClickToPlay; } bool getDoubleClickToPlay() const { return doubleClickToPlay; }
bool getEconomicGrid() const { return economicGrid; } bool getEconomicGrid() const { return economicGrid; }
bool getZoneViewSortByName() const { return zoneViewSortByName; }
bool getZoneViewSortByType() const { return zoneViewSortByType; }
public slots: public slots:
void setLang(const QString &_lang); void setLang(const QString &_lang);
void setDeckPath(const QString &_deckPath); void setDeckPath(const QString &_deckPath);
@ -48,8 +51,10 @@ public slots:
void setPicDownload(int _picDownload); void setPicDownload(int _picDownload);
void setDoubleClickToPlay(int _doubleClickToPlay); void setDoubleClickToPlay(int _doubleClickToPlay);
void setEconomicGrid(int _economicGrid); void setEconomicGrid(int _economicGrid);
void setZoneViewSortByName(int _zoneViewSortByName);
void setZoneViewSortByType(int _zoneViewSortByType);
}; };
extern SettingsCache *settingsCache; extern SettingsCache *settingsCache;
#endif #endif

View file

@ -81,9 +81,6 @@ TabGame::TabGame(Client *_client, int _gameId, const QString &_gameDescription,
readyStartButton->hide(); readyStartButton->hide();
} }
aCloseMostRecentZoneView = new QAction(this);
addAction(aCloseMostRecentZoneView);
connect(loadLocalButton, SIGNAL(clicked()), this, SLOT(loadLocalDeck())); connect(loadLocalButton, SIGNAL(clicked()), this, SLOT(loadLocalDeck()));
connect(loadRemoteButton, SIGNAL(clicked()), this, SLOT(loadRemoteDeck())); connect(loadRemoteButton, SIGNAL(clicked()), this, SLOT(loadRemoteDeck()));
connect(readyStartButton, SIGNAL(clicked()), this, SLOT(readyStart())); connect(readyStartButton, SIGNAL(clicked()), this, SLOT(readyStart()));
@ -146,8 +143,6 @@ void TabGame::retranslateUi()
readyStartButton->setText(tr("S&tart game")); readyStartButton->setText(tr("S&tart game"));
sayLabel->setText(tr("&Say:")); sayLabel->setText(tr("&Say:"));
cardInfo->retranslateUi(); cardInfo->retranslateUi();
aCloseMostRecentZoneView->setText(tr("Close most recent zone view"));
aCloseMostRecentZoneView->setShortcut(tr("Esc"));
QMapIterator<int, Player *> i(players); QMapIterator<int, Player *> i(players);
while (i.hasNext()) while (i.hasNext())

View file

@ -66,8 +66,7 @@ private:
ZoneViewLayout *zoneLayout; ZoneViewLayout *zoneLayout;
QAction *playersSeparator; QAction *playersSeparator;
QMenu *playersMenu; QMenu *playersMenu;
QAction *aCloseMostRecentZoneView, QAction *aConcede, *aLeaveGame, *aNextPhase, *aNextTurn, *aRemoveLocalArrows;
*aConcede, *aLeaveGame, *aNextPhase, *aNextTurn, *aRemoveLocalArrows;
Player *addPlayer(int playerId, const QString &playerName); Player *addPlayer(int playerId, const QString &playerName);

View file

@ -98,7 +98,7 @@ void TabSupervisor::updatePingTime(int value, int max)
if (!tabServer) if (!tabServer)
return; return;
setTabIcon(0, QIcon(PingPixmapGenerator::generatePixmap(15, value, max))); setTabIcon(0, QIcon(pingPixmapGenerator->generatePixmap(15, value, max)));
} }
void TabSupervisor::gameJoined(Event_GameJoined *event) void TabSupervisor::gameJoined(Event_GameJoined *event)

View file

@ -53,8 +53,6 @@ void TableZone::addCardImpl(CardItem *card, int _x, int _y)
cards.append(card); cards.append(card);
card->setGridPoint(QPoint(_x, _y)); card->setGridPoint(QPoint(_x, _y));
resizeToContents();
card->setParentItem(this); card->setParentItem(this);
card->setVisible(true); card->setVisible(true);
card->update(); card->update();
@ -82,7 +80,8 @@ void TableZone::reorganizeCards()
cards[i]->setPos(x, y); cards[i]->setPos(x, y);
cards[i]->setZValue((y + CARD_HEIGHT) * 10000000 + x + 1000); cards[i]->setZValue((y + CARD_HEIGHT) * 10000000 + x + 1000);
} }
resizeToContents();
update(); update();
} }

View file

@ -6,26 +6,36 @@
#include "client.h" #include "client.h"
#include "gamescene.h" #include "gamescene.h"
#include "protocol_items.h" #include "protocol_items.h"
#include "settingscache.h"
ZoneViewWidget::ZoneViewWidget(GameScene *_scene, Player *_player, CardZone *_origZone, int numberCards) ZoneViewWidget::ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards)
: QGraphicsWidget(0, Qt::Tool | Qt::CustomizeWindowHint | Qt::WindowSystemMenuHint | Qt::WindowTitleHint/* | Qt::WindowCloseButtonHint*/), player(_player) : QGraphicsWidget(0, Qt::Tool | Qt::CustomizeWindowHint | Qt::WindowSystemMenuHint | Qt::WindowTitleHint/* | Qt::WindowCloseButtonHint*/), player(_player)
{ {
setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_DeleteOnClose);
QFont font; QFont font;
font.setPixelSize(8); font.setPixelSize(10);
setFont(font); setFont(font);
QGraphicsLinearLayout *vbox = new QGraphicsLinearLayout(Qt::Vertical); QGraphicsLinearLayout *vbox = new QGraphicsLinearLayout(Qt::Vertical);
setLayout(vbox); setLayout(vbox);
if (numberCards == -1) { if (numberCards == -1) {
sortCheckBox = new QCheckBox; sortByNameCheckBox = new QCheckBox;
QGraphicsProxyWidget *sortProxy = new QGraphicsProxyWidget; sortByNameCheckBox->setChecked(settingsCache->getZoneViewSortByName());
sortProxy->setWidget(sortCheckBox); QGraphicsProxyWidget *sortByNameProxy = new QGraphicsProxyWidget;
vbox->addItem(sortProxy); sortByNameProxy->setWidget(sortByNameCheckBox);
} else vbox->addItem(sortByNameProxy);
sortCheckBox = 0;
sortByTypeCheckBox = new QCheckBox;
sortByTypeCheckBox->setChecked(settingsCache->getZoneViewSortByType());
QGraphicsProxyWidget *sortByTypeProxy = new QGraphicsProxyWidget;
sortByTypeProxy->setWidget(sortByTypeCheckBox);
vbox->addItem(sortByTypeProxy);
} else {
sortByNameCheckBox = 0;
sortByTypeCheckBox = 0;
}
if (_origZone->getIsShufflable() && (numberCards == -1)) { if (_origZone->getIsShufflable() && (numberCards == -1)) {
shuffleCheckBox = new QCheckBox; shuffleCheckBox = new QCheckBox;
@ -36,31 +46,18 @@ ZoneViewWidget::ZoneViewWidget(GameScene *_scene, Player *_player, CardZone *_or
} else } else
shuffleCheckBox = 0; shuffleCheckBox = 0;
qreal left, top, right, bottom; extraHeight = vbox->sizeHint(Qt::PreferredSize).height();
getWindowFrameMargins(&left, &top, &right, &bottom); resize(150, 150);
qreal h = _scene->sceneRect().height() - (top + bottom);
/* scrollBar = new QScrollBar(Qt::Vertical);
QGraphicsProxyWidget *scrollProxy = new QGraphicsProxyWidget(this);
scrollProxy->setWidget(scrollBar);
scrollProxy->setPos(138, y);
scrollProxy->resize(scrollProxy->size().width(), h - y);
qreal w = 138 + scrollProxy->size().width();
*/qreal w = 138;
resize(w, h);
zone = new ZoneViewZone(player, _origZone, numberCards, this); zone = new ZoneViewZone(player, _origZone, numberCards, this);
connect(zone, SIGNAL(contentsChanged()), this, SLOT(resizeToZoneContents())); connect(zone, SIGNAL(optimumRectChanged()), this, SLOT(resizeToZoneContents()));
connect(zone, SIGNAL(beingDeleted()), this, SLOT(zoneDeleted())); connect(zone, SIGNAL(beingDeleted()), this, SLOT(zoneDeleted()));
zone->dumpObjectInfo();
vbox->addItem(zone); vbox->addItem(zone);
zone->initializeCards(); zone->initializeCards();
if (sortCheckBox) { if (sortByNameCheckBox) {
connect(sortCheckBox, SIGNAL(stateChanged(int)), zone, SLOT(setSortingEnabled(int))); connect(sortByNameCheckBox, SIGNAL(stateChanged(int)), zone, SLOT(setSortByName(int)));
QSettings settings; connect(sortByTypeCheckBox, SIGNAL(stateChanged(int)), zone, SLOT(setSortByType(int)));
sortCheckBox->setChecked(settings.value("zoneview/sorting").toInt());
} }
retranslateUi(); retranslateUi();
@ -69,26 +66,24 @@ ZoneViewWidget::ZoneViewWidget(GameScene *_scene, Player *_player, CardZone *_or
void ZoneViewWidget::retranslateUi() void ZoneViewWidget::retranslateUi()
{ {
setWindowTitle(zone->getTranslatedName(false, CaseNominative)); setWindowTitle(zone->getTranslatedName(false, CaseNominative));
if (sortCheckBox) if (sortByNameCheckBox)
sortCheckBox->setText(tr("sort alphabetically")); sortByNameCheckBox->setText(tr("sort by name"));
if (sortByTypeCheckBox)
sortByTypeCheckBox->setText(tr("sort by type"));
if (shuffleCheckBox) if (shuffleCheckBox)
shuffleCheckBox->setText(tr("shuffle when closing")); shuffleCheckBox->setText(tr("shuffle when closing"));
} }
void ZoneViewWidget::resizeToZoneContents() void ZoneViewWidget::resizeToZoneContents()
{ {
/* qDebug("+++++++ bla"); QRectF zoneRect = zone->getOptimumRect();
int cardCount = zone->getCards().size(); qDebug() << "resizeToZone: w=" << zoneRect.width() << "h=" << zoneRect.height();
const QRectF &playersRect = static_cast<GameScene *>(scene())->getPlayersRect(); qDebug() << "maxW=" << maximumWidth() << "maxH=" << maximumHeight();
int h = 0; QSizeF newSize(zoneRect.width() + 10, zoneRect.height() + extraHeight);
if (cardCount * CARD_HEIGHT / 3 < playersRect.height() * 1.5) setMaximumSize(newSize);
h = cardCount * CARD_HEIGHT / 3; resize(newSize);
else qDebug() << "w=" << size().width() << "h=" << size().height();
h = playersRect.height() * 1.5; }
qDebug(QString("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx resizing to %1").arg(h).toLatin1());
resize(size().width(), h);
emit sizeChanged();
*/}
void ZoneViewWidget::closeEvent(QCloseEvent *event) void ZoneViewWidget::closeEvent(QCloseEvent *event)
{ {
@ -105,6 +100,5 @@ void ZoneViewWidget::closeEvent(QCloseEvent *event)
void ZoneViewWidget::zoneDeleted() void ZoneViewWidget::zoneDeleted()
{ {
emit closePressed(this); emit closePressed(this);
qDebug("foo");
deleteLater(); deleteLater();
} }

View file

@ -19,17 +19,17 @@ private:
ZoneViewZone *zone; ZoneViewZone *zone;
QScrollBar *scrollBar; QScrollBar *scrollBar;
QCheckBox *sortCheckBox, *shuffleCheckBox; QCheckBox *sortByNameCheckBox, *sortByTypeCheckBox, *shuffleCheckBox;
int extraHeight;
Player *player; Player *player;
signals: signals:
void closePressed(ZoneViewWidget *zv); void closePressed(ZoneViewWidget *zv);
void sizeChanged();
private slots: private slots:
void resizeToZoneContents(); void resizeToZoneContents();
void zoneDeleted(); void zoneDeleted();
public: public:
ZoneViewWidget(GameScene *_scene, Player *_player, CardZone *_origZone, int numberCards = 0); ZoneViewWidget(Player *_player, CardZone *_origZone, int numberCards = 0);
ZoneViewZone *getZone() const { return zone; } ZoneViewZone *getZone() const { return zone; }
void retranslateUi(); void retranslateUi();
protected: protected:

View file

@ -5,7 +5,7 @@
#include "protocol_items.h" #include "protocol_items.h"
ZoneViewZone::ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards, QGraphicsItem *parent) ZoneViewZone::ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards, QGraphicsItem *parent)
: CardZone(_p, _origZone->getName(), false, false, true, parent, true), height(0), numberCards(_numberCards), origZone(_origZone), sortingEnabled(false) : CardZone(_p, _origZone->getName(), false, false, true, parent, true), bRect(QRectF()), minRows(0), numberCards(_numberCards), origZone(_origZone), sortByName(false), sortByType(false)
{ {
origZone->setView(this); origZone->setView(this);
} }
@ -19,7 +19,7 @@ ZoneViewZone::~ZoneViewZone()
QRectF ZoneViewZone::boundingRect() const QRectF ZoneViewZone::boundingRect() const
{ {
return QRectF(0, 0, CARD_WIDTH * 1.75, height); return bRect;
} }
void ZoneViewZone::paint(QPainter */*painter*/, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/) void ZoneViewZone::paint(QPainter */*painter*/, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
@ -63,43 +63,52 @@ void ZoneViewZone::zoneDumpReceived(ProtocolResponse *r)
// Because of boundingRect(), this function must not be called before the zone was added to a scene. // Because of boundingRect(), this function must not be called before the zone was added to a scene.
void ZoneViewZone::reorganizeCards() void ZoneViewZone::reorganizeCards()
{ {
qDebug("reorganizeCards");
if (cards.isEmpty())
return;
int cardCount = cards.size(); int cardCount = cards.size();
if (!origZone->contentsKnown()) if (!origZone->contentsKnown())
for (int i = 0; i < cardCount; ++i) for (int i = 0; i < cardCount; ++i)
cards[i]->setId(i); cards[i]->setId(i);
int cols = floor(sqrt((double) cardCount / 2));
int rows = ceil((double) cardCount / cols);
if (rows < 1)
rows = 1;
if (minRows == 0)
minRows = rows;
else if (rows < minRows) {
rows = minRows;
cols = ceil((double) cardCount / minRows);
}
if (cols < 2)
cols = 2;
qreal totalWidth = boundingRect().width(); qDebug() << "reorganizeCards: rows=" << rows << "cols=" << cols;
qreal totalHeight = boundingRect().height();
qreal cardWidth = cards.at(0)->boundingRect().width();
qreal cardHeight = cards.at(0)->boundingRect().height();
qreal x1 = 0;
qreal x2 = (totalWidth - cardWidth);
CardList cardsToDisplay(cards); CardList cardsToDisplay(cards);
if (sortingEnabled) if (sortByName || sortByType)
cardsToDisplay.sort(); cardsToDisplay.sort((sortByName ? CardList::SortByName : 0) | (sortByType ? CardList::SortByType : 0));
for (int i = 0; i < cardCount; i++) { for (int i = 0; i < cardCount; i++) {
CardItem *c = cardsToDisplay.at(i); CardItem *c = cardsToDisplay.at(i);
qreal x = i % 2 ? x2 : x1; qreal x = (i / rows) * CARD_WIDTH;
// If the total height of the cards is smaller than the available height, qreal y = (i % rows) * CARD_HEIGHT / 3;
// the cards do not need to overlap and are displayed in the center of the area. c->setPos(x, y);
if (cardHeight * cardCount > totalHeight)
c->setPos(x, ((qreal) i) * (totalHeight - cardHeight) / (cardCount - 1));
else
c->setPos(x, ((qreal) i) * cardHeight + (totalHeight - cardCount * cardHeight) / 2);
c->setZValue(i); c->setZValue(i);
} }
optimumRect = QRectF(0, 0, cols * CARD_WIDTH, ((rows - 1) * CARD_HEIGHT) / 3 + CARD_HEIGHT);
updateGeometry();
emit optimumRectChanged();
} }
void ZoneViewZone::setSortingEnabled(int _sortingEnabled) void ZoneViewZone::setSortByName(int _sortByName)
{ {
sortingEnabled = _sortingEnabled; sortByName = _sortByName;
reorganizeCards();
}
void ZoneViewZone::setSortByType(int _sortByType)
{
sortByType = _sortByType;
reorganizeCards(); reorganizeCards();
} }
@ -129,17 +138,11 @@ void ZoneViewZone::removeCard(int position)
void ZoneViewZone::setGeometry(const QRectF &rect) void ZoneViewZone::setGeometry(const QRectF &rect)
{ {
prepareGeometryChange(); prepareGeometryChange();
setPos(rect.topLeft()); setPos(rect.x(), rect.y());
height = rect.height(); bRect = QRectF(0, 0, rect.width(), rect.height());
reorganizeCards();
} }
QSizeF ZoneViewZone::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const QSizeF ZoneViewZone::sizeHint(Qt::SizeHint /*which*/, const QSizeF & /*constraint*/) const
{ {
switch (which) { return optimumRect.size();
case Qt::MinimumSize: return QSizeF(1.75 * CARD_WIDTH, 2 * CARD_HEIGHT);
case Qt::PreferredSize: return QSizeF(1.75 * CARD_WIDTH, constraint.height());
case Qt::MaximumSize: return QSizeF(1.75 * CARD_WIDTH, constraint.height());
default: return QSizeF();
}
} }

View file

@ -2,7 +2,6 @@
#define ZONEVIEWERZONE_H #define ZONEVIEWERZONE_H
#include "cardzone.h" #include "cardzone.h"
#include <QGraphicsWidget>
#include <QGraphicsLayoutItem> #include <QGraphicsLayoutItem>
class ZoneViewWidget; class ZoneViewWidget;
@ -11,12 +10,14 @@ class ProtocolResponse;
class ZoneViewZone : public CardZone, public QGraphicsLayoutItem { class ZoneViewZone : public CardZone, public QGraphicsLayoutItem {
Q_OBJECT Q_OBJECT
private: private:
int height; QRectF bRect, optimumRect;
int numberCards; int minRows, numberCards;
void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown); void handleDropEvent(int cardId, CardZone *startZone, const QPoint &dropPoint, bool faceDown);
CardZone *origZone; CardZone *origZone;
bool sortingEnabled; bool sortByName, sortByType;
public: public:
enum { Type = typeZoneView };
int type() const { return Type; }
ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards = -1, QGraphicsItem *parent = 0); ZoneViewZone(Player *_p, CardZone *_origZone, int _numberCards = -1, QGraphicsItem *parent = 0);
~ZoneViewZone(); ~ZoneViewZone();
QRectF boundingRect() const; QRectF boundingRect() const;
@ -24,14 +25,17 @@ public:
void reorganizeCards(); void reorganizeCards();
void initializeCards(); void initializeCards();
void removeCard(int position); void removeCard(int position);
void setGeometry(const QRectF &rect);
int getNumberCards() const { return numberCards; } int getNumberCards() const { return numberCards; }
void setGeometry(const QRectF &rect);
QRectF getOptimumRect() const { return optimumRect; }
public slots: public slots:
void setSortingEnabled(int _sortingEnabled); void setSortByName(int _sortByName);
void setSortByType(int _sortByType);
private slots: private slots:
void zoneDumpReceived(ProtocolResponse *r); void zoneDumpReceived(ProtocolResponse *r);
signals: signals:
void beingDeleted(); void beingDeleted();
void optimumRectChanged();
protected: protected:
void addCardImpl(CardItem *card, int x, int y); void addCardImpl(CardItem *card, int x, int y);
QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const; QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;

View file

@ -27,49 +27,58 @@
<context> <context>
<name>AppearanceSettingsPage</name> <name>AppearanceSettingsPage</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="242"/> <location filename="../src/dlg_settings.cpp" line="237"/>
<source>Zone background pictures</source> <source>Zone background pictures</source>
<translation>Hintergrundbilder für Kartenzonen</translation> <translation>Hintergrundbilder für Kartenzonen</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="243"/> <location filename="../src/dlg_settings.cpp" line="238"/>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation>Hintergrundbild für die Hand:</translation> <translation>Hintergrundbild für die Hand:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="244"/> <location filename="../src/dlg_settings.cpp" line="239"/>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation>Hintergrundbild für das Spielfeld:</translation> <translation>Hintergrundbild für das Spielfeld:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="245"/> <location filename="../src/dlg_settings.cpp" line="240"/>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation>Hintergrundbild für den Spielerbereich:</translation> <translation>Hintergrundbild für den Spielerbereich:</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="247"/> <location filename="../src/dlg_settings.cpp" line="242"/>
<source>Table grid layout</source> <source>Table grid layout</source>
<translation>Spielfeldraster</translation> <translation>Spielfeldraster</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="248"/> <location filename="../src/dlg_settings.cpp" line="243"/>
<source>Economic layout</source> <source>Economic layout</source>
<translation>Platzsparende Anordnung</translation> <translation>Platzsparende Anordnung</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="250"/> <location filename="../src/dlg_settings.cpp" line="245"/>
<source>Zone view layout</source> <source>Zone view layout</source>
<translation>Aussehen des Zonenbetrachters</translation> <translation>Aussehen des Zonenbetrachters</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="251"/> <location filename="../src/dlg_settings.cpp" line="246"/>
<source>Sort alphabetically by default</source> <source>Sort by name</source>
<translation>standardmäßig alphabetisch sortieren</translation> <translation>nach Namen sortieren</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="256"/> <location filename="../src/dlg_settings.cpp" line="247"/>
<location filename="../src/dlg_settings.cpp" line="269"/> <source>Sort by type</source>
<location filename="../src/dlg_settings.cpp" line="282"/> <translation>nach Kartentypen sortieren</translation>
</message>
<message>
<source>Sort alphabetically by default</source>
<translation type="obsolete">standardmäßig alphabetisch sortieren</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="252"/>
<location filename="../src/dlg_settings.cpp" line="262"/>
<location filename="../src/dlg_settings.cpp" line="272"/>
<source>Choose path</source> <source>Choose path</source>
<translation>Pfad auswählen</translation> <translation>Pfad auswählen</translation>
</message> </message>
@ -555,32 +564,32 @@
<context> <context>
<name>DlgSettings</name> <name>DlgSettings</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="481"/> <location filename="../src/dlg_settings.cpp" line="459"/>
<source>Settings</source> <source>Settings</source>
<translation>Einstellungen</translation> <translation>Einstellungen</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="483"/> <location filename="../src/dlg_settings.cpp" line="461"/>
<source>General</source> <source>General</source>
<translation>Allgemeines</translation> <translation>Allgemeines</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="484"/> <location filename="../src/dlg_settings.cpp" line="462"/>
<source>Appearance</source> <source>Appearance</source>
<translation>Erscheinungsbild</translation> <translation>Erscheinungsbild</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="485"/> <location filename="../src/dlg_settings.cpp" line="463"/>
<source>User interface</source> <source>User interface</source>
<translation>Bedienung</translation> <translation>Bedienung</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="486"/> <location filename="../src/dlg_settings.cpp" line="464"/>
<source>Messages</source> <source>Messages</source>
<translation>Nachrichten</translation> <translation>Nachrichten</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="488"/> <location filename="../src/dlg_settings.cpp" line="466"/>
<source>&amp;Close</source> <source>&amp;Close</source>
<translation>S&amp;chließen</translation> <translation>S&amp;chließen</translation>
</message> </message>
@ -913,6 +922,14 @@
<translation>&amp;Zuschauen</translation> <translation>&amp;Zuschauen</translation>
</message> </message>
</context> </context>
<context>
<name>GameView</name>
<message>
<location filename="../src/gameview.cpp" line="15"/>
<source>Esc</source>
<translation>Esc</translation>
</message>
</context>
<context> <context>
<name>GamesModel</name> <name>GamesModel</name>
<message> <message>
@ -1736,12 +1753,12 @@
<context> <context>
<name>MessagesSettingsPage</name> <name>MessagesSettingsPage</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="383"/> <location filename="../src/dlg_settings.cpp" line="361"/>
<source>&amp;Add</source> <source>&amp;Add</source>
<translation>&amp;Hinzufügen</translation> <translation>&amp;Hinzufügen</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="384"/> <location filename="../src/dlg_settings.cpp" line="362"/>
<source>&amp;Remove</source> <source>&amp;Remove</source>
<translation>&amp;Entfernen</translation> <translation>&amp;Entfernen</translation>
</message> </message>
@ -1754,12 +1771,12 @@
<translation type="obsolete">Entfernen</translation> <translation type="obsolete">Entfernen</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="344"/>
<source>Add message</source> <source>Add message</source>
<translation>Nachricht hinzufügen</translation> <translation>Nachricht hinzufügen</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="344"/>
<source>Message:</source> <source>Message:</source>
<translation>Nachricht:</translation> <translation>Nachricht:</translation>
</message> </message>
@ -1825,41 +1842,41 @@
<context> <context>
<name>Player</name> <name>Player</name>
<message> <message>
<location filename="../src/player.cpp" line="284"/> <location filename="../src/player.cpp" line="297"/>
<location filename="../src/player.cpp" line="288"/> <location filename="../src/player.cpp" line="301"/>
<location filename="../src/player.cpp" line="292"/> <location filename="../src/player.cpp" line="305"/>
<source>Move to &amp;top of library</source> <source>Move to &amp;top of library</source>
<translation>Oben auf die Biblio&amp;thek legen</translation> <translation>Oben auf die Biblio&amp;thek legen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="285"/> <location filename="../src/player.cpp" line="298"/>
<location filename="../src/player.cpp" line="289"/> <location filename="../src/player.cpp" line="302"/>
<location filename="../src/player.cpp" line="293"/> <location filename="../src/player.cpp" line="306"/>
<source>Move to &amp;bottom of library</source> <source>Move to &amp;bottom of library</source>
<translation>Unter die &amp;Bibliothek legen</translation> <translation>Unter die &amp;Bibliothek legen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="296"/> <location filename="../src/player.cpp" line="309"/>
<source>&amp;View library</source> <source>&amp;View library</source>
<translation>&amp;Zeige Bibliothek</translation> <translation>&amp;Zeige Bibliothek</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="297"/> <location filename="../src/player.cpp" line="310"/>
<source>F3</source> <source>F3</source>
<translation>F3</translation> <translation>F3</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="298"/> <location filename="../src/player.cpp" line="311"/>
<source>View &amp;top cards of library...</source> <source>View &amp;top cards of library...</source>
<translation>Zeige die oberen Kar&amp;ten der Bibliothek...</translation> <translation>Zeige die oberen Kar&amp;ten der Bibliothek...</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="277"/> <location filename="../src/player.cpp" line="290"/>
<source>&amp;View graveyard</source> <source>&amp;View graveyard</source>
<translation>&amp;Zeige Friedhof</translation> <translation>&amp;Zeige Friedhof</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="300"/> <location filename="../src/player.cpp" line="313"/>
<source>F4</source> <source>F4</source>
<translation>F4</translation> <translation>F4</translation>
</message> </message>
@ -1868,32 +1885,32 @@
<translation type="obsolete">Zeige ent&amp;fernte Karten</translation> <translation type="obsolete">Zeige ent&amp;fernte Karten</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="301"/> <location filename="../src/player.cpp" line="314"/>
<source>&amp;View sideboard</source> <source>&amp;View sideboard</source>
<translation>Zeige &amp;Sideboard</translation> <translation>Zeige &amp;Sideboard</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="279"/> <location filename="../src/player.cpp" line="292"/>
<source>Player &quot;%1&quot;</source> <source>Player &quot;%1&quot;</source>
<translation>Spieler &quot;%1&quot;</translation> <translation>Spieler &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="306"/> <location filename="../src/player.cpp" line="319"/>
<source>Take &amp;mulligan</source> <source>Take &amp;mulligan</source>
<translation>&amp;Mulligan nehmen</translation> <translation>&amp;Mulligan nehmen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="311"/> <location filename="../src/player.cpp" line="324"/>
<source>&amp;Hand</source> <source>&amp;Hand</source>
<translation>&amp;Hand</translation> <translation>&amp;Hand</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="313"/> <location filename="../src/player.cpp" line="326"/>
<source>&amp;Library</source> <source>&amp;Library</source>
<translation>Bib&amp;liothek</translation> <translation>Bib&amp;liothek</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="280"/> <location filename="../src/player.cpp" line="293"/>
<source>&amp;Graveyard</source> <source>&amp;Graveyard</source>
<translation>&amp;Friedhof</translation> <translation>&amp;Friedhof</translation>
</message> </message>
@ -1902,70 +1919,70 @@
<translation type="obsolete">Entfe&amp;rnte Karten</translation> <translation type="obsolete">Entfe&amp;rnte Karten</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="312"/> <location filename="../src/player.cpp" line="325"/>
<source>&amp;Sideboard</source> <source>&amp;Sideboard</source>
<translation>&amp;Sideboard</translation> <translation>&amp;Sideboard</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="378"/> <location filename="../src/player.cpp" line="391"/>
<source>View top cards of library</source> <source>View top cards of library</source>
<translation>Zeige die obersten Karten der Bibliothek</translation> <translation>Zeige die obersten Karten der Bibliothek</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="378"/> <location filename="../src/player.cpp" line="391"/>
<source>Number of cards:</source> <source>Number of cards:</source>
<translation>Anzahl der Karten:</translation> <translation>Anzahl der Karten:</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="302"/> <location filename="../src/player.cpp" line="315"/>
<source>&amp;Draw card</source> <source>&amp;Draw card</source>
<translation>Karte &amp;ziehen</translation> <translation>Karte &amp;ziehen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="278"/> <location filename="../src/player.cpp" line="291"/>
<source>&amp;View exile</source> <source>&amp;View exile</source>
<translation>&amp;Zeige Exil</translation> <translation>&amp;Zeige Exil</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="281"/> <location filename="../src/player.cpp" line="294"/>
<source>&amp;Exile</source> <source>&amp;Exile</source>
<translation>&amp;Exil</translation> <translation>&amp;Exil</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="290"/> <location filename="../src/player.cpp" line="303"/>
<location filename="../src/player.cpp" line="294"/> <location filename="../src/player.cpp" line="307"/>
<source>Move to &amp;hand</source> <source>Move to &amp;hand</source>
<translation>auf die &amp;Hand nehmen</translation> <translation>auf die &amp;Hand nehmen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="286"/> <location filename="../src/player.cpp" line="299"/>
<location filename="../src/player.cpp" line="295"/> <location filename="../src/player.cpp" line="308"/>
<source>Move to g&amp;raveyard</source> <source>Move to g&amp;raveyard</source>
<translation>auf den &amp;Friedhof legen</translation> <translation>auf den &amp;Friedhof legen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="287"/> <location filename="../src/player.cpp" line="300"/>
<location filename="../src/player.cpp" line="291"/> <location filename="../src/player.cpp" line="304"/>
<source>Move to &amp;exile</source> <source>Move to &amp;exile</source>
<translation>ins &amp;Exil schicken</translation> <translation>ins &amp;Exil schicken</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="299"/> <location filename="../src/player.cpp" line="312"/>
<source>Ctrl+W</source> <source>Ctrl+W</source>
<translation>Ctrl+W</translation> <translation>Ctrl+W</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="303"/> <location filename="../src/player.cpp" line="316"/>
<source>Ctrl+D</source> <source>Ctrl+D</source>
<translation>Ctrl+D</translation> <translation>Ctrl+D</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="304"/> <location filename="../src/player.cpp" line="317"/>
<source>D&amp;raw cards...</source> <source>D&amp;raw cards...</source>
<translation>Ka&amp;rten ziehen...</translation> <translation>Ka&amp;rten ziehen...</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="305"/> <location filename="../src/player.cpp" line="318"/>
<source>Ctrl+E</source> <source>Ctrl+E</source>
<translation>Ctrl+E</translation> <translation>Ctrl+E</translation>
</message> </message>
@ -1974,32 +1991,32 @@
<translation type="obsolete">&amp;Mulligan nehmen...</translation> <translation type="obsolete">&amp;Mulligan nehmen...</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="307"/> <location filename="../src/player.cpp" line="320"/>
<source>Ctrl+M</source> <source>Ctrl+M</source>
<translation>Ctrl+M</translation> <translation>Ctrl+M</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="308"/> <location filename="../src/player.cpp" line="321"/>
<source>&amp;Shuffle</source> <source>&amp;Shuffle</source>
<translation>Mi&amp;schen</translation> <translation>Mi&amp;schen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="309"/> <location filename="../src/player.cpp" line="322"/>
<source>Ctrl+S</source> <source>Ctrl+S</source>
<translation>Ctrl+S</translation> <translation>Ctrl+S</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="314"/> <location filename="../src/player.cpp" line="327"/>
<source>&amp;Counters</source> <source>&amp;Counters</source>
<translation>&amp;Zähler</translation> <translation>&amp;Zähler</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="316"/> <location filename="../src/player.cpp" line="329"/>
<source>&amp;Untap all permanents</source> <source>&amp;Untap all permanents</source>
<translation>&amp;Enttappe alle bleibenden Karten</translation> <translation>&amp;Enttappe alle bleibenden Karten</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="317"/> <location filename="../src/player.cpp" line="330"/>
<source>Ctrl+U</source> <source>Ctrl+U</source>
<translation>Ctrl+U</translation> <translation>Ctrl+U</translation>
</message> </message>
@ -2028,143 +2045,143 @@
<translation type="obsolete">Ctrl+L</translation> <translation type="obsolete">Ctrl+L</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="318"/> <location filename="../src/player.cpp" line="331"/>
<source>R&amp;oll die...</source> <source>R&amp;oll die...</source>
<translation>&amp;Würfeln...</translation> <translation>&amp;Würfeln...</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="319"/> <location filename="../src/player.cpp" line="332"/>
<source>Ctrl+I</source> <source>Ctrl+I</source>
<translation>Ctrl+I</translation> <translation>Ctrl+I</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="320"/> <location filename="../src/player.cpp" line="333"/>
<source>&amp;Create token...</source> <source>&amp;Create token...</source>
<translation>&amp;Token erstellen...</translation> <translation>&amp;Token erstellen...</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="321"/> <location filename="../src/player.cpp" line="334"/>
<source>Ctrl+T</source> <source>Ctrl+T</source>
<translation>Ctrl+T</translation> <translation>Ctrl+T</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="322"/> <location filename="../src/player.cpp" line="335"/>
<source>S&amp;ay</source> <source>S&amp;ay</source>
<translation>&amp;Sagen</translation> <translation>&amp;Sagen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="328"/> <location filename="../src/player.cpp" line="341"/>
<source>C&amp;ard</source> <source>C&amp;ard</source>
<translation>&amp;Karte</translation> <translation>&amp;Karte</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="329"/> <location filename="../src/player.cpp" line="342"/>
<source>&amp;Tap</source> <source>&amp;Tap</source>
<translation>&amp;Tappen</translation> <translation>&amp;Tappen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="330"/> <location filename="../src/player.cpp" line="343"/>
<source>&amp;Untap</source> <source>&amp;Untap</source>
<translation>E&amp;nttappen</translation> <translation>E&amp;nttappen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="331"/> <location filename="../src/player.cpp" line="344"/>
<source>Toggle &amp;normal untapping</source> <source>Toggle &amp;normal untapping</source>
<translation>&amp;Normales Enttappen umschalten</translation> <translation>&amp;Normales Enttappen umschalten</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="332"/> <location filename="../src/player.cpp" line="345"/>
<source>&amp;Flip</source> <source>&amp;Flip</source>
<translation>&amp;Umdrehen</translation> <translation>&amp;Umdrehen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="333"/> <location filename="../src/player.cpp" line="346"/>
<source>&amp;Add counter</source> <source>&amp;Add counter</source>
<translation>Zählm&amp;arke hinzufügen</translation> <translation>Zählm&amp;arke hinzufügen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="334"/> <location filename="../src/player.cpp" line="347"/>
<source>&amp;Remove counter</source> <source>&amp;Remove counter</source>
<translation>Zählma&amp;rke entfernen</translation> <translation>Zählma&amp;rke entfernen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="335"/> <location filename="../src/player.cpp" line="348"/>
<source>&amp;Set counters...</source> <source>&amp;Set counters...</source>
<translation>&amp;Setze Zählmarken...</translation> <translation>&amp;Setze Zählmarken...</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="336"/> <location filename="../src/player.cpp" line="349"/>
<source>&amp;top of library</source> <source>&amp;top of library</source>
<translation>&amp;auf die Bibliothek</translation> <translation>&amp;auf die Bibliothek</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="337"/> <location filename="../src/player.cpp" line="350"/>
<source>&amp;bottom of library</source> <source>&amp;bottom of library</source>
<translation>&amp;unter die Bibliothek</translation> <translation>&amp;unter die Bibliothek</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="338"/> <location filename="../src/player.cpp" line="351"/>
<source>&amp;graveyard</source> <source>&amp;graveyard</source>
<translation>in den &amp;Friedhof</translation> <translation>in den &amp;Friedhof</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="339"/> <location filename="../src/player.cpp" line="352"/>
<source>Ctrl+Del</source> <source>Ctrl+Del</source>
<translation>Ctrl+Del</translation> <translation>Ctrl+Del</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="340"/> <location filename="../src/player.cpp" line="353"/>
<source>&amp;exile</source> <source>&amp;exile</source>
<translation>ins &amp;Exil</translation> <translation>ins &amp;Exil</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="342"/> <location filename="../src/player.cpp" line="355"/>
<source>&amp;Move to</source> <source>&amp;Move to</source>
<translation>&amp;Verschieben</translation> <translation>&amp;Verschieben</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="357"/> <location filename="../src/player.cpp" line="370"/>
<source>F5</source> <source>F5</source>
<translation>F5</translation> <translation>F5</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="358"/> <location filename="../src/player.cpp" line="371"/>
<source>F6</source> <source>F6</source>
<translation>F6</translation> <translation>F6</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="359"/> <location filename="../src/player.cpp" line="372"/>
<source>F7</source> <source>F7</source>
<translation>F7</translation> <translation>F7</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="360"/> <location filename="../src/player.cpp" line="373"/>
<source>F8</source> <source>F8</source>
<translation>F8</translation> <translation>F8</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="361"/> <location filename="../src/player.cpp" line="374"/>
<source>F9</source> <source>F9</source>
<translation>F9</translation> <translation>F9</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="362"/> <location filename="../src/player.cpp" line="375"/>
<source>F10</source> <source>F10</source>
<translation>F10</translation> <translation>F10</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="417"/> <location filename="../src/player.cpp" line="430"/>
<source>Draw cards</source> <source>Draw cards</source>
<translation>Karten ziehen</translation> <translation>Karten ziehen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="417"/> <location filename="../src/player.cpp" line="430"/>
<location filename="../src/player.cpp" line="952"/> <location filename="../src/player.cpp" line="965"/>
<source>Number:</source> <source>Number:</source>
<translation>Anzahl:</translation> <translation>Anzahl:</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="952"/> <location filename="../src/player.cpp" line="965"/>
<source>Set counters</source> <source>Set counters</source>
<translation>Setze Zählmarken</translation> <translation>Setze Zählmarken</translation>
</message> </message>
@ -2177,22 +2194,22 @@
<translation type="obsolete">Neue Lebenspunkte insgesamt:</translation> <translation type="obsolete">Neue Lebenspunkte insgesamt:</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="430"/> <location filename="../src/player.cpp" line="443"/>
<source>Roll die</source> <source>Roll die</source>
<translation>Würfeln</translation> <translation>Würfeln</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="430"/> <location filename="../src/player.cpp" line="443"/>
<source>Number of sides:</source> <source>Number of sides:</source>
<translation>Anzahl der Seiten:</translation> <translation>Anzahl der Seiten:</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="437"/> <location filename="../src/player.cpp" line="450"/>
<source>Create token</source> <source>Create token</source>
<translation>Token erstellen</translation> <translation>Token erstellen</translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="437"/> <location filename="../src/player.cpp" line="450"/>
<source>Name:</source> <source>Name:</source>
<translation>Name:</translation> <translation>Name:</translation>
</message> </message>
@ -2398,117 +2415,115 @@ Bitte geben Sie einen Namen ein:</translation>
<context> <context>
<name>TabGame</name> <name>TabGame</name>
<message> <message>
<location filename="../src/tab_game.cpp" line="136"/> <location filename="../src/tab_game.cpp" line="130"/>
<source>&amp;Game</source> <source>&amp;Game</source>
<translation>Spi&amp;el</translation> <translation>Spi&amp;el</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="137"/> <location filename="../src/tab_game.cpp" line="131"/>
<source>Next &amp;phase</source> <source>Next &amp;phase</source>
<translation>Nächste &amp;Phase</translation> <translation>Nächste &amp;Phase</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="138"/> <location filename="../src/tab_game.cpp" line="132"/>
<source>Ctrl+Space</source> <source>Ctrl+Space</source>
<translation>Ctrl+Space</translation> <translation>Ctrl+Space</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="139"/> <location filename="../src/tab_game.cpp" line="133"/>
<source>Next &amp;turn</source> <source>Next &amp;turn</source>
<translation>Nächster &amp;Zug</translation> <translation>Nächster &amp;Zug</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="140"/> <location filename="../src/tab_game.cpp" line="134"/>
<source>Ctrl+Return</source> <source>Ctrl+Return</source>
<translation>Ctrl+Return</translation> <translation>Ctrl+Return</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="140"/> <location filename="../src/tab_game.cpp" line="134"/>
<source>Ctrl+Enter</source> <source>Ctrl+Enter</source>
<translation>Ctrl+Enter</translation> <translation>Ctrl+Enter</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="141"/> <location filename="../src/tab_game.cpp" line="135"/>
<source>&amp;Remove all local arrows</source> <source>&amp;Remove all local arrows</source>
<translation>&amp;Lokale Pfeile entfernen</translation> <translation>&amp;Lokale Pfeile entfernen</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="142"/> <location filename="../src/tab_game.cpp" line="136"/>
<source>Ctrl+R</source> <source>Ctrl+R</source>
<translation>Ctrl+R</translation> <translation>Ctrl+R</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="143"/> <location filename="../src/tab_game.cpp" line="137"/>
<source>&amp;Concede</source> <source>&amp;Concede</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="144"/> <location filename="../src/tab_game.cpp" line="138"/>
<source>F2</source> <source>F2</source>
<translation>F2</translation> <translation>F2</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="145"/> <location filename="../src/tab_game.cpp" line="139"/>
<source>&amp;Leave game</source> <source>&amp;Leave game</source>
<translation>Spiel ver&amp;lassen</translation> <translation>Spiel ver&amp;lassen</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="147"/> <location filename="../src/tab_game.cpp" line="141"/>
<source>Load &amp;local deck</source> <source>Load &amp;local deck</source>
<translation>&amp;Lokales Deck laden</translation> <translation>&amp;Lokales Deck laden</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="148"/> <location filename="../src/tab_game.cpp" line="142"/>
<source>Load d&amp;eck from server</source> <source>Load d&amp;eck from server</source>
<translation>Deck vom Server l&amp;aden</translation> <translation>Deck vom Server l&amp;aden</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="149"/> <location filename="../src/tab_game.cpp" line="143"/>
<source>S&amp;tart game</source> <source>S&amp;tart game</source>
<translation>Spiel s&amp;tarten</translation> <translation>Spiel s&amp;tarten</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="150"/> <location filename="../src/tab_game.cpp" line="144"/>
<source>&amp;Say:</source> <source>&amp;Say:</source>
<translation>&amp;Sagen:</translation> <translation>&amp;Sagen:</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="153"/>
<source>Close most recent zone view</source> <source>Close most recent zone view</source>
<translation>Letzte Zonenansicht schließen</translation> <translation type="obsolete">Letzte Zonenansicht schließen</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="154"/>
<source>Esc</source> <source>Esc</source>
<translation>Esc</translation> <translation type="obsolete">Esc</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="163"/> <location filename="../src/tab_game.cpp" line="156"/>
<source>Concede</source> <source>Concede</source>
<translation>Aufgeben</translation> <translation>Aufgeben</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="163"/> <location filename="../src/tab_game.cpp" line="156"/>
<source>Are you sure you want to concede this game?</source> <source>Are you sure you want to concede this game?</source>
<translation>Sind Sie sicher, dass Sie das Spiel aufgeben möchten?</translation> <translation>Sind Sie sicher, dass Sie das Spiel aufgeben möchten?</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="171"/> <location filename="../src/tab_game.cpp" line="164"/>
<source>Leave game</source> <source>Leave game</source>
<translation>Spiel verlassen</translation> <translation>Spiel verlassen</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="171"/> <location filename="../src/tab_game.cpp" line="164"/>
<source>Are you sure you want to leave this game?</source> <source>Are you sure you want to leave this game?</source>
<translation>Sind Sie sicher, dass Sie das Spiel verlassen möchten?</translation> <translation>Sind Sie sicher, dass Sie das Spiel verlassen möchten?</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="444"/> <location filename="../src/tab_game.cpp" line="435"/>
<source>Load deck</source> <source>Load deck</source>
<translation>Deck laden</translation> <translation>Deck laden</translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.h" line="109"/> <location filename="../src/tab_game.h" line="108"/>
<source>Game %1: %2</source> <source>Game %1: %2</source>
<translation>Spiel %1: %2</translation> <translation>Spiel %1: %2</translation>
</message> </message>
@ -2539,14 +2554,14 @@ Bitte geben Sie einen Namen ein:</translation>
<context> <context>
<name>UserInterfaceSettingsPage</name> <name>UserInterfaceSettingsPage</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="322"/> <location filename="../src/dlg_settings.cpp" line="300"/>
<source>General interface settings</source> <source>General interface settings</source>
<translation>Allgemeine Bedienung</translation> <translation>Allgemeine Bedienung</translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="323"/> <location filename="../src/dlg_settings.cpp" line="301"/>
<source>&amp;Double-click cards to play them (instead of single-click)</source> <source>&amp;Double-click cards to play them (instead of single-click)</source>
<translation type="unfinished"></translation> <translation>Karten durch &amp;Doppelklick ausspielen (statt Einzelklick)</translation>
</message> </message>
</context> </context>
<context> <context>
@ -2741,12 +2756,21 @@ Willst du die Änderungen speichern?</translation>
<context> <context>
<name>ZoneViewWidget</name> <name>ZoneViewWidget</name>
<message> <message>
<location filename="../src/zoneviewwidget.cpp" line="73"/>
<source>sort alphabetically</source> <source>sort alphabetically</source>
<translation>alphabetisch sortieren</translation> <translation type="obsolete">alphabetisch sortieren</translation>
</message> </message>
<message> <message>
<location filename="../src/zoneviewwidget.cpp" line="75"/> <location filename="../src/zoneviewwidget.cpp" line="70"/>
<source>sort by name</source>
<translation>nach Namen sortieren</translation>
</message>
<message>
<location filename="../src/zoneviewwidget.cpp" line="72"/>
<source>sort by type</source>
<translation>nach Kartentypen sortieren</translation>
</message>
<message>
<location filename="../src/zoneviewwidget.cpp" line="74"/>
<source>shuffle when closing</source> <source>shuffle when closing</source>
<translation>beim Schließen mischen</translation> <translation>beim Schließen mischen</translation>
</message> </message>

View file

@ -4,49 +4,54 @@
<context> <context>
<name>AppearanceSettingsPage</name> <name>AppearanceSettingsPage</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="242"/> <location filename="../src/dlg_settings.cpp" line="237"/>
<source>Zone background pictures</source> <source>Zone background pictures</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="243"/> <location filename="../src/dlg_settings.cpp" line="238"/>
<source>Path to hand background:</source> <source>Path to hand background:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="244"/> <location filename="../src/dlg_settings.cpp" line="239"/>
<source>Path to table background:</source> <source>Path to table background:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="245"/> <location filename="../src/dlg_settings.cpp" line="240"/>
<source>Path to player info background:</source> <source>Path to player info background:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="247"/> <location filename="../src/dlg_settings.cpp" line="242"/>
<source>Table grid layout</source> <source>Table grid layout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="248"/> <location filename="../src/dlg_settings.cpp" line="243"/>
<source>Economic layout</source> <source>Economic layout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="250"/> <location filename="../src/dlg_settings.cpp" line="245"/>
<source>Zone view layout</source> <source>Zone view layout</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="251"/> <location filename="../src/dlg_settings.cpp" line="246"/>
<source>Sort alphabetically by default</source> <source>Sort by name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="256"/> <location filename="../src/dlg_settings.cpp" line="247"/>
<location filename="../src/dlg_settings.cpp" line="269"/> <source>Sort by type</source>
<location filename="../src/dlg_settings.cpp" line="282"/> <translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="252"/>
<location filename="../src/dlg_settings.cpp" line="262"/>
<location filename="../src/dlg_settings.cpp" line="272"/>
<source>Choose path</source> <source>Choose path</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -448,32 +453,32 @@
<context> <context>
<name>DlgSettings</name> <name>DlgSettings</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="481"/> <location filename="../src/dlg_settings.cpp" line="459"/>
<source>Settings</source> <source>Settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="483"/> <location filename="../src/dlg_settings.cpp" line="461"/>
<source>General</source> <source>General</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="484"/> <location filename="../src/dlg_settings.cpp" line="462"/>
<source>Appearance</source> <source>Appearance</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="485"/> <location filename="../src/dlg_settings.cpp" line="463"/>
<source>User interface</source> <source>User interface</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="486"/> <location filename="../src/dlg_settings.cpp" line="464"/>
<source>Messages</source> <source>Messages</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="488"/> <location filename="../src/dlg_settings.cpp" line="466"/>
<source>&amp;Close</source> <source>&amp;Close</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -544,6 +549,14 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
</context> </context>
<context>
<name>GameView</name>
<message>
<location filename="../src/gameview.cpp" line="15"/>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
</context>
<context> <context>
<name>GamesModel</name> <name>GamesModel</name>
<message> <message>
@ -1071,22 +1084,22 @@
<context> <context>
<name>MessagesSettingsPage</name> <name>MessagesSettingsPage</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="383"/> <location filename="../src/dlg_settings.cpp" line="361"/>
<source>&amp;Add</source> <source>&amp;Add</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="384"/> <location filename="../src/dlg_settings.cpp" line="362"/>
<source>&amp;Remove</source> <source>&amp;Remove</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="344"/>
<source>Add message</source> <source>Add message</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="366"/> <location filename="../src/dlg_settings.cpp" line="344"/>
<source>Message:</source> <source>Message:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1152,330 +1165,330 @@
<context> <context>
<name>Player</name> <name>Player</name>
<message> <message>
<location filename="../src/player.cpp" line="284"/> <location filename="../src/player.cpp" line="297"/>
<location filename="../src/player.cpp" line="288"/> <location filename="../src/player.cpp" line="301"/>
<location filename="../src/player.cpp" line="292"/> <location filename="../src/player.cpp" line="305"/>
<source>Move to &amp;top of library</source> <source>Move to &amp;top of library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="285"/> <location filename="../src/player.cpp" line="298"/>
<location filename="../src/player.cpp" line="289"/> <location filename="../src/player.cpp" line="302"/>
<location filename="../src/player.cpp" line="293"/> <location filename="../src/player.cpp" line="306"/>
<source>Move to &amp;bottom of library</source> <source>Move to &amp;bottom of library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="296"/> <location filename="../src/player.cpp" line="309"/>
<source>&amp;View library</source> <source>&amp;View library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="297"/> <location filename="../src/player.cpp" line="310"/>
<source>F3</source> <source>F3</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="298"/> <location filename="../src/player.cpp" line="311"/>
<source>View &amp;top cards of library...</source> <source>View &amp;top cards of library...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="277"/> <location filename="../src/player.cpp" line="290"/>
<source>&amp;View graveyard</source> <source>&amp;View graveyard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="300"/> <location filename="../src/player.cpp" line="313"/>
<source>F4</source> <source>F4</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="301"/> <location filename="../src/player.cpp" line="314"/>
<source>&amp;View sideboard</source> <source>&amp;View sideboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="279"/> <location filename="../src/player.cpp" line="292"/>
<source>Player &quot;%1&quot;</source> <source>Player &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="311"/> <location filename="../src/player.cpp" line="324"/>
<source>&amp;Hand</source> <source>&amp;Hand</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="313"/> <location filename="../src/player.cpp" line="326"/>
<source>&amp;Library</source> <source>&amp;Library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="280"/> <location filename="../src/player.cpp" line="293"/>
<source>&amp;Graveyard</source> <source>&amp;Graveyard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="312"/> <location filename="../src/player.cpp" line="325"/>
<source>&amp;Sideboard</source> <source>&amp;Sideboard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="378"/> <location filename="../src/player.cpp" line="391"/>
<source>View top cards of library</source> <source>View top cards of library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="378"/> <location filename="../src/player.cpp" line="391"/>
<source>Number of cards:</source> <source>Number of cards:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="302"/> <location filename="../src/player.cpp" line="315"/>
<source>&amp;Draw card</source> <source>&amp;Draw card</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="278"/> <location filename="../src/player.cpp" line="291"/>
<source>&amp;View exile</source> <source>&amp;View exile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="281"/> <location filename="../src/player.cpp" line="294"/>
<source>&amp;Exile</source> <source>&amp;Exile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="290"/> <location filename="../src/player.cpp" line="303"/>
<location filename="../src/player.cpp" line="294"/> <location filename="../src/player.cpp" line="307"/>
<source>Move to &amp;hand</source> <source>Move to &amp;hand</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="286"/> <location filename="../src/player.cpp" line="299"/>
<location filename="../src/player.cpp" line="295"/> <location filename="../src/player.cpp" line="308"/>
<source>Move to g&amp;raveyard</source> <source>Move to g&amp;raveyard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="287"/> <location filename="../src/player.cpp" line="300"/>
<location filename="../src/player.cpp" line="291"/> <location filename="../src/player.cpp" line="304"/>
<source>Move to &amp;exile</source> <source>Move to &amp;exile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="299"/> <location filename="../src/player.cpp" line="312"/>
<source>Ctrl+W</source> <source>Ctrl+W</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="303"/> <location filename="../src/player.cpp" line="316"/>
<source>Ctrl+D</source> <source>Ctrl+D</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="304"/> <location filename="../src/player.cpp" line="317"/>
<source>D&amp;raw cards...</source> <source>D&amp;raw cards...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="305"/> <location filename="../src/player.cpp" line="318"/>
<source>Ctrl+E</source> <source>Ctrl+E</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="306"/> <location filename="../src/player.cpp" line="319"/>
<source>Take &amp;mulligan</source> <source>Take &amp;mulligan</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="307"/> <location filename="../src/player.cpp" line="320"/>
<source>Ctrl+M</source> <source>Ctrl+M</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="308"/> <location filename="../src/player.cpp" line="321"/>
<source>&amp;Shuffle</source> <source>&amp;Shuffle</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="309"/> <location filename="../src/player.cpp" line="322"/>
<source>Ctrl+S</source> <source>Ctrl+S</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="314"/> <location filename="../src/player.cpp" line="327"/>
<source>&amp;Counters</source> <source>&amp;Counters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="316"/> <location filename="../src/player.cpp" line="329"/>
<source>&amp;Untap all permanents</source> <source>&amp;Untap all permanents</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="317"/> <location filename="../src/player.cpp" line="330"/>
<source>Ctrl+U</source> <source>Ctrl+U</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="318"/> <location filename="../src/player.cpp" line="331"/>
<source>R&amp;oll die...</source> <source>R&amp;oll die...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="319"/> <location filename="../src/player.cpp" line="332"/>
<source>Ctrl+I</source> <source>Ctrl+I</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="320"/> <location filename="../src/player.cpp" line="333"/>
<source>&amp;Create token...</source> <source>&amp;Create token...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="321"/> <location filename="../src/player.cpp" line="334"/>
<source>Ctrl+T</source> <source>Ctrl+T</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="322"/> <location filename="../src/player.cpp" line="335"/>
<source>S&amp;ay</source> <source>S&amp;ay</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="328"/> <location filename="../src/player.cpp" line="341"/>
<source>C&amp;ard</source> <source>C&amp;ard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="329"/> <location filename="../src/player.cpp" line="342"/>
<source>&amp;Tap</source> <source>&amp;Tap</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="330"/> <location filename="../src/player.cpp" line="343"/>
<source>&amp;Untap</source> <source>&amp;Untap</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="331"/> <location filename="../src/player.cpp" line="344"/>
<source>Toggle &amp;normal untapping</source> <source>Toggle &amp;normal untapping</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="332"/> <location filename="../src/player.cpp" line="345"/>
<source>&amp;Flip</source> <source>&amp;Flip</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="333"/> <location filename="../src/player.cpp" line="346"/>
<source>&amp;Add counter</source> <source>&amp;Add counter</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="334"/> <location filename="../src/player.cpp" line="347"/>
<source>&amp;Remove counter</source> <source>&amp;Remove counter</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="335"/> <location filename="../src/player.cpp" line="348"/>
<source>&amp;Set counters...</source> <source>&amp;Set counters...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="336"/> <location filename="../src/player.cpp" line="349"/>
<source>&amp;top of library</source> <source>&amp;top of library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="337"/> <location filename="../src/player.cpp" line="350"/>
<source>&amp;bottom of library</source> <source>&amp;bottom of library</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="338"/> <location filename="../src/player.cpp" line="351"/>
<source>&amp;graveyard</source> <source>&amp;graveyard</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="339"/> <location filename="../src/player.cpp" line="352"/>
<source>Ctrl+Del</source> <source>Ctrl+Del</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="340"/> <location filename="../src/player.cpp" line="353"/>
<source>&amp;exile</source> <source>&amp;exile</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="342"/> <location filename="../src/player.cpp" line="355"/>
<source>&amp;Move to</source> <source>&amp;Move to</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="357"/> <location filename="../src/player.cpp" line="370"/>
<source>F5</source> <source>F5</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="358"/> <location filename="../src/player.cpp" line="371"/>
<source>F6</source> <source>F6</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="359"/> <location filename="../src/player.cpp" line="372"/>
<source>F7</source> <source>F7</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="360"/> <location filename="../src/player.cpp" line="373"/>
<source>F8</source> <source>F8</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="361"/> <location filename="../src/player.cpp" line="374"/>
<source>F9</source> <source>F9</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="362"/> <location filename="../src/player.cpp" line="375"/>
<source>F10</source> <source>F10</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="417"/> <location filename="../src/player.cpp" line="430"/>
<source>Draw cards</source> <source>Draw cards</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="417"/> <location filename="../src/player.cpp" line="430"/>
<location filename="../src/player.cpp" line="952"/> <location filename="../src/player.cpp" line="965"/>
<source>Number:</source> <source>Number:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="430"/> <location filename="../src/player.cpp" line="443"/>
<source>Roll die</source> <source>Roll die</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="430"/> <location filename="../src/player.cpp" line="443"/>
<source>Number of sides:</source> <source>Number of sides:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="437"/> <location filename="../src/player.cpp" line="450"/>
<source>Create token</source> <source>Create token</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="437"/> <location filename="../src/player.cpp" line="450"/>
<source>Name:</source> <source>Name:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/player.cpp" line="952"/> <location filename="../src/player.cpp" line="965"/>
<source>Set counters</source> <source>Set counters</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1668,117 +1681,107 @@ Please enter a name:</source>
<context> <context>
<name>TabGame</name> <name>TabGame</name>
<message> <message>
<location filename="../src/tab_game.cpp" line="136"/> <location filename="../src/tab_game.cpp" line="130"/>
<source>&amp;Game</source> <source>&amp;Game</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="137"/> <location filename="../src/tab_game.cpp" line="131"/>
<source>Next &amp;phase</source> <source>Next &amp;phase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="138"/> <location filename="../src/tab_game.cpp" line="132"/>
<source>Ctrl+Space</source> <source>Ctrl+Space</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="139"/> <location filename="../src/tab_game.cpp" line="133"/>
<source>Next &amp;turn</source> <source>Next &amp;turn</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="140"/> <location filename="../src/tab_game.cpp" line="134"/>
<source>Ctrl+Return</source> <source>Ctrl+Return</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="140"/> <location filename="../src/tab_game.cpp" line="134"/>
<source>Ctrl+Enter</source> <source>Ctrl+Enter</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="141"/> <location filename="../src/tab_game.cpp" line="135"/>
<source>&amp;Remove all local arrows</source> <source>&amp;Remove all local arrows</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="142"/> <location filename="../src/tab_game.cpp" line="136"/>
<source>Ctrl+R</source> <source>Ctrl+R</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="143"/> <location filename="../src/tab_game.cpp" line="137"/>
<source>&amp;Concede</source> <source>&amp;Concede</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="144"/> <location filename="../src/tab_game.cpp" line="138"/>
<source>F2</source> <source>F2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="145"/> <location filename="../src/tab_game.cpp" line="139"/>
<source>&amp;Leave game</source> <source>&amp;Leave game</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="147"/> <location filename="../src/tab_game.cpp" line="141"/>
<source>Load &amp;local deck</source> <source>Load &amp;local deck</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="148"/> <location filename="../src/tab_game.cpp" line="142"/>
<source>Load d&amp;eck from server</source> <source>Load d&amp;eck from server</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="149"/> <location filename="../src/tab_game.cpp" line="143"/>
<source>S&amp;tart game</source> <source>S&amp;tart game</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="150"/> <location filename="../src/tab_game.cpp" line="144"/>
<source>&amp;Say:</source> <source>&amp;Say:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="153"/> <location filename="../src/tab_game.cpp" line="156"/>
<source>Close most recent zone view</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_game.cpp" line="154"/>
<source>Esc</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_game.cpp" line="163"/>
<source>Concede</source> <source>Concede</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="163"/> <location filename="../src/tab_game.cpp" line="156"/>
<source>Are you sure you want to concede this game?</source> <source>Are you sure you want to concede this game?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="171"/> <location filename="../src/tab_game.cpp" line="164"/>
<source>Leave game</source> <source>Leave game</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="171"/> <location filename="../src/tab_game.cpp" line="164"/>
<source>Are you sure you want to leave this game?</source> <source>Are you sure you want to leave this game?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.cpp" line="444"/> <location filename="../src/tab_game.cpp" line="435"/>
<source>Load deck</source> <source>Load deck</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/tab_game.h" line="109"/> <location filename="../src/tab_game.h" line="108"/>
<source>Game %1: %2</source> <source>Game %1: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1794,12 +1797,12 @@ Please enter a name:</source>
<context> <context>
<name>UserInterfaceSettingsPage</name> <name>UserInterfaceSettingsPage</name>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="322"/> <location filename="../src/dlg_settings.cpp" line="300"/>
<source>General interface settings</source> <source>General interface settings</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/dlg_settings.cpp" line="323"/> <location filename="../src/dlg_settings.cpp" line="301"/>
<source>&amp;Double-click cards to play them (instead of single-click)</source> <source>&amp;Double-click cards to play them (instead of single-click)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1979,12 +1982,17 @@ Do you want to save the changes?</source>
<context> <context>
<name>ZoneViewWidget</name> <name>ZoneViewWidget</name>
<message> <message>
<location filename="../src/zoneviewwidget.cpp" line="73"/> <location filename="../src/zoneviewwidget.cpp" line="70"/>
<source>sort alphabetically</source> <source>sort by name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../src/zoneviewwidget.cpp" line="75"/> <location filename="../src/zoneviewwidget.cpp" line="72"/>
<source>sort by type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/zoneviewwidget.cpp" line="74"/>
<source>shuffle when closing</source> <source>shuffle when closing</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>