From f553fd7456d5596393233ef1314b149731580aef Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Thu, 5 Apr 2012 11:48:13 +0200 Subject: [PATCH] some token code --- cockatrice/src/carddatabase.cpp | 13 ++++++++--- cockatrice/src/carddatabase.h | 3 +++ cockatrice/src/carddatabasemodel.cpp | 10 +++++--- cockatrice/src/carddatabasemodel.h | 4 ++++ cockatrice/src/deckview.cpp | 1 + cockatrice/src/dlg_create_token.cpp | 35 ++++++++++++++++++++++++++-- cockatrice/src/dlg_create_token.h | 7 +++++- cockatrice/src/player.cpp | 16 +++++++++++-- cockatrice/src/player.h | 4 ++++ cockatrice/src/window_deckeditor.cpp | 8 +++++-- cockatrice/src/window_deckeditor.h | 2 +- common/decklist.cpp | 2 ++ oracle/src/oracleimporter.cpp | 5 ++-- oracle/src/oracleimporter.h | 2 +- servatrice/src/servatrice.cpp | 8 +++---- 15 files changed, 99 insertions(+), 21 deletions(-) diff --git a/cockatrice/src/carddatabase.cpp b/cockatrice/src/carddatabase.cpp index 3b7078a3..115256ba 100644 --- a/cockatrice/src/carddatabase.cpp +++ b/cockatrice/src/carddatabase.cpp @@ -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 &_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 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)); } } } diff --git a/cockatrice/src/carddatabase.h b/cockatrice/src/carddatabase.h index 719c9ce3..373d1981 100644 --- a/cockatrice/src/carddatabase.h +++ b/cockatrice/src/carddatabase.h @@ -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; } diff --git a/cockatrice/src/carddatabasemodel.cpp b/cockatrice/src/carddatabasemodel.cpp index 8e2a556b..9cc6da8c 100644 --- a/cockatrice/src/carddatabasemodel.cpp +++ b/cockatrice/src/carddatabasemodel.cpp @@ -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(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::fromList(info->getColors()).intersect(cardColors).isEmpty() && !(info->getColors().isEmpty() && cardColors.contains("X"))) return false; - + if (!cardTypes.isEmpty()) if (!cardTypes.contains(info->getMainCardType())) return false; diff --git a/cockatrice/src/carddatabasemodel.h b/cockatrice/src/carddatabasemodel.h index d6404b42..40df3cf1 100644 --- a/cockatrice/src/carddatabasemodel.h +++ b/cockatrice/src/carddatabasemodel.h @@ -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 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(); } diff --git a/cockatrice/src/deckview.cpp b/cockatrice/src/deckview.cpp index 3704bace..5a0fa1fc 100644 --- a/cockatrice/src/deckview.cpp +++ b/cockatrice/src/deckview.cpp @@ -274,6 +274,7 @@ DeckViewScene::DeckViewScene(QObject *parent) DeckViewScene::~DeckViewScene() { clearContents(); + delete deck; } void DeckViewScene::clearContents() diff --git a/cockatrice/src/dlg_create_token.cpp b/cockatrice/src/dlg_create_token.cpp index 8bc9d7e1..6e731fc8 100644 --- a/cockatrice/src/dlg_create_token.cpp +++ b/cockatrice/src/dlg_create_token.cpp @@ -6,9 +6,15 @@ #include #include #include +#include +#include +#include +#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); diff --git a/cockatrice/src/dlg_create_token.h b/cockatrice/src/dlg_create_token.h index 684371ea..1b943016 100644 --- a/cockatrice/src/dlg_create_token.h +++ b/cockatrice/src/dlg_create_token.h @@ -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; diff --git a/cockatrice/src/player.cpp b/cockatrice/src/player.cpp index 4aa2f401..ad479067 100644 --- a/cockatrice/src/player.cpp +++ b/cockatrice/src/player.cpp @@ -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; diff --git a/cockatrice/src/player.h b/cockatrice/src/player.h index 3687ab59..79fb4ecf 100644 --- a/cockatrice/src/player.h +++ b/cockatrice/src/player.h @@ -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 cardsToDelete; + DeckList *deck; PlayerArea *playerArea; QMap 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; diff --git a/cockatrice/src/window_deckeditor.cpp b/cockatrice/src/window_deckeditor.cpp index b7d9b836..a4d652d0 100644 --- a/cockatrice/src/window_deckeditor.cpp +++ b/cockatrice/src/window_deckeditor.cpp @@ -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); diff --git a/cockatrice/src/window_deckeditor.h b/cockatrice/src/window_deckeditor.h index 7f3dd927..d231ab82 100644 --- a/cockatrice/src/window_deckeditor.h +++ b/cockatrice/src/window_deckeditor.h @@ -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(); diff --git a/common/decklist.cpp b/common/decklist.cpp index 733ade93..72ddc8c1 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -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; } diff --git a/oracle/src/oracleimporter.cpp b/oracle/src/oracleimporter.cpp index 3a0de8d6..6b903ca6 100644 --- a/oracle/src/oracleimporter.cpp +++ b/oracle/src/oracleimporter.cpp @@ -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++; diff --git a/oracle/src/oracleimporter.h b/oracle/src/oracleimporter.h index c29a7883..3e03586f 100644 --- a/oracle/src/oracleimporter.h +++ b/oracle/src/oracleimporter.h @@ -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); diff --git a/servatrice/src/servatrice.cpp b/servatrice/src/servatrice.cpp index 38c0c0a5..0f724a29 100644 --- a/servatrice/src/servatrice.cpp +++ b/servatrice/src/servatrice.cpp @@ -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") {