diff --git a/cockatrice/src/carddatabase.cpp b/cockatrice/src/carddatabase.cpp index 8a0280a90..693e41d78 100644 --- a/cockatrice/src/carddatabase.cpp +++ b/cockatrice/src/carddatabase.cpp @@ -58,11 +58,22 @@ public: } }; +class SetList::CompareName { +public: + inline bool operator()(CardSet *a, CardSet *b) const { + return a->getLongName() < b->getLongName(); + } +}; + void SetList::sortByKey() { qSort(begin(), end(), CompareFunctor()); } +void SetList::sortByName() { + qSort(begin(), end(), CompareName()); +} + PictureToLoad::PictureToLoad(CardInfo *_card, bool _stripped, bool _hq) : card(_card), stripped(_stripped), setIndex(0), hq(_hq) { diff --git a/cockatrice/src/carddatabase.h b/cockatrice/src/carddatabase.h index 1f87d2765..a0c66c6dd 100644 --- a/cockatrice/src/carddatabase.h +++ b/cockatrice/src/carddatabase.h @@ -36,8 +36,10 @@ public: class SetList : public QList { private: class CompareFunctor; + class CompareName; public: void sortByKey(); + void sortByName(); }; class PictureToLoad { diff --git a/cockatrice/src/carddatabasemodel.cpp b/cockatrice/src/carddatabasemodel.cpp index d63f6bdef..d6d5f05cb 100644 --- a/cockatrice/src/carddatabasemodel.cpp +++ b/cockatrice/src/carddatabasemodel.cpp @@ -144,6 +144,19 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex if (!cardTypes.contains(info->getMainCardType())) return false; + if (!cardSet.isEmpty()) { + bool blnGood = false; + for(int intLoop = 0; intLoop < info->getSets().count(); intLoop++) { + if (info->getSets().at(intLoop)->getShortName() == cardSet) { + blnGood = true; + break; + } + } + if (!blnGood) { + return false; + } + } + return true; } diff --git a/cockatrice/src/carddatabasemodel.h b/cockatrice/src/carddatabasemodel.h index b2998bfee..29d0711b7 100644 --- a/cockatrice/src/carddatabasemodel.h +++ b/cockatrice/src/carddatabasemodel.h @@ -34,7 +34,7 @@ public: enum FilterBool { ShowTrue, ShowFalse, ShowAll }; private: FilterBool isToken; - QString cardNameBeginning, cardName, cardText; + QString cardNameBeginning, cardName, cardText, cardSet; QSet cardNameSet, cardTypes, cardColors; public: CardDatabaseDisplayModel(QObject *parent = 0); @@ -43,6 +43,7 @@ public: void setCardName(const QString &_cardName) { cardName = _cardName; invalidate(); } void setCardNameSet(const QSet &_cardNameSet) { cardNameSet = _cardNameSet; invalidate(); } void setCardText(const QString &_cardText) { cardText = _cardText; invalidate(); } + void setCardSet(const QString &_cardSet) { cardSet = _cardSet; invalidate(); } void setCardTypes(const QSet &_cardTypes) { cardTypes = _cardTypes; invalidate(); } void setCardColors(const QSet &_cardColors) { cardColors = _cardColors; invalidate(); } void clearSearch(); diff --git a/cockatrice/src/dlg_cardsearch.cpp b/cockatrice/src/dlg_cardsearch.cpp index 55d9419cf..2e376f1f6 100644 --- a/cockatrice/src/dlg_cardsearch.cpp +++ b/cockatrice/src/dlg_cardsearch.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -17,6 +18,17 @@ DlgCardSearch::DlgCardSearch(QWidget *parent) QLabel *cardTextLabel = new QLabel(tr("Card text:")); cardTextEdit = new QLineEdit; + + //Adding Set Selector + QLabel *cardSetsLabel = new QLabel(tr("Card Set (AND):")); + cboSetList = new QComboBox(); + cboSetList->addItem(""); + SetList setList = db->getSetList(); + setList.sortByName(); + for (int intLoop = 0; intLoop < setList.size(); ++intLoop) { + //Adding Translated Set Name, Just In Case + cboSetList->addItem(tr("%1").arg(setList.at(intLoop)->getLongName()), setList.at(intLoop)->getShortName()); + } QLabel *cardTypesLabel = new QLabel(tr("Card type (OR):")); const QStringList &cardTypes = db->getAllMainCardTypes(); @@ -54,10 +66,12 @@ DlgCardSearch::DlgCardSearch(QWidget *parent) optionsLayout->addWidget(cardNameEdit, 0, 1); optionsLayout->addWidget(cardTextLabel, 1, 0); optionsLayout->addWidget(cardTextEdit, 1, 1); - optionsLayout->addWidget(cardTypesLabel, 2, 0); - optionsLayout->addLayout(cardTypesLayout, 2, 1); - optionsLayout->addWidget(cardColorsLabel, 3, 0); - optionsLayout->addLayout(cardColorsLayout, 3, 1); + optionsLayout->addWidget(cardSetsLabel, 2, 0); + optionsLayout->addWidget(cboSetList, 2, 1); + optionsLayout->addWidget(cardTypesLabel, 3, 0); + optionsLayout->addLayout(cardTypesLayout, 3, 1); + optionsLayout->addWidget(cardColorsLabel, 4, 0); + optionsLayout->addLayout(cardColorsLayout, 4, 1); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(optionsLayout); @@ -76,6 +90,10 @@ QString DlgCardSearch::getCardText() const return cardTextEdit->text(); } +QString DlgCardSearch::getCardSet() const { + return cboSetList->itemData(cboSetList->currentIndex()).toString(); +} + QSet DlgCardSearch::getCardTypes() const { QStringList result; diff --git a/cockatrice/src/dlg_cardsearch.h b/cockatrice/src/dlg_cardsearch.h index 4c2ccccfc..bc1ad757f 100644 --- a/cockatrice/src/dlg_cardsearch.h +++ b/cockatrice/src/dlg_cardsearch.h @@ -7,16 +7,19 @@ class QLineEdit; class QCheckBox; +class QComboBox; class DlgCardSearch : public QDialog { Q_OBJECT private: QLineEdit *cardNameEdit, *cardTextEdit; QList cardTypeCheckBoxes, cardColorCheckBoxes; + QComboBox *cboSetList; public: DlgCardSearch(QWidget *parent = 0); QString getCardName() const; QString getCardText() const; + QString getCardSet() const; QSet getCardTypes() const; QSet getCardColors() const; }; diff --git a/cockatrice/src/tab_deck_editor.cpp b/cockatrice/src/tab_deck_editor.cpp index f7c035c82..fda7d2a39 100644 --- a/cockatrice/src/tab_deck_editor.cpp +++ b/cockatrice/src/tab_deck_editor.cpp @@ -504,7 +504,8 @@ void TabDeckEditor::actSearch() databaseDisplayModel->setCardName(dlgCardSearch->getCardName()); databaseDisplayModel->setCardText(dlgCardSearch->getCardText()); databaseDisplayModel->setCardTypes(dlgCardSearch->getCardTypes()); - databaseDisplayModel->setCardColors(dlgCardSearch->getCardColors()); + databaseDisplayModel->setCardColors(dlgCardSearch->getCardColors()); + databaseDisplayModel->setCardSet(dlgCardSearch->getCardSet()); } }