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:
twanvl
2010-08-04 21:52:26 +00:00
parent 4532fade77
commit be922940a2
17 changed files with 239 additions and 15 deletions
+9 -2
View File
@@ -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);
}
+10 -1
View File
@@ -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);
+25
View File
@@ -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);
}
}
+19
View File
@@ -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