X-Git-Url: http://git.tdb.fi/?p=r2c2.git;a=blobdiff_plain;f=source%2Fengineer%2Fuserinterface.cpp;h=8eadecc8ed72d67fd4be71f97444211ed82670ef;hp=aec54ad041331ef79ab44f0ba8090c74b9fa2db3;hb=abed4a255060d5a233ec0ac2dd60af9132e29201;hpb=9e96d36a21c24befc88c7bf9c1014c22169e3a6a diff --git a/source/engineer/userinterface.cpp b/source/engineer/userinterface.cpp index aec54ad..8eadecc 100644 --- a/source/engineer/userinterface.cpp +++ b/source/engineer/userinterface.cpp @@ -1,9 +1,13 @@ +#include #include #include +#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; @@ -68,7 +72,7 @@ void UserInterface::show_train(Train &train) 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); } @@ -106,3 +110,47 @@ void UserInterface::render() const { root.render(); } + +void UserInterface::save_state(const string &fn) const +{ + IO::BufferedFile out(fn, IO::M_WRITE); + DataFile::Writer writer(out); + + for(set::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(ui) +{ + add("clockdialog", &Loader::basic_dialog); + add("departuresdialog", &Loader::basic_dialog); + add("telemetrydialog", &Loader::basic_dialog); + add("traindialog", &Loader::traindialog); + add("trainlistdialog", &Loader::basic_dialog); +} + +template +void UserInterface::Loader::dialog(T &dlg) +{ + obj.root.add(dlg); + typename T::StateLoader ldr(dlg); + load_sub_with(ldr); +} + +template +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))); +}