diff --git a/src/data/card.cpp b/src/data/card.cpp index 26aebb9d..331fb717 100644 --- a/src/data/card.cpp +++ b/src/data/card.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include DECLARE_TYPEOF_COLLECTION(FieldP); DECLARE_TYPEOF_NO_REV(IndexMap); @@ -45,6 +45,10 @@ String Card::identification() const { } } +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); } @@ -52,48 +56,6 @@ void mark_dependency_member(const Card& card, const String& name, const Dependen IMPLEMENT_REFLECTION(Card) { REFLECT(stylesheet); REFLECT(notes); - REFLECT_NO_SCRIPT(extra_data); + REFLECT_NO_SCRIPT(extra_data); // don't allow scripts to depend on style specific data REFLECT_NAMELESS(data); } - -// ----------------------------------------------------------------------------- : Styling - -// TODO : this is practically the same as Set::Styling, maybe somehow abstract it - -// Extra card data, for a specific stylesheet -/* The data is not read immediatly, because we do not know the stylesheet */ -class Card::Styling : public IntrusivePtrBase { - public: - /// The values on the extra card fields of the card. - /** The indices should correspond to the extra_card_fields in the StyleSheet */ - IndexMap extra_data; - /// Unparsed extra_data - String unread_data; - DECLARE_REFLECTION(); -}; - -IndexMap& Card::extraDataFor(const StyleSheet& stylesheet) { - StylingP& styling = extra_data[stylesheet.name()]; - if (!styling) { - styling = new_intrusive(); - styling->extra_data.init(stylesheet.extra_card_fields); - } else if (!styling->unread_data.empty() || (styling->extra_data.empty()) && !stylesheet.extra_card_fields.empty()) { - // we delayed the reading of the data, read it now - styling->extra_data.init(stylesheet.extra_card_fields); - Reader reader(new_shared1(styling->unread_data), _("extra card values for ") + stylesheet.stylesheetName()); - reader.handle_greedy(styling->extra_data); - styling->unread_data.clear(); - } - return styling->extra_data; -} - -// custom reflection : read into unread_data -template <> void Reader::handle(Card::Styling& s) { - handle(s.unread_data); -} -template <> void Writer::handle(const Card::Styling& s) { - handle(s.extra_data); -} -// for the love of god, don't depend on styling -template <> void GetMember::handle(const Card::Styling& s) {} -template <> void GetDefaultMember::handle(const Card::Styling& s) {} diff --git a/src/data/card.hpp b/src/data/card.hpp index bb1bc305..6dd207fe 100644 --- a/src/data/card.hpp +++ b/src/data/card.hpp @@ -41,8 +41,7 @@ class Card : public IntrusivePtrVirtualBase { StyleSheetP stylesheet; /// Extra values for specitic stylesheets, indexed by stylesheet name - DECLARE_POINTER_TYPE(Styling); - map extra_data; + DelayedIndexMaps extra_data; /// Styling information for a particular stylesheet IndexMap& extraDataFor(const StyleSheet& stylesheet) ; diff --git a/src/data/export_template.cpp b/src/data/export_template.cpp index 2b811cba..ff771997 100644 --- a/src/data/export_template.cpp +++ b/src/data/export_template.cpp @@ -7,9 +7,13 @@ // ----------------------------------------------------------------------------- : Includes #include +#include +#include // ----------------------------------------------------------------------------- : Export template, basics +ExportTemplate::ExportTemplate() {} + String ExportTemplate::typeNameStatic() { return _("export-template"); } String ExportTemplate::typeName() const { return _("export-template"); } diff --git a/src/data/export_template.hpp b/src/data/export_template.hpp index 04792fe1..440a8150 100644 --- a/src/data/export_template.hpp +++ b/src/data/export_template.hpp @@ -13,16 +13,23 @@ #include #include