1 #include <msp/core/maputils.h>
2 #include <msp/gltk/button.h>
3 #include <msp/gltk/root.h>
4 #include <msp/strings/format.h>
5 #include "libr2c2/layout.h"
6 #include "libr2c2/vehicle.h"
7 #include "newvehicledialog.h"
8 #include "vehiclespanel.h"
14 static string vehicle_name(Vehicle *const &veh)
16 return format("%s %s", veh->get_type().get_article_number(), veh->get_type().get_name());
19 VehiclesPanel::VehiclesPanel(Train &t):
21 vehicles(&vehicle_name)
23 Loader::WidgetMap widgets;
24 DataFile::load(*this, "data/vehiclespanel.ui", widgets);
26 lst_vehicles = dynamic_cast<GLtk::List *>(get_item(widgets, "lst_vehicles"));
27 //lst_vehicles->set_data(vehicles);
29 dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_add"))->signal_clicked.connect(sigc::mem_fun(this, &VehiclesPanel::add_clicked));
30 dynamic_cast<GLtk::Button *>(get_item(widgets, "btn_remove"))->signal_clicked.connect(sigc::mem_fun(this, &VehiclesPanel::remove_clicked));
32 unsigned n_veh = train.get_n_vehicles();
33 for(unsigned i=0; i<n_veh; ++i)
34 vehicles.append(&train.get_vehicle(i));
36 train.signal_vehicle_added.connect(sigc::mem_fun(this, &VehiclesPanel::vehicle_added));
37 train.signal_vehicle_removed.connect(sigc::mem_fun(this, &VehiclesPanel::vehicle_removed));
39 lst_vehicles->set_data(vehicles);
42 void VehiclesPanel::add_clicked()
44 NewVehicleDialog *dlg = new NewVehicleDialog(train);
45 find_ancestor<GLtk::Root>()->add(*dlg);
49 void VehiclesPanel::remove_clicked()
51 int index = lst_vehicles->get_selected_index();
54 train.remove_vehicle(index);
55 lst_vehicles->set_selected_index(static_cast<unsigned>(index)<vehicles.size() ? index : index-1);
59 void VehiclesPanel::vehicle_added(unsigned i, Vehicle &veh)
61 vehicles.insert(i, &veh);
64 void VehiclesPanel::vehicle_removed(unsigned i, Vehicle &)