diff --git a/projects/mtg/bin/daily_build/template.exe b/projects/mtg/bin/daily_build/template.exe index 2ede19fd6..641138108 100644 Binary files a/projects/mtg/bin/daily_build/template.exe and b/projects/mtg/bin/daily_build/template.exe differ diff --git a/projects/mtg/include/WFilter.h b/projects/mtg/include/WFilter.h index b581521e6..3d9c4c4a7 100644 --- a/projects/mtg/include/WFilter.h +++ b/projects/mtg/include/WFilter.h @@ -19,8 +19,6 @@ private: class WCardFilter{ public: WCardFilter() {}; - virtual void recolor(int mtgcolor) {}; - virtual bool filtersColor() {return false;}; virtual ~WCardFilter() {}; virtual bool isMatch(MTGCard * c) {return true;}; virtual string getCode() = 0; @@ -31,10 +29,8 @@ class WCFBranch: public WCardFilter{ public: WCFBranch(WCardFilter * a, WCardFilter * b) {lhs=a;rhs=b;}; ~WCFBranch() {SAFE_DELETE(lhs); SAFE_DELETE(rhs);}; - virtual bool filtersColor() {return (rhs->filtersColor() || lhs->filtersColor());}; virtual bool isMatch(MTGCard * c) = 0; virtual string getCode() = 0; - virtual void recolor(int mtgcolor) {rhs->recolor(mtgcolor);lhs->recolor(mtgcolor);}; virtual WCardFilter * Right(){return rhs;}; virtual WCardFilter * Left(){return lhs;}; protected: @@ -61,8 +57,6 @@ class WCFilterGROUP: public WCardFilter{ public: WCFilterGROUP(WCardFilter * _k) {kid = _k;}; ~WCFilterGROUP() {SAFE_DELETE(kid);}; - virtual void recolor(int mtgcolor) {kid->recolor(mtgcolor);}; - virtual bool filtersColor() {return (kid->filtersColor());}; bool isMatch(MTGCard *c) {return kid->isMatch(c);}; string getCode(); float filterFee() {return kid->filterFee();}; @@ -74,8 +68,6 @@ class WCFilterNOT: public WCardFilter{ public: WCFilterNOT(WCardFilter * _k) {kid = _k;}; ~WCFilterNOT() {SAFE_DELETE(kid);}; - virtual void recolor(int mtgcolor) {kid->recolor(mtgcolor);}; - virtual bool filtersColor() {return (kid->filtersColor());}; bool isMatch(MTGCard *c) {return !kid->isMatch(c);}; string getCode(); protected: @@ -113,11 +105,9 @@ protected: class WCFilterColor: public WCardFilter{ public: WCFilterColor(int _c) {color = _c;}; - virtual void recolor(int mtgcolor) {color = mtgcolor;}; WCFilterColor(string arg); bool isMatch(MTGCard * c); string getCode(); - bool filtersColor() {return true;}; float filterFee() {return 0.2f;}; protected: int color; @@ -134,8 +124,6 @@ public: WCFilterProducesColor(int _c) : WCFilterColor(_c) {}; WCFilterProducesColor(string arg) : WCFilterColor(arg) {}; bool isMatch(MTGCard * c); - void recolor(int mtgcolor) {return;}; - bool filtersColor() {return false;}; //We only want to know about filtering against card color, not produced. string getCode(); }; class WCFilterNumeric: public WCardFilter{ diff --git a/projects/mtg/include/WGui.h b/projects/mtg/include/WGui.h index dcf3af7c7..27ade87a0 100644 --- a/projects/mtg/include/WGui.h +++ b/projects/mtg/include/WGui.h @@ -434,7 +434,7 @@ protected: vector< pair > tempArgs; //TODO FIXME this is inefficient bool bFinished; string priorFilter; - int recolorTo, priorRecolor; + int recolorTo; WSrcCards* source; SimpleMenu* subMenu; WGuiList * list; diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index c99c67aec..917c798f9 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -132,6 +132,10 @@ void GameStateDeckViewer::Start() myCollection = NEW DeckDataWrapper(playerdata->collection); myCollection->Sort(WSrcCards::SORT_ALPHA); displayed_deck = myCollection; + filterDeck = NEW WGuiFilters("Filter by...",myDeck); + filterDeck->Finish(); + filterCollection = NEW WGuiFilters("Filter by...",myCollection); + filterCollection->Finish(); //Build menu. menu = NEW SimpleMenu(11,this,Constants::MENU_FONT,SCREEN_WIDTH/2-150,20); menu->Add(22,"Filter by..."); @@ -1482,6 +1486,7 @@ void GameStateDeckViewer::ButtonPressed(int controllerId, int controlId) goa->giveAward(); } options.save(); + SAFE_DELETE(filterCollection); SAFE_DELETE(myCollection); myCollection = NEW DeckDataWrapper(playerdata->collection); myCollection->Sort(WSrcCards::SORT_ALPHA); diff --git a/projects/mtg/src/WGui.cpp b/projects/mtg/src/WGui.cpp index fe3503164..fd638748e 100644 --- a/projects/mtg/src/WGui.cpp +++ b/projects/mtg/src/WGui.cpp @@ -1326,18 +1326,21 @@ bool WGuiFilters::Finish(){ string src; if(source){ src = getCode(); - if(priorFilter == src && recolorTo == priorRecolor) + if(priorFilter == src && recolorTo < 0) return false; source->clearFilters(); if(src.size()){ WCFilterFactory * wc = WCFilterFactory::GetInstance(); WCardFilter * f = wc->Construct(src); if(recolorTo > -1 && recolorTo < Constants::MTG_NB_COLORS){ - if(!f->filtersColor()) - f = NEW WCFilterAND(f,NEW WCFilterColor(recolorTo)); - f->recolor(recolorTo); + f = NEW WCFilterAND(f,NEW WCFilterColor(recolorTo)); } source->addFilter(f); + }else { + if(recolorTo > -1 && recolorTo < Constants::MTG_NB_COLORS){ + WCardFilter * f = NEW WCFilterColor(recolorTo); + source->addFilter(f); + } } if(!source->Size()){ source->clearFilters(); //TODO: Pop a "No results found" warning @@ -1382,11 +1385,9 @@ WGuiFilters::WGuiFilters(string header, WSrcCards * src) : WGuiItem(header) { bFinished = false; source = src; recolorTo = -1; - priorRecolor = -1; buildList(); } void WGuiFilters::recolorFilter(int color){ - priorRecolor = recolorTo; recolorTo = color; } string WGuiFilters::getCode(){