1 #include <msp/gltk/button.h>
2 #include <msp/strings/formatter.h>
3 #include "libmarklin/locomotive.h"
5 #include "trainpanel.h"
9 using namespace Marklin;
11 TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
18 add(*(lbl_addr=new GLtk::Label(res, format("%2d", train.get_locomotive().get_address()))));
19 lbl_addr->set_style("digital");
20 lbl_addr->set_geometry(GLtk::Geometry(10, geom.h-34, 35, 24));
22 add(*(lbl_name=new GLtk::Label(res, train.get_name())));
23 lbl_name->set_style("digital");
24 lbl_name->set_geometry(GLtk::Geometry(45, geom.h-34, geom.w-55, 24));
25 train.signal_name_changed.connect(sigc::mem_fun(lbl_name, &GLtk::Label::set_text));
27 add(*(sld_speed=new GLtk::HSlider(res)));
28 sld_speed->set_geometry(GLtk::Geometry(50, geom.h-56, geom.w-60, 10));
29 sld_speed->set_range(0, 14);
30 sld_speed->set_step(1);
31 sld_speed->signal_value_changed.connect(sigc::mem_fun(this, &TrainPanel::speed_slider_changed));
33 add(*(lbl_speed=new GLtk::Label(res, format("%2d", train.get_locomotive().get_speed()))));
34 lbl_speed->set_style("digital");
35 lbl_speed->set_geometry(GLtk::Geometry(10, geom.h-63, 35, 24));
36 train.get_locomotive().signal_speed_changed.connect(sigc::mem_fun(this, &TrainPanel::loco_speed_changed));
38 add(*(lbl_status=new GLtk::Label(res, train.get_status())));
39 lbl_status->set_style("digital");
40 lbl_status->set_geometry(GLtk::Geometry(10, geom.h-92, geom.w-20, 24));
41 train.signal_status_changed.connect(sigc::mem_fun(this, &TrainPanel::train_status_changed));
45 add(*(btn=new GLtk::Button(res, "Edit")));
46 btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24));
48 add(*(btn=new GLtk::Button(res, "Place")));
49 btn->set_geometry(GLtk::Geometry(geom.w-90, 10, 40, 24));
50 btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::place_clicked));
53 void TrainPanel::speed_slider_changed(double v)
55 train.set_speed(static_cast<unsigned>(v));
58 void TrainPanel::loco_speed_changed(unsigned speed)
60 lbl_speed->set_text(format("%2d", speed));
63 void TrainPanel::train_status_changed(const string &s)
65 lbl_status->set_text(s);
68 void TrainPanel::place_clicked()
70 engineer.place_train(train);