X-Git-Url: http://git.tdb.fi/?p=r2c2.git;a=blobdiff_plain;f=source%2Fremote%2Ftrainselector.cpp;fp=source%2Fremote%2Ftrainselector.cpp;h=ca4ef0ac22ec183e2fb6ed79065f3ecac576077a;hp=0000000000000000000000000000000000000000;hb=f8873062b146028c07f55ad625d2767e45133c27;hpb=a9bbf8d37a2f94a720897fe4f0ab06a016779c69 diff --git a/source/remote/trainselector.cpp b/source/remote/trainselector.cpp new file mode 100644 index 0000000..ca4ef0a --- /dev/null +++ b/source/remote/trainselector.cpp @@ -0,0 +1,44 @@ +#include +#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(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 &ctrains = client.get_trains(); + for(map::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)); +}