1 #include <msp/core/maputils.h>
2 #include <msp/gltk/button.h>
3 #include <msp/gltk/style.h>
5 #include "libr2c2/train.h"
6 #include "newtraindialog.h"
7 #include "traindialog.h"
8 #include "trainlistdialog.h"
14 class TrainItem: public GLtk::List::Item
21 typedef R2C2::Train *ValueType;
26 virtual void on_style_change();
30 TrainListDialog::TrainListDialog(Engineer &e):
32 layout(engineer.get_layout())
34 Loader::WidgetMap widgets;
35 DataFile::load(*this, "data/trainlistdialog.ui", widgets);
37 lst_trains = dynamic_cast<GLtk::List *>(get_item(widgets, "lst_trains"));
38 lst_trains->set_data(trains);
39 lst_trains->set_item_type<TrainItem>();
41 dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_new"))->signal_clicked.connect(sigc::mem_fun(this, &TrainListDialog::new_clicked));
42 dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_show"))->signal_clicked.connect(sigc::mem_fun(this, &TrainListDialog::show_clicked));
44 const map<unsigned, Train *> <rains = layout.get_trains();
45 for(map<unsigned, Train *>::const_iterator i=ltrains.begin(); i!=ltrains.end(); ++i)
46 trains.append(i->second);
49 void TrainListDialog::new_clicked()
51 NewTrainDialog *dlg = new NewTrainDialog(engineer);
52 find_ancestor<GLtk::Root>()->add(*dlg);
56 void TrainListDialog::show_clicked()
58 int index = lst_trains->get_selected_index();
61 TrainDialog *dlg = new TrainDialog(engineer, *trains.get(index));
62 find_ancestor<GLtk::Root>()->add(*dlg);
68 TrainItem::TrainItem(ValueType train):
69 address(lexical_cast<string>(train->get_address())),
70 name(train->get_name())
76 void TrainItem::on_style_change()
84 if(const GLtk::Part *part = style->get_part("children"))
86 const GLtk::Sides &margin = part->get_margin();
87 address.set_position(margin.left, margin.bottom);
88 name.set_position(margin.left+30, margin.bottom);