Commit c786e180 authored by sylvanbasilisk's avatar sylvanbasilisk
Browse files

reverted back to original deck editor layout but including filtertree

the original layout is actually more space efficient if using CardFrame
instead of CardInfoWidget and reducing the size of the deck editor
toolbar.

this commit also removes the old search feature by removing the search
button and the clear search button. the clear search menu item is left
in place, however it now clears the filtertree.

finally, the stretch factor for the right frame in the main layout was
reduced to zero so that the card database gets priority for extra space.
this makes more sense because the deck editor does not actually need
very much horizontal space.
parent 16d30fb9
...@@ -158,10 +158,12 @@ void CardDatabaseDisplayModel::clearSearch() ...@@ -158,10 +158,12 @@ void CardDatabaseDisplayModel::clearSearch()
cardText.clear(); cardText.clear();
cardTypes.clear(); cardTypes.clear();
cardColors.clear(); cardColors.clear();
if (filterTree != NULL)
filterTree->clear();
invalidateFilter(); invalidateFilter();
} }
void CardDatabaseDisplayModel::setFilterTree(const FilterTree *filterTree) void CardDatabaseDisplayModel::setFilterTree(FilterTree *filterTree)
{ {
if (this->filterTree != NULL) if (this->filterTree != NULL)
disconnect(this->filterTree, 0, this, 0); disconnect(this->filterTree, 0, this, 0);
......
...@@ -38,10 +38,10 @@ private: ...@@ -38,10 +38,10 @@ private:
FilterBool isToken; FilterBool isToken;
QString cardNameBeginning, cardName, cardText; QString cardNameBeginning, cardName, cardText;
QSet<QString> cardNameSet, cardTypes, cardColors; QSet<QString> cardNameSet, cardTypes, cardColors;
const FilterTree *filterTree; FilterTree *filterTree;
public: public:
CardDatabaseDisplayModel(QObject *parent = 0); CardDatabaseDisplayModel(QObject *parent = 0);
void setFilterTree(const FilterTree *filterTree); void setFilterTree(FilterTree *filterTree);
void setIsToken(FilterBool _isToken) { isToken = _isToken; invalidate(); } void setIsToken(FilterBool _isToken) { isToken = _isToken; invalidate(); }
void setCardNameBeginning(const QString &_beginning) { cardNameBeginning = _beginning; invalidate(); } void setCardNameBeginning(const QString &_beginning) { cardNameBeginning = _beginning; invalidate(); }
void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); } void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); }
......
...@@ -5,15 +5,12 @@ ...@@ -5,15 +5,12 @@
#include "carddatabase.h" #include "carddatabase.h"
#include "main.h" #include "main.h"
CardFrame::CardFrame(const QString &cardName, QWidget *parent, Qt::WindowFlags flags) CardFrame::CardFrame(const QString &cardName, QWidget *parent)
: QLabel(parent, flags) : QLabel(parent)
, info(0) , info(0)
{ {
this->setAlignment(Qt::AlignCenter);
setFrameStyle(QFrame::Panel | QFrame::Raised); setFrameStyle(QFrame::Panel | QFrame::Raised);
setFixedWidth(250); setMaximumWidth(250);
setCard(db->getCard(cardName)); setCard(db->getCard(cardName));
} }
......
...@@ -15,7 +15,7 @@ private: ...@@ -15,7 +15,7 @@ private:
CardInfo *info; CardInfo *info;
public: public:
CardFrame(const QString &cardName = QString(), QWidget *parent = 0, Qt::WindowFlags f = 0); CardFrame(const QString &cardName = QString(), QWidget *parent = 0);
QString getCardName() const; QString getCardName() const;
public slots: public slots:
......
...@@ -328,3 +328,9 @@ bool FilterTree::acceptsCard(const CardInfo *info) const ...@@ -328,3 +328,9 @@ bool FilterTree::acceptsCard(const CardInfo *info) const
return true; return true;
} }
void FilterTree::clear()
{
while(childCount() > 0)
deleteAt(0);
}
...@@ -27,23 +27,18 @@ public: ...@@ -27,23 +27,18 @@ public:
virtual bool isLeaf() const { return false; } virtual bool isLeaf() const { return false; }
virtual const char *textCStr() const { return text().toStdString().c_str(); } virtual const char *textCStr() const { return text().toStdString().c_str(); }
virtual void nodeChanged() const { virtual void nodeChanged() const {
printf("%s -> ", textCStr());
if (parent() != NULL) parent()->nodeChanged(); if (parent() != NULL) parent()->nodeChanged();
} }
virtual void preInsertChild(const FilterTreeNode *p, int i) const { virtual void preInsertChild(const FilterTreeNode *p, int i) const {
//printf("%s -> ", textCStr());
if (parent() != NULL) parent()->preInsertChild(p, i); if (parent() != NULL) parent()->preInsertChild(p, i);
} }
virtual void postInsertChild(const FilterTreeNode *p, int i) const { virtual void postInsertChild(const FilterTreeNode *p, int i) const {
//printf("%s -> ", textCStr());
if (parent() != NULL) parent()->postInsertChild(p, i); if (parent() != NULL) parent()->postInsertChild(p, i);
} }
virtual void preRemoveChild(const FilterTreeNode *p, int i) const { virtual void preRemoveChild(const FilterTreeNode *p, int i) const {
printf("%s -> ", textCStr());
if (parent() != NULL) parent()->preRemoveChild(p, i); if (parent() != NULL) parent()->preRemoveChild(p, i);
} }
virtual void postRemoveChild(const FilterTreeNode *p, int i) const { virtual void postRemoveChild(const FilterTreeNode *p, int i) const {
printf("%s -> ", textCStr());
if (parent() != NULL) parent()->postRemoveChild(p, i); if (parent() != NULL) parent()->postRemoveChild(p, i);
} }
}; };
...@@ -139,6 +134,13 @@ private: ...@@ -139,6 +134,13 @@ private:
CardFilter::Type type); CardFilter::Type type);
bool testAttr(const CardInfo *info, const LogicMap *lm) const; bool testAttr(const CardInfo *info, const LogicMap *lm) const;
void nodeChanged() const { emit changed(); }
void preInsertChild(const FilterTreeNode *p, int i) const { emit preInsertRow(p, i); }
void postInsertChild(const FilterTreeNode *p, int i) const { emit postInsertRow(p, i); }
void preRemoveChild(const FilterTreeNode *p, int i) const { emit preRemoveRow(p, i); }
void postRemoveChild(const FilterTreeNode *p, int i) const { emit postRemoveRow(p, i); }
public: public:
FilterTree(); FilterTree();
~FilterTree(); ~FilterTree();
...@@ -153,13 +155,8 @@ public: ...@@ -153,13 +155,8 @@ public:
QString text() const { return QString("root"); } QString text() const { return QString("root"); }
int index() const { return 0; } int index() const { return 0; }
void nodeChanged() const { printf("root\n"); emit changed(); }
void preInsertChild(const FilterTreeNode *p, int i) const { emit preInsertRow(p, i); }
void postInsertChild(const FilterTreeNode *p, int i) const { emit postInsertRow(p, i); }
void preRemoveChild(const FilterTreeNode *p, int i) const { printf("root\n"); emit preRemoveRow(p, i); }
void postRemoveChild(const FilterTreeNode *p, int i) const { printf("root\n"); emit postRemoveRow(p, i); }
bool acceptsCard(const CardInfo *info) const; bool acceptsCard(const CardInfo *info) const;
void clear();
}; };
#endif #endif
...@@ -28,7 +28,7 @@ private: ...@@ -28,7 +28,7 @@ private:
public: public:
FilterTreeModel(QObject *parent = 0); FilterTreeModel(QObject *parent = 0);
~FilterTreeModel(); ~FilterTreeModel();
const FilterTree *filterTree() const { return fTree; } FilterTree *filterTree() const { return fTree; }
int rowCount(const QModelIndex &parent = QModelIndex()) const; int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const; int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const; QVariant data(const QModelIndex &index, int role) const;
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include "carddatabase.h" #include "carddatabase.h"
#include "carddatabasemodel.h" #include "carddatabasemodel.h"
#include "decklistmodel.h" #include "decklistmodel.h"
#include "dlg_cardsearch.h" #include "cardinfowidget.h"
#include "dlg_load_deck_from_clipboard.h" #include "dlg_load_deck_from_clipboard.h"
#include "dlg_edit_tokens.h" #include "dlg_edit_tokens.h"
#include "main.h" #include "main.h"
...@@ -33,20 +33,9 @@ ...@@ -33,20 +33,9 @@
#include "pending_command.h" #include "pending_command.h"
#include "pb/response.pb.h" #include "pb/response.pb.h"
#include "pb/command_deck_upload.pb.h" #include "pb/command_deck_upload.pb.h"
#include <QGridLayout> #include "filtertreemodel.h"
#include <QLabel>
#include <QTextEdit>
#include <QPushButton>
#include <QStyle>
#include <QMouseEvent>
#include <QDesktopWidget>
#include "cardframe.h" #include "cardframe.h"
#include "filterbuilder.h" #include "filterbuilder.h"
//#include "carditem.h"
//#include "carddatabase.h"
#include "main.h"
#include "settingscache.h"
#include "filtertreemodel.h"
void SearchLineEdit::keyPressEvent(QKeyEvent *event) void SearchLineEdit::keyPressEvent(QKeyEvent *event)
{ {
...@@ -58,9 +47,6 @@ void SearchLineEdit::keyPressEvent(QKeyEvent *event) ...@@ -58,9 +47,6 @@ void SearchLineEdit::keyPressEvent(QKeyEvent *event)
TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
: Tab(_tabSupervisor, parent), modified(false) : Tab(_tabSupervisor, parent), modified(false)
{ {
aSearch = new QAction(QString(), this);
aSearch->setIcon(QIcon(":/resources/icon_search.svg"));
connect(aSearch, SIGNAL(triggered()), this, SLOT(actSearch()));
aClearSearch = new QAction(QString(), this); aClearSearch = new QAction(QString(), this);
aClearSearch->setIcon(QIcon(":/resources/icon_clearsearch.svg")); aClearSearch->setIcon(QIcon(":/resources/icon_clearsearch.svg"));
connect(aClearSearch, SIGNAL(triggered()), this, SLOT(actClearSearch())); connect(aClearSearch, SIGNAL(triggered()), this, SLOT(actClearSearch()));
...@@ -70,16 +56,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) ...@@ -70,16 +56,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
searchLabel->setBuddy(searchEdit); searchLabel->setBuddy(searchEdit);
connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &))); connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &)));
connect(searchEdit, SIGNAL(returnPressed()), this, SLOT(actAddCard())); connect(searchEdit, SIGNAL(returnPressed()), this, SLOT(actAddCard()));
QToolButton *searchButton = new QToolButton;
searchButton->setDefaultAction(aSearch); QToolBar *deckEditToolBar = new QToolBar;
QToolButton *clearSearchButton = new QToolButton; deckEditToolBar->setOrientation(Qt::Horizontal);
clearSearchButton->setDefaultAction(aClearSearch); deckEditToolBar->setIconSize(QSize(24, 24));
QHBoxLayout *searchLayout = new QHBoxLayout; QHBoxLayout *searchLayout = new QHBoxLayout;
searchLayout->addWidget(deckEditToolBar);
searchLayout->addWidget(searchLabel); searchLayout->addWidget(searchLabel);
searchLayout->addWidget(searchEdit); searchLayout->addWidget(searchEdit);
searchLayout->addWidget(searchButton);
searchLayout->addWidget(clearSearchButton);
databaseModel = new CardDatabaseModel(db, this); databaseModel = new CardDatabaseModel(db, this);
databaseDisplayModel = new CardDatabaseDisplayModel(this); databaseDisplayModel = new CardDatabaseDisplayModel(this);
...@@ -98,16 +83,33 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) ...@@ -98,16 +83,33 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard())); connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard()));
searchEdit->setTreeView(databaseView); searchEdit->setTreeView(databaseView);
QVBoxLayout *leftFrame = new QVBoxLayout;
leftFrame->addLayout(searchLayout);
leftFrame->addWidget(databaseView);
cardInfo = new CardFrame(); cardInfo = new CardFrame();
cardInfo->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); filterModel = new FilterTreeModel();
databaseDisplayModel->setFilterTree(filterModel->filterTree());
filterView = new QTreeView;
filterView->setModel(filterModel);
filterView->setMaximumWidth(250);
filterView->setUniformRowHeights(true);
filterView->setHeaderHidden(true);
filterView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(filterModel, SIGNAL(layoutChanged()), filterView, SLOT(expandAll()));
connect(filterView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(filterViewCustomContextMenu(const QPoint &)));
FilterBuilder *filterBuilder = new FilterBuilder;
filterBuilder->setMaximumWidth(250);
connect(filterBuilder, SIGNAL(add(const CardFilter *)), filterModel, SLOT(addFilter(const CardFilter *)));
QVBoxLayout *filter = new QVBoxLayout;
filter->addWidget(filterBuilder, 0, Qt::AlignTop);
filter->addWidget(filterView, 10);
QToolBar *verticalToolBar = new QToolBar; QVBoxLayout *middleFrame = new QVBoxLayout;
verticalToolBar->setOrientation(Qt::Horizontal); middleFrame->addWidget(cardInfo, 0, Qt::AlignTop);
verticalToolBar->setIconSize(QSize(24, 24)); middleFrame->addLayout(filter, 10);
QHBoxLayout *verticalToolBarLayout = new QHBoxLayout;
//verticalToolBarLayout->addStretch();
verticalToolBarLayout->addWidget(verticalToolBar);
//verticalToolBarLayout->addStretch();
deckModel = new DeckListModel(this); deckModel = new DeckListModel(this);
connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash())); connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash()));
...@@ -133,6 +135,9 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) ...@@ -133,6 +135,9 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
grid->addWidget(nameLabel, 0, 0); grid->addWidget(nameLabel, 0, 0);
grid->addWidget(nameEdit, 0, 1); grid->addWidget(nameEdit, 0, 1);
grid->addWidget(commentsLabel, 1, 0);
grid->addWidget(commentsEdit, 1, 1);
grid->addWidget(hashLabel1, 2, 0); grid->addWidget(hashLabel1, 2, 0);
grid->addWidget(hashLabel, 2, 1); grid->addWidget(hashLabel, 2, 1);
...@@ -153,49 +158,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) ...@@ -153,49 +158,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
deckToolbarLayout->addWidget(deckToolBar); deckToolbarLayout->addWidget(deckToolBar);
deckToolbarLayout->addStretch(); deckToolbarLayout->addStretch();
QVBoxLayout *deckFrame = new QVBoxLayout; QVBoxLayout *rightFrame = new QVBoxLayout;
deckFrame->addLayout(grid); rightFrame->addLayout(grid);
deckFrame->addWidget(deckView, 10); rightFrame->addWidget(deckView, 10);
deckFrame->addLayout(deckToolbarLayout); rightFrame->addLayout(deckToolbarLayout);
QHBoxLayout *topFrame = new QHBoxLayout; QHBoxLayout *mainLayout = new QHBoxLayout;
topFrame->addWidget(cardInfo, 10); mainLayout->addLayout(leftFrame, 10);
topFrame->addLayout(deckFrame); mainLayout->addLayout(middleFrame);
mainLayout->addLayout(rightFrame);
QVBoxLayout *botFrame = new QVBoxLayout;
QGridLayout *searchAndButtons = new QGridLayout;
searchAndButtons->addLayout(verticalToolBarLayout, 0, 0);
searchAndButtons->addLayout(searchLayout, 0, 1);
botFrame->addLayout(searchAndButtons);
filterModel = new FilterTreeModel();
databaseDisplayModel->setFilterTree(filterModel->filterTree());
filterView = new QTreeView;
filterView->setModel(filterModel);
filterView->setMaximumWidth(250);
filterView->setUniformRowHeights(true);
filterView->setHeaderHidden(true);
filterView->setExpandsOnDoubleClick(false);
filterView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(filterModel, SIGNAL(layoutChanged()), filterView, SLOT(expandAll()));
connect(filterView, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(filterViewCustomContextMenu(const QPoint &)));
FilterBuilder *filterBuilder = new FilterBuilder;
filterBuilder->setMaximumWidth(250);
connect(filterBuilder, SIGNAL(add(const CardFilter *)), filterModel, SLOT(addFilter(const CardFilter *)));
QVBoxLayout *filter = new QVBoxLayout;
filter->addWidget(filterBuilder, 0, Qt::AlignTop);
filter->addWidget(filterView);
QHBoxLayout *dbFrame = new QHBoxLayout;
dbFrame->addLayout(filter);
dbFrame->addWidget(databaseView);
botFrame->addLayout(dbFrame);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(topFrame, 10);
mainLayout->addLayout(botFrame, 10);
setLayout(mainLayout); setLayout(mainLayout);
aNewDeck = new QAction(QString(), this); aNewDeck = new QAction(QString(), this);
...@@ -249,7 +220,6 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) ...@@ -249,7 +220,6 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
dbMenu->addAction(aEditSets); dbMenu->addAction(aEditSets);
dbMenu->addAction(aEditTokens); dbMenu->addAction(aEditTokens);
dbMenu->addSeparator(); dbMenu->addSeparator();
dbMenu->addAction(aSearch);
dbMenu->addAction(aClearSearch); dbMenu->addAction(aClearSearch);
addTabMenu(dbMenu); addTabMenu(dbMenu);
...@@ -269,14 +239,12 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) ...@@ -269,14 +239,12 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent)
aDecrement->setIcon(QIcon(":/resources/decrement.svg")); aDecrement->setIcon(QIcon(":/resources/decrement.svg"));
connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement())); connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement()));
verticalToolBar->addAction(aAddCard); deckEditToolBar->addAction(aAddCard);
verticalToolBar->addAction(aAddCardToSideboard); deckEditToolBar->addAction(aAddCardToSideboard);
verticalToolBar->addAction(aRemoveCard); deckEditToolBar->addAction(aRemoveCard);
verticalToolBar->addAction(aIncrement); deckEditToolBar->addAction(aIncrement);
verticalToolBar->addAction(aDecrement); deckEditToolBar->addAction(aDecrement);
verticalToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); deckEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
dlgCardSearch = new DlgCardSearch(this);
retranslateUi(); retranslateUi();
...@@ -290,7 +258,6 @@ TabDeckEditor::~TabDeckEditor() ...@@ -290,7 +258,6 @@ TabDeckEditor::~TabDeckEditor()
void TabDeckEditor::retranslateUi() void TabDeckEditor::retranslateUi()
{ {
aSearch->setText(tr("&Search..."));
aClearSearch->setText(tr("&Clear search")); aClearSearch->setText(tr("&Clear search"));
searchLabel->setText(tr("&Search for:")); searchLabel->setText(tr("&Search for:"));
...@@ -532,17 +499,6 @@ void TabDeckEditor::actEditTokens() ...@@ -532,17 +499,6 @@ void TabDeckEditor::actEditTokens()
db->saveToFile(settingsCache->getTokenDatabasePath(), true); db->saveToFile(settingsCache->getTokenDatabasePath(), true);
} }
void TabDeckEditor::actSearch()
{
if (dlgCardSearch->exec()) {
searchEdit->clear();
databaseDisplayModel->setCardName(dlgCardSearch->getCardName());
databaseDisplayModel->setCardText(dlgCardSearch->getCardText());
databaseDisplayModel->setCardTypes(dlgCardSearch->getCardTypes());
databaseDisplayModel->setCardColors(dlgCardSearch->getCardColors());
}
}
void TabDeckEditor::actClearSearch() void TabDeckEditor::actClearSearch()
{ {
databaseDisplayModel->clearSearch(); databaseDisplayModel->clearSearch();
......
...@@ -12,7 +12,6 @@ class QTreeView; ...@@ -12,7 +12,6 @@ class QTreeView;
class QTableView; class QTableView;
class CardFrame; class CardFrame;
class QTextEdit; class QTextEdit;
class DlgCardSearch;
class QLabel; class QLabel;
class DeckLoader; class DeckLoader;
class Response; class Response;
...@@ -50,7 +49,6 @@ private slots: ...@@ -50,7 +49,6 @@ private slots:
void actEditSets(); void actEditSets();
void actEditTokens(); void actEditTokens();
void actSearch();
void actClearSearch(); void actClearSearch();
void actAddCard(); void actAddCard();
...@@ -83,13 +81,12 @@ private: ...@@ -83,13 +81,12 @@ private:
QTextEdit *commentsEdit; QTextEdit *commentsEdit;
QLabel *hashLabel1; QLabel *hashLabel1;
QLabel *hashLabel; QLabel *hashLabel;
DlgCardSearch *dlgCardSearch;
FilterTreeModel *filterModel; FilterTreeModel *filterModel;
QTreeView *filterView; QTreeView *filterView;
QMenu *deckMenu, *dbMenu; QMenu *deckMenu, *dbMenu;
QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose; QAction *aNewDeck, *aLoadDeck, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, *aSaveDeckToClipboard, *aPrintDeck, *aAnalyzeDeck, *aClose;
QAction *aEditSets, *aEditTokens, *aSearch, *aClearSearch; QAction *aEditSets, *aEditTokens, *aClearSearch;
QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement, *aUpdatePrices; QAction *aAddCard, *aAddCardToSideboard, *aRemoveCard, *aIncrement, *aDecrement, *aUpdatePrices;
bool modified; bool modified;
......
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