]> git.tdb.fi Git - r2c2.git/blob - source/engineer/trainpanel.cpp
Major code refactoring:
[r2c2.git] / source / engineer / trainpanel.cpp
1 #include <msp/gltk/button.h>
2 #include <msp/strings/formatter.h>
3 #include "libmarklin/locomotive.h"
4 #include "trainpanel.h"
5
6 using namespace Msp;
7 using namespace Marklin;
8
9 TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
10         Panel(r),
11         engineer(e),
12         train(t)
13 {
14         set_size(200, 100);
15
16         add(*(lbl_addr=new GLtk::Label(res, lexical_cast(train.get_locomotive().get_address(), "%2d"))));
17         lbl_addr->set_style("digital");
18         lbl_addr->set_geometry(GLtk::Geometry(10, geom.h-34, 35, 34));
19
20         add(*(lbl_name=new GLtk::Label(res, train.get_name())));
21         lbl_name->set_style("digital");
22         lbl_name->set_geometry(GLtk::Geometry(45, geom.h-34, geom.w-55, 24));
23         train.signal_name_changed.connect(sigc::mem_fun(lbl_name, &GLtk::Label::set_text));
24
25         add(*(sld_speed=new GLtk::HSlider(res)));
26         sld_speed->set_geometry(GLtk::Geometry(10, geom.h-49, 180, 10));
27         sld_speed->set_range(0, 14);
28         sld_speed->set_step(1);
29         sld_speed->signal_value_changed.connect(sigc::mem_fun(this, &TrainPanel::speed_slider_changed));
30
31         add(*(lbl_speed=new GLtk::Label(res, " 0")));
32         lbl_speed->set_style("digital");
33         lbl_speed->set_geometry(GLtk::Geometry(10, geom.h-75, 35, 24));
34         train.get_locomotive().signal_speed_changed.connect(sigc::mem_fun(this, &TrainPanel::loco_speed_changed));
35
36         GLtk::Button *btn;
37
38         add(*(btn=new GLtk::Button(res, "Edit")));
39         btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24));
40 }
41
42 void TrainPanel::speed_slider_changed(double v)
43 {
44         train.set_speed(static_cast<unsigned>(v));
45 }
46
47 void TrainPanel::loco_speed_changed(unsigned speed)
48 {
49         lbl_speed->set_text(format("%2d", speed));
50 }