]> git.tdb.fi Git - r2c2.git/blob - source/designer/trackproperties.cpp
Make use of the geometry part of libmspmath
[r2c2.git] / source / designer / trackproperties.cpp
1 #include <msp/gltk/button.h>
2 #include <msp/gltk/label.h>
3 #include "libr2c2/track.h"
4 #include "libr2c2/tracktype.h"
5 #include "selection.h"
6 #include "trackproperties.h"
7
8 using namespace std;
9 using namespace Msp;
10 using namespace R2C2;
11
12 TrackProperties::TrackProperties(const Selection &s):
13         selection(s)
14 {
15         set_size(300, 110);
16
17         GLtk::Label *lbl;
18
19         add(*(lbl = new GLtk::Label("Track properties")));
20         lbl->set_geometry(GLtk::Geometry(10, geom.h-30, geom.w-20, 20));
21
22         add(*(lbl = new GLtk::Label("Turnout ID")));
23         lbl->set_geometry(GLtk::Geometry(10, geom.h-65, 70, 20));
24
25         add(*(ent_turnout_id = new GLtk::Entry));
26         ent_turnout_id->set_geometry(GLtk::Geometry(80, geom.h-65, 50, 20));
27
28         add(*(lbl = new GLtk::Label("Sensor ID")));
29         lbl->set_geometry(GLtk::Geometry(150, geom.h-65, 70, 20));
30
31         add(*(ent_sensor_id = new GLtk::Entry));
32         ent_sensor_id->set_geometry(GLtk::Geometry(220, geom.h-65, 50, 20));
33
34         GLtk::Button *btn;
35
36         add_button(*(btn = new GLtk::Button("Cncl")), 0);
37         btn->set_geometry(GLtk::Geometry(geom.w-90, 10, 40, 24));
38         btn->set_style("red");
39
40         add_button(*(btn = new GLtk::Button("OK")), 1);
41         btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24));
42         btn->set_style("green");
43
44         if(selection.size()==1)
45         {
46                 if(unsigned tid = selection.get_object<Track>()->get_turnout_id())
47                         ent_turnout_id->set_text(lexical_cast<string>(tid));
48         }
49
50         const set<Track *> &tracks = selection.get_objects<Track>();
51         int sensor_id = -1;
52         for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
53         {
54                 if(static_cast<int>((*i)->get_sensor_id())!=sensor_id)
55                 {
56                         if(sensor_id==-1)
57                                 sensor_id = (*i)->get_sensor_id();
58                         else
59                                 sensor_id = -2;
60                 }
61         }
62
63         if(sensor_id>=0)
64                 ent_sensor_id->set_text(lexical_cast<string>(sensor_id));
65 }
66
67 void TrackProperties::on_response(int code)
68 {
69         if(code==1)
70         {
71                 if(selection.size()==1)
72                 {
73                         Track *track = selection.get_object<Track>();
74                         if(track->get_type().is_turnout())
75                                 track->set_turnout_id(lexical_cast<unsigned>(ent_turnout_id->get_text()));
76                 }
77
78                 string sensor_id_text = ent_sensor_id->get_text();
79                 if(!sensor_id_text.empty())
80                 {
81                         unsigned sensor_id = lexical_cast<unsigned>(sensor_id_text);
82                         const set<Track *> &tracks = selection.get_objects<Track>();
83                         for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
84                                 if(!(*i)->get_type().is_turnout())
85                                         (*i)->set_sensor_id(sensor_id);
86                 }
87         }
88 }