drp_route->set_geometry(GLtk::Geometry(10, geom.h-50, geom.w-20, 20));
drp_route->append("(none)");
drp_route->set_selected_index(0);
- const map<string, Route *> &routes = engineer.get_layout().get_routes();
+ const set<Route *> &routes = engineer.get_layout().get_routes();
unsigned n = 1;
- for(map<string, Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i, ++n)
- {
- drp_route->append(i->second->get_name());
- if(i->second==train.get_route())
- drp_route->set_selected_index(n);
- }
+ for(set<Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i)
+ if(!(*i)->is_temporary())
+ {
+ drp_route->append((*i)->get_name());
+ if(*i==train.get_route())
+ drp_route->set_selected_index(n);
+ ++n;
+ }
}
void RouteSelect::on_ok_clicked()
{
if(drp_route->get_selected_index()>0)
{
- const map<string, Route *> &routes = engineer.get_layout().get_routes();
- map<string, Route *>::const_iterator i = routes.begin();
- advance(i, drp_route->get_selected_index()-1);
+ const set<Route *> &routes = engineer.get_layout().get_routes();
+ set<Route *>::const_iterator i = routes.begin();
+ unsigned n = drp_route->get_selected_index()-1;
+ while(i!=routes.end())
+ {
+ if(!(*i)->is_temporary())
+ {
+ if(!n)
+ break;
+ --n;
+ }
+ ++i;
+ }
- train.set_route(i->second);
+ if(!train.set_route(*i))
+ engineer.set_status("Could not set route");
}
else
train.set_route(0);