some token code

This commit is contained in:
Max-Wilhelm Bruker 2012-04-05 11:48:13 +02:00
parent 1cd63375ba
commit f553fd7456
15 changed files with 99 additions and 21 deletions

View file

@ -234,6 +234,7 @@ void PictureLoader::setPicDownload(bool _picDownload)
CardInfo::CardInfo(CardDatabase *_db,
const QString &_name,
bool _isToken,
const QString &_manacost,
const QString &_cardtype,
const QString &_powtough,
@ -248,6 +249,7 @@ CardInfo::CardInfo(CardDatabase *_db,
const QMap<QString, QString> &_picURLsSt)
: db(_db),
name(_name),
isToken(_isToken),
sets(_sets),
manacost(_manacost),
cardtype(_cardtype),
@ -426,6 +428,8 @@ QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfo *info)
xml.writeTextElement("loyalty", QString::number(info->getLoyalty()));
if (info->getCipt())
xml.writeTextElement("cipt", "1");
if (info->getIsToken())
xml.writeTextElement("token", "1");
xml.writeEndElement(); // card
return xml;
@ -469,7 +473,7 @@ void CardDatabase::clear()
delete setIt.value();
}
setHash.clear();
QHashIterator<QString, CardInfo *> i(cardHash);
while (i.hasNext()) {
i.next();
@ -485,7 +489,7 @@ CardInfo *CardDatabase::getCard(const QString &cardName)
else if (cardHash.contains(cardName))
return cardHash.value(cardName);
else {
CardInfo *newCard = new CardInfo(this, cardName);
CardInfo *newCard = new CardInfo(this, cardName, true);
newCard->addToSet(getSet("TK"));
cardHash.insert(cardName, newCard);
return newCard;
@ -558,6 +562,7 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
int tableRow = 0;
int loyalty = 0;
bool cipt = false;
bool isToken = false;
while (!xml.atEnd()) {
if (xml.readNext() == QXmlStreamReader::EndElement)
break;
@ -588,8 +593,10 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
cipt = (xml.readElementText() == "1");
else if (xml.name() == "loyalty")
loyalty = xml.readElementText().toInt();
else if (xml.name() == "token")
isToken = xml.readElementText().toInt();
}
cardHash.insert(name, new CardInfo(this, name, manacost, type, pt, text, colors, loyalty, cipt, tableRow, sets, picURLs, picURLsHq, picURLsSt));
cardHash.insert(name, new CardInfo(this, name, isToken, manacost, type, pt, text, colors, loyalty, cipt, tableRow, sets, picURLs, picURLsHq, picURLsSt));
}
}
}

View file

@ -91,6 +91,7 @@ private:
CardDatabase *db;
QString name;
bool isToken;
SetList sets;
QString manacost;
QString cardtype;
@ -106,6 +107,7 @@ private:
public:
CardInfo(CardDatabase *_db,
const QString &_name = QString(),
bool _isToken = false,
const QString &_manacost = QString(),
const QString &_cardtype = QString(),
const QString &_powtough = QString(),
@ -120,6 +122,7 @@ public:
const QStringMap &_picURLsSt = QStringMap());
~CardInfo();
const QString &getName() const { return name; }
bool getIsToken() const { return isToken; }
const SetList &getSets() const { return sets; }
const QString &getManaCost() const { return manacost; }
const QString &getCardType() const { return cardtype; }

View file

@ -71,7 +71,8 @@ void CardDatabaseModel::updateCardList()
}
CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent)
: QSortFilterProxyModel(parent)
: QSortFilterProxyModel(parent),
isToken(ShowAll)
{
setFilterCaseSensitivity(Qt::CaseInsensitive);
setSortCaseSensitivity(Qt::CaseInsensitive);
@ -81,10 +82,13 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
{
CardInfo *info = static_cast<CardDatabaseModel *>(sourceModel())->getCard(sourceRow);
if (((isToken == ShowTrue) && !info->getIsToken()) || (isToken == ShowFalse) && info->getIsToken())
return false;
if (!cardNameBeginning.isEmpty())
if (!info->getName().startsWith(cardNameBeginning, Qt::CaseInsensitive))
return false;
if (!cardName.isEmpty())
if (!info->getName().contains(cardName, Qt::CaseInsensitive))
return false;
@ -96,7 +100,7 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
if (!cardColors.isEmpty())
if (QSet<QString>::fromList(info->getColors()).intersect(cardColors).isEmpty() && !(info->getColors().isEmpty() && cardColors.contains("X")))
return false;
if (!cardTypes.isEmpty())
if (!cardTypes.contains(info->getMainCardType()))
return false;

View file

@ -26,11 +26,15 @@ private slots:
class CardDatabaseDisplayModel : public QSortFilterProxyModel {
Q_OBJECT
public:
enum FilterBool { ShowTrue, ShowFalse, ShowAll };
private:
FilterBool isToken;
QString cardNameBeginning, cardName, cardText;
QSet<QString> cardTypes, cardColors;
public:
CardDatabaseDisplayModel(QObject *parent = 0);
void setIsToken(FilterBool _isToken) { isToken = _isToken; invalidate(); }
void setCardNameBeginning(const QString &_beginning) { cardNameBeginning = _beginning; invalidate(); }
void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); }
void setCardText(const QString &_cardText) { cardText = _cardText; invalidate(); }

View file

@ -274,6 +274,7 @@ DeckViewScene::DeckViewScene(QObject *parent)
DeckViewScene::~DeckViewScene()
{
clearContents();
delete deck;
}
void DeckViewScene::clearContents()

View file

@ -6,9 +6,15 @@
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QDialogButtonBox>
#include <QGroupBox>
#include <QTreeView>
#include <QRadioButton>
#include "decklist.h"
#include "dlg_create_token.h"
#include "carddatabasemodel.h"
#include "main.h"
DlgCreateToken::DlgCreateToken(QWidget *parent)
DlgCreateToken::DlgCreateToken(DeckList *_deck, QWidget *parent)
: QDialog(parent)
{
nameLabel = new QLabel(tr("&Name:"));
@ -49,12 +55,37 @@ DlgCreateToken::DlgCreateToken(QWidget *parent)
grid->addWidget(annotationEdit, 3, 1);
grid->addWidget(destroyCheckBox, 4, 0, 1, 2);
QGroupBox *tokenDataGroupBox = new QGroupBox(tr("Token data"));
tokenDataGroupBox->setLayout(grid);
cardDatabaseModel = new CardDatabaseModel(db, this);
cardDatabaseDisplayModel = new CardDatabaseDisplayModel(this);
cardDatabaseDisplayModel->setSourceModel(cardDatabaseModel);
cardDatabaseDisplayModel->setIsToken(CardDatabaseDisplayModel::ShowTrue);
QRadioButton *chooseTokenFromAllRadioButton = new QRadioButton(tr("Show &all tokens"));
QRadioButton *chooseTokenFromDeckRadioButton = new QRadioButton(tr("Show tokens from this &deck"));
QTreeView *chooseTokenView = new QTreeView;
chooseTokenView->setModel(cardDatabaseDisplayModel);
QVBoxLayout *tokenChooseLayout = new QVBoxLayout;
tokenChooseLayout->addWidget(chooseTokenFromAllRadioButton);
tokenChooseLayout->addWidget(chooseTokenFromDeckRadioButton);
tokenChooseLayout->addWidget(chooseTokenView);
QGroupBox *tokenChooseGroupBox = new QGroupBox(tr("Choose token from list"));
tokenChooseGroupBox->setLayout(tokenChooseLayout);
QHBoxLayout *hbox = new QHBoxLayout;
hbox->addWidget(tokenDataGroupBox);
hbox->addWidget(tokenChooseGroupBox);
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOk()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(grid);
mainLayout->addLayout(hbox);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);

View file

@ -8,11 +8,14 @@ class QLabel;
class QComboBox;
class QCheckBox;
class QPushButton;
class DeckList;
class CardDatabaseModel;
class CardDatabaseDisplayModel;
class DlgCreateToken : public QDialog {
Q_OBJECT
public:
DlgCreateToken(QWidget *parent = 0);
DlgCreateToken(DeckList *_deck, QWidget *parent = 0);
QString getName() const;
QString getColor() const;
QString getPT() const;
@ -21,6 +24,8 @@ public:
private slots:
void actOk();
private:
CardDatabaseModel *cardDatabaseModel;
CardDatabaseDisplayModel *cardDatabaseDisplayModel;
QLabel *nameLabel, *colorLabel, *ptLabel, *annotationLabel;
QComboBox *colorEdit;
QLineEdit *nameEdit, *ptEdit, *annotationEdit;

View file

@ -95,7 +95,19 @@ void PlayerArea::setSize(qreal width, qreal height)
}
Player::Player(const ServerInfo_User &info, int _id, bool _local, TabGame *_parent)
: QObject(_parent), game(_parent), shortcutsActive(false), defaultNumberTopCards(3), lastTokenDestroy(true), id(_id), active(false), local(_local), mirrored(false), handVisible(false), conceded(false), dialogSemaphore(false)
: QObject(_parent),
game(_parent),
shortcutsActive(false),
defaultNumberTopCards(3),
lastTokenDestroy(true),
id(_id),
active(false),
local(_local),
mirrored(false),
handVisible(false),
conceded(false),
dialogSemaphore(false),
deck(0)
{
userInfo = new ServerInfo_User;
userInfo->CopyFrom(info);
@ -876,7 +888,7 @@ void Player::actRollDie()
void Player::actCreateToken()
{
DlgCreateToken dlg;
DlgCreateToken dlg(deck);
if (!dlg.exec())
return;

View file

@ -10,6 +10,7 @@
namespace google { namespace protobuf { class Message; } }
class CardDatabase;
class DeckList;
class QMenu;
class QAction;
class ZoneViewZone;
@ -187,6 +188,7 @@ private:
bool clearCardsToDelete();
QList<CardItem *> cardsToDelete;
DeckList *deck;
PlayerArea *playerArea;
QMap<QString, CardZone *> zones;
StackZone *stack;
@ -256,6 +258,8 @@ public:
void retranslateUi();
void clear();
TabGame *getGame() const { return game; }
DeckList *getDeck() const { return deck; }
void setDeck(DeckList *_deck) { deck = _deck; }
QMenu *getPlayerMenu() const { return playerMenu; }
int getId() const { return id; }
QString getName() const;

View file

@ -437,13 +437,17 @@ void WndDeckEditor::recursiveExpand(const QModelIndex &index)
deckView->expand(index);
}
void WndDeckEditor::addCardHelper(const QString &zoneName)
void WndDeckEditor::addCardHelper(QString zoneName)
{
const QModelIndex currentIndex = databaseView->selectionModel()->currentIndex();
if (!currentIndex.isValid())
return;
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
CardInfo *info = db->getCard(cardName);
if (info->getIsToken())
zoneName = "tokens";
QModelIndex newCardIndex = deckModel->addCard(cardName, zoneName);
recursiveExpand(newCardIndex);
deckView->setCurrentIndex(newCardIndex);

View file

@ -58,7 +58,7 @@ private slots:
void finishedUpdatingPrices();
private:
void addCardHelper(const QString &zoneName);
void addCardHelper(QString zoneName);
void recursiveExpand(const QModelIndex &index);
bool confirmClose();

View file

@ -98,6 +98,8 @@ QString InnerDecklistNode::visibleNameFromName(const QString &_name)
return QObject::tr("Maindeck");
else if (_name == "side")
return QObject::tr("Sideboard");
else if (_name == "tokens")
return QObject::tr("Tokens");
else
return _name;
}

View file

@ -75,6 +75,7 @@ bool OracleImporter::readSetsFromXml(QXmlStreamReader &xml)
CardInfo *OracleImporter::addCard(const QString &setName,
QString cardName,
bool isToken,
int cardId,
const QString &cardCost,
const QString &cardType,
@ -125,7 +126,7 @@ CardInfo *OracleImporter::addCard(const QString &setName,
bool cipt = (cardText.contains(cardName + " enters the battlefield tapped."));
card = new CardInfo(this, cardName, cardCost, cardType, cardPT, fullCardText, colors, cardLoyalty, cipt);
card = new CardInfo(this, cardName, isToken, cardCost, cardType, cardPT, fullCardText, colors, cardLoyalty, cipt);
int tableRow = 1;
QString mainCardType = card->getMainCardType();
if ((mainCardType == "Land") || mArtifact)
@ -183,7 +184,7 @@ int OracleImporter::importTextSpoiler(CardSet *set, const QByteArray &data)
for (int i = 0; i < cardTextSplit.size(); ++i)
cardTextSplit[i] = cardTextSplit[i].trimmed();
CardInfo *card = addCard(set->getShortName(), cardName, cardId, cardCost, cardType, cardPT, cardLoyalty, cardTextSplit);
CardInfo *card = addCard(set->getShortName(), cardName, false, cardId, cardCost, cardType, cardPT, cardLoyalty, cardTextSplit);
if (!set->contains(card)) {
card->addToSet(set);
cards++;

View file

@ -35,7 +35,7 @@ private:
void downloadNextFile();
bool readSetsFromXml(QXmlStreamReader &xml);
CardInfo *addCard(const QString &setName, QString cardName, int cardId, const QString &cardCost, const QString &cardType, const QString &cardPT, int cardLoyalty, const QStringList &cardText);
CardInfo *addCard(const QString &setName, QString cardName, bool isToken, int cardId, const QString &cardCost, const QString &cardType, const QString &cardPT, int cardLoyalty, const QStringList &cardText);
private slots:
void httpRequestFinished(int requestId, bool error);
void readResponseHeader(const QHttpResponseHeader &responseHeader);

View file

@ -80,11 +80,11 @@ Servatrice::Servatrice(QSettings *_settings, QObject *parent)
else
databaseType = DatabaseNone;
dbPrefix = settings->value("database/prefix").toString();
if (databaseType != DatabaseNone)
if (databaseType != DatabaseNone) {
openDatabase();
updateServerList();
clearSessionTables();
updateServerList();
clearSessionTables();
}
const QString roomMethod = settings->value("rooms/method").toString();
if (roomMethod == "sql") {