]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/departuresdialog.cpp
Persist most dialogs across runs
[r2c2.git] / source / engineer / departuresdialog.cpp
index bea7f79281b58fa98a3ccf29182310acacfbc80f..c5f1b8b07821a9935ed8e4bab5b3c4d4aa3d115e 100644 (file)
@@ -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<Row>::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<DeparturesDialog, DynamicDialog::StateLoader>(dd)
+{
+       add("group", &StateLoader::group);
+}
+
+void DeparturesDialog::StateLoader::group(const string &g)
+{
+       obj.set_group(g);
+}