//+----------------------------------------------------------------------------+ //| Description: Magic Set Editor - Program to make Magic (tm) cards | //| Copyright: (C) 2001 - 2007 Twan van Laarhoven | //| License: GNU General Public License 2 or later (see file COPYING) | //+----------------------------------------------------------------------------+ // ----------------------------------------------------------------------------- : Includes #include #include #include #include #include #include #include DECLARE_TYPEOF_COLLECTION(FieldP); DECLARE_TYPEOF_NO_REV(IndexMap); // ----------------------------------------------------------------------------- : Card Card::Card() : has_styling(false) { if (!game_for_reading()) { throw InternalError(_("game_for_reading not set")); } data.init(game_for_reading()->card_fields); } Card::Card(const Game& game) : has_styling(false) { data.init(game.card_fields); } String Card::identification() const { // an identifying field FOR_EACH_CONST(v, data) { if (v->fieldP->identifying) { return v->toString(); } } // otherwise the first field if (!data.empty()) { return data.at(0)->toString(); } else { return wxEmptyString; } } IndexMap& Card::extraDataFor(const StyleSheet& stylesheet) { return extra_data.get(stylesheet.name(), stylesheet.extra_card_fields); } void mark_dependency_member(const Card& card, const String& name, const Dependency& dep) { mark_dependency_member(card.data, name, dep); } IMPLEMENT_REFLECTION(Card) { REFLECT(stylesheet); REFLECT(has_styling); if (has_styling) { if (stylesheet) { REFLECT_IF_READING styling_data.init(stylesheet->styling_fields); REFLECT(styling_data); } else if (stylesheet_for_reading()) { REFLECT_IF_READING styling_data.init(stylesheet_for_reading()->styling_fields); REFLECT(styling_data); } } REFLECT(notes); REFLECT_NO_SCRIPT(extra_data); // don't allow scripts to depend on style specific data REFLECT_NAMELESS(data); }