diff --git a/cockatrice/src/carddatabasemodel.cpp b/cockatrice/src/carddatabasemodel.cpp index 7f314abe2..ddddddfea 100644 --- a/cockatrice/src/carddatabasemodel.cpp +++ b/cockatrice/src/carddatabasemodel.cpp @@ -158,10 +158,12 @@ void CardDatabaseDisplayModel::clearSearch() cardText.clear(); cardTypes.clear(); cardColors.clear(); + if (filterTree != NULL) + filterTree->clear(); invalidateFilter(); } -void CardDatabaseDisplayModel::setFilterTree(const FilterTree *filterTree) +void CardDatabaseDisplayModel::setFilterTree(FilterTree *filterTree) { if (this->filterTree != NULL) disconnect(this->filterTree, 0, this, 0); diff --git a/cockatrice/src/carddatabasemodel.h b/cockatrice/src/carddatabasemodel.h index dd72e58d1..621eff5ad 100644 --- a/cockatrice/src/carddatabasemodel.h +++ b/cockatrice/src/carddatabasemodel.h @@ -38,10 +38,10 @@ private: FilterBool isToken; QString cardNameBeginning, cardName, cardText; QSet cardNameSet, cardTypes, cardColors; - const FilterTree *filterTree; + FilterTree *filterTree; public: CardDatabaseDisplayModel(QObject *parent = 0); - void setFilterTree(const FilterTree *filterTree); + void setFilterTree(FilterTree *filterTree); void setIsToken(FilterBool _isToken) { isToken = _isToken; invalidate(); } void setCardNameBeginning(const QString &_beginning) { cardNameBeginning = _beginning; invalidate(); } void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); } diff --git a/cockatrice/src/cardframe.cpp b/cockatrice/src/cardframe.cpp index bdfca5cf4..dd4191ef4 100644 --- a/cockatrice/src/cardframe.cpp +++ b/cockatrice/src/cardframe.cpp @@ -5,15 +5,12 @@ #include "carddatabase.h" #include "main.h" -CardFrame::CardFrame(const QString &cardName, QWidget *parent, Qt::WindowFlags flags) - : QLabel(parent, flags) +CardFrame::CardFrame(const QString &cardName, QWidget *parent) + : QLabel(parent) , info(0) { - this->setAlignment(Qt::AlignCenter); - setFrameStyle(QFrame::Panel | QFrame::Raised); - setFixedWidth(250); - + setMaximumWidth(250); setCard(db->getCard(cardName)); } diff --git a/cockatrice/src/cardframe.h b/cockatrice/src/cardframe.h index 465dff249..1dccf8219 100644 --- a/cockatrice/src/cardframe.h +++ b/cockatrice/src/cardframe.h @@ -15,7 +15,7 @@ private: CardInfo *info; public: - CardFrame(const QString &cardName = QString(), QWidget *parent = 0, Qt::WindowFlags f = 0); + CardFrame(const QString &cardName = QString(), QWidget *parent = 0); QString getCardName() const; public slots: diff --git a/cockatrice/src/filtertree.cpp b/cockatrice/src/filtertree.cpp index 852ff5cd1..9e647e824 100644 --- a/cockatrice/src/filtertree.cpp +++ b/cockatrice/src/filtertree.cpp @@ -328,3 +328,9 @@ bool FilterTree::acceptsCard(const CardInfo *info) const return true; } + +void FilterTree::clear() +{ + while(childCount() > 0) + deleteAt(0); +} diff --git a/cockatrice/src/filtertree.h b/cockatrice/src/filtertree.h index 1ee84ffaa..816bf97a9 100644 --- a/cockatrice/src/filtertree.h +++ b/cockatrice/src/filtertree.h @@ -27,23 +27,18 @@ public: virtual bool isLeaf() const { return false; } virtual const char *textCStr() const { return text().toStdString().c_str(); } virtual void nodeChanged() const { - printf("%s -> ", textCStr()); if (parent() != NULL) parent()->nodeChanged(); } virtual void preInsertChild(const FilterTreeNode *p, int i) const { - //printf("%s -> ", textCStr()); if (parent() != NULL) parent()->preInsertChild(p, i); } virtual void postInsertChild(const FilterTreeNode *p, int i) const { - //printf("%s -> ", textCStr()); if (parent() != NULL) parent()->postInsertChild(p, i); } virtual void preRemoveChild(const FilterTreeNode *p, int i) const { - printf("%s -> ", textCStr()); if (parent() != NULL) parent()->preRemoveChild(p, i); } virtual void postRemoveChild(const FilterTreeNode *p, int i) const { - printf("%s -> ", textCStr()); if (parent() != NULL) parent()->postRemoveChild(p, i); } }; @@ -139,6 +134,13 @@ private: CardFilter::Type type); 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: FilterTree(); ~FilterTree(); @@ -153,13 +155,8 @@ public: QString text() const { return QString("root"); } 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; + void clear(); }; #endif diff --git a/cockatrice/src/filtertreemodel.h b/cockatrice/src/filtertreemodel.h index fd2e7e337..7e49e9b17 100644 --- a/cockatrice/src/filtertreemodel.h +++ b/cockatrice/src/filtertreemodel.h @@ -28,7 +28,7 @@ private: public: FilterTreeModel(QObject *parent = 0); ~FilterTreeModel(); - const FilterTree *filterTree() const { return fTree; } + FilterTree *filterTree() const { return fTree; } int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &/*parent*/ = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; diff --git a/cockatrice/src/tab_deck_editor.cpp b/cockatrice/src/tab_deck_editor.cpp index 57b481359..2de449f47 100644 --- a/cockatrice/src/tab_deck_editor.cpp +++ b/cockatrice/src/tab_deck_editor.cpp @@ -21,7 +21,7 @@ #include "carddatabase.h" #include "carddatabasemodel.h" #include "decklistmodel.h" -#include "dlg_cardsearch.h" +#include "cardinfowidget.h" #include "dlg_load_deck_from_clipboard.h" #include "dlg_edit_tokens.h" #include "main.h" @@ -33,20 +33,9 @@ #include "pending_command.h" #include "pb/response.pb.h" #include "pb/command_deck_upload.pb.h" -#include -#include -#include -#include -#include -#include -#include +#include "filtertreemodel.h" #include "cardframe.h" #include "filterbuilder.h" -//#include "carditem.h" -//#include "carddatabase.h" -#include "main.h" -#include "settingscache.h" -#include "filtertreemodel.h" void SearchLineEdit::keyPressEvent(QKeyEvent *event) { @@ -58,9 +47,6 @@ void SearchLineEdit::keyPressEvent(QKeyEvent *event) TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) : 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->setIcon(QIcon(":/resources/icon_clearsearch.svg")); connect(aClearSearch, SIGNAL(triggered()), this, SLOT(actClearSearch())); @@ -70,16 +56,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) searchLabel->setBuddy(searchEdit); connect(searchEdit, SIGNAL(textChanged(const QString &)), this, SLOT(updateSearch(const QString &))); connect(searchEdit, SIGNAL(returnPressed()), this, SLOT(actAddCard())); - QToolButton *searchButton = new QToolButton; - searchButton->setDefaultAction(aSearch); - QToolButton *clearSearchButton = new QToolButton; - clearSearchButton->setDefaultAction(aClearSearch); + + QToolBar *deckEditToolBar = new QToolBar; + deckEditToolBar->setOrientation(Qt::Horizontal); + deckEditToolBar->setIconSize(QSize(24, 24)); QHBoxLayout *searchLayout = new QHBoxLayout; + searchLayout->addWidget(deckEditToolBar); searchLayout->addWidget(searchLabel); searchLayout->addWidget(searchEdit); - searchLayout->addWidget(searchButton); - searchLayout->addWidget(clearSearchButton); databaseModel = new CardDatabaseModel(db, this); databaseDisplayModel = new CardDatabaseDisplayModel(this); @@ -98,16 +83,33 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard())); searchEdit->setTreeView(databaseView); - cardInfo = new CardFrame(); - cardInfo->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding); + QVBoxLayout *leftFrame = new QVBoxLayout; + leftFrame->addLayout(searchLayout); + leftFrame->addWidget(databaseView); - QToolBar *verticalToolBar = new QToolBar; - verticalToolBar->setOrientation(Qt::Horizontal); - verticalToolBar->setIconSize(QSize(24, 24)); - QHBoxLayout *verticalToolBarLayout = new QHBoxLayout; - //verticalToolBarLayout->addStretch(); - verticalToolBarLayout->addWidget(verticalToolBar); - //verticalToolBarLayout->addStretch(); + cardInfo = new CardFrame(); + 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); + + QVBoxLayout *middleFrame = new QVBoxLayout; + middleFrame->addWidget(cardInfo, 0, Qt::AlignTop); + middleFrame->addLayout(filter, 10); deckModel = new DeckListModel(this); connect(deckModel, SIGNAL(deckHashChanged()), this, SLOT(updateHash())); @@ -133,6 +135,9 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) grid->addWidget(nameLabel, 0, 0); grid->addWidget(nameEdit, 0, 1); + grid->addWidget(commentsLabel, 1, 0); + grid->addWidget(commentsEdit, 1, 1); + grid->addWidget(hashLabel1, 2, 0); grid->addWidget(hashLabel, 2, 1); @@ -153,49 +158,15 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) deckToolbarLayout->addWidget(deckToolBar); deckToolbarLayout->addStretch(); - QVBoxLayout *deckFrame = new QVBoxLayout; - deckFrame->addLayout(grid); - deckFrame->addWidget(deckView, 10); - deckFrame->addLayout(deckToolbarLayout); + QVBoxLayout *rightFrame = new QVBoxLayout; + rightFrame->addLayout(grid); + rightFrame->addWidget(deckView, 10); + rightFrame->addLayout(deckToolbarLayout); - QHBoxLayout *topFrame = new QHBoxLayout; - topFrame->addWidget(cardInfo, 10); - topFrame->addLayout(deckFrame); - - 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); + QHBoxLayout *mainLayout = new QHBoxLayout; + mainLayout->addLayout(leftFrame, 10); + mainLayout->addLayout(middleFrame); + mainLayout->addLayout(rightFrame); setLayout(mainLayout); aNewDeck = new QAction(QString(), this); @@ -249,7 +220,6 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) dbMenu->addAction(aEditSets); dbMenu->addAction(aEditTokens); dbMenu->addSeparator(); - dbMenu->addAction(aSearch); dbMenu->addAction(aClearSearch); addTabMenu(dbMenu); @@ -269,14 +239,12 @@ TabDeckEditor::TabDeckEditor(TabSupervisor *_tabSupervisor, QWidget *parent) aDecrement->setIcon(QIcon(":/resources/decrement.svg")); connect(aDecrement, SIGNAL(triggered()), this, SLOT(actDecrement())); - verticalToolBar->addAction(aAddCard); - verticalToolBar->addAction(aAddCardToSideboard); - verticalToolBar->addAction(aRemoveCard); - verticalToolBar->addAction(aIncrement); - verticalToolBar->addAction(aDecrement); - verticalToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - - dlgCardSearch = new DlgCardSearch(this); + deckEditToolBar->addAction(aAddCard); + deckEditToolBar->addAction(aAddCardToSideboard); + deckEditToolBar->addAction(aRemoveCard); + deckEditToolBar->addAction(aIncrement); + deckEditToolBar->addAction(aDecrement); + deckEditToolBar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); retranslateUi(); @@ -290,7 +258,6 @@ TabDeckEditor::~TabDeckEditor() void TabDeckEditor::retranslateUi() { - aSearch->setText(tr("&Search...")); aClearSearch->setText(tr("&Clear search")); searchLabel->setText(tr("&Search for:")); @@ -299,11 +266,11 @@ void TabDeckEditor::retranslateUi() hashLabel1->setText(tr("Hash:")); aUpdatePrices->setText(tr("&Update prices")); - aUpdatePrices->setShortcut(tr("Ctrl+U")); - - aNewDeck->setText(tr("&New deck")); - aLoadDeck->setText(tr("&Load deck...")); - aSaveDeck->setText(tr("&Save deck")); + aUpdatePrices->setShortcut(tr("Ctrl+U")); + + aNewDeck->setText(tr("&New deck")); + aLoadDeck->setText(tr("&Load deck...")); + aSaveDeck->setText(tr("&Save deck")); aSaveDeckAs->setText(tr("Save deck &as...")); aLoadDeckFromClipboard->setText(tr("Load deck from cl&ipboard...")); aSaveDeckToClipboard->setText(tr("Save deck to clip&board")); @@ -532,17 +499,6 @@ void TabDeckEditor::actEditTokens() 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() { databaseDisplayModel->clearSearch(); diff --git a/cockatrice/src/tab_deck_editor.h b/cockatrice/src/tab_deck_editor.h index 2b955c3fc..3554df822 100644 --- a/cockatrice/src/tab_deck_editor.h +++ b/cockatrice/src/tab_deck_editor.h @@ -12,7 +12,6 @@ class QTreeView; class QTableView; class CardFrame; class QTextEdit; -class DlgCardSearch; class QLabel; class DeckLoader; class Response; @@ -50,7 +49,6 @@ private slots: void actEditSets(); void actEditTokens(); - void actSearch(); void actClearSearch(); void actAddCard(); @@ -83,13 +81,12 @@ private: QTextEdit *commentsEdit; QLabel *hashLabel1; QLabel *hashLabel; - DlgCardSearch *dlgCardSearch; FilterTreeModel *filterModel; QTreeView *filterView; QMenu *deckMenu, *dbMenu; 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; bool modified;