]> git.tdb.fi Git - r2c2.git/blob - source/remote/trainselector.cpp
Add a new remote control program with GLtk-based UI
[r2c2.git] / source / remote / trainselector.cpp
1 #include <msp/core/maputils.h>
2 #include "network/client.h"
3 #include "trainselector.h"
4
5 using namespace std;
6 using namespace Msp;
7 using namespace R2C2;
8
9 string train_name(NetTrain *const &train)
10 {
11         if(train)
12                 return train->get_name();
13         else
14                 return "(no train selected)";
15 }
16
17 TrainSelector::TrainSelector(Client &client):
18         trains(&train_name)
19 {
20         Loader::WidgetMap widgets;
21         DataFile::load(*this, "data/remote/trainselector.ui", widgets);
22
23         drp_trains = dynamic_cast<GLtk::Dropdown *>(get_item(widgets, "drp_trains"));
24         drp_trains->set_data(trains);
25         drp_trains->signal_item_selected.connect(sigc::mem_fun(this, &TrainSelector::train_selected));
26
27         client.signal_train_added.connect(sigc::mem_fun(this, &TrainSelector::train_added));
28
29         trains.append(0);
30         drp_trains->set_selected_index(0);
31         const map<unsigned, NetTrain *> &ctrains = client.get_trains();
32         for(map<unsigned, NetTrain *>::const_iterator i=ctrains.begin(); i!=ctrains.end(); ++i)
33                 trains.append(i->second);
34 }
35
36 void TrainSelector::train_added(NetTrain &train)
37 {
38         trains.append(&train);
39 }
40
41 void TrainSelector::train_selected(unsigned index)
42 {
43         signal_train_selected.emit(trains.get(index));
44 }