+
+void UserInterface::save_state(const string &fn) const
+{
+ IO::BufferedFile out(fn, IO::M_WRITE);
+ DataFile::Writer writer(out);
+
+ for(set<DynamicDialog *>::const_iterator i=dyn_dialogs.begin(); i!=dyn_dialogs.end(); ++i)
+ {
+ DataFile::Statement st;
+ if((*i)->save_state(st))
+ writer.write(st);
+ }
+}
+
+
+UserInterface::Loader::Loader(UserInterface &ui):
+ DataFile::ObjectLoader<UserInterface>(ui)
+{
+ add("clockdialog", &Loader::basic_dialog<ClockDialog>);
+ add("departuresdialog", &Loader::basic_dialog<DeparturesDialog>);
+ add("telemetrydialog", &Loader::basic_dialog<TelemetryDialog>);
+ add("traindialog", &Loader::traindialog);
+ add("trainlistdialog", &Loader::basic_dialog<TrainListDialog>);
+}
+
+template<typename T>
+void UserInterface::Loader::dialog(T &dlg)
+{
+ obj.root.add(dlg);
+ typename T::StateLoader ldr(dlg);
+ load_sub_with(ldr);
+}
+
+template<typename T>
+void UserInterface::Loader::basic_dialog()
+{
+ dialog(*(new T(obj.engineer)));
+}
+
+void UserInterface::Loader::traindialog(unsigned a)
+{
+ Train &train = obj.engineer.get_layout().get_train(a);
+ dialog(*(new TrainDialog(obj.engineer, train)));
+}