]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/trainpanel.cpp
Forgot to add the new files
[r2c2.git] / source / engineer / trainpanel.cpp
index be675d6b8a2e4582c65390cc121d16acccf935f9..339f4eca669f7e9d4337dd25ab674c4937a260c7 100644 (file)
@@ -9,6 +9,7 @@ Distributed under the GPL
 #include <msp/strings/formatter.h>
 #include "libmarklin/locomotive.h"
 #include "engineer.h"
+#include "routeselect.h"
 #include "trainpanel.h"
 #include "trainproperties.h"
 
@@ -22,7 +23,7 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
        engineer(e),
        train(t)
 {
-       set_size(200, 145);
+       set_size(200, 170);
 
        add(*(lbl_addr=new GLtk::Label(res, format("%2d", train.get_locomotive().get_address()))));
        lbl_addr->set_style("digital");
@@ -49,6 +50,13 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
        tgl_forward->set_geometry(GLtk::Geometry(geom.w-30, geom.h-59, 20, 27));
        tgl_forward->set_value(!train.get_locomotive().get_reverse());
        tgl_forward->signal_toggled.connect(sigc::mem_fun(this, &TrainPanel::forward_toggled));
+       train.get_locomotive().signal_reverse_changed.connect(sigc::mem_fun(this, &TrainPanel::train_reverse_changed));
+
+       const Route *route = train.get_route();
+       add(*(lbl_route=new GLtk::Label(res, (route ? route->get_name() : "Free run"))));
+       lbl_route->set_style("digital");
+       lbl_route->set_geometry(GLtk::Geometry(10, 58, geom.w-20, 24));
+       train.signal_route_changed.connect(sigc::mem_fun(this, &TrainPanel::train_route_changed));
 
        add(*(lbl_status=new GLtk::Label(res, train.get_status())));
        lbl_status->set_style("digital");
@@ -57,14 +65,14 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
 
        const map<unsigned, string> &funcs = train.get_locomotive().get_type().get_functions();
        unsigned x = 10;
-       for(map<unsigned, string>::const_iterator i=funcs.begin(); i!=funcs.end(); ++i, x+=35)
+       for(map<unsigned, string>::const_iterator i=funcs.begin(); i!=funcs.end(); ++i, x+=36)
        {
                string fname = i->second;
                fname[0] = toupper(fname[0]);
                GLtk::Toggle *tgl;
                add(*(tgl=new GLtk::Toggle(res)));
                tgl->set_text(fname);
-               tgl->set_geometry(GLtk::Geometry(x, geom.h-85, 35, 27));
+               tgl->set_geometry(GLtk::Geometry(x, geom.h-85, 36, 27));
                tgl->set_value(train.get_locomotive().get_function(i->first));
                tgl->signal_toggled.connect(sigc::bind(sigc::mem_fun(this, &TrainPanel::func_toggled), i->first));
 
@@ -84,6 +92,10 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
 
        add(*(btn=new GLtk::Button(res, "GoTo")));
        btn->set_geometry(GLtk::Geometry(geom.w-130, 10, 40, 24));
+
+       add(*(btn=new GLtk::Button(res, "Route")));
+       btn->set_geometry(GLtk::Geometry(geom.w-170, 10, 40, 24));
+       btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::route_clicked));
 }
 
 void TrainPanel::speed_slider_changed(double v)
@@ -97,6 +109,11 @@ void TrainPanel::train_speed_changed(unsigned speed)
        sld_speed->set_value(speed);
 }
 
+void TrainPanel::train_reverse_changed(bool reverse)
+{
+       tgl_forward->set_value(!reverse);
+}
+
 void TrainPanel::loco_function_changed(unsigned func, bool value)
 {
        map<unsigned, GLtk::Toggle *>::iterator i = tgl_funcs.find(func);
@@ -104,6 +121,14 @@ void TrainPanel::loco_function_changed(unsigned func, bool value)
                i->second->set_value(value);
 }
 
+void TrainPanel::train_route_changed(const Route *r)
+{
+       if(r)
+               lbl_route->set_text(r->get_name());
+       else
+               lbl_route->set_text("Free run");
+}
+
 void TrainPanel::train_status_changed(const string &s)
 {
        lbl_status->set_text(s);
@@ -122,6 +147,14 @@ void TrainPanel::edit_clicked()
        dialog->set_visible(true);
 }
 
+void TrainPanel::route_clicked()
+{
+       RouteSelect *dialog = new RouteSelect(engineer, res, train);
+       engineer.get_root().add(*dialog);
+       dialog->set_position(geom.x+geom.w, geom.y+geom.h-dialog->get_geometry().h);
+       dialog->set_visible(true);
+}
+
 void TrainPanel::forward_toggled(bool value)
 {
        train.set_reverse(!value);