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;