nice ellipses :)

This commit is contained in:
Max-Wilhelm Bruker 2009-05-23 01:58:11 +02:00
parent 7e13352a95
commit 175512a2ad
13 changed files with 144 additions and 101 deletions

View file

@ -45,7 +45,7 @@ void CardZone::addCard(CardItem *card, bool reorganize, int x, int y)
view->addCard(new CardItem(player->getDb(), card->getName(), card->getId()), reorganize, x, y); view->addCard(new CardItem(player->getDb(), card->getName(), card->getId()), reorganize, x, y);
addCardImpl(card, x, y); addCardImpl(card, x, y);
if (reorganize) if (reorganize)
reorganizeCards(); reorganizeCards();
} }
@ -67,9 +67,9 @@ CardItem *CardZone::takeCard(int position, int cardId, const QString &cardName)
{ {
if (position >= cards->size()) if (position >= cards->size())
return NULL; return NULL;
CardItem *c = cards->takeAt(position); CardItem *c = cards->takeAt(position);
if (view) if (view)
view->removeCard(position); view->removeCard(position);
@ -103,3 +103,26 @@ void CardZone::moveAllToZone(const QString &targetZone, int targetX)
for (int i = cards->size() - 1; i >= 0; i--) for (int i = cards->size() - 1; i >= 0; i--)
player->client->moveCard(cards->at(i)->getId(), getName(), targetZone, targetX); player->client->moveCard(cards->at(i)->getId(), getName(), targetZone, targetX);
} }
void CardZone::paintCardNumberEllipse(QPainter *painter)
{
painter->save();
QString numStr = QString::number(cards->size());
QFont font("Times", 32, QFont::Bold);
QFontMetrics fm(font);
QRect br = fm.boundingRect(numStr);
double w = br.width() * 1.42;
double h = br.height() * 1.42;
if (w < h)
w = h;
painter->setPen(QPen(QColor("black")));
painter->setBrush(QColor(255, 255, 255, 150));
painter->drawEllipse(QRectF((boundingRect().width() - w) / 2.0, (boundingRect().height() - h) / 2.0, w, h));
painter->setFont(font);
painter->drawText(boundingRect(), Qt::AlignCenter, numStr);
painter->restore();
}

View file

@ -7,6 +7,7 @@
class Player; class Player;
class ZoneViewZone; class ZoneViewZone;
class QMenu; class QMenu;
class QPainter;
class CardZone : public QGraphicsItem { class CardZone : public QGraphicsItem {
protected: protected:
@ -20,6 +21,7 @@ protected:
bool isShufflable; bool isShufflable;
void mousePressEvent(QGraphicsSceneMouseEvent *event); void mousePressEvent(QGraphicsSceneMouseEvent *event);
virtual void addCardImpl(CardItem *card, int x, int y) = 0; virtual void addCardImpl(CardItem *card, int x, int y) = 0;
void paintCardNumberEllipse(QPainter *painter);
public: public:
enum { Type = typeZone }; enum { Type = typeZone };
int type() const { return Type; } int type() const { return Type; }

View file

@ -3,6 +3,7 @@
#include <QTextStream> #include <QTextStream>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QXmlStreamWriter> #include <QXmlStreamWriter>
#include <QProgressDialog>
#include "decklist.h" #include "decklist.h"
#include "carddatabase.h" #include "carddatabase.h"
@ -57,12 +58,12 @@ bool DeckList::saveToFile_Native(QIODevice *device)
QXmlStreamWriter xml(device); QXmlStreamWriter xml(device);
xml.setAutoFormatting(true); xml.setAutoFormatting(true);
xml.writeStartDocument(); xml.writeStartDocument();
xml.writeStartElement("cockatrice_deck"); xml.writeStartElement("cockatrice_deck");
xml.writeAttribute("version", "1"); xml.writeAttribute("version", "1");
xml.writeTextElement("deckname", name); xml.writeTextElement("deckname", name);
xml.writeTextElement("comments", comments); xml.writeTextElement("comments", comments);
xml.writeStartElement("decklist"); xml.writeStartElement("decklist");
for (int i = 0; i < size(); i++) { for (int i = 0; i < size(); i++) {
DecklistRow *r = at(i); DecklistRow *r = at(i);
@ -75,9 +76,9 @@ bool DeckList::saveToFile_Native(QIODevice *device)
xml.writeAttribute("name", r->getCard()); xml.writeAttribute("name", r->getCard());
} }
xml.writeEndElement(); // decklist xml.writeEndElement(); // decklist
xml.writeEndElement(); // cockatrice_deck xml.writeEndElement(); // cockatrice_deck
xml.writeEndDocument(); xml.writeEndDocument();
return true; return true;
} }
@ -89,20 +90,20 @@ bool DeckList::loadFromFile_Plain(QIODevice *device)
QString line = in.readLine().simplified(); QString line = in.readLine().simplified();
if (line.startsWith("//")) if (line.startsWith("//"))
continue; continue;
bool isSideboard = false; bool isSideboard = false;
if (line.startsWith("SB:", Qt::CaseInsensitive)) { if (line.startsWith("SB:", Qt::CaseInsensitive)) {
line = line.mid(3).trimmed(); line = line.mid(3).trimmed();
isSideboard = true; isSideboard = true;
} }
// Filter out MWS edition symbols and basic land extras // Filter out MWS edition symbols and basic land extras
QRegExp rx("\\[.*\\]"); QRegExp rx("\\[.*\\]");
line.remove(rx); line.remove(rx);
rx.setPattern("\\(.*\\)"); rx.setPattern("\\(.*\\)");
line.remove(rx); line.remove(rx);
line = line.simplified(); line = line.simplified();
int i = line.indexOf(' '); int i = line.indexOf(' ');
bool ok; bool ok;
int number = line.left(i).toInt(&ok); int number = line.left(i).toInt(&ok);
@ -123,7 +124,7 @@ bool DeckList::saveToFile_Plain(QIODevice *device)
return true; return true;
} }
bool DeckList::loadFromFile(const QString &fileName, FileFormat fmt) bool DeckList::loadFromFile(const QString &fileName, FileFormat fmt, QWidget *parent)
{ {
QFile file(fileName); QFile file(fileName);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
@ -136,7 +137,7 @@ bool DeckList::loadFromFile(const QString &fileName, FileFormat fmt)
case CockatriceFormat: result = loadFromFile_Native(&file); break; case CockatriceFormat: result = loadFromFile_Native(&file); break;
} }
if (result) if (result)
cacheCardPictures(); cacheCardPictures(parent);
return result; return result;
} }
@ -150,7 +151,7 @@ bool DeckList::saveToFile(const QString &fileName, FileFormat fmt)
QFile file(fileName); QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return false; return false;
bool result = false; bool result = false;
switch (fmt) { switch (fmt) {
case PlainTextFormat: result = saveToFile_Plain(&file); break; case PlainTextFormat: result = saveToFile_Plain(&file); break;
@ -161,11 +162,11 @@ bool DeckList::saveToFile(const QString &fileName, FileFormat fmt)
bool DeckList::loadDialog(QWidget *parent) bool DeckList::loadDialog(QWidget *parent)
{ {
QFileDialog dialog(parent); QFileDialog dialog(parent, tr("Load deck"));
dialog.setNameFilters(fileNameFilters); dialog.setNameFilters(fileNameFilters);
if (!dialog.exec()) if (!dialog.exec())
return false; return false;
QString fileName = dialog.selectedFiles().at(0); QString fileName = dialog.selectedFiles().at(0);
FileFormat fmt; FileFormat fmt;
switch (fileNameFilters.indexOf(dialog.selectedNameFilter())) { switch (fileNameFilters.indexOf(dialog.selectedNameFilter())) {
@ -173,8 +174,8 @@ bool DeckList::loadDialog(QWidget *parent)
case 1: fmt = PlainTextFormat; break; case 1: fmt = PlainTextFormat; break;
default: fmt = PlainTextFormat; break; default: fmt = PlainTextFormat; break;
} }
if (loadFromFile(fileName, fmt)) { if (loadFromFile(fileName, fmt, parent)) {
lastFileName = fileName; lastFileName = fileName;
lastFileFormat = fmt; lastFileFormat = fmt;
return true; return true;
@ -184,14 +185,14 @@ bool DeckList::loadDialog(QWidget *parent)
bool DeckList::saveDialog(QWidget *parent) bool DeckList::saveDialog(QWidget *parent)
{ {
QFileDialog dialog(parent); QFileDialog dialog(parent, tr("Save deck"));
dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setAcceptMode(QFileDialog::AcceptSave);
dialog.setConfirmOverwrite(true); dialog.setConfirmOverwrite(true);
dialog.setDefaultSuffix("cod"); dialog.setDefaultSuffix("cod");
dialog.setNameFilters(fileNameFilters); dialog.setNameFilters(fileNameFilters);
if (!dialog.exec()) if (!dialog.exec())
return false; return false;
QString fileName = dialog.selectedFiles().at(0); QString fileName = dialog.selectedFiles().at(0);
DeckList::FileFormat fmt; DeckList::FileFormat fmt;
switch (fileNameFilters.indexOf(dialog.selectedNameFilter())) { switch (fileNameFilters.indexOf(dialog.selectedNameFilter())) {
@ -199,7 +200,7 @@ bool DeckList::saveDialog(QWidget *parent)
case 1: fmt = DeckList::PlainTextFormat; break; case 1: fmt = DeckList::PlainTextFormat; break;
default: fmt = DeckList::PlainTextFormat; break; default: fmt = DeckList::PlainTextFormat; break;
} }
if (saveToFile(fileName, fmt)) { if (saveToFile(fileName, fmt)) {
lastFileName = fileName; lastFileName = fileName;
lastFileFormat = fmt; lastFileFormat = fmt;
@ -208,10 +209,15 @@ bool DeckList::saveDialog(QWidget *parent)
return false; return false;
} }
void DeckList::cacheCardPictures() void DeckList::cacheCardPictures(QWidget *parent)
{ {
for (int i = 0; i < size(); i++) QProgressDialog progress(tr("Caching card pictures..."), QString(), 0, size(), parent);
progress.setWindowModality(Qt::WindowModal);
for (int i = 0; i < size(); i++) {
db->getCard(at(i)->getCard())->getPixmap(); db->getCard(at(i)->getCard())->getPixmap();
progress.setValue(i + 1);
}
} }
void DeckList::cleanList() void DeckList::cleanList()

View file

@ -19,36 +19,37 @@ public:
bool isSideboard() const { return sideboard; } bool isSideboard() const { return sideboard; }
}; };
class DeckList : public QList<DecklistRow *> { class DeckList : public QObject, public QList<DecklistRow *> {
Q_OBJECT
public: public:
enum FileFormat { PlainTextFormat, CockatriceFormat }; enum FileFormat { PlainTextFormat, CockatriceFormat };
private: private:
static const QStringList fileNameFilters; static const QStringList fileNameFilters;
void cacheCardPictures(); void cacheCardPictures(QWidget *parent = 0);
CardDatabase *db; CardDatabase *db;
QString name, comments; QString name, comments;
QString lastFileName; QString lastFileName;
FileFormat lastFileFormat; FileFormat lastFileFormat;
public slots:
void setName(const QString &_name) { name = _name; }
void setComments(const QString &_comments) { comments = _comments; }
public: public:
DeckList(CardDatabase *_db); DeckList(CardDatabase *_db);
~DeckList(); ~DeckList();
void setName(const QString &_name) { name = _name; }
QString getName() const { return name; } QString getName() const { return name; }
void setComments(const QString &_comments) { comments = _comments; }
QString getComments() const { return comments; } QString getComments() const { return comments; }
QString getLastFileName() const { return lastFileName; } QString getLastFileName() const { return lastFileName; }
FileFormat getLastFileFormat() const { return lastFileFormat; } FileFormat getLastFileFormat() const { return lastFileFormat; }
bool loadFromFile_Native(QIODevice *device); bool loadFromFile_Native(QIODevice *device);
bool saveToFile_Native(QIODevice *device); bool saveToFile_Native(QIODevice *device);
bool loadFromFile_Plain(QIODevice *device); bool loadFromFile_Plain(QIODevice *device);
bool saveToFile_Plain(QIODevice *device); bool saveToFile_Plain(QIODevice *device);
bool loadFromFile(const QString &fileName, FileFormat fmt); bool loadFromFile(const QString &fileName, FileFormat fmt, QWidget *parent = 0);
bool saveToFile(const QString &fileName, FileFormat fmt); bool saveToFile(const QString &fileName, FileFormat fmt);
bool loadDialog(QWidget *parent = 0); bool loadDialog(QWidget *parent = 0);
bool saveDialog(QWidget *parent = 0); bool saveDialog(QWidget *parent = 0);
void cleanList(); void cleanList();
}; };

View file

@ -9,6 +9,7 @@ GraveZone::GraveZone(Player *_p, QGraphicsItem *parent)
: CardZone(_p, "grave", false, false, parent) : CardZone(_p, "grave", false, false, parent)
{ {
cards = new CardList(true); cards = new CardList(true);
setCacheMode(DeviceCoordinateCache); // Do not move this line to the parent constructor!
} }
QRectF GraveZone::boundingRect() const QRectF GraveZone::boundingRect() const
@ -16,18 +17,16 @@ QRectF GraveZone::boundingRect() const
return QRectF(0, 0, CARD_WIDTH, CARD_HEIGHT); return QRectF(0, 0, CARD_WIDTH, CARD_HEIGHT);
} }
void GraveZone::paint(QPainter *painter, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/) void GraveZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{ {
if (!cards->isEmpty())
cards->at(0)->paint(painter, option, widget);
painter->save(); painter->save();
painter->fillRect(boundingRect(), QColor("yellow")); paintCardNumberEllipse(painter);
painter->drawRect(QRectF(0.5, 0.5, CARD_WIDTH - 1, CARD_HEIGHT - 1));
painter->setFont(QFont("Times", 32, QFont::Bold));
painter->setPen(QPen(QColor("black")));
painter->setBackground(QBrush(QColor(255, 255, 255, 100)));
painter->setBackgroundMode(Qt::OpaqueMode);
painter->drawText(boundingRect(), Qt::AlignCenter, QString::number(cards->size()));
painter->restore(); painter->restore();
} }
@ -70,7 +69,7 @@ void GraveZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (cards->empty()) if (cards->empty())
return; return;
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier); bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
CardItem *card = cards->at(0); CardItem *card = cards->at(0);
CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos(), faceDown); CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos(), faceDown);
@ -78,8 +77,7 @@ void GraveZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
} }
void GraveZone::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void GraveZone::mouseReleaseEvent(QGraphicsSceneMouseEvent */*event*/)
{ {
Q_UNUSED(event);
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
} }

View file

@ -10,9 +10,9 @@ LibraryZone::LibraryZone(Player *_p, QGraphicsItem *parent)
: CardZone(_p, "deck", false, true, parent) : CardZone(_p, "deck", false, true, parent)
{ {
cards = new CardList(false); cards = new CardList(false);
setCacheMode(DeviceCoordinateCache); // Do not move this line to the parent constructor!
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
setCacheMode(DeviceCoordinateCache);
image = player->getDb()->getCard()->getPixmap(); image = player->getDb()->getCard()->getPixmap();
} }
@ -21,21 +21,15 @@ QRectF LibraryZone::boundingRect() const
return QRectF(0, 0, CARD_WIDTH, CARD_HEIGHT); return QRectF(0, 0, CARD_WIDTH, CARD_HEIGHT);
} }
void LibraryZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) void LibraryZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget */*widget*/)
{ {
Q_UNUSED(option);
Q_UNUSED(widget);
painter->save(); painter->save();
QRectF foo = option->matrix.mapRect(boundingRect()); QRectF foo = option->matrix.mapRect(boundingRect());
QPixmap bar = image->scaled((int) foo.width(), (int) foo.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation); QPixmap bar = image->scaled((int) foo.width(), (int) foo.height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
painter->drawPixmap(boundingRect(), bar, bar.rect()); painter->drawPixmap(boundingRect(), bar, bar.rect());
painter->setFont(QFont("Times", 32, QFont::Bold)); paintCardNumberEllipse(painter);
painter->setPen(QPen(QColor("black")));
painter->setBackground(QBrush(QColor(255, 255, 255, 100)));
painter->setBackgroundMode(Qt::OpaqueMode);
painter->drawText(boundingRect(), Qt::AlignCenter, QString::number(cards->size()));
painter->restore(); painter->restore();
} }
@ -81,7 +75,7 @@ void LibraryZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (cards->empty()) if (cards->empty())
return; return;
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier); bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
CardItem *card = cards->at(0); CardItem *card = cards->at(0);
CardDragItem *drag = card->createDragItem(this, 0, event->pos(), event->scenePos(), faceDown); CardDragItem *drag = card->createDragItem(this, 0, event->pos(), event->scenePos(), faceDown);

View file

@ -156,18 +156,19 @@ void Player::gameEvent(ServerEventData *event)
// Clean up existing zones first // Clean up existing zones first
for (int i = 0; i < zones.size(); i++) for (int i = 0; i < zones.size(); i++)
zones.at(i)->clearContents(); zones.at(i)->clearContents();
area->clearCounters(); area->clearCounters();
CardZone *deck = zones.findZone("deck"); CardZone *deck = zones.findZone("deck");
for (; deck_cards; deck_cards--) for (; deck_cards; deck_cards--)
deck->addCard(new CardItem(db), false, -1); deck->addCard(new CardItem(db), false, -1);
deck->reorganizeCards();
CardZone *sb = zones.findZone("sb"); CardZone *sb = zones.findZone("sb");
for (; sb_cards; sb_cards--) for (; sb_cards; sb_cards--)
sb->addCard(new CardItem(db), false, -1); sb->addCard(new CardItem(db), false, -1);
sb->reorganizeCards();
for (int i = 0; i < zones.size(); i++)
zones.at(i)->reorganizeCards();
if (local) { if (local) {
client->addCounter("life", QColor("white"), 20); client->addCounter("life", QColor("white"), 20);
@ -219,7 +220,7 @@ void Player::gameEvent(ServerEventData *event)
qDebug("moveCard: card not found"); qDebug("moveCard: card not found");
card->deleteDragItem(); card->deleteDragItem();
card->setFaceDown(facedown); card->setFaceDown(facedown);
// The log event has to be sent before the card is added to the target zone // The log event has to be sent before the card is added to the target zone

View file

@ -9,6 +9,7 @@ RfgZone::RfgZone(Player *_p, QGraphicsItem *parent)
: CardZone(_p, "rfg", false, false, parent) : CardZone(_p, "rfg", false, false, parent)
{ {
cards = new CardList(true); cards = new CardList(true);
setCacheMode(DeviceCoordinateCache); // Do not move this line to the parent constructor!
} }
QRectF RfgZone::boundingRect() const QRectF RfgZone::boundingRect() const
@ -18,17 +19,13 @@ QRectF RfgZone::boundingRect() const
void RfgZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) void RfgZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{ {
Q_UNUSED(option); if (!cards->isEmpty())
Q_UNUSED(widget); cards->at(0)->paint(painter, option, widget);
painter->save(); painter->save();
painter->fillRect(boundingRect(), QColor("yellow")); paintCardNumberEllipse(painter);
painter->drawRect(QRectF(0.5, 0.5, CARD_WIDTH - 1, CARD_HEIGHT - 1));
painter->setFont(QFont("Times", 32, QFont::Bold));
painter->setPen(QPen(QColor("black")));
painter->setBackground(QBrush(QColor(255, 255, 255, 100)));
painter->setBackgroundMode(Qt::OpaqueMode);
painter->drawText(boundingRect(), Qt::AlignCenter, QString::number(cards->size()));
painter->restore(); painter->restore();
} }
@ -72,7 +69,7 @@ void RfgZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
if (cards->empty()) if (cards->empty())
return; return;
bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier); bool faceDown = event->modifiers().testFlag(Qt::ShiftModifier);
CardItem *card = cards->at(0); CardItem *card = cards->at(0);
CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos(), faceDown); CardDragItem *drag = card->createDragItem(this, card->getId(), event->pos(), event->scenePos(), faceDown);
@ -80,8 +77,7 @@ void RfgZone::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
} }
void RfgZone::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) void RfgZone::mouseReleaseEvent(QGraphicsSceneMouseEvent */*event*/)
{ {
Q_UNUSED(event);
setCursor(Qt::OpenHandCursor); setCursor(Qt::OpenHandCursor);
} }

View file

@ -13,29 +13,50 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
databaseView->setModel(databaseModel); databaseView->setModel(databaseModel);
databaseView->setSortingEnabled(true); databaseView->setSortingEnabled(true);
connect(databaseView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoLeft(const QModelIndex &, const QModelIndex &))); connect(databaseView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoLeft(const QModelIndex &, const QModelIndex &)));
QVBoxLayout *leftFrame = new QVBoxLayout;
leftFrame->addWidget(databaseView);
cardInfo = new CardInfoWidget(db);
QVBoxLayout *middleFrame = new QVBoxLayout;
middleFrame->addWidget(cardInfo);
middleFrame->addStretch();
deckModel = new DeckListModel(db, this); deckModel = new DeckListModel(db, this);
deckView = new QTreeView(); deckView = new QTreeView();
deckView->setModel(deckModel); deckView->setModel(deckModel);
connect(deckView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoRight(const QModelIndex &, const QModelIndex &))); connect(deckView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoRight(const QModelIndex &, const QModelIndex &)));
cardInfo = new CardInfoWidget(db); QLabel *nameLabel = new QLabel(tr("Deck &name:"));
nameEdit = new QLineEdit;
QVBoxLayout *middleFrame = new QVBoxLayout; nameLabel->setBuddy(nameEdit);
middleFrame->addWidget(cardInfo); connect(nameEdit, SIGNAL(textChanged(const QString &)), deckModel->getDeckList(), SLOT(setName(const QString &)));
middleFrame->addStretch(); QLabel *commentsLabel = new QLabel(tr("&Comments:"));
commentsEdit = new QLineEdit;
commentsLabel->setBuddy(commentsEdit);
connect(commentsEdit, SIGNAL(textChanged(const QString &)), deckModel->getDeckList(), SLOT(setComments(const QString &)));
QGridLayout *grid = new QGridLayout;
grid->addWidget(nameLabel, 0, 0);
grid->addWidget(nameEdit, 0, 1);
grid->addWidget(commentsLabel, 1, 0);
grid->addWidget(commentsEdit, 1, 1);
QVBoxLayout *rightFrame = new QVBoxLayout;
rightFrame->addLayout(grid);
rightFrame->addWidget(deckView);
QHBoxLayout *mainLayout = new QHBoxLayout; QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(databaseView); mainLayout->addLayout(leftFrame);
mainLayout->addLayout(middleFrame); mainLayout->addLayout(middleFrame);
mainLayout->addWidget(deckView); mainLayout->addLayout(rightFrame);
QWidget *centralWidget = new QWidget; QWidget *centralWidget = new QWidget;
centralWidget->setLayout(mainLayout); centralWidget->setLayout(mainLayout);
setCentralWidget(centralWidget); setCentralWidget(centralWidget);
setWindowTitle(tr("Card database")); setWindowTitle(tr("Card database"));
aNewDeck = new QAction(tr("&New deck"), this); aNewDeck = new QAction(tr("&New deck"), this);
connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck())); connect(aNewDeck, SIGNAL(triggered()), this, SLOT(actNewDeck()));
aLoadDeck = new QAction(tr("&Load deck..."), this); aLoadDeck = new QAction(tr("&Load deck..."), this);
@ -46,8 +67,8 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
connect(aSaveDeck, SIGNAL(triggered()), this, SLOT(actSaveDeck())); connect(aSaveDeck, SIGNAL(triggered()), this, SLOT(actSaveDeck()));
aSaveDeckAs = new QAction(tr("&Save deck as..."), this); aSaveDeckAs = new QAction(tr("&Save deck as..."), this);
connect(aSaveDeckAs, SIGNAL(triggered()), this, SLOT(actSaveDeckAs())); connect(aSaveDeckAs, SIGNAL(triggered()), this, SLOT(actSaveDeckAs()));
deckMenu = menuBar()->addMenu(tr("Deck")); deckMenu = menuBar()->addMenu(tr("&Deck"));
deckMenu->addAction(aNewDeck); deckMenu->addAction(aNewDeck);
deckMenu->addAction(aLoadDeck); deckMenu->addAction(aLoadDeck);
deckMenu->addAction(aSaveDeck); deckMenu->addAction(aSaveDeck);
@ -84,6 +105,8 @@ void WndDeckEditor::actLoadDeck()
lastFileName = l->getLastFileName(); lastFileName = l->getLastFileName();
lastFileFormat = l->getLastFileFormat(); lastFileFormat = l->getLastFileFormat();
deckView->reset(); deckView->reset();
nameEdit->setText(l->getName());
commentsEdit->setText(l->getComments());
} }
} }

View file

@ -10,13 +10,14 @@ class CardDatabaseModel;
class DeckListModel; class DeckListModel;
class QTreeView; class QTreeView;
class CardInfoWidget; class CardInfoWidget;
class QLineEdit;
class WndDeckEditor : public QMainWindow { class WndDeckEditor : public QMainWindow {
Q_OBJECT Q_OBJECT
private slots: private slots:
void updateCardInfoLeft(const QModelIndex &current, const QModelIndex &previous); void updateCardInfoLeft(const QModelIndex &current, const QModelIndex &previous);
void updateCardInfoRight(const QModelIndex &current, const QModelIndex &previous); void updateCardInfoRight(const QModelIndex &current, const QModelIndex &previous);
void actNewDeck(); void actNewDeck();
void actLoadDeck(); void actLoadDeck();
void actSaveDeck(); void actSaveDeck();
@ -25,12 +26,13 @@ private:
QString lastFileName; QString lastFileName;
DeckList::FileFormat lastFileFormat; DeckList::FileFormat lastFileFormat;
CardDatabase *db; CardDatabase *db;
CardDatabaseModel *databaseModel; CardDatabaseModel *databaseModel;
DeckListModel *deckModel; DeckListModel *deckModel;
QTreeView *databaseView, *deckView; QTreeView *databaseView, *deckView;
CardInfoWidget *cardInfo; CardInfoWidget *cardInfo;
QLineEdit *nameEdit, *commentsEdit;
QMenu *deckMenu; QMenu *deckMenu;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs; QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs;
public: public:

View file

@ -22,7 +22,7 @@ void ZoneViewLayout::reorganize()
for (int i = 0; i < views.size(); i++) { for (int i = 0; i < views.size(); i++) {
QRectF viewSize = views.at(i)->windowFrameRect(); QRectF viewSize = views.at(i)->windowFrameRect();
qreal w = viewSize.right() - viewSize.left(); qreal w = viewSize.right() - viewSize.left();
qreal h = viewSize.bottom() - viewSize.top(); // qreal h = viewSize.bottom() - viewSize.top();
views.at(i)->setPos(totalWidth, y); views.at(i)->setPos(totalWidth, y);
totalWidth += w; totalWidth += w;
} }

View file

@ -11,7 +11,7 @@ ZoneViewWidget::ZoneViewWidget(CardDatabase *_db, Player *_player, CardZone *_or
{ {
setWindowTitle(QString("%1's %2").arg(player->getName()).arg(_origZone->getName())); setWindowTitle(QString("%1's %2").arg(player->getName()).arg(_origZone->getName()));
setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_DeleteOnClose);
qreal y = 10; qreal y = 10;
if (_origZone->getIsShufflable() && (numberCards == 0)) { if (_origZone->getIsShufflable() && (numberCards == 0)) {
shuffleCheckBox = new QCheckBox("shuffle when closing"); shuffleCheckBox = new QCheckBox("shuffle when closing");
@ -25,18 +25,18 @@ ZoneViewWidget::ZoneViewWidget(CardDatabase *_db, Player *_player, CardZone *_or
qreal left, top, right, bottom; qreal left, top, right, bottom;
getWindowFrameMargins(&left, &top, &right, &bottom); getWindowFrameMargins(&left, &top, &right, &bottom);
qreal h = scene()->sceneRect().height() - (top + bottom); qreal h = scene()->sceneRect().height() - (top + bottom);
scrollBar = new QScrollBar(Qt::Vertical); scrollBar = new QScrollBar(Qt::Vertical);
QGraphicsProxyWidget *scrollProxy = new QGraphicsProxyWidget(this); QGraphicsProxyWidget *scrollProxy = new QGraphicsProxyWidget(this);
scrollProxy->setWidget(scrollBar); scrollProxy->setWidget(scrollBar);
scrollProxy->setPos(138, y); scrollProxy->setPos(138, y);
scrollProxy->resize(scrollProxy->size().width(), h - y); scrollProxy->resize(scrollProxy->size().width(), h - y);
qreal w = 138 + scrollProxy->size().width(); qreal w = 138 + scrollProxy->size().width();
resize(w, h); resize(w, h);
setMinimumSize(w, h); setMinimumSize(w, h);
setMaximumSize(w, h); setMaximumSize(w, h);
zone = new ZoneViewZone(player, _origZone, numberCards, this); zone = new ZoneViewZone(player, _origZone, numberCards, this);
zone->setPos(3, y); zone->setPos(3, y);
zone->setHeight(h - y); zone->setHeight(h - y);
@ -50,13 +50,13 @@ void ZoneViewWidget::zoneDumpReceived(int commandId, QList<ServerZoneCard *> car
{ {
if (commandId != cmdId) if (commandId != cmdId)
return; return;
for (int i = 0; i < cards.size(); i++) { for (int i = 0; i < cards.size(); i++) {
ServerZoneCard *temp = cards[i]; ServerZoneCard *temp = cards[i];
CardItem *card = new CardItem(db, temp->getName(), i, zone); CardItem *card = new CardItem(db, temp->getName(), i, zone);
zone->addCard(card, false, i); zone->addCard(card, false, i);
delete temp; delete temp;
} }
zone->reorganizeCards(); zone->reorganizeCards();

View file

@ -21,11 +21,8 @@ QRectF ZoneViewZone::boundingRect() const
return QRectF(0, 0, CARD_WIDTH * 1.75, height); return QRectF(0, 0, CARD_WIDTH * 1.75, height);
} }
void ZoneViewZone::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) void ZoneViewZone::paint(QPainter */*painter*/, const QStyleOptionGraphicsItem */*option*/, QWidget */*widget*/)
{ {
Q_UNUSED(painter);
Q_UNUSED(option);
Q_UNUSED(widget);
} }
bool ZoneViewZone::initializeCards() bool ZoneViewZone::initializeCards()