+#include "appearance.h"
+#include "theme.h"
+
+using namespace std;
+using namespace Msp;
+
+Appearance::Appearance():
+ font_size(32),
+ sound_type(0),
+ sound_volume(100)
+{ }
+
+Appearance::Loader::Loader(Appearance &a, const Theme &t):
+ DataFile::ObjectLoader<Appearance>(a),
+ theme(t)
+{
+ add("alert_sound", &Appearance::sound_type, &Appearance::sound_volume);
+ add("background_color", &Loader::background_color);
+ add("background_color", &Loader::background_color_named);
+ add("border_color", &Loader::border_color);
+ add("border_color", &Loader::border_color_named);
+ add("font_size", &Loader::font_size);
+ add("text_color", &Loader::text_color);
+ add("text_color", &Loader::text_color_named);
+}
+
+void Appearance::Loader::background_color(unsigned r, unsigned g, unsigned b)
+{
+ obj.background_color = Color(r, g, b);
+}
+
+void Appearance::Loader::background_color_named(const string &name)
+{
+ obj.background_color = theme.get_color(name);
+}
+
+void Appearance::Loader::border_color(unsigned r, unsigned g, unsigned b)
+{
+ obj.border_color = Color(r, g, b);
+}
+
+void Appearance::Loader::border_color_named(const string &name)
+{
+ obj.border_color = theme.get_color(name);
+}
+
+void Appearance::Loader::font_size(float s)
+{
+ obj.font_size = theme.get_base_font_size()*s+0.5f;
+}
+
+void Appearance::Loader::text_color(unsigned r, unsigned g, unsigned b)
+{
+ obj.text_color = Color(r, g, b);
+}
+
+void Appearance::Loader::text_color_named(const string &name)
+{
+ obj.text_color = theme.get_color(name);
+}