+ if(n==0)
+ return;
+
+ const VehicleType &type = get_vehicle_type(n-1, false);
+ add_vehicles.push_back(&type);
+ lst_vehicles->append(format("%d %s", type.get_article_number(), type.get_name()));
+
+ drp_new_vehicle->set_selected_index(0);
+}
+
+void TrainProperties::remove_vehicle_clicked()
+{
+ int selected = lst_vehicles->get_selected_index();
+ if(selected<0)
+ return;
+
+ lst_vehicles->remove(selected);
+
+ unsigned n_vehicles = (train ? train->get_n_vehicles()-rem_vehicles.size() : 0);
+ if(static_cast<unsigned>(selected)>=n_vehicles)
+ add_vehicles.erase(add_vehicles.begin()+(selected-n_vehicles));
+ else
+ {
+ for(set<unsigned>::const_iterator i=rem_vehicles.begin(); i!=rem_vehicles.end(); ++i)
+ if(*i<=static_cast<unsigned>(selected))
+ ++selected;
+ rem_vehicles.insert(selected);
+ }
+}
+
+const VehicleType &TrainProperties::get_vehicle_type(unsigned n, bool loco)
+{
+ const Catalogue::VehicleMap &vehs = engineer.get_catalogue().get_vehicles();
+ Catalogue::VehicleMap::const_iterator i = vehs.begin();
+ while(i!=vehs.end())
+ {
+ if(i->second->is_locomotive()==loco)
+ {
+ if(!n)
+ return *i->second;
+ --n;
+ }
+ ++i;
+ }
+
+ throw InvalidParameterValue("Vehicle type index out of range");