--- /dev/null
+#include <msp/core/maputils.h>
+#include "network/client.h"
+#include "trainselector.h"
+
+using namespace std;
+using namespace Msp;
+using namespace R2C2;
+
+string train_name(NetTrain *const &train)
+{
+ if(train)
+ return train->get_name();
+ else
+ return "(no train selected)";
+}
+
+TrainSelector::TrainSelector(Client &client):
+ trains(&train_name)
+{
+ Loader::WidgetMap widgets;
+ DataFile::load(*this, "data/remote/trainselector.ui", widgets);
+
+ drp_trains = dynamic_cast<GLtk::Dropdown *>(get_item(widgets, "drp_trains"));
+ drp_trains->set_data(trains);
+ drp_trains->signal_item_selected.connect(sigc::mem_fun(this, &TrainSelector::train_selected));
+
+ client.signal_train_added.connect(sigc::mem_fun(this, &TrainSelector::train_added));
+
+ trains.append(0);
+ drp_trains->set_selected_index(0);
+ const map<unsigned, NetTrain *> &ctrains = client.get_trains();
+ for(map<unsigned, NetTrain *>::const_iterator i=ctrains.begin(); i!=ctrains.end(); ++i)
+ trains.append(i->second);
+}
+
+void TrainSelector::train_added(NetTrain &train)
+{
+ trains.append(&train);
+}
+
+void TrainSelector::train_selected(unsigned index)
+{
+ signal_train_selected.emit(trains.get(index));
+}