+#include <msp/datafile/writer.h>
#include <msp/gltk/floatingarrangement.h>
#include <msp/time/utils.h>
+#include "clockdialog.h"
#include "departuresdialog.h"
#include "engineer.h"
#include "newtraindialog.h"
+#include "telemetrydialog.h"
#include "traindialog.h"
+#include "trainlistdialog.h"
#include "userinterface.h"
using namespace std;
void UserInterface::show_zone(Zone &zone)
{
- DeparturesDialog *dlg = new DeparturesDialog(engineer.get_layout(), zone.get_group());
+ DeparturesDialog *dlg = new DeparturesDialog(engineer, zone.get_group());
root.add(*dlg);
}
{
root.render();
}
+
+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)));
+}