]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/trainpanel.cpp
Support setting routes for trains
[r2c2.git] / source / engineer / trainpanel.cpp
index a8c0e90536580d3c7c40a27a32300d940446fb22..d462b5139c85f192d7bf747523c3b4e40fca1cdd 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of the MSP Märklin suite
-Copyright © 2006-2008 Mikkosoft Productions, Mikko Rasa
+Copyright © 2006-2009 Mikkosoft Productions, Mikko Rasa
 Distributed under the GPL
 */
 
@@ -9,7 +9,9 @@ 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"
 
 using namespace std;
 using namespace Msp;
@@ -21,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 +51,11 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
        tgl_forward->set_value(!train.get_locomotive().get_reverse());
        tgl_forward->signal_toggled.connect(sigc::mem_fun(this, &TrainPanel::forward_toggled));
 
+       add(*(lbl_route=new GLtk::Label(res, "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");
        lbl_status->set_geometry(GLtk::Geometry(10, 34, geom.w-20, 24));
@@ -75,6 +82,7 @@ TrainPanel::TrainPanel(Engineer &e, const GLtk::Resources &r, Train &t):
 
        add(*(btn=new GLtk::Button(res, "Edit")));
        btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24));
+       btn->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::edit_clicked));
 
        add(*(btn=new GLtk::Button(res, "Place")));
        btn->set_geometry(GLtk::Geometry(geom.w-90, 10, 40, 24));
@@ -82,6 +90,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)
@@ -102,6 +114,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);
@@ -112,6 +132,22 @@ void TrainPanel::place_clicked()
        engineer.place_train(train);
 }
 
+void TrainPanel::edit_clicked()
+{
+       TrainProperties *dialog = new TrainProperties(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::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);