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