#include <msp/strings/formatter.h>
#include "libmarklin/locomotive.h"
#include "engineer.h"
+#include "routeselect.h"
#include "trainpanel.h"
#include "trainproperties.h"
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");
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));
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)
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);
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);