diff --git a/src/data/field.cpp b/src/data/field.cpp index 58365253..689d49c5 100644 --- a/src/data/field.cpp +++ b/src/data/field.cpp @@ -37,6 +37,8 @@ IMPLEMENT_REFLECTION(Field) { String type = typeName(); REFLECT(type); } + REFLECT(name); + REFLECT(description); REFLECT(editable); REFLECT(save_value); REFLECT(show_statistics); @@ -44,7 +46,8 @@ IMPLEMENT_REFLECTION(Field) { REFLECT(card_list_column); REFLECT(card_list_width); REFLECT(card_list_allow); - REFLECT(card_list_align); + REFLECT(card_list_name); + REFLECT_N("card_list_alignment", card_list_align); REFLECT(tab_index); } diff --git a/src/data/field/choice.cpp b/src/data/field/choice.cpp index fa687827..2457da8c 100644 --- a/src/data/field/choice.cpp +++ b/src/data/field/choice.cpp @@ -31,7 +31,7 @@ String ChoiceField::typeName() const { IMPLEMENT_REFLECTION(ChoiceField) { REFLECT_BASE(Field); - REFLECT(choices); + REFLECT_N("choices", choices->choices); REFLECT(script); REFLECT_N("default", default_script); REFLECT(initial); diff --git a/src/mse.vcproj b/src/mse.vcproj index 615ca016..6a346974 100644 --- a/src/mse.vcproj +++ b/src/mse.vcproj @@ -711,6 +711,18 @@ + + + + + + diff --git a/src/util/io/reader.cpp b/src/util/io/reader.cpp index 5260562c..ac39fe1c 100644 --- a/src/util/io/reader.cpp +++ b/src/util/io/reader.cpp @@ -20,6 +20,10 @@ Reader::Reader(const InputStreamP& input, String filename) moveNext(); } +void Reader::warning(const String& msg) { + wxMessageBox((msg + _("\nOn line: ")) << line_number << _("\nIn file: ") << filename, _("Warning"), wxOK | wxICON_EXCLAMATION); +} + bool Reader::enterBlock(const Char* name) { if (just_opened) moveNext(); // on the key of the parent block, first move inside it if (indent != expected_indent) return false; // not enough indentation diff --git a/src/util/io/reader.hpp b/src/util/io/reader.hpp index bdf07a5f..b7e12d51 100644 --- a/src/util/io/reader.hpp +++ b/src/util/io/reader.hpp @@ -43,6 +43,9 @@ class Reader { /// Is the thing currently being read 'complex', i.e. does it have children inline bool isComplex() const { return value.empty(); } + /// Show a warning message, but continue reading + void warning(const String& msg); + // --------------------------------------------------- : Handling objects /// Handle an object: read it if it's name matches template @@ -148,7 +151,8 @@ void Reader::handle(map& map) { UInt l = line_number; \ object.reflect(*this); \ if (l == line_number) { \ - /* error */ \ + /* warning: unexpected key */ \ + warning(_("Unexpected key: '") + key + _("'")); \ do { \ moveNext(); \ } while (indent > expected_indent); \ @@ -167,7 +171,8 @@ void Reader::handle(map& map) { EnumReader reader(value); \ reflect_ ## Enum(enum_, reader); \ if (!reader.isDone()) { \ - /* warning message */ \ + /* warning: unknown value */ \ + warning(_("Unrecognized value: ") + value); \ } \ } @@ -181,7 +186,8 @@ class EnumReader { template inline void handle(const Char* name, Enum value, Enum& enum_) { if (!done && read == name) { - first = true; + done = true; + first = false; enum_ = value; } else if (first) { first = false;