Commit fbcb34db authored by Max-Wilhelm Bruker's avatar Max-Wilhelm Bruker
Browse files
parents 2f422f5a 8d6a4f4f
......@@ -64,6 +64,7 @@ HEADERS += src/counter.h \
src/localserver.h \
src/localserverinterface.h \
src/localclient.h \
../common/color.h \
../common/serializable_item.h \
../common/decklist.h \
../common/protocol.h \
......
<RCC>
<qresource prefix="/" >
<file alias="back.svg" >resources/back.svg</file>
<file>resources/icon_delete.svg</file>
<file>resources/icon_tab_changed.svg</file>
<file>resources/icon_config_general.svg</file>
<file>resources/icon_config_appearance.svg</file>
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="64"
height="64"
id="svg2646"
sodipodi:version="0.32"
inkscape:version="0.47pre4 r22446"
version="1.0"
sodipodi:docname="remove_row.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs2648">
<linearGradient
id="linearGradient3169">
<stop
style="stop-color:#0000ff;stop-opacity:1;"
offset="0"
id="stop3171" />
<stop
style="stop-color:#000067;stop-opacity:1;"
offset="1"
id="stop3173" />
</linearGradient>
<linearGradient
id="linearGradient4766">
<stop
style="stop-color:#784421;stop-opacity:1;"
offset="0"
id="stop4768" />
<stop
style="stop-color:#3d2210;stop-opacity:0;"
offset="1"
id="stop4770" />
</linearGradient>
<linearGradient
id="linearGradient4758">
<stop
style="stop-color:#a05a2c;stop-opacity:1;"
offset="0"
id="stop4760" />
<stop
style="stop-color:#3d2210;stop-opacity:1;"
offset="1"
id="stop4762" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2654" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3508"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3510"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3512"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3514"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3516"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3518"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient3520"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient3522"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient3524"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2442"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2444"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2446"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2470"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2472"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2474"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2476"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2478"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2480"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2482"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2484"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2486"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4758"
id="linearGradient2488"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="590.62201"
y1="434.7522"
x2="698.54004"
y2="517.79218" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4766"
id="linearGradient2490"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9650128,0,0,0.9948433,-449.70565,-312.80927)"
x1="661.24402"
y1="602.90814"
x2="431.5"
y2="201.5482" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient3169"
id="radialGradient2492"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.2116376,0,44.257186)"
cx="120.07376"
cy="56.138123"
fx="120.07376"
fy="56.138123"
r="82.790039" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7.625"
inkscape:cx="12.656427"
inkscape:cy="31.784541"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="1280"
inkscape:window-height="725"
inkscape:window-x="0"
inkscape:window-y="25"
inkscape:window-maximized="1" />
<metadata
id="metadata2651">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Pfeil"
style="display:inline">
<path
style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
d="M 6.433227,14.50946 L 23.923767,32 L 6.433227,49.490541 L 14.50946,57.566773 L 32,40.076233 L 49.490541,57.566773 L 57.566773,49.490541 L 40.076233,32 L 57.566773,14.50946 L 49.490541,6.433227 L 32,23.923767 L 14.50946,6.433227 L 6.433227,14.50946 z"
id="rect3548" />
</g>
</svg>
......@@ -3,13 +3,16 @@
#include <QCursor>
#include <QStyleOptionGraphicsItem>
#include <QGraphicsSceneMouseEvent>
#include <math.h>
#include "carddatabase.h"
#include "abstractcarditem.h"
#include "settingscache.h"
#include "main.h"
#include <QDebug>
#include <QTimer>
AbstractCardItem::AbstractCardItem(const QString &_name, Player *_owner, QGraphicsItem *parent)
: ArrowTarget(_owner, parent), info(db->getCard(_name)), name(_name), tapped(false)
: ArrowTarget(_owner, parent), info(db->getCard(_name)), name(_name), tapped(false), tapAngle(0)
{
setCursor(Qt::OpenHandCursor);
setFlag(ItemIsSelectable);
......@@ -17,6 +20,10 @@ AbstractCardItem::AbstractCardItem(const QString &_name, Player *_owner, QGraphi
setCacheMode(DeviceCoordinateCache);
connect(info, SIGNAL(pixmapUpdated()), this, SLOT(pixmapUpdated()));
animationTimer = new QTimer(this);
animationTimer->setSingleShot(false);
connect(animationTimer, SIGNAL(timeout()), this, SLOT(animationEvent()));
}
AbstractCardItem::~AbstractCardItem()
......@@ -37,19 +44,22 @@ void AbstractCardItem::pixmapUpdated()
void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
{
painter->save();
QSizeF translatedSize = painter->combinedTransform().mapRect(boundingRect()).size();
if (tapped)
translatedSize.transpose();
qreal w = painter->combinedTransform().map(QLineF(0, 0, boundingRect().width(), 0)).length();
qreal h = painter->combinedTransform().map(QLineF(0, 0, 0, boundingRect().height())).length();
QSizeF translatedSize(w, h);
QRectF totalBoundingRect = painter->combinedTransform().mapRect(boundingRect());
QPixmap *translatedPixmap = info->getPixmap(translatedSize.toSize());
painter->save();
if (translatedPixmap) {
painter->resetTransform();
if (tapped) {
painter->translate(((qreal) translatedSize.height()) / 2, ((qreal) translatedSize.width()) / 2);
painter->rotate(90);
painter->translate(-((qreal) translatedSize.width()) / 2, -((qreal) translatedSize.height()) / 2);
}
painter->drawPixmap(translatedPixmap->rect(), *translatedPixmap, translatedPixmap->rect());
QTransform pixmapTransform;
pixmapTransform.translate(totalBoundingRect.width() / 2, totalBoundingRect.height() / 2);
pixmapTransform.rotate(tapAngle);
QPointF transPoint = QPointF(-w / 2, -h / 2);
pixmapTransform.translate(transPoint.x(), transPoint.y());
painter->setTransform(pixmapTransform);
painter->drawPixmap(QPointF(0, 0), *translatedPixmap);
} else {
QFont f("Times");
f.setStyleHint(QFont::Serif);
......@@ -105,6 +115,21 @@ void AbstractCardItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *
painter->restore();
}
void AbstractCardItem::animationEvent()
{
int delta = 18;
if (!tapped)
delta *= -1;
tapAngle += delta;
setTransform(QTransform().translate((float) CARD_WIDTH / 2, (float) CARD_HEIGHT / 2).rotate(tapAngle).translate((float) -CARD_WIDTH / 2, (float) -CARD_HEIGHT / 2));
update();
if ((tapped && (tapAngle >= 90)) || (!tapped && (tapAngle <= 0)))
animationTimer->stop();
}
void AbstractCardItem::setName(const QString &_name)
{
disconnect(info, 0, this, 0);
......@@ -120,14 +145,19 @@ void AbstractCardItem::setColor(const QString &_color)
update();
}
void AbstractCardItem::setTapped(bool _tapped)
void AbstractCardItem::setTapped(bool _tapped, bool canAnimate)
{
if (tapped == _tapped)
return;
tapped = _tapped;
if (tapped)
setTransform(QTransform().translate((float) CARD_WIDTH / 2, (float) CARD_HEIGHT / 2).rotate(90).translate((float) -CARD_WIDTH / 2, (float) -CARD_HEIGHT / 2));
else
setTransform(QTransform());
update();
if (settingsCache->getTapAnimation() && canAnimate)
animationTimer->start(25);
else {
tapAngle = tapped ? 90 : 0;
setTransform(QTransform().translate((float) CARD_WIDTH / 2, (float) CARD_HEIGHT / 2).rotate(tapAngle).translate((float) -CARD_WIDTH / 2, (float) -CARD_HEIGHT / 2));
update();
}
}
void AbstractCardItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
......
......@@ -5,6 +5,7 @@
class CardInfo;
class Player;
class QTimer;
const int CARD_WIDTH = 72;
const int CARD_HEIGHT = 102;
......@@ -15,8 +16,12 @@ protected:
CardInfo *info;
QString name;
bool tapped;
int tapAngle;
QString color;
private:
QTimer *animationTimer;
private slots:
void animationEvent();
void pixmapUpdated();
signals:
void hovered(AbstractCardItem *card);
......@@ -33,7 +38,7 @@ public:
QString getColor() const { return color; }
void setColor(const QString &_color);
bool getTapped() const { return tapped; }
void setTapped(bool _tapped);
void setTapped(bool _tapped, bool canAnimate = false);
void processHoverEvent();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
......
......@@ -252,6 +252,7 @@ CardDatabase::CardDatabase(QObject *parent)
CardDatabase::~CardDatabase()
{
clear();
delete noCard;
}
void CardDatabase::clear()
......@@ -453,7 +454,7 @@ bool CardDatabase::loadFromFile(const QString &fileName)
}
}
qDebug(QString("%1 cards in %2 sets loaded").arg(cardHash.size()).arg(setHash.size()).toLatin1());
return true;
return !cardHash.isEmpty();
}
bool CardDatabase::saveToFile(const QString &fileName)
......
......@@ -151,43 +151,57 @@ void GeneralSettingsPage::retranslateUi()
AppearanceSettingsPage::AppearanceSettingsPage()
{
QIcon deleteIcon(":/resources/icon_delete.svg");
handBgLabel = new QLabel;
handBgEdit = new QLineEdit(settingsCache->getHandBgPath());
handBgEdit->setReadOnly(true);
QPushButton *handBgClearButton = new QPushButton(deleteIcon, QString());
connect(handBgClearButton, SIGNAL(clicked()), this, SLOT(handBgClearButtonClicked()));
QPushButton *handBgButton = new QPushButton("...");
connect(handBgButton, SIGNAL(clicked()), this, SLOT(handBgButtonClicked()));
tableBgLabel = new QLabel;
tableBgEdit = new QLineEdit(settingsCache->getTableBgPath());
tableBgEdit->setReadOnly(true);
QPushButton *tableBgClearButton = new QPushButton(deleteIcon, QString());
connect(tableBgClearButton, SIGNAL(clicked()), this, SLOT(tableBgClearButtonClicked()));
QPushButton *tableBgButton = new QPushButton("...");
connect(tableBgButton, SIGNAL(clicked()), this, SLOT(tableBgButtonClicked()));
playerAreaBgLabel = new QLabel;
playerAreaBgEdit = new QLineEdit(settingsCache->getPlayerBgPath());
playerAreaBgEdit->setReadOnly(true);
QPushButton *playerAreaBgClearButton = new QPushButton(deleteIcon, QString());
connect(playerAreaBgClearButton, SIGNAL(clicked()), this, SLOT(playerAreaBgClearButtonClicked()));
QPushButton *playerAreaBgButton = new QPushButton("...");
connect(playerAreaBgButton, SIGNAL(clicked()), this, SLOT(playerAreaBgButtonClicked()));
cardBackPicturePathLabel = new QLabel;
cardBackPicturePathEdit = new QLineEdit(settingsCache->getCardBackPicturePath());
cardBackPicturePathEdit->setReadOnly(true);
QPushButton *cardBackPicturePathClearButton = new QPushButton(deleteIcon, QString());
connect(cardBackPicturePathClearButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathClearButtonClicked()));
QPushButton *cardBackPicturePathButton = new QPushButton("...");
connect(cardBackPicturePathButton, SIGNAL(clicked()), this, SLOT(cardBackPicturePathButtonClicked()));
QGridLayout *zoneBgGrid = new QGridLayout;
zoneBgGrid->addWidget(handBgLabel, 0, 0);
zoneBgGrid->addWidget(handBgEdit, 0, 1);
zoneBgGrid->addWidget(handBgButton, 0, 2);
zoneBgGrid->addWidget(handBgClearButton, 0, 2);
zoneBgGrid->addWidget(handBgButton, 0, 3);
zoneBgGrid->addWidget(tableBgLabel, 1, 0);
zoneBgGrid->addWidget(tableBgEdit, 1, 1);
zoneBgGrid->addWidget(tableBgButton, 1, 2);
zoneBgGrid->addWidget(tableBgClearButton, 1, 2);
zoneBgGrid->addWidget(tableBgButton, 1, 3);
zoneBgGrid->addWidget(playerAreaBgLabel, 2, 0);
zoneBgGrid->addWidget(playerAreaBgEdit, 2, 1);
zoneBgGrid->addWidget(playerAreaBgButton, 2, 2);
zoneBgGrid->addWidget(playerAreaBgClearButton, 2, 2);
zoneBgGrid->addWidget(playerAreaBgButton, 2, 3);
zoneBgGrid->addWidget(cardBackPicturePathLabel, 3, 0);
zoneBgGrid->addWidget(cardBackPicturePathEdit, 3, 1);
zoneBgGrid->addWidget(cardBackPicturePathButton, 3, 2);
zoneBgGrid->addWidget(cardBackPicturePathClearButton, 3, 2);
zoneBgGrid->addWidget(cardBackPicturePathButton, 3, 3);
zoneBgGroupBox = new QGroupBox;
zoneBgGroupBox->setLayout(zoneBgGrid);
......@@ -202,12 +216,12 @@ AppearanceSettingsPage::AppearanceSettingsPage()
handGroupBox = new QGroupBox;
handGroupBox->setLayout(handGrid);
economicGridCheckBox = new QCheckBox;
economicGridCheckBox->setChecked(settingsCache->getEconomicGrid());
connect(economicGridCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setEconomicGrid(int)));
economicalGridCheckBox = new QCheckBox;
economicalGridCheckBox->setChecked(settingsCache->getEconomicalGrid());
connect(economicalGridCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setEconomicalGrid(int)));
QGridLayout *tableGrid = new QGridLayout;
tableGrid->addWidget(economicGridCheckBox, 0, 0, 1, 2);
tableGrid->addWidget(economicalGridCheckBox, 0, 0, 1, 2);
tableGroupBox = new QGroupBox;
tableGroupBox->setLayout(tableGrid);
......@@ -248,13 +262,19 @@ void AppearanceSettingsPage::retranslateUi()
horizontalHandCheckBox->setText(tr("Display hand horizontally (wastes space)"));
tableGroupBox->setTitle(tr("Table grid layout"));
economicGridCheckBox->setText(tr("Economic layout"));
economicalGridCheckBox->setText(tr("Economical layout"));
zoneViewGroupBox->setTitle(tr("Zone view layout"));
zoneViewSortByNameCheckBox->setText(tr("Sort by name"));
zoneViewSortByTypeCheckBox->setText(tr("Sort by type"));
}
void AppearanceSettingsPage::handBgClearButtonClicked()
{
handBgEdit->setText(QString());
settingsCache->setHandBgPath(QString());
}
void AppearanceSettingsPage::handBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
......@@ -265,6 +285,12 @@ void AppearanceSettingsPage::handBgButtonClicked()
settingsCache->setHandBgPath(path);
}
void AppearanceSettingsPage::tableBgClearButtonClicked()
{
tableBgEdit->setText(QString());
settingsCache->setTableBgPath(QString());
}
void AppearanceSettingsPage::tableBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
......@@ -275,6 +301,12 @@ void AppearanceSettingsPage::tableBgButtonClicked()
settingsCache->setTableBgPath(path);
}
void AppearanceSettingsPage::playerAreaBgClearButtonClicked()
{
playerAreaBgEdit->setText(QString());
settingsCache->setPlayerBgPath(QString());
}
void AppearanceSettingsPage::playerAreaBgButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
......@@ -285,6 +317,12 @@ void AppearanceSettingsPage::playerAreaBgButtonClicked()
settingsCache->setPlayerBgPath(path);
}
void AppearanceSettingsPage::cardBackPicturePathClearButtonClicked()
{
cardBackPicturePathEdit->setText(QString());
settingsCache->setCardBackPicturePath(QString());
}
void AppearanceSettingsPage::cardBackPicturePathButtonClicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("Choose path"));
......@@ -307,8 +345,19 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
generalGroupBox = new QGroupBox;
generalGroupBox->setLayout(generalGrid);
tapAnimationCheckBox = new QCheckBox;
tapAnimationCheckBox->setChecked(settingsCache->getTapAnimation());
connect(tapAnimationCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setTapAnimation(int)));
QGridLayout *animationGrid = new QGridLayout;
animationGrid->addWidget(tapAnimationCheckBox, 0, 0);
animationGroupBox = new QGroupBox;
animationGroupBox->setLayout(animationGrid);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(generalGroupBox);
mainLayout->addWidget(animationGroupBox);
setLayout(mainLayout);
}
......@@ -317,6 +366,8 @@ void UserInterfaceSettingsPage::retranslateUi()
{
generalGroupBox->setTitle(tr("General interface settings"));
doubleClickToPlayCheckBox->setText(tr("&Double-click cards to play them (instead of single-click)"));
animationGroupBox->setTitle(tr("Animation settings"));
tapAnimationCheckBox->setText(tr("&Tap/untap animation"));
}
MessagesSettingsPage::MessagesSettingsPage()
......@@ -472,17 +523,22 @@ void DlgSettings::changeEvent(QEvent *event)
void DlgSettings::closeEvent(QCloseEvent *event)
{
if (!db->getLoadSuccess()) {
QMessageBox::critical(this, tr("Error"), tr("Your card database is invalid. Please check if the path is set correctly."));
event->ignore();
} else if (!QDir(settingsCache->getDeckPath()).exists()) {
QMessageBox::critical(this, tr("Error"), tr("The path to your deck directory is invalid."));
event->ignore();
} else if (!QDir(settingsCache->getPicsPath()).exists()) {
QMessageBox::critical(this, tr("Error"), tr("The path to your card pictures directory is invalid."));
event->ignore();
} else
event->accept();
if (!db->getLoadSuccess())
if (QMessageBox::critical(this, tr("Error"), tr("Your card database is invalid. Would you like to go back and set the correct path?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
event->ignore();
return;
}
if (!QDir(settingsCache->getDeckPath()).exists())
if (QMessageBox::critical(this, tr("Error"), tr("The path to your deck directory is invalid. Would you like to go back and set the correct path?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
event->ignore();
return;
}
if (!QDir(settingsCache->getPicsPath()).exists())
if (QMessageBox::critical(this, tr("Error"), tr("The path to your card pictures directory is invalid. Would you like to go back and set the correct path?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
event->ignore();
return;
}
event->accept();
}
void DlgSettings::retranslateUi()
......
......@@ -48,9 +48,13 @@ private:
class AppearanceSettingsPage : public AbstractSettingsPage {
Q_OBJECT
private slots:
void handBgClearButtonClicked();
void handBgButtonClicked();
void tableBgClearButtonClicked();
void tableBgButtonClicked();
void playerAreaBgClearButtonClicked();
void playerAreaBgButtonClicked();
void cardBackPicturePathClearButtonClicked();
void cardBackPicturePathButtonClicked();
signals:
void handBgChanged(const QString &path);
......@@ -60,7 +64,7 @@ signals:
private:
QLabel *handBgLabel, *tableBgLabel, *playerAreaBgLabel, *cardBackPicturePathLabel;
QLineEdit *handBgEdit, *tableBgEdit, *playerAreaBgEdit, *cardBackPicturePathEdit;
QCheckBox *horizontalHandCheckBox, *economicGridCheckBox, *zoneViewSortByNameCheckBox, *zoneViewSortByTypeCheckBox;
QCheckBox *horizontalHandCheckBox, *economicalGridCheckBox, *zoneViewSortByNameCheckBox, *zoneViewSortByTypeCheckBox;
QGroupBox *zoneBgGroupBox, *handGroupBox, *tableGroupBox, *zoneViewGroupBox;
public:
AppearanceSettingsPage();
......@@ -71,7 +75,8 @@ class UserInterfaceSettingsPage : public AbstractSettingsPage {
Q_OBJECT
private:
QCheckBox *doubleClickToPlayCheckBox;
QGroupBox *generalGroupBox;
QCheckBox *tapAnimationCheckBox;
QGroupBox *generalGroupBox, *animationGroupBox;
public:
UserInterfaceSettingsPage();
void retranslateUi();
......
......@@ -528,7 +528,7 @@ void Player::setCardAttrHelper(CardItem *card, const QString &aname, const QStri
if (!(!tapped && card->getDoesntUntap() && allCards)) {
if (!allCards)
emit logSetTapped(this, card->getName(), tapped);
card->setTapped(tapped);
card->setTapped(tapped, true);
}
} else if (aname == "attacking")
card->setAttacking(avalue == "1");
......@@ -958,7 +958,7 @@ void Player::addZone(CardZone *z)
Counter *Player::addCounter(ServerInfo_Counter *counter)
{
return addCounter(counter->getId(), counter->getName(), counter->getColor(), counter->getRadius(), counter->getCount());
return addCounter(counter->getId(), counter->getName(), counter->getColor().getQColor(), counter->getRadius(), counter->getCount());
}
Counter *Player::addCounter(int counterId, const QString &name, QColor color, int radius, int value)
......@@ -1012,9 +1012,9 @@ ArrowItem *Player::addArrow(ServerInfo_Arrow *arrow)
return 0;
if (targetCard)
return addArrow(arrow->getId(), startCard, targetCard, arrow->getColor());
return addArrow(arrow->getId(), startCard, targetCard, arrow->getColor().getQColor());
else
return addArrow(arrow->getId(), startCard, targetPlayer->getPlayerTarget(), arrow->getColor());
return addArrow(arrow->getId(), startCard, targetPlayer->getPlayerTarget(), arrow->getColor().getQColor());
}
ArrowItem *Player::addArrow(int arrowId, CardItem *startCard, ArrowTarget *targetItem, const QColor &color)
......
......@@ -19,7 +19,8 @@ SettingsCache::SettingsCache()
picDownload = settings->value("personal/picturedownload", false).toBool();
doubleClickToPlay = settings->value("interface/doubleclicktoplay", true).toBool();
horizontalHand = settings->value("hand/horizontal", false).toBool();
economicGrid = settings->value("table/economic", false).toBool();
economicalGrid = settings->value("table/economic", false).toBool();
tapAnimation = settings->value("cards/tapanimation", true).toBool();
zoneViewSortByName = settings->value("zoneview/sortbyname", false).toBool();
zoneViewSortByType = settings->value("zoneview/sortbytype", false).toBool();
......@@ -100,11 +101,17 @@ void SettingsCache::setHorizontalHand(int _horizontalHand)
emit horizontalHandChanged();
}
void SettingsCache::setEconomicGrid(int _economicGrid)
void SettingsCache::setEconomicalGrid(int _economicalGrid)
{
economicGrid = _economicGrid;
settings->setValue("table/economic", economicGrid);
emit economicGridChanged();
economicalGrid = _economicalGrid;
settings->setValue("table/economic", economicalGrid);
emit economicalGridChanged();
}
void SettingsCache::setTapAnimation(int _tapAnimation)
{
tapAnimation = _tapAnimation;
settings->setValue("cards/tapanimation", tapAnimation);
}
void SettingsCache::setZoneViewSortByName(int _zoneViewSortByName)
......
......@@ -17,7 +17,7 @@ signals:
void cardBackPicturePathChanged();
void picDownloadChanged();
void horizontalHandChanged();
void economicGridChanged();
void economicalGridChanged();
private:
QSettings *settings;
......@@ -27,7 +27,8 @@ private:
bool picDownload;
bool doubleClickToPlay;
bool horizontalHand;
bool economicGrid;
bool economicalGrid;
bool tapAnimation;
bool zoneViewSortByName, zoneViewSortByType;
public:
SettingsCache();
......@@ -42,7 +43,8 @@ public:
bool getPicDownload() const { return picDownload; }
bool getDoubleClickToPlay() const { return doubleClickToPlay; }
bool getHorizontalHand() const { return horizontalHand; }
bool getEconomicGrid() const { return economicGrid; }
bool getEconomicalGrid() const { return economicalGrid; }
bool getTapAnimation() const { return tapAnimation; }
bool getZoneViewSortByName() const { return zoneViewSortByName; }
bool getZoneViewSortByType() const { return zoneViewSortByType; }
public slots:
......@@ -57,7 +59,8 @@ public slots:
void setPicDownload(int _picDownload);
void setDoubleClickToPlay(int _doubleClickToPlay);
void setHorizontalHand(int _horizontalHand);
void setEconomicGrid(int _economicGrid);
void setEconomicalGrid(int _economicalGrid);
void setTapAnimation(int _tapAnimation);
void setZoneViewSortByName(int _zoneViewSortByName);
void setZoneViewSortByType(int _zoneViewSortByType);
};
......
#include <QLabel>
#include <QTreeView>
#include <QCheckBox>
#include <QPushButton>
......@@ -338,12 +339,65 @@ void UserList::userClicked(QTreeWidgetItem *item, int /*column*/)
emit openMessageDialog(item->data(2, Qt::UserRole).toString(), true);
}
UserInfoBox::UserInfoBox(AbstractClient *_client, QWidget *parent)
: QWidget(parent)
{
avatarLabel = new QLabel;
nameLabel = new QLabel;
QFont nameFont = nameLabel->font();
nameFont.setBold(true);
nameFont.setPointSize(nameFont.pointSize() * 1.5);
nameLabel->setFont(nameFont);
countryLabel1 = new QLabel;
countryLabel2 = new QLabel;
userLevelLabel1 = new QLabel;
userLevelLabel2 = new QLabel;
QGridLayout *mainLayout = new QGridLayout;
mainLayout->addWidget(avatarLabel, 0, 0, 3, 1);
mainLayout->addWidget(nameLabel, 0, 1, 1, 2);
mainLayout->addWidget(countryLabel1, 1, 1, 1, 1);
mainLayout->addWidget(countryLabel2, 1, 2, 1, 1);
mainLayout->addWidget(userLevelLabel1, 2, 1, 1, 1);
mainLayout->addWidget(userLevelLabel2, 2, 2, 1, 1);
setLayout(mainLayout);
Command_GetUserInfo *cmd = new Command_GetUserInfo;
connect(cmd, SIGNAL(finished(ProtocolResponse *)), this, SLOT(processResponse(ProtocolResponse *)));
_client->sendCommand(cmd);
}
void UserInfoBox::retranslateUi()
{
countryLabel1->setText(tr("Location:"));
userLevelLabel1->setText(tr("User level:"));
}
void UserInfoBox::processResponse(ProtocolResponse *response)
{
Response_GetUserInfo *resp = qobject_cast<Response_GetUserInfo *>(response);
if (!resp)
return;
ServerInfo_User *user = resp->getUserInfo();
QPixmap avatarPixmap;
if (!avatarPixmap.loadFromData(user->getAvatarBmp()))
avatarPixmap = UserLevelPixmapGenerator::generatePixmap(64, user->getUserLevel());
avatarLabel->setPixmap(avatarPixmap);
nameLabel->setText(user->getName());
countryLabel2->setPixmap(CountryPixmapGenerator::generatePixmap(15, user->getCountry()));
userLevelLabel2->setPixmap(UserLevelPixmapGenerator::generatePixmap(15, user->getUserLevel()));
}
TabServer::TabServer(AbstractClient *_client, QWidget *parent)
: Tab(parent), client(_client)
{
gameSelector = new GameSelector(client);
chatChannelSelector = new ChatChannelSelector(client);
serverMessageLog = new ServerMessageLog(client);
userInfoBox = new UserInfoBox(client);
userList = new UserList(client);
connect(gameSelector, SIGNAL(gameJoined(int)), this, SIGNAL(gameJoined(int)));
......@@ -359,9 +413,13 @@ TabServer::TabServer(AbstractClient *_client, QWidget *parent)
vbox->addWidget(gameSelector);
vbox->addLayout(hbox);
QVBoxLayout *vbox2 = new QVBoxLayout;
vbox2->addWidget(userInfoBox);
vbox2->addWidget(userList);
QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addLayout(vbox, 3);
mainLayout->addWidget(userList, 1);
mainLayout->addLayout(vbox2, 1);
setLayout(mainLayout);
}
......@@ -371,5 +429,6 @@ void TabServer::retranslateUi()
gameSelector->retranslateUi();
chatChannelSelector->retranslateUi();
serverMessageLog->retranslateUi();
userInfoBox->retranslateUi();
userList->retranslateUi();
}
......@@ -13,6 +13,7 @@ class QTreeWidgetItem;
class QPushButton;
class QCheckBox;
class QTextEdit;
class QLabel;
class GamesModel;
class GamesProxyModel;
......@@ -101,6 +102,17 @@ public:
void retranslateUi();
};
class UserInfoBox : public QWidget {
Q_OBJECT
private:
QLabel *avatarLabel, *nameLabel, *countryLabel1, *countryLabel2, *userLevelLabel1, *userLevelLabel2;
private slots:
void processResponse(ProtocolResponse *response);
public:
UserInfoBox(AbstractClient *_client, QWidget *parent = 0);
void retranslateUi();
};
class TabServer : public Tab {
Q_OBJECT
signals:
......@@ -114,6 +126,7 @@ private:
ChatChannelSelector *chatChannelSelector;
ServerMessageLog *serverMessageLog;
UserList *userList;
UserInfoBox *userInfoBox;
public:
TabServer(AbstractClient *_client, QWidget *parent = 0);
void retranslateUi();
......
......@@ -12,10 +12,10 @@ TableZone::TableZone(Player *_p, QGraphicsItem *parent)
: CardZone(_p, "table", true, false, true, parent), active(false)
{
connect(settingsCache, SIGNAL(tableBgPathChanged()), this, SLOT(updateBgPixmap()));
connect(settingsCache, SIGNAL(economicGridChanged()), this, SLOT(reorganizeCards()));
connect(settingsCache, SIGNAL(economicalGridChanged()), this, SLOT(reorganizeCards()));
updateBgPixmap();
if (settingsCache->getEconomicGrid())
if (settingsCache->getEconomicalGrid())
height = 2 * boxLineWidth + (int) (14.0 / 3 * CARD_HEIGHT + 3 * paddingY);
else
height = 2 * boxLineWidth + 4 * CARD_HEIGHT + 3 * paddingY;
......@@ -210,7 +210,7 @@ CardItem *TableZone::getCardFromCoords(const QPointF &point) const
QPointF TableZone::mapFromGrid(const QPoint &gridPoint) const
{
qreal x, y;
if ((gridPoint.y() == 3) && (settingsCache->getEconomicGrid())) {
if ((gridPoint.y() == 3) && (settingsCache->getEconomicalGrid())) {
x = marginX + (CARD_WIDTH * gridPoint.x() + CARD_WIDTH * (gridPoint.x() / 3)) / 2;
y = boxLineWidth + (CARD_HEIGHT + paddingY) * gridPoint.y() + (gridPoint.x() % 3 * CARD_HEIGHT) / 3;
} else {
......@@ -245,7 +245,7 @@ QPoint TableZone::mapToGrid(const QPointF &mapPoint) const
int resultY = (int) (y / (CARD_HEIGHT + paddingY));
if ((resultY == 3) && (settingsCache->getEconomicGrid()))
if ((resultY == 3) && (settingsCache->getEconomicalGrid()))
return QPoint(
(int) (x * 2 / CARD_WIDTH - floor(x / (2 * CARD_WIDTH))),
3
......
......@@ -27,62 +27,66 @@
<context>
<name>AppearanceSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="241"/>
<location filename="../src/dlg_settings.cpp" line="255"/>
<source>Zone background pictures</source>
<translation>Hintergrundbilder für Kartenzonen</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="242"/>
<location filename="../src/dlg_settings.cpp" line="256"/>
<source>Path to hand background:</source>
<translation>Hintergrundbild für die Hand:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="243"/>
<location filename="../src/dlg_settings.cpp" line="257"/>
<source>Path to table background:</source>
<translation>Hintergrundbild für das Spielfeld:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="244"/>
<location filename="../src/dlg_settings.cpp" line="258"/>
<source>Path to player info background:</source>
<translation>Hintergrundbild für den Spielerbereich:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="245"/>
<location filename="../src/dlg_settings.cpp" line="259"/>
<source>Path to picture of card back:</source>
<translation>Pfad zum Bild der Kartenrückseite:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="247"/>
<location filename="../src/dlg_settings.cpp" line="261"/>
<source>Hand layout</source>
<translation>Kartenhand</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="248"/>
<location filename="../src/dlg_settings.cpp" line="262"/>
<source>Display hand horizontally (wastes space)</source>
<translation>Hand horizonal anzeigen (verschwendet Platz)</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="250"/>
<location filename="../src/dlg_settings.cpp" line="264"/>
<source>Table grid layout</source>
<translation>Spielfeldraster</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="251"/>
<source>Economic layout</source>
<location filename="../src/dlg_settings.cpp" line="265"/>
<source>Economical layout</source>
<translation>Platzsparende Anordnung</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="253"/>
<source>Economic layout</source>
<translation type="obsolete">Platzsparende Anordnung</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="267"/>
<source>Zone view layout</source>
<translation>Aussehen des Zonenbetrachters</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="254"/>
<location filename="../src/dlg_settings.cpp" line="268"/>
<source>Sort by name</source>
<translation>nach Namen sortieren</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="255"/>
<location filename="../src/dlg_settings.cpp" line="269"/>
<source>Sort by type</source>
<translation>nach Kartentypen sortieren</translation>
</message>
......@@ -91,10 +95,10 @@
<translation type="obsolete">standardmäßig alphabetisch sortieren</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="260"/>
<location filename="../src/dlg_settings.cpp" line="270"/>
<location filename="../src/dlg_settings.cpp" line="280"/>
<location filename="../src/dlg_settings.cpp" line="290"/>
<location filename="../src/dlg_settings.cpp" line="296"/>
<location filename="../src/dlg_settings.cpp" line="312"/>
<location filename="../src/dlg_settings.cpp" line="328"/>
<source>Choose path</source>
<translation>Pfad auswählen</translation>
</message>
......@@ -398,27 +402,27 @@
<context>
<name>ChatChannelSelector</name>
<message>
<location filename="../src/tab_server.cpp" line="151"/>
<location filename="../src/tab_server.cpp" line="152"/>
<source>Chat channels</source>
<translation>Chaträume</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="152"/>
<location filename="../src/tab_server.cpp" line="153"/>
<source>Joi&amp;n</source>
<translation>Teil&amp;nehmen</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="155"/>
<location filename="../src/tab_server.cpp" line="156"/>
<source>Channel</source>
<translation>Raum</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="156"/>
<location filename="../src/tab_server.cpp" line="157"/>
<source>Description</source>
<translation>Beschreibung</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="157"/>
<location filename="../src/tab_server.cpp" line="158"/>
<source>Players</source>
<translation>Spieler</translation>
</message>
......@@ -854,54 +858,66 @@
<context>
<name>DlgSettings</name>
<message>
<location filename="../src/dlg_settings.cpp" line="476"/>
<location filename="../src/dlg_settings.cpp" line="479"/>
<location filename="../src/dlg_settings.cpp" line="482"/>
<location filename="../src/dlg_settings.cpp" line="527"/>
<location filename="../src/dlg_settings.cpp" line="532"/>
<location filename="../src/dlg_settings.cpp" line="537"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="476"/>
<source>Your card database is invalid. Please check if the path is set correctly.</source>
<translation>Ihre Kartendatenbank ist ungültig. Bitte überprüfen Sie, ob der Pfad korrekt gesetzt ist.</translation>
<translation type="obsolete">Ihre Kartendatenbank ist ungültig. Bitte überprüfen Sie, ob der Pfad korrekt gesetzt ist.</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="479"/>
<source>The path to your deck directory is invalid.</source>
<translation>Der Pfad zum Deckverzeichnis ist ungültig.</translation>
<translation type="obsolete">Der Pfad zum Deckverzeichnis ist ungültig.</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="482"/>
<source>The path to your card pictures directory is invalid.</source>
<translation>Der Pfad zum Kartenbilderverzeichnis ist ungültig.</translation>
<translation type="obsolete">Der Pfad zum Kartenbilderverzeichnis ist ungültig.</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="490"/>
<location filename="../src/dlg_settings.cpp" line="527"/>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation>Ihre Kartendatenbank ist ungültig. Möchten Sie zurückgehen und den korrekten Pfad einstellen?</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="532"/>
<source>The path to your deck directory is invalid. Would you like to go back and set the correct path?</source>
<translation>Der Pfad zu Ihrem Deckordner ist ungültig. Möchten Sie zurückgehen und den korrekten Pfad einstellen?</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="537"/>
<source>The path to your card pictures directory is invalid. Would you like to go back and set the correct path?</source>
<translation>Der Pfad zu Ihrem Kartenbilderordner ist ungültig. Möchten Sie zurückgehen und den korrekten Pfad einstellen?</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="546"/>
<source>Settings</source>
<translation>Einstellungen</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="492"/>
<location filename="../src/dlg_settings.cpp" line="548"/>
<source>General</source>
<translation>Allgemeines</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="493"/>
<location filename="../src/dlg_settings.cpp" line="549"/>
<source>Appearance</source>
<translation>Erscheinungsbild</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="494"/>
<location filename="../src/dlg_settings.cpp" line="550"/>
<source>User interface</source>
<translation>Bedienung</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="495"/>
<location filename="../src/dlg_settings.cpp" line="551"/>
<source>Messages</source>
<translation>Nachrichten</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="497"/>
<location filename="../src/dlg_settings.cpp" line="553"/>
<source>&amp;Close</source>
<translation>S&amp;chließen</translation>
</message>
......@@ -1167,20 +1183,20 @@
<context>
<name>GameSelector</name>
<message>
<location filename="../src/tab_server.cpp" line="115"/>
<location filename="../src/tab_server.cpp" line="116"/>
<source>C&amp;reate</source>
<translation>Spiel e&amp;rstellen</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="116"/>
<location filename="../src/tab_server.cpp" line="117"/>
<source>&amp;Join</source>
<translation>&amp;Teilnehmen</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="78"/>
<location filename="../src/tab_server.cpp" line="79"/>
<location filename="../src/tab_server.cpp" line="80"/>
<location filename="../src/tab_server.cpp" line="81"/>
<location filename="../src/tab_server.cpp" line="82"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
......@@ -1189,47 +1205,47 @@
<translation type="obsolete">XXX</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="78"/>
<location filename="../src/tab_server.cpp" line="79"/>
<source>Wrong password.</source>
<translation>Falsches Passwort.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="79"/>
<location filename="../src/tab_server.cpp" line="80"/>
<source>Spectators are not allowed in this game.</source>
<translation>In diesem Spiel sind keine Zuschauer zugelassen.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="80"/>
<location filename="../src/tab_server.cpp" line="81"/>
<source>The game is already full.</source>
<translation>Das Spiel ist bereits voll.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="81"/>
<location filename="../src/tab_server.cpp" line="82"/>
<source>The game does not exist any more.</source>
<translation>Dieses Spiel gibt es nicht mehr.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="97"/>
<location filename="../src/tab_server.cpp" line="98"/>
<source>Join game</source>
<translation>Spiel beitreten</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="97"/>
<location filename="../src/tab_server.cpp" line="98"/>
<source>Password:</source>
<translation>Passwort:</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="113"/>
<location filename="../src/tab_server.cpp" line="114"/>
<source>Games</source>
<translation>Spiele</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="114"/>
<location filename="../src/tab_server.cpp" line="115"/>
<source>&amp;Show full games</source>
<translation>&amp;Volle Spiele anzeigen</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="117"/>
<location filename="../src/tab_server.cpp" line="118"/>
<source>J&amp;oin as spectator</source>
<translation>&amp;Zuschauen</translation>
</message>
......@@ -2186,12 +2202,12 @@
<context>
<name>MessagesSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="379"/>
<location filename="../src/dlg_settings.cpp" line="430"/>
<source>&amp;Add</source>
<translation>&amp;Hinzufügen</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="380"/>
<location filename="../src/dlg_settings.cpp" line="431"/>
<source>&amp;Remove</source>
<translation>&amp;Entfernen</translation>
</message>
......@@ -2204,12 +2220,12 @@
<translation type="obsolete">Entfernen</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="362"/>
<location filename="../src/dlg_settings.cpp" line="413"/>
<source>Add message</source>
<translation>Nachricht hinzufügen</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="362"/>
<location filename="../src/dlg_settings.cpp" line="413"/>
<source>Message:</source>
<translation>Nachricht:</translation>
</message>
......@@ -2753,27 +2769,27 @@
<context>
<name>QObject</name>
<message>
<location filename="../../common/decklist.cpp" line="79"/>
<location filename="../../common/decklist.cpp" line="78"/>
<source>Maindeck</source>
<translation>Hauptdeck</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="81"/>
<location filename="../../common/decklist.cpp" line="80"/>
<source>Sideboard</source>
<translation>Sideboard</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="229"/>
<location filename="../../common/decklist.cpp" line="228"/>
<source>Cockatrice decks (*.cod)</source>
<translation>Cockatrice Decks (*.cod)</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="230"/>
<location filename="../../common/decklist.cpp" line="229"/>
<source>Plain text decks (*.dec *.mwDeck)</source>
<translation>Text Decks (*.dec *.mwDeck)</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="231"/>
<location filename="../../common/decklist.cpp" line="230"/>
<source>All files (*.*)</source>
<translation>Alle Dateien (*.*)</translation>
</message>
......@@ -2799,7 +2815,7 @@
<context>
<name>ServerMessageLog</name>
<message>
<location filename="../src/tab_server.cpp" line="231"/>
<location filename="../src/tab_server.cpp" line="232"/>
<source>Server messages</source>
<translation>Servernachrichten</translation>
</message>
......@@ -3050,7 +3066,7 @@ Bitte geben Sie einen Namen ein:</translation>
<context>
<name>TabServer</name>
<message>
<location filename="../src/tab_server.h" line="120"/>
<location filename="../src/tab_server.h" line="133"/>
<source>Server</source>
<translation>Server</translation>
</message>
......@@ -3070,23 +3086,46 @@ Bitte geben Sie einen Namen ein:</translation>
<translation type="obsolete">Spiel %1</translation>
</message>
</context>
<context>
<name>UserInfoBox</name>
<message>
<location filename="../src/tab_server.cpp" line="373"/>
<source>Location:</source>
<translation>Ort:</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="374"/>
<source>User level:</source>
<translation>Nutzerstatus:</translation>
</message>
</context>
<context>
<name>UserInterfaceSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="318"/>
<location filename="../src/dlg_settings.cpp" line="367"/>
<source>General interface settings</source>
<translation>Allgemeine Bedienung</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="319"/>
<location filename="../src/dlg_settings.cpp" line="368"/>
<source>&amp;Double-click cards to play them (instead of single-click)</source>
<translation>Karten durch &amp;Doppelklick ausspielen (statt Einzelklick)</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="369"/>
<source>Animation settings</source>
<translation>Animationseinstellungen</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="370"/>
<source>&amp;Tap/untap animation</source>
<translation>Animiertes &amp;Tappen/Enttappen</translation>
</message>
</context>
<context>
<name>UserList</name>
<message>
<location filename="../src/tab_server.cpp" line="281"/>
<location filename="../src/tab_server.cpp" line="282"/>
<source>Users online: %1</source>
<translation>Benutzer online: %1</translation>
</message>
......
......@@ -4,70 +4,70 @@
<context>
<name>AppearanceSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="241"/>
<location filename="../src/dlg_settings.cpp" line="255"/>
<source>Zone background pictures</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="242"/>
<location filename="../src/dlg_settings.cpp" line="256"/>
<source>Path to hand background:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="243"/>
<location filename="../src/dlg_settings.cpp" line="257"/>
<source>Path to table background:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="244"/>
<location filename="../src/dlg_settings.cpp" line="258"/>
<source>Path to player info background:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="245"/>
<location filename="../src/dlg_settings.cpp" line="259"/>
<source>Path to picture of card back:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="247"/>
<location filename="../src/dlg_settings.cpp" line="261"/>
<source>Hand layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="248"/>
<location filename="../src/dlg_settings.cpp" line="262"/>
<source>Display hand horizontally (wastes space)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="250"/>
<location filename="../src/dlg_settings.cpp" line="264"/>
<source>Table grid layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="251"/>
<source>Economic layout</source>
<location filename="../src/dlg_settings.cpp" line="265"/>
<source>Economical layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="253"/>
<location filename="../src/dlg_settings.cpp" line="267"/>
<source>Zone view layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="254"/>
<location filename="../src/dlg_settings.cpp" line="268"/>
<source>Sort by name</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="255"/>
<location filename="../src/dlg_settings.cpp" line="269"/>
<source>Sort by type</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="260"/>
<location filename="../src/dlg_settings.cpp" line="270"/>
<location filename="../src/dlg_settings.cpp" line="280"/>
<location filename="../src/dlg_settings.cpp" line="290"/>
<location filename="../src/dlg_settings.cpp" line="296"/>
<location filename="../src/dlg_settings.cpp" line="312"/>
<location filename="../src/dlg_settings.cpp" line="328"/>
<source>Choose path</source>
<translation type="unfinished"></translation>
</message>
......@@ -352,27 +352,27 @@
<context>
<name>ChatChannelSelector</name>
<message>
<location filename="../src/tab_server.cpp" line="151"/>
<location filename="../src/tab_server.cpp" line="152"/>
<source>Chat channels</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="152"/>
<location filename="../src/tab_server.cpp" line="153"/>
<source>Joi&amp;n</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="155"/>
<location filename="../src/tab_server.cpp" line="156"/>
<source>Channel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="156"/>
<location filename="../src/tab_server.cpp" line="157"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="157"/>
<location filename="../src/tab_server.cpp" line="158"/>
<source>Players</source>
<translation type="unfinished"></translation>
</message>
......@@ -735,54 +735,54 @@
<context>
<name>DlgSettings</name>
<message>
<location filename="../src/dlg_settings.cpp" line="476"/>
<location filename="../src/dlg_settings.cpp" line="479"/>
<location filename="../src/dlg_settings.cpp" line="482"/>
<location filename="../src/dlg_settings.cpp" line="527"/>
<location filename="../src/dlg_settings.cpp" line="532"/>
<location filename="../src/dlg_settings.cpp" line="537"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="476"/>
<source>Your card database is invalid. Please check if the path is set correctly.</source>
<location filename="../src/dlg_settings.cpp" line="527"/>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="479"/>
<source>The path to your deck directory is invalid.</source>
<location filename="../src/dlg_settings.cpp" line="532"/>
<source>The path to your deck directory is invalid. Would you like to go back and set the correct path?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="482"/>
<source>The path to your card pictures directory is invalid.</source>
<location filename="../src/dlg_settings.cpp" line="537"/>
<source>The path to your card pictures directory is invalid. Would you like to go back and set the correct path?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="490"/>
<location filename="../src/dlg_settings.cpp" line="546"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="492"/>
<location filename="../src/dlg_settings.cpp" line="548"/>
<source>General</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="493"/>
<location filename="../src/dlg_settings.cpp" line="549"/>
<source>Appearance</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="494"/>
<location filename="../src/dlg_settings.cpp" line="550"/>
<source>User interface</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="495"/>
<location filename="../src/dlg_settings.cpp" line="551"/>
<source>Messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="497"/>
<location filename="../src/dlg_settings.cpp" line="553"/>
<source>&amp;Close</source>
<translation type="unfinished"></translation>
</message>
......@@ -790,65 +790,65 @@
<context>
<name>GameSelector</name>
<message>
<location filename="../src/tab_server.cpp" line="115"/>
<location filename="../src/tab_server.cpp" line="116"/>
<source>C&amp;reate</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="116"/>
<location filename="../src/tab_server.cpp" line="117"/>
<source>&amp;Join</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="78"/>
<location filename="../src/tab_server.cpp" line="79"/>
<location filename="../src/tab_server.cpp" line="80"/>
<location filename="../src/tab_server.cpp" line="81"/>
<location filename="../src/tab_server.cpp" line="82"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="78"/>
<location filename="../src/tab_server.cpp" line="79"/>
<source>Wrong password.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="79"/>
<location filename="../src/tab_server.cpp" line="80"/>
<source>Spectators are not allowed in this game.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="80"/>
<location filename="../src/tab_server.cpp" line="81"/>
<source>The game is already full.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="81"/>
<location filename="../src/tab_server.cpp" line="82"/>
<source>The game does not exist any more.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="97"/>
<location filename="../src/tab_server.cpp" line="98"/>
<source>Join game</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="97"/>
<location filename="../src/tab_server.cpp" line="98"/>
<source>Password:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="113"/>
<location filename="../src/tab_server.cpp" line="114"/>
<source>Games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="114"/>
<location filename="../src/tab_server.cpp" line="115"/>
<source>&amp;Show full games</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="117"/>
<location filename="../src/tab_server.cpp" line="118"/>
<source>J&amp;oin as spectator</source>
<translation type="unfinished"></translation>
</message>
......@@ -1489,22 +1489,22 @@
<context>
<name>MessagesSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="379"/>
<location filename="../src/dlg_settings.cpp" line="430"/>
<source>&amp;Add</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="380"/>
<location filename="../src/dlg_settings.cpp" line="431"/>
<source>&amp;Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="362"/>
<location filename="../src/dlg_settings.cpp" line="413"/>
<source>Add message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="362"/>
<location filename="../src/dlg_settings.cpp" line="413"/>
<source>Message:</source>
<translation type="unfinished"></translation>
</message>
......@@ -1876,27 +1876,27 @@
<context>
<name>QObject</name>
<message>
<location filename="../../common/decklist.cpp" line="79"/>
<location filename="../../common/decklist.cpp" line="78"/>
<source>Maindeck</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="81"/>
<location filename="../../common/decklist.cpp" line="80"/>
<source>Sideboard</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="229"/>
<location filename="../../common/decklist.cpp" line="228"/>
<source>Cockatrice decks (*.cod)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="230"/>
<location filename="../../common/decklist.cpp" line="229"/>
<source>Plain text decks (*.dec *.mwDeck)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="231"/>
<location filename="../../common/decklist.cpp" line="230"/>
<source>All files (*.*)</source>
<translation type="unfinished"></translation>
</message>
......@@ -1922,7 +1922,7 @@
<context>
<name>ServerMessageLog</name>
<message>
<location filename="../src/tab_server.cpp" line="231"/>
<location filename="../src/tab_server.cpp" line="232"/>
<source>Server messages</source>
<translation type="unfinished"></translation>
</message>
......@@ -2144,28 +2144,51 @@ Please enter a name:</source>
<context>
<name>TabServer</name>
<message>
<location filename="../src/tab_server.h" line="120"/>
<location filename="../src/tab_server.h" line="133"/>
<source>Server</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserInfoBox</name>
<message>
<location filename="../src/tab_server.cpp" line="373"/>
<source>Location:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="374"/>
<source>User level:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserInterfaceSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="318"/>
<location filename="../src/dlg_settings.cpp" line="367"/>
<source>General interface settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="319"/>
<location filename="../src/dlg_settings.cpp" line="368"/>
<source>&amp;Double-click cards to play them (instead of single-click)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="369"/>
<source>Animation settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="370"/>
<source>&amp;Tap/untap animation</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserList</name>
<message>
<location filename="../src/tab_server.cpp" line="281"/>
<location filename="../src/tab_server.cpp" line="282"/>
<source>Users online: %1</source>
<translation type="unfinished"></translation>
</message>
......
......@@ -4,70 +4,74 @@
<context>
<name>AppearanceSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="241"/>
<location filename="../src/dlg_settings.cpp" line="255"/>
<source>Zone background pictures</source>
<translation>Imagenes de la zona de fondo</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="242"/>
<location filename="../src/dlg_settings.cpp" line="256"/>
<source>Path to hand background:</source>
<translation>Ruta a la imagen de fondo de la mano:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="243"/>
<location filename="../src/dlg_settings.cpp" line="257"/>
<source>Path to table background:</source>
<translation>Ruta a la imagen de fondo de la mesa:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="244"/>
<location filename="../src/dlg_settings.cpp" line="258"/>
<source>Path to player info background:</source>
<translation>Ruta a la imagen de fondo de la información del jugador:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="245"/>
<location filename="../src/dlg_settings.cpp" line="259"/>
<source>Path to picture of card back:</source>
<translation>Ruta al reverso de las cartas:</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="247"/>
<location filename="../src/dlg_settings.cpp" line="261"/>
<source>Hand layout</source>
<translation>Disposición de la mano</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="248"/>
<location filename="../src/dlg_settings.cpp" line="262"/>
<source>Display hand horizontally (wastes space)</source>
<translation>Mostrar la mano horizontalmente (desperdicia espacio)</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="250"/>
<location filename="../src/dlg_settings.cpp" line="264"/>
<source>Table grid layout</source>
<translation>Disposición de la rejilla de la mesa</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="251"/>
<location filename="../src/dlg_settings.cpp" line="265"/>
<source>Economical layout</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Economic layout</source>
<translation>Disposición económica</translation>
<translation type="obsolete">Disposición económica</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="253"/>
<location filename="../src/dlg_settings.cpp" line="267"/>
<source>Zone view layout</source>
<translation>Distribución de la zona de visionado</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="254"/>
<location filename="../src/dlg_settings.cpp" line="268"/>
<source>Sort by name</source>
<translation>Ordenar por nombre</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="255"/>
<location filename="../src/dlg_settings.cpp" line="269"/>
<source>Sort by type</source>
<translation>Ordenar por tipo</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="260"/>
<location filename="../src/dlg_settings.cpp" line="270"/>
<location filename="../src/dlg_settings.cpp" line="280"/>
<location filename="../src/dlg_settings.cpp" line="290"/>
<location filename="../src/dlg_settings.cpp" line="296"/>
<location filename="../src/dlg_settings.cpp" line="312"/>
<location filename="../src/dlg_settings.cpp" line="328"/>
<source>Choose path</source>
<translation>Elija ruta</translation>
</message>
......@@ -352,27 +356,27 @@
<context>
<name>ChatChannelSelector</name>
<message>
<location filename="../src/tab_server.cpp" line="151"/>
<location filename="../src/tab_server.cpp" line="152"/>
<source>Chat channels</source>
<translation>Canales de Chat</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="152"/>
<location filename="../src/tab_server.cpp" line="153"/>
<source>Joi&amp;n</source>
<translation>E&amp;ntrar</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="155"/>
<location filename="../src/tab_server.cpp" line="156"/>
<source>Channel</source>
<translation>Canal</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="156"/>
<location filename="../src/tab_server.cpp" line="157"/>
<source>Description</source>
<translation>Descripción</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="157"/>
<location filename="../src/tab_server.cpp" line="158"/>
<source>Players</source>
<translation>Jugadores</translation>
</message>
......@@ -735,54 +739,66 @@
<context>
<name>DlgSettings</name>
<message>
<location filename="../src/dlg_settings.cpp" line="476"/>
<location filename="../src/dlg_settings.cpp" line="479"/>
<location filename="../src/dlg_settings.cpp" line="482"/>
<location filename="../src/dlg_settings.cpp" line="527"/>
<location filename="../src/dlg_settings.cpp" line="532"/>
<location filename="../src/dlg_settings.cpp" line="537"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="476"/>
<source>Your card database is invalid. Please check if the path is set correctly.</source>
<translation>Tu base de datos de cartas es invalida. Por favor, comprueba si la ruta está asignada correctamente.</translation>
<translation type="obsolete">Tu base de datos de cartas es invalida. Por favor, comprueba si la ruta está asignada correctamente.</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="479"/>
<source>The path to your deck directory is invalid.</source>
<translation>La ruta a tu directorio de mazos es invalida.</translation>
<translation type="obsolete">La ruta a tu directorio de mazos es invalida.</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="482"/>
<source>The path to your card pictures directory is invalid.</source>
<translation>La ruta a tu directorio de imagenes de las cartas es invalida.</translation>
<translation type="obsolete">La ruta a tu directorio de imagenes de las cartas es invalida.</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="527"/>
<source>Your card database is invalid. Would you like to go back and set the correct path?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="532"/>
<source>The path to your deck directory is invalid. Would you like to go back and set the correct path?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="490"/>
<location filename="../src/dlg_settings.cpp" line="537"/>
<source>The path to your card pictures directory is invalid. Would you like to go back and set the correct path?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="546"/>
<source>Settings</source>
<translation>Preferencias</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="492"/>
<location filename="../src/dlg_settings.cpp" line="548"/>
<source>General</source>
<translation>General</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="493"/>
<location filename="../src/dlg_settings.cpp" line="549"/>
<source>Appearance</source>
<translation>Apariencia</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="494"/>
<location filename="../src/dlg_settings.cpp" line="550"/>
<source>User interface</source>
<translation>Interfaz de usuario</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="495"/>
<location filename="../src/dlg_settings.cpp" line="551"/>
<source>Messages</source>
<translation>Mensajes</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="497"/>
<location filename="../src/dlg_settings.cpp" line="553"/>
<source>&amp;Close</source>
<translation>&amp;Cerrar</translation>
</message>
......@@ -790,65 +806,65 @@
<context>
<name>GameSelector</name>
<message>
<location filename="../src/tab_server.cpp" line="115"/>
<location filename="../src/tab_server.cpp" line="116"/>
<source>C&amp;reate</source>
<translation>C&amp;rear</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="116"/>
<location filename="../src/tab_server.cpp" line="117"/>
<source>&amp;Join</source>
<translation>E&amp;ntrar</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="78"/>
<location filename="../src/tab_server.cpp" line="79"/>
<location filename="../src/tab_server.cpp" line="80"/>
<location filename="../src/tab_server.cpp" line="81"/>
<location filename="../src/tab_server.cpp" line="82"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="78"/>
<location filename="../src/tab_server.cpp" line="79"/>
<source>Wrong password.</source>
<translation>Contraseña incorrecta.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="79"/>
<location filename="../src/tab_server.cpp" line="80"/>
<source>Spectators are not allowed in this game.</source>
<translation>No se permiten espectadores en esta partida.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="80"/>
<location filename="../src/tab_server.cpp" line="81"/>
<source>The game is already full.</source>
<translation>La partida no tiene plazas libres.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="81"/>
<location filename="../src/tab_server.cpp" line="82"/>
<source>The game does not exist any more.</source>
<translation>La partida ya no existe.</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="97"/>
<location filename="../src/tab_server.cpp" line="98"/>
<source>Join game</source>
<translation>Entrar en la partida</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="97"/>
<location filename="../src/tab_server.cpp" line="98"/>
<source>Password:</source>
<translation>Contraseña:</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="113"/>
<location filename="../src/tab_server.cpp" line="114"/>
<source>Games</source>
<translation>Partidas</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="114"/>
<location filename="../src/tab_server.cpp" line="115"/>
<source>&amp;Show full games</source>
<translation>&amp;Ver partidas sin plazas libres</translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="117"/>
<location filename="../src/tab_server.cpp" line="118"/>
<source>J&amp;oin as spectator</source>
<translation>Entrar como e&amp;spectador</translation>
</message>
......@@ -1489,22 +1505,22 @@
<context>
<name>MessagesSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="379"/>
<location filename="../src/dlg_settings.cpp" line="430"/>
<source>&amp;Add</source>
<translation>&amp;Añadir</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="380"/>
<location filename="../src/dlg_settings.cpp" line="431"/>
<source>&amp;Remove</source>
<translation>&amp;Quitar</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="362"/>
<location filename="../src/dlg_settings.cpp" line="413"/>
<source>Add message</source>
<translation>Añadir mensaje</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="362"/>
<location filename="../src/dlg_settings.cpp" line="413"/>
<source>Message:</source>
<translation>Mensaje:</translation>
</message>
......@@ -1888,27 +1904,27 @@
<context>
<name>QObject</name>
<message>
<location filename="../../common/decklist.cpp" line="79"/>
<location filename="../../common/decklist.cpp" line="78"/>
<source>Maindeck</source>
<translation>Mazo principal</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="81"/>
<location filename="../../common/decklist.cpp" line="80"/>
<source>Sideboard</source>
<translation>Reserva</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="229"/>
<location filename="../../common/decklist.cpp" line="228"/>
<source>Cockatrice decks (*.cod)</source>
<translation>Mazos de Cockatrice (*.cod)</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="230"/>
<location filename="../../common/decklist.cpp" line="229"/>
<source>Plain text decks (*.dec *.mwDeck)</source>
<translation>Archivos de texto plano (*.dec *.mwDeck)</translation>
</message>
<message>
<location filename="../../common/decklist.cpp" line="231"/>
<location filename="../../common/decklist.cpp" line="230"/>
<source>All files (*.*)</source>
<translation>Todos los archivos (*.*)</translation>
</message>
......@@ -1934,7 +1950,7 @@
<context>
<name>ServerMessageLog</name>
<message>
<location filename="../src/tab_server.cpp" line="231"/>
<location filename="../src/tab_server.cpp" line="232"/>
<source>Server messages</source>
<translation>Mensajes del servidor</translation>
</message>
......@@ -2157,28 +2173,51 @@ Por favor, introduzca un nombre:</translation>
<context>
<name>TabServer</name>
<message>
<location filename="../src/tab_server.h" line="120"/>
<location filename="../src/tab_server.h" line="133"/>
<source>Server</source>
<translation>Servidor</translation>
</message>
</context>
<context>
<name>UserInfoBox</name>
<message>
<location filename="../src/tab_server.cpp" line="373"/>
<source>Location:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/tab_server.cpp" line="374"/>
<source>User level:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserInterfaceSettingsPage</name>
<message>
<location filename="../src/dlg_settings.cpp" line="318"/>
<location filename="../src/dlg_settings.cpp" line="367"/>
<source>General interface settings</source>
<translation>Preferencias generales de la interfaz</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="319"/>
<location filename="../src/dlg_settings.cpp" line="368"/>
<source>&amp;Double-click cards to play them (instead of single-click)</source>
<translation>&amp;Doble click en las cartas para jugarlas (en lugar de un solo click)</translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="369"/>
<source>Animation settings</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/dlg_settings.cpp" line="370"/>
<source>&amp;Tap/untap animation</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>UserList</name>
<message>
<location filename="../src/tab_server.cpp" line="281"/>
<location filename="../src/tab_server.cpp" line="282"/>
<source>Users online: %1</source>
<translation>Usuarios online: %1</translation>
</message>
......
#ifndef COLOR_H
#define COLOR_H
#ifdef QT_GUI_LIB
#include <QColor>
#endif
class Color {
private:
int value;
public:
Color(int _value = 0) : value(_value) { }
Color(int r, int g, int b) : value(r * 65536 + g * 256 + b) { }
int getValue() const { return value; }
#ifdef QT_GUI_LIB
Color(const QColor &_color)
{
value = _color.red() * 65536 + _color.green() * 256 + _color.blue();
}
QColor getQColor() const
{
return QColor(value / 65536, (value % 65536) / 256, value % 256);
}
#endif
};
#endif
\ No newline at end of file
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QXmlStreamReader>
#include <QXmlStreamWriter>
......
......@@ -5,6 +5,7 @@
#include <QVector>
#include <QPair>
#include <QObject>
#include <QStringList>
#include "serializable_item.h"
class CardDatabase;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment