X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fzoneproperties.cpp;h=38d9cc792bc9e7f37da6943dc808b3e8a7ee10bd;hb=1c15570729bbce44f0518373ca5bf8bf41cfa3b3;hp=63cda25a1c6261663135bb2b3a348bfb8471e0bc;hpb=c06f3dde10411cd34aae026d8bf22b7771bdc3e0;p=r2c2.git diff --git a/source/designer/zoneproperties.cpp b/source/designer/zoneproperties.cpp index 63cda25..38d9cc7 100644 --- a/source/designer/zoneproperties.cpp +++ b/source/designer/zoneproperties.cpp @@ -1,55 +1,98 @@ #include +#include #include +#include +#include "libr2c2/block.h" +#include "libr2c2/track.h" #include "zoneproperties.h" using namespace std; using namespace Msp; using namespace R2C2; +string track_block_name(Track *const &track) +{ + if(track) + return track->get_block().get_name(); + else + return "(unspecified)"; +} + ZoneProperties::ZoneProperties(Zone &z): - zone(z) + zone(z), + up_directions(&track_block_name) { - set_size(300, 140); + set_layout(new GLtk::Layout); + GLtk::Column col(*layout); + + GLtk::Label *lbl1, *lbl2; - GLtk::Label *lbl; + add(*(lbl1 = new GLtk::Label("Zone properties"))); + lbl1->set_style("title"); - add(*(lbl = new GLtk::Label("Zone properties"))); - lbl->set_geometry(GLtk::Geometry(10, geom.h-30, geom.w-20, 20)); + { + GLtk::Row row(*layout); + add(*(lbl1 = new GLtk::Label("Group"))); + add(*(ent_group = new GLtk::Entry(zone.get_group()))); + ent_group->set_edit_size(30, 1); + } - add(*(lbl = new GLtk::Label("Group"))); - lbl->set_geometry(GLtk::Geometry(10, geom.h-65, 70, 20)); + { + GLtk::Row row(*layout); + add(*(lbl2 = new GLtk::Label("Qualifier"))); + layout->add_constraint(*lbl1, GLtk::Layout::COPY_WIDTH, *lbl2); - add(*(ent_group = new GLtk::Entry(zone.get_group()))); - ent_group->set_geometry(GLtk::Geometry(80, geom.h-65, geom.w-90, 20)); - - add(*(lbl = new GLtk::Label("Qualifier"))); - lbl->set_geometry(GLtk::Geometry(10, geom.h-95, 70, 20)); + add(*(drp_qualifier = new GLtk::Dropdown)); + GLtk::ListDataStore &data = dynamic_cast &>(drp_qualifier->get_data()); + const char *qualifiers[] = { "track", "platform", "siding", 0 }; + for(unsigned i=0; qualifiers[i]; ++i) + { + data.append(qualifiers[i]); + if(zone.get_qualifier()==qualifiers[i]) + drp_qualifier->set_selected_index(i); + } + } - add(*(drp_qualifier = new GLtk::Dropdown)); - drp_qualifier->set_geometry(GLtk::Geometry(80, geom.h-95, 80, 20)); - const char *qualifiers[] = { "track", "platform", "siding", 0 }; - for(unsigned i=0; qualifiers[i]; ++i) { - drp_qualifier->append(qualifiers[i]); - if(zone.get_qualifier()==qualifiers[i]) - drp_qualifier->set_selected_index(i); + GLtk::Row row(*layout); + add(*(lbl1 = new GLtk::Label("Number"))); + layout->add_constraint(*lbl1, GLtk::Layout::COPY_WIDTH, *lbl2); + add(*(ent_number = new GLtk::Entry(lexical_cast(zone.get_number())))); + ent_number->set_edit_size(4, 1); } - add(*(lbl = new GLtk::Label("Number"))); - lbl->set_geometry(GLtk::Geometry(170, geom.h-95, 70, 20)); + { + GLtk::Row row(*layout); + add(*(lbl2 = new GLtk::Label("Up towards"))); + layout->add_constraint(*lbl1, GLtk::Layout::COPY_WIDTH, *lbl2); + add(*(drp_up_direction = new GLtk::Dropdown(up_directions))); + + up_directions.append(0); - add(*(ent_number = new GLtk::Entry(lexical_cast(zone.get_number())))); - ent_number->set_geometry(GLtk::Geometry(240, geom.h-95, 50, 20)); + Track *up = zone.get_end(TrackChain::UP).next().track(); + if(!up) + drp_up_direction->set_selected_index(0); + + for(unsigned i=0; i<2; ++i) + if(TrackIter iter = zone.get_end(i).next()) + { + up_directions.append(iter.track()); + if(iter.track()==up) + drp_up_direction->set_selected_index(up_directions.size()-1); + } + } GLtk::Button *btn; - add_button(*(btn = new GLtk::Button("Cncl")), 0); - btn->set_geometry(GLtk::Geometry(geom.w-90, 10, 40, 24)); - btn->set_style("red"); + { + GLtk::Row row(*layout); + row.split(); + add_button(*(btn = new GLtk::Button("Cncl")), 0); + btn->set_style("red"); - add_button(*(btn = new GLtk::Button("OK")), 1); - btn->set_geometry(GLtk::Geometry(geom.w-50, 10, 40, 24)); - btn->set_style("green"); + add_button(*(btn = new GLtk::Button("OK")), 1); + btn->set_style("green"); + } } void ZoneProperties::on_response(int code) @@ -57,9 +100,16 @@ void ZoneProperties::on_response(int code) if(code==1) { string qualifier; - if(drp_qualifier->get_selected_index()>=0) - qualifier = drp_qualifier->get_selected(); + int sel = drp_qualifier->get_selected_index(); + if(sel>=0) + qualifier = drp_qualifier->get_data().get_string(sel); unsigned number = lexical_cast(ent_number->get_text()); zone.set_name(ent_group->get_text(), qualifier, number); + + sel = drp_up_direction->get_selected_index(); + if(sel==0) + zone.clear_direction(); + else + zone.set_direction_towards(*up_directions.get(sel), TrackChain::UP); } }