1.1 --- a/gui/graph_displayer_canvas-event.cc Tue Aug 23 16:27:59 2005 +0000
1.2 +++ b/gui/graph_displayer_canvas-event.cc Fri Aug 26 07:35:23 2005 +0000
1.3 @@ -32,11 +32,6 @@
1.4 //has to do the same thing as in the case of NODE_MAP_EDIT
1.5 case NODE_MAP_EDIT:
1.6 {
1.7 - GdkEvent * generated=new GdkEvent();
1.8 - generated->type=GDK_KEY_PRESS;
1.9 - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
1.10 - entryWidgetChangeHandler(generated);
1.11 - entrywidget.hide();
1.12 break;
1.13 }
1.14 default:
1.15 @@ -548,316 +543,189 @@
1.16 bool GraphDisplayerCanvas::edgeMapEditEventHandler(GdkEvent* e)
1.17 {
1.18 if(actual_tool==EDGE_MAP_EDIT)
1.19 + {
1.20 + switch(e->type)
1.21 {
1.22 - switch(e->type)
1.23 - {
1.24 - case GDK_KEY_PRESS:
1.25 - //for Escape or Enter hide the displayed widget
1.26 - {
1.27 - nodeMapEditEventHandler(e);
1.28 - break;
1.29 - }
1.30 - case GDK_BUTTON_PRESS:
1.31 - //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge.
1.32 - {
1.33 - //for determine, whether it was an edge
1.34 - Edge clicked_edge=INVALID;
1.35 + case GDK_BUTTON_PRESS:
1.36 + {
1.37 + //for determine, whether it was an edge
1.38 + Edge clicked_edge=INVALID;
1.39
1.40 - //find the activated item between texts
1.41 - window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
1.42 - active_item=(get_item_at(clicked_x, clicked_y));
1.43 - for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
1.44 - {
1.45 - if(edgetextmap[i]==active_item)
1.46 - {
1.47 - clicked_edge=i;
1.48 - }
1.49 - }
1.50 + window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
1.51 + active_item=(get_item_at(clicked_x, clicked_y));
1.52
1.53 - //if it was not between texts, search for it between edges
1.54 - if(clicked_edge==INVALID)
1.55 - {
1.56 - for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
1.57 - {
1.58 - //at the same time only one can be active
1.59 - if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item))
1.60 - {
1.61 - clicked_edge=i;
1.62 - }
1.63 - }
1.64 - }
1.65 - //if it was really an edge...
1.66 - if(clicked_edge!=INVALID)
1.67 - {
1.68 - // the id map is not editable
1.69 - if (edgemap_to_edit == "id") return 0;
1.70 + //find the activated item between texts
1.71 + for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
1.72 + {
1.73 + //at the same time only one can be active
1.74 + if(edgetextmap[i]==active_item)
1.75 + {
1.76 + clicked_edge=i;
1.77 + }
1.78 + }
1.79
1.80 - //If there is already edited edge, it has to be saved first
1.81 - if(entrywidget.is_visible())
1.82 - {
1.83 - GdkEvent * generated=new GdkEvent();
1.84 - generated->type=GDK_KEY_PRESS;
1.85 - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
1.86 - entryWidgetChangeHandler(generated);
1.87 - }
1.88 - //If the previous value could be saved, we can go further, otherwise not
1.89 - if(!entrywidget.is_visible())
1.90 - {
1.91 - //and there is activated map
1.92 - if(edgetextmap[clicked_edge]->property_text().get_value()!="")
1.93 - {
1.94 - //activate the general variable for it
1.95 - active_edge=clicked_edge;
1.96 - //delete visible widget if there is
1.97 - if(canvasentrywidget)
1.98 - {
1.99 - delete(canvasentrywidget);
1.100 - }
1.101 + //if it was not between texts, search for it between edges
1.102 + if(clicked_edge==INVALID)
1.103 + {
1.104 + for (EdgeIt i(mapstorage.graph); i!=INVALID; ++i)
1.105 + {
1.106 + //at the same time only one can be active
1.107 + if((edgesmap[i]==active_item)||(edgetextmap[i]==active_item))
1.108 + {
1.109 + clicked_edge=i;
1.110 + }
1.111 + }
1.112 + }
1.113 +
1.114 + //if it was really an edge...
1.115 + if(clicked_edge!=INVALID)
1.116 + {
1.117 + // the id map is not editable
1.118 + if (edgemap_to_edit == "id") return 0;
1.119
1.120 - //initialize the entry
1.121 - entrywidget.show();
1.122 + //and there is activated map
1.123 + if(edgetextmap[clicked_edge]->property_text().get_value()!="")
1.124 + {
1.125 + //activate the general variable for it
1.126 + active_edge=clicked_edge;
1.127
1.128 - //fill in the correct value
1.129 - entrywidget.set_text(edgetextmap[active_edge]->property_text().get_value());
1.130 -
1.131 - //replace and resize the entry to the activated edge and put it in a Canvas::Widget to be able to display it on gdc
1.132 - xy<double> entry_coos;
1.133 - entry_coos.x=(edgetextmap[active_edge])->property_x().get_value();
1.134 - entry_coos.x-=edgetextmap[active_edge]->property_text_width().get_value()/2;
1.135 - entry_coos.y=(edgetextmap[active_edge])->property_y().get_value();
1.136 - entry_coos.y-=edgetextmap[active_edge]->property_text_height().get_value()*1.5/2;
1.137 - canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget);
1.138 - canvasentrywidget->property_width().set_value(edgetextmap[active_edge]->property_text_width().get_value()*4);
1.139 - canvasentrywidget->property_height().set_value(edgetextmap[active_edge]->property_text_height().get_value()*1.5);
1.140 -
1.141 - //setting the focus to newly created widget
1.142 - parentwin->set_focus(entrywidget);
1.143 - parentwin->activate_focus();
1.144 - }
1.145 - }
1.146 - }
1.147 - //if it was not an edge...
1.148 - else
1.149 - {
1.150 - //In this case the click did not happen on an edge
1.151 - //if there is visible entry we save the value in it
1.152 - //we pretend like an Enter was presse din the Entry widget
1.153 - GdkEvent * generated=new GdkEvent();
1.154 - generated->type=GDK_KEY_PRESS;
1.155 - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
1.156 - entryWidgetChangeHandler(generated);
1.157 - }
1.158 - break;
1.159 - }
1.160 - default:
1.161 - break;
1.162 - }
1.163 + //create a dialog
1.164 + Gtk::Dialog dialog("Edit value", *parentwin, true);
1.165 + dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
1.166 + dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
1.167 + Gtk::VBox* vbox = dialog.get_vbox();
1.168 + Gtk::Adjustment adj(
1.169 + (*mapstorage.edgemap_storage[edgemap_to_edit])[active_edge],
1.170 + -1000000.0,
1.171 + 1000000.0,
1.172 + 1.0, 5.0, 0.0);
1.173 + //TODO: find out why doesn't it work with
1.174 + //numeric_limits<double>::min/max
1.175 + Gtk::SpinButton spin(adj);
1.176 + spin.set_numeric(true);
1.177 + spin.set_digits(4);
1.178 + vbox->add(spin);
1.179 + spin.show();
1.180 + switch (dialog.run())
1.181 + {
1.182 + case Gtk::RESPONSE_NONE:
1.183 + case Gtk::RESPONSE_CANCEL:
1.184 + break;
1.185 + case Gtk::RESPONSE_ACCEPT:
1.186 + double new_value = spin.get_value();
1.187 + (*mapstorage.edgemap_storage[edgemap_to_edit])[active_edge] =
1.188 + new_value;
1.189 + std::ostringstream ostr;
1.190 + ostr << new_value;
1.191 + edgetextmap[active_edge]->property_text().set_value(
1.192 + ostr.str());
1.193 + //mapwin.updateEdge(active_edge);
1.194 + mapwin.updateEdge(Edge(INVALID));
1.195 + }
1.196 + }
1.197 + }
1.198 + break;
1.199 + }
1.200 + default:
1.201 + break;
1.202 }
1.203 + }
1.204 return false;
1.205 }
1.206
1.207 bool GraphDisplayerCanvas::nodeMapEditEventHandler(GdkEvent* e)
1.208 {
1.209 if(actual_tool==NODE_MAP_EDIT)
1.210 + {
1.211 + switch(e->type)
1.212 {
1.213 - switch(e->type)
1.214 - {
1.215 - case GDK_KEY_PRESS:
1.216 - //for Escape or Enter hide the displayed widget
1.217 - {
1.218 - switch(((GdkEventKey*)e)->keyval)
1.219 - {
1.220 - case GDK_Escape:
1.221 - entrywidget.hide();
1.222 - break;
1.223 - case GDK_Return:
1.224 - case GDK_KP_Enter:
1.225 - entrywidget.hide();
1.226 - break;
1.227 - default:
1.228 - break;
1.229 - }
1.230 -
1.231 - break;
1.232 - }
1.233 - case GDK_BUTTON_PRESS:
1.234 - //If the click happened on an edge we place the entrywidget there and fill in the value of the activated map at that edge.
1.235 - {
1.236 - //for determine, whether it was a node
1.237 - Node clicked_node=INVALID;
1.238 + case GDK_BUTTON_PRESS:
1.239 + {
1.240 + //for determine, whether it was a node
1.241 + Node clicked_node=INVALID;
1.242
1.243 - //find the activated item between texts
1.244 - active_item=(get_item_at(e->button.x, e->button.y));
1.245 - for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
1.246 - {
1.247 - //at the same time only one can be active
1.248 - if(nodetextmap[i]==active_item)
1.249 - {
1.250 - clicked_node=i;
1.251 - }
1.252 - }
1.253 + window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
1.254 + active_item=(get_item_at(clicked_x, clicked_y));
1.255
1.256 - //if there was not, search for it between nodes
1.257 - if(clicked_node==INVALID)
1.258 - {
1.259 - window_to_world (e->button.x, e->button.y, clicked_x, clicked_y);
1.260 - active_item=(get_item_at(clicked_x, clicked_y));
1.261 + //find the activated item between texts
1.262 + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
1.263 + {
1.264 + //at the same time only one can be active
1.265 + if(nodetextmap[i]==active_item)
1.266 + {
1.267 + clicked_node=i;
1.268 + }
1.269 + }
1.270
1.271 - for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
1.272 - {
1.273 - //at the same time only one can be active
1.274 - if(nodesmap[i]==active_item)
1.275 - {
1.276 - clicked_node=i;
1.277 - }
1.278 - }
1.279 - }
1.280 - //if it was really an edge...
1.281 - if(clicked_node!=INVALID)
1.282 - {
1.283 - // the id map is not editable
1.284 - if (nodemap_to_edit == "id") return 0;
1.285 - //If there is already edited edge, it has to be saved first
1.286 - if(entrywidget.is_visible())
1.287 - {
1.288 - GdkEvent * generated=new GdkEvent();
1.289 - generated->type=GDK_KEY_PRESS;
1.290 - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
1.291 - entryWidgetChangeHandler(generated);
1.292 - }
1.293 - //If the previous value could be saved, we can go further, otherwise not
1.294 - if(!entrywidget.is_visible())
1.295 - {
1.296 - //and there is activated map
1.297 - if(nodetextmap[clicked_node]->property_text().get_value()!="")
1.298 - {
1.299 - //activate the general variable for it
1.300 - active_node=clicked_node;
1.301 - //delete visible widget if there is
1.302 - if(canvasentrywidget)
1.303 - {
1.304 - delete(canvasentrywidget);
1.305 - }
1.306 + //if there was not, search for it between nodes
1.307 + if(clicked_node==INVALID)
1.308 + {
1.309 + for (NodeIt i(mapstorage.graph); i!=INVALID; ++i)
1.310 + {
1.311 + //at the same time only one can be active
1.312 + if(nodesmap[i]==active_item)
1.313 + {
1.314 + clicked_node=i;
1.315 + }
1.316 + }
1.317 + }
1.318
1.319 - //initialize the entry
1.320 - entrywidget.show();
1.321 + //if it was really a node...
1.322 + if(clicked_node!=INVALID)
1.323 + {
1.324 + // the id map is not editable
1.325 + if (nodemap_to_edit == "id") return 0;
1.326
1.327 - //fill in the correct value
1.328 - entrywidget.set_text(nodetextmap[active_node]->property_text().get_value());
1.329 + //and there is activated map
1.330 + if(nodetextmap[clicked_node]->property_text().get_value()!="")
1.331 + {
1.332 + //activate the general variable for it
1.333 + active_node=clicked_node;
1.334
1.335 - //replace and resize the entry to the activated node and put it in a Canvas::Widget to be able to display it on gdc
1.336 - xy<double> entry_coos;
1.337 - entry_coos.x=(nodetextmap[active_node])->property_x().get_value();
1.338 - entry_coos.x-=nodetextmap[active_node]->property_text_width().get_value()/2;
1.339 - entry_coos.y=(nodetextmap[active_node])->property_y().get_value();
1.340 - entry_coos.y-=nodetextmap[active_node]->property_text_height().get_value()*1.5/2;
1.341 - canvasentrywidget=new Gnome::Canvas::Widget(displayed_graph, entry_coos.x, entry_coos.y, entrywidget);
1.342 - canvasentrywidget->property_width().set_value(nodetextmap[active_node]->property_text_width().get_value()*4);
1.343 - canvasentrywidget->property_height().set_value(nodetextmap[active_node]->property_text_height().get_value()*1.5);
1.344 - }
1.345 - }
1.346 - }
1.347 - //if it was not an edge...
1.348 - else
1.349 - {
1.350 - //In this case the click did not happen on an edge
1.351 - //if there is visible entry we save the value in it
1.352 - //we pretend like an Enter was presse din the Entry widget
1.353 - GdkEvent * generated=new GdkEvent();
1.354 - generated->type=GDK_KEY_PRESS;
1.355 - ((GdkEventKey*)generated)->keyval=GDK_KP_Enter;
1.356 - entryWidgetChangeHandler(generated);
1.357 - }
1.358 - break;
1.359 - }
1.360 - default:
1.361 - break;
1.362 - }
1.363 + //create a dialog
1.364 + Gtk::Dialog dialog("Edit value", *parentwin, true);
1.365 + dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
1.366 + dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT);
1.367 + Gtk::VBox* vbox = dialog.get_vbox();
1.368 + Gtk::Adjustment adj(
1.369 + (*mapstorage.nodemap_storage[nodemap_to_edit])[active_node],
1.370 + -1000000.0,
1.371 + 1000000.0,
1.372 + 1.0, 5.0, 0.0);
1.373 + //TODO: find out why doesn't it work with
1.374 + //numeric_limits<double>::min/max
1.375 + Gtk::SpinButton spin(adj);
1.376 + spin.set_numeric(true);
1.377 + spin.set_digits(4);
1.378 + vbox->add(spin);
1.379 + spin.show();
1.380 + switch (dialog.run())
1.381 + {
1.382 + case Gtk::RESPONSE_NONE:
1.383 + case Gtk::RESPONSE_CANCEL:
1.384 + break;
1.385 + case Gtk::RESPONSE_ACCEPT:
1.386 + double new_value = spin.get_value();
1.387 + (*mapstorage.nodemap_storage[nodemap_to_edit])[active_node] =
1.388 + new_value;
1.389 + std::ostringstream ostr;
1.390 + ostr << new_value;
1.391 + nodetextmap[active_node]->property_text().set_value(
1.392 + ostr.str());
1.393 + //mapwin.updateNode(active_node);
1.394 + mapwin.updateNode(Node(INVALID));
1.395 + }
1.396 + }
1.397 + }
1.398 + break;
1.399 + }
1.400 + default:
1.401 + break;
1.402 }
1.403 + }
1.404 return false;
1.405 }
1.406
1.407 -bool GraphDisplayerCanvas::entryWidgetChangeHandler(GdkEvent* e)
1.408 -{
1.409 - if(entrywidget.is_visible())
1.410 - {
1.411 - if(e->type==GDK_KEY_PRESS)
1.412 - {
1.413 - switch(((GdkEventKey*)e)->keyval)
1.414 - {
1.415 - case GDK_Escape:
1.416 - entrywidget.hide();
1.417 - break;
1.418 - case GDK_KP_Enter:
1.419 - case GDK_Return:
1.420 - {
1.421 - //these variables check whether the text in the entry is valid
1.422 - bool valid_double=true;
1.423 - int point_num=0;
1.424 -
1.425 - //getting the value from the entry and converting it to double
1.426 - Glib::ustring mapvalue_str = entrywidget.get_text();
1.427 -
1.428 - char * mapvalue_ch=new char [mapvalue_str.length()];
1.429 - for(int i=0;i<(int)(mapvalue_str.length());i++)
1.430 - {
1.431 - if(((mapvalue_str[i]<'0')||(mapvalue_str[i]>'9'))&&(mapvalue_str[i]!='.'))
1.432 - {
1.433 - valid_double=false;
1.434 - }
1.435 - else
1.436 - {
1.437 - if(mapvalue_str[i]=='.')
1.438 - {
1.439 - point_num++;
1.440 - }
1.441 - }
1.442 - mapvalue_ch[i]=mapvalue_str[i];
1.443 - }
1.444 -
1.445 - //if the text in the entry was correct
1.446 - if((point_num<=1)&&(valid_double))
1.447 - {
1.448 - double mapvalue_d=atof(mapvalue_ch);
1.449 -
1.450 - //reconvert the double to string for the correct format
1.451 - std::ostringstream ostr;
1.452 - ostr << mapvalue_d;
1.453 -
1.454 - //save the value to the correct place
1.455 - switch(actual_tool)
1.456 - {
1.457 - case EDGE_MAP_EDIT:
1.458 - edgetextmap[active_edge]->property_text().set_value(ostr.str());
1.459 - (*(mapstorage.edgemap_storage)[edgemap_to_edit])[active_edge]=mapvalue_d;
1.460 - mapwin.updateEdge(active_edge);
1.461 - break;
1.462 - case NODE_MAP_EDIT:
1.463 - nodetextmap[active_node]->property_text().set_value(ostr.str());
1.464 - (*(mapstorage.nodemap_storage)[nodemap_to_edit])[active_node]=mapvalue_d;
1.465 - mapwin.updateNode(active_node);
1.466 - break;
1.467 - default:
1.468 - break;
1.469 - }
1.470 - entrywidget.hide();
1.471 - }
1.472 - //the text in the entry was not correct for a double
1.473 - else
1.474 - {
1.475 - std::cerr << "ERROR: only handling of double values is implemented yet!" << std::endl;
1.476 - }
1.477 -
1.478 - break;
1.479 - }
1.480 - default:
1.481 - break;
1.482 - }
1.483 - }
1.484 - }
1.485 - return false;
1.486 -}
1.487 -
1.488 void GraphDisplayerCanvas::deleteItem(Node node_to_delete)
1.489 {
1.490 delete(nodetextmap[node_to_delete]);
2.1 --- a/gui/graph_displayer_canvas.cc Tue Aug 23 16:27:59 2005 +0000
2.2 +++ b/gui/graph_displayer_canvas.cc Fri Aug 26 07:35:23 2005 +0000
2.3 @@ -4,9 +4,9 @@
2.4
2.5 GraphDisplayerCanvas::GraphDisplayerCanvas(MapStorage & ms, MapWin & mw, Gtk::Window * mainwin) :
2.6 nodesmap(ms.graph), edgesmap(ms.graph), edgetextmap(ms.graph),
2.7 - nodetextmap(ms.graph), displayed_graph(*(root()), 0, 0),
2.8 - canvasentrywidget(NULL), mapstorage(ms), isbutton(0), active_item(NULL),
2.9 - target_item(NULL), nodemap_to_edit(""), edgemap_to_edit(""), mapwin(mw)
2.10 + nodetextmap(ms.graph), displayed_graph(*(root()), 0, 0), mapstorage(ms),
2.11 + isbutton(0), active_item(NULL), target_item(NULL), nodemap_to_edit(""),
2.12 + edgemap_to_edit(""), mapwin(mw)
2.13 {
2.14 parentwin=mainwin;
2.15
2.16 @@ -14,9 +14,6 @@
2.17 actual_handler=signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::moveEventHandler), false);
2.18 actual_tool=MOVE;
2.19
2.20 - //setting event handler for the editor widget
2.21 - entrywidget.signal_event().connect(sigc::mem_fun(*this, &GraphDisplayerCanvas::entryWidgetChangeHandler), false);
2.22 -
2.23 active_node=INVALID;
2.24 active_edge=INVALID;
2.25 forming_edge=INVALID;
2.26 @@ -35,11 +32,6 @@
2.27 delete edgesmap[e];
2.28 delete edgetextmap[e];
2.29 }
2.30 -
2.31 - if(canvasentrywidget)
2.32 - {
2.33 - delete(canvasentrywidget);
2.34 - }
2.35 }
2.36
2.37 void GraphDisplayerCanvas::drawGraph()
3.1 --- a/gui/graph_displayer_canvas.h Tue Aug 23 16:27:59 2005 +0000
3.2 +++ b/gui/graph_displayer_canvas.h Fri Aug 26 07:35:23 2005 +0000
3.3 @@ -90,9 +90,6 @@
3.4 ///event handler for the case when node map editor tool is active
3.5 bool nodeMapEditEventHandler(GdkEvent*);
3.6
3.7 - ///event handler for the case when the entry widget is changed
3.8 - bool entryWidgetChangeHandler(GdkEvent*);
3.9 -
3.10 public:
3.11 ///Moves the text to new place
3.12 void textReposition(xy<double>);
3.13 @@ -140,12 +137,6 @@
3.14 ///Group of graphical elements of displayed_graph
3.15 Gnome::Canvas::Group displayed_graph;
3.16
3.17 - ///Map editor entry
3.18 - Gtk::Entry entrywidget;
3.19 -
3.20 - ///GnomeCanvas holder for entry
3.21 - Gnome::Canvas::Widget * canvasentrywidget;
3.22 -
3.23 ///Here we store the maps that can be displayed through properties.
3.24 MapStorage & mapstorage;
3.25
3.26 @@ -175,8 +166,7 @@
3.27 ///We need to store mapwin, to be able to ask the appropriate values for properties of new items.
3.28 MapWin & mapwin;
3.29
3.30 - ///We need to store the parent window to be able to set the focus on a given widget
3.31 - ///We will use this variable to activate the set focus on entry widget in the case of editing map values.
3.32 + ///pointer to the parent window
3.33 Gtk::Window * parentwin;
3.34
3.35 };
4.1 --- a/gui/map_win.cc Tue Aug 23 16:27:59 2005 +0000
4.2 +++ b/gui/map_win.cc Fri Aug 26 07:35:23 2005 +0000
4.3 @@ -81,7 +81,10 @@
4.4
4.5 for(;emsi!=ms.endOfNodeMaps();emsi++)
4.6 {
4.7 - listStrings.push_back(emsi->first);
4.8 + if ((emsi->first != "coordinates_x") && (emsi->first != "coordinates_y"))
4.9 + {
4.10 + listStrings.push_back(emsi->first);
4.11 + }
4.12 }
4.13
4.14 n_combo_array[i].set_popdown_strings(listStrings);
4.15 @@ -148,7 +151,10 @@
4.16
4.17 for(;emsi!=ms.endOfNodeMaps();emsi++)
4.18 {
4.19 - listStrings.push_back(emsi->first);
4.20 + if ((emsi->first != "coordinates_x") && (emsi->first != "coordinates_y"))
4.21 + {
4.22 + listStrings.push_back(emsi->first);
4.23 + }
4.24 }
4.25
4.26 n_combo_array[i].set_popdown_strings(listStrings);