1 #include <msp/gltk/button.h>
2 #include <msp/gltk/label.h>
3 #include <msp/gltk/mixedrows.h>
4 #include "libr2c2/track.h"
5 #include "libr2c2/tracktype.h"
7 #include "trackproperties.h"
13 TrackProperties::TrackProperties(const Selection &s):
16 GLtk::MixedRows *rows = new GLtk::MixedRows;
19 GLtk::Label *lbl1, *lbl2;
21 add(*(lbl1 = new GLtk::Label("Track properties")));
22 layout->set_expand(*lbl1, true, false);
23 lbl1->set_style("title");
26 add(*(lbl1 = new GLtk::Label("Turnout ID")));
27 add(*(ent_turnout_id = new GLtk::Entry));
28 ent_turnout_id->set_edit_size(5, 1);
31 add(*(lbl2 = new GLtk::Label("Sensor ID")));
32 rows->add_constraint(*lbl1, GLtk::Layout::COPY_WIDTH, *lbl2);
33 add(*(ent_sensor_id = new GLtk::Entry));
34 ent_sensor_id->set_edit_size(5, 1);
39 rows->split_columns();
40 add_button(*(btn = new GLtk::Button("Cncl")), 0);
41 btn->set_style("red");
43 add_button(*(btn = new GLtk::Button("OK")), 1);
44 btn->set_style("green");
46 if(selection.size()==1)
48 if(unsigned tid = selection.get_object<Track>()->get_turnout_id())
49 ent_turnout_id->set_text(lexical_cast<string>(tid));
52 const set<Track *> &tracks = selection.get_objects<Track>();
54 for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
56 if(static_cast<int>((*i)->get_sensor_id())!=sensor_id)
59 sensor_id = (*i)->get_sensor_id();
66 ent_sensor_id->set_text(lexical_cast<string>(sensor_id));
69 void TrackProperties::on_response(int code)
73 if(selection.size()==1)
75 Track *track = selection.get_object<Track>();
76 if(track->get_type().is_turnout())
77 track->set_turnout_id(lexical_cast<unsigned>(ent_turnout_id->get_text()));
80 string sensor_id_text = ent_sensor_id->get_text();
81 if(!sensor_id_text.empty())
83 unsigned sensor_id = lexical_cast<unsigned>(sensor_id_text);
84 const set<Track *> &tracks = selection.get_objects<Track>();
85 for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
86 if(!(*i)->get_type().is_turnout())
87 (*i)->set_sensor_id(sensor_id);