X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fengineer%2Fdeparturesdialog.cpp;h=c5f1b8b07821a9935ed8e4bab5b3c4d4aa3d115e;hb=abed4a255060d5a233ec0ac2dd60af9132e29201;hp=bea7f79281b58fa98a3ccf29182310acacfbc80f;hpb=d84f187ca34a6ab2f8c37d85fa13d5c113714344;p=r2c2.git diff --git a/source/engineer/departuresdialog.cpp b/source/engineer/departuresdialog.cpp index bea7f79..c5f1b8b 100644 --- a/source/engineer/departuresdialog.cpp +++ b/source/engineer/departuresdialog.cpp @@ -5,13 +5,15 @@ #include "libr2c2/train.h" #include "libr2c2/zone.h" #include "departuresdialog.h" +#include "engineer.h" using namespace std; using namespace Msp; using namespace R2C2; -DeparturesDialog::DeparturesDialog(const Layout &l, const string &group): - layout(l), +DeparturesDialog::DeparturesDialog(Engineer &engineer, const string &group): + DynamicDialog(engineer.get_user_interface()), + layout(engineer.get_layout()), departures(0) { Loader::WidgetMap widgets; @@ -47,9 +49,13 @@ DeparturesDialog::DeparturesDialog(const Layout &l, const string &group): } } -void DeparturesDialog::group_selected(unsigned index) +void DeparturesDialog::set_group(const string &group) { - const string &group = groups.get(index); + int index = groups.find(group); + if(index<0) + throw key_error(group); + drp_groups->set_selected_index(index); + lbl_title->set_text("Departures from "+group); for(vector::iterator i=rows.begin(); i!=rows.end(); ++i) @@ -57,20 +63,15 @@ void DeparturesDialog::group_selected(unsigned index) delete departures; departures = new Departures(layout, group); - departures->signal_departure_added.connect(sigc::mem_fun(this, &DeparturesDialog::departure_added)); - departures->signal_departure_removed.connect(sigc::mem_fun(this, &DeparturesDialog::departure_removed)); - - update_rows(); -} + departures->signal_departure_added.connect(sigc::hide<0>(sigc::mem_fun(this, &DeparturesDialog::update_rows))); + departures->signal_departure_removed.connect(sigc::hide<0>(sigc::mem_fun(this, &DeparturesDialog::update_rows))); -void DeparturesDialog::departure_added(const Departures::Departure &) -{ update_rows(); } -void DeparturesDialog::departure_removed(const Departures::Departure &) +void DeparturesDialog::group_selected(unsigned index) { - update_rows(); + set_group(groups.get(index)); } void DeparturesDialog::update_rows() @@ -86,6 +87,17 @@ void DeparturesDialog::update_rows() } } +bool DeparturesDialog::save_state(DataFile::Statement &st) const +{ + st.keyword = "departuresdialog"; + int sel = drp_groups->get_selected_index(); + if(sel>=0) + st.sub.push_back((DataFile::Statement("group"), groups.get(sel))); + save_position(st.sub); + + return true; +} + DeparturesDialog::Row::Row(): departure(0), @@ -110,3 +122,15 @@ void DeparturesDialog::Row::set_departure(const Departures::Departure *d) lbl_train->set_text(string()); } } + + +DeparturesDialog::StateLoader::StateLoader(DeparturesDialog &dd): + DataFile::DerivedObjectLoader(dd) +{ + add("group", &StateLoader::group); +} + +void DeparturesDialog::StateLoader::group(const string &g) +{ + obj.set_group(g); +}