+ lbl_name->set_geometry(GLtk::Geometry(50, 28, geom.w-77, 20));
+ train.signal_name_changed.connect(sigc::mem_fun(lbl_name, &GLtk::Label::set_text));
+
+ pnl_basic->add(*(lbl_speed = new GLtk::Label(" 0")));
+ lbl_speed->set_style("digital");
+ lbl_speed->set_geometry(GLtk::Geometry(10, 3, 35, 20));
+
+ pnl_basic->add(*(sld_speed = new GLtk::HSlider));
+ sld_speed->set_geometry(GLtk::Geometry(50, 8, geom.w-80, 10));
+ sld_speed->set_range(0, 200);
+ sld_speed->set_step(5);
+ sld_speed->signal_value_changed.connect(sigc::mem_fun(this, &TrainPanel::speed_slider_changed));
+
+ pnl_basic->add(*(tgl_forward = new GLtk::Toggle));
+ tgl_forward->set_text("Fwd");
+ tgl_forward->set_geometry(GLtk::Geometry(geom.w-30, 0, 20, 27));
+ tgl_forward->set_value(true);
+ tgl_forward->signal_toggled.connect(sigc::mem_fun(this, &TrainPanel::forward_toggled));
+
+ pnl_basic->add(*(btn_expand = new GLtk::Button));
+ btn_expand->set_style("arrow_down");
+ btn_expand->set_geometry(GLtk::Geometry(geom.w-22, 28, 12, 20));
+ btn_expand->signal_clicked.connect(sigc::mem_fun(this, &TrainPanel::expand_clicked));
+
+ add(*(pnl_extra = new GLtk::Panel));
+ pnl_extra->set_style("group");
+ pnl_extra->set_geometry(GLtk::Geometry(0, 10, geom.w, 135));
+ pnl_extra->set_visible(false);
+
+ TrainRouter *router = train.get_ai_of_type<TrainRouter>();
+ if(!router)
+ router = new TrainRouter(train);
+
+ const Route *route = router->get_route();
+ pnl_extra->add(*(lbl_route = new GLtk::Label((route ? route->get_name() : "Free run"))));
+ lbl_route->set_style("digital");
+ lbl_route->set_geometry(GLtk::Geometry(10, 85, geom.w-20, 20));
+ router->signal_route_changed.connect(sigc::mem_fun(this, &TrainPanel::train_route_changed));
+
+ pnl_extra->add(*(lbl_status = new GLtk::Label(status.get_status())));
+ lbl_status->set_style("digital");
+ lbl_status->set_geometry(GLtk::Geometry(10, 60, geom.w-20, 20));
+ status.signal_changed.connect(sigc::mem_fun(this, &TrainPanel::train_status_changed));
+
+ const VehicleType::FunctionMap &funcs = train.get_locomotive_type().get_functions();
+ unsigned x = 10;
+ for(VehicleType::FunctionMap::const_iterator i=funcs.begin(); i!=funcs.end(); ++i, x+=36)
+ {
+ string fname = i->second;
+ fname[0] = toupper(fname[0]);
+ GLtk::Toggle *tgl;
+ pnl_extra->add(*(tgl = new GLtk::Toggle));
+ tgl->set_text(fname);
+ tgl->set_geometry(GLtk::Geometry(x, 108, 36, 27));
+ tgl->set_value(train.get_function(i->first));
+ tgl->signal_toggled.connect(sigc::bind(sigc::mem_fun(this, &TrainPanel::func_toggled), i->first));
+
+ tgl_funcs[i->first] = tgl;
+ }
+ train.signal_function_changed.connect(sigc::mem_fun(this, &TrainPanel::train_function_changed));