]> git.tdb.fi Git - r2c2.git/blob - source/engineer/routeselect.cpp
Fix the arrow while picking a position for a train
[r2c2.git] / source / engineer / routeselect.cpp
1 #include <msp/gltk/label.h>
2 #include "engineer.h"
3 #include "libr2c2/route.h"
4 #include "routeselect.h"
5
6 using namespace std;
7 using namespace Msp;
8 using namespace R2C2;
9
10 RouteSelect::RouteSelect(Engineer &e, Train &t):
11         engineer(e),
12         train(t)
13 {
14         set_size(200, 95);
15
16         GLtk::Label *label;
17         add(*(label = new GLtk::Label("Select route")));
18         label->set_geometry(GLtk::Geometry(10, geom.h-25, geom.w-20, 20));
19
20         add(*(drp_route = new GLtk::Dropdown));
21         drp_route->set_geometry(GLtk::Geometry(10, geom.h-50, geom.w-20, 20));
22         drp_route->append("(none)");
23         drp_route->set_selected_index(0);
24         const set<Route *> &routes = engineer.get_layout().get_routes();
25         unsigned n = 1;
26         for(set<Route *>::const_iterator i=routes.begin(); i!=routes.end(); ++i)
27                 if(!(*i)->is_temporary())
28                 {
29                         drp_route->append((*i)->get_name());
30                         if(*i==train.get_route())
31                                 drp_route->set_selected_index(n);
32                         ++n;
33                 }
34 }
35
36 void RouteSelect::on_ok_clicked()
37 {
38         if(drp_route->get_selected_index()>0)
39         {
40                 const set<Route *> &routes = engineer.get_layout().get_routes();
41                 set<Route *>::const_iterator i = routes.begin();
42                 unsigned n = drp_route->get_selected_index()-1;
43                 while(i!=routes.end())
44                 {
45                         if(!(*i)->is_temporary())
46                         {
47                                 if(!n)
48                                         break;
49                                 --n;
50                         }
51                         ++i;
52                 }
53                 
54                 if(!train.set_route(*i))
55                         engineer.set_status("Could not set route");
56         }
57         else
58                 train.set_route(0);
59 }