mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 21:06:59 -04:00
Added a "quick search" box for filtering the card list
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@1483 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
@@ -13,8 +13,8 @@ DECLARE_TYPEOF_COLLECTION(CardP);
|
||||
|
||||
// ----------------------------------------------------------------------------- : FilteredCardList
|
||||
|
||||
FilteredCardList::FilteredCardList(Window* parent, int id, long style)
|
||||
: CardListBase(parent, id, style)
|
||||
FilteredCardList::FilteredCardList(Window* parent, int id, long additional_style)
|
||||
: CardListBase(parent, id, additional_style)
|
||||
{}
|
||||
|
||||
void FilteredCardList::setFilter(const CardListFilterP& filter) {
|
||||
@@ -34,6 +34,8 @@ void FilteredCardList::getItems(vector<VoidP>& out) const {
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : CardListFilter
|
||||
|
||||
void CardListFilter::getItems(const vector<CardP>& cards, vector<VoidP>& out) const {
|
||||
FOR_EACH_CONST(c, cards) {
|
||||
if (keep(c)) {
|
||||
@@ -41,3 +43,8 @@ void CardListFilter::getItems(const vector<CardP>& cards, vector<VoidP>& out) co
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool QueryCardListFilter::keep(const CardP& card) const {
|
||||
return card->contains(query);
|
||||
}
|
||||
|
||||
|
||||
@@ -26,12 +26,21 @@ class CardListFilter : public IntrusivePtrVirtualBase {
|
||||
virtual void getItems(const vector<CardP>& cards, vector<VoidP>& out) const;
|
||||
};
|
||||
|
||||
/// A filter function that searches for cards containing a string
|
||||
class QueryCardListFilter : public CardListFilter {
|
||||
public:
|
||||
QueryCardListFilter(String const& query) : query(query) {}
|
||||
virtual bool keep(const CardP& card) const;
|
||||
private:
|
||||
String query;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : FilteredCardList
|
||||
|
||||
/// A card list that lists a subset of the cards in the set
|
||||
class FilteredCardList : public CardListBase {
|
||||
public:
|
||||
FilteredCardList(Window* parent, int id, long style = 0);
|
||||
FilteredCardList(Window* parent, int id, long additional_style = 0);
|
||||
|
||||
/// Change the filter to use
|
||||
void setFilter(const CardListFilterP& filter);
|
||||
|
||||
@@ -114,3 +114,28 @@ void ImageCardList::onIdle(wxIdleEvent&) {
|
||||
BEGIN_EVENT_TABLE(ImageCardList, CardListBase)
|
||||
EVT_IDLE (ImageCardList::onIdle)
|
||||
END_EVENT_TABLE ()
|
||||
|
||||
// ----------------------------------------------------------------------------- : FilteredImageCardList
|
||||
|
||||
FilteredImageCardList::FilteredImageCardList(Window* parent, int id, long additional_style)
|
||||
: ImageCardList(parent, id, additional_style)
|
||||
{}
|
||||
|
||||
void FilteredImageCardList::setFilter(const CardListFilterP& filter) {
|
||||
this->filter = filter;
|
||||
rebuild();
|
||||
}
|
||||
|
||||
void FilteredImageCardList::onChangeSet() {
|
||||
// clear filter before changing set, the filter might not make sense for a different set
|
||||
filter = CardListFilterP();
|
||||
CardListBase::onChangeSet();
|
||||
}
|
||||
|
||||
void FilteredImageCardList::getItems(vector<VoidP>& out) const {
|
||||
if (filter) {
|
||||
filter->getItems(set->cards,out);
|
||||
} else {
|
||||
ImageCardList::getItems(out);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
|
||||
#include <util/prec.hpp>
|
||||
#include <gui/control/card_list.hpp>
|
||||
#include <gui/control/filtered_card_list.hpp>
|
||||
|
||||
DECLARE_POINTER_TYPE(ImageField);
|
||||
|
||||
@@ -39,5 +40,23 @@ class ImageCardList : public CardListBase {
|
||||
friend class CardThumbnailRequest;
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : FilteredImageCardList
|
||||
|
||||
class FilteredImageCardList : public ImageCardList {
|
||||
public:
|
||||
FilteredImageCardList(Window* parent, int id, long additional_style = 0);
|
||||
|
||||
/// Change the filter to use, if null then don't use a filter
|
||||
void setFilter(const CardListFilterP& filter);
|
||||
|
||||
protected:
|
||||
/// Get only the subset of the cards
|
||||
virtual void getItems(vector<VoidP>& out) const;
|
||||
virtual void onChangeSet();
|
||||
|
||||
private:
|
||||
CardListFilterP filter; ///< Filter with which this.cards is made
|
||||
};
|
||||
|
||||
// ----------------------------------------------------------------------------- : EOF
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user