#include "../include/config.h" #include "../include/DeckDataWrapper.h" #include "../include/MTGDeck.h" #include "../include/PriceList.h" DeckDataWrapper::DeckDataWrapper(MTGDeck * deck){ parent = deck; for (int i = 0; i <= Constants::MTG_NB_COLORS; i++){ colors[i] = 0; } Add(deck); currentColor = -1; } int DeckDataWrapper::Add(MTGDeck * deck){ map::iterator it; for (it = deck->cards.begin(); it!=deck->cards.end(); it++){ MTGCard * card = deck->getCardById(it->first); Add(card,it->second); } return 1; } void DeckDataWrapper::save(){ parent->removeAll(); map::iterator it; for ( it=cards.begin() ; it != cards.end(); it++ ){ MTGCard * current = (*it).first; for (int i = 0; i < (*it).second; i++){ parent->add(current); } } parent->save(); } DeckDataWrapper::~DeckDataWrapper(){ SAFE_DELETE(parent); } void DeckDataWrapper::updateCounts(MTGCard * card, int increment){ if (!card){ for (int i = 0; i < Constants::MTG_NB_COLORS+1; i++){ colors[i] = 0; } map::iterator it; for ( it=cards.begin() ; it != cards.end(); it++ ){ MTGCard * current = (*it).first; colors[Constants::MTG_NB_COLORS] += (*it).second; for (int i = 0; i < Constants::MTG_NB_COLORS; i++){ if (current->hasColor(i)) colors[i]+=(*it).second; } } }else{ colors[Constants::MTG_NB_COLORS] += increment; for (int i = 0; i < Constants::MTG_NB_COLORS; i++){ if (card->hasColor(i)) colors[i]+=increment; } } } int DeckDataWrapper::Add(MTGCard * card, int quantity){ if(cards.find(card) == cards.end()){ cards[card] = quantity; }else{ cards[card]+= quantity; } updateCounts(card,quantity); return cards[card]; } int DeckDataWrapper::Remove(MTGCard * card){ if(cards.find(card) == cards.end() || cards[card] <= 0) return 0; cards[card]--; updateCounts(card,-1); return 1; } int DeckDataWrapper::count(MTGCard * card){ if(cards.find(card) == cards.end()){ cards[card] = 0; } return cards[card]; } int DeckDataWrapper::countByName(MTGCard * card){ string name = card->name; int total = 0; map::iterator it,it_origin; it = cards.find(card); if(it == cards.end()){ cards[card] = 0; it = cards.find(card); } it_origin = it; while(it !=cards.end()){ MTGCard * _card = (*it).first; if (name.compare(_card->name) !=0){ it = cards.end(); }else{ total+= (*it).second; it++; } } it = cards.find(card); if (it == cards.begin()) return total; it--; while(1){ MTGCard * _card = (*it).first; if (name.compare(_card->name) !=0){ break; }else{ total+= (*it).second; if (it == cards.begin()) break; it--; } } return total; } MTGCard * DeckDataWrapper::getNext(MTGCard * previous, int color){ map::iterator it; it = cards.find(previous); while(1){ if (it == cards.end()){ it = cards.begin(); }else{ it++; } if (it == cards.end()) return NULL; MTGCard * card = (*it).first; if (card == previous) return NULL; if ((*it).second >0 && (color ==-1 || card->hasColor(color))){ return card; } } } MTGCard * DeckDataWrapper::getPrevious(MTGCard * next, int color){ map::iterator it; it = cards.find(next); while(1){ if (it == cards.begin()){ it = cards.end(); }else{ it--; } if (it == cards.end()) return NULL; MTGCard * card = (*it).first; if (card == next) return NULL; if ((*it).second >0 && (color ==-1 || card->hasColor(color))){ return card; } } } int DeckDataWrapper::getCount(int color){ if (color == -1) return colors[Constants::MTG_NB_COLORS]; return colors[color]; } int DeckDataWrapper::totalPrice(){ int total = 0; PriceList * pricelist = NEW PriceList(RESPATH"/settings/prices.dat",this->parent->database); map::iterator it; for ( it=cards.begin() ; it != cards.end(); it++ ){ MTGCard * current = (*it).first; int nb = (*it).second; if (nb) total += pricelist->getPrice(current->getMTGId()); } delete pricelist; return total; }