]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/trainpanel.cpp
Add train status display
[r2c2.git] / source / engineer / trainpanel.cpp
index 4dec1afecb9322b407ca10eaa35e1b714e286f31..cd41c2343d2adde8a354dbebaa2d307718608163 100644 (file)
@@ -1,8 +1,10 @@
 #include <msp/gltk/button.h>
 #include <msp/strings/formatter.h>
 #include "libmarklin/locomotive.h"
+#include "engineer.h"
 #include "trainpanel.h"
 
+using namespace std;
 using namespace Msp;
 using namespace Marklin;
 
@@ -11,9 +13,9 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
        engineer(e),
        train(t)
 {
-       set_size(200, 100);
+       set_size(200, 131);
 
-       add(*(lbl_addr=new GLtk::Label(res, lexical_cast(train.get_locomotive().get_address(), "%2d"))));
+       add(*(lbl_addr=new GLtk::Label(res, format("%2d", train.get_locomotive().get_address()))));
        lbl_addr->set_style("digital");
        lbl_addr->set_geometry(GLtk::Geometry(10, geom.h-34, 35, 24));
 
@@ -28,15 +30,24 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
        sld_speed->set_step(1);
        sld_speed->signal_value_changed.connect(sigc::mem_fun(this, &TrainPanel::speed_slider_changed));
 
-       add(*(lbl_speed=new GLtk::Label(res, " 0")));
+       add(*(lbl_speed=new GLtk::Label(res, format("%2d", train.get_locomotive().get_speed()))));
        lbl_speed->set_style("digital");
        lbl_speed->set_geometry(GLtk::Geometry(10, geom.h-63, 35, 24));
        train.get_locomotive().signal_speed_changed.connect(sigc::mem_fun(this, &TrainPanel::loco_speed_changed));
 
+       add(*(lbl_status=new GLtk::Label(res, train.get_status())));
+       lbl_status->set_style("digital");
+       lbl_status->set_geometry(GLtk::Geometry(10, geom.h-92, geom.w-20, 24));
+       train.signal_status_changed.connect(sigc::mem_fun(this, &TrainPanel::train_status_changed));
+
        GLtk::Button *btn;
 
        add(*(btn=new GLtk::Button(res, "Edit")));
        btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24));
+
+       add(*(btn=new GLtk::Button(res, "Place")));
+       btn->set_geometry(GLtk::Geometry(geom.w-90, 10, 40, 24));
+       btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::place_clicked));
 }
 
 void TrainPanel::speed_slider_changed(double v)
@@ -48,3 +59,13 @@ void TrainPanel::loco_speed_changed(unsigned speed)
 {
        lbl_speed->set_text(format("%2d", speed));
 }
+
+void TrainPanel::train_status_changed(const string &s)
+{
+       lbl_status->set_text(s);
+}
+
+void TrainPanel::place_clicked()
+{
+       engineer.place_train(train);
+}