SUMO - Simulation of Urban MObility
GNEAdditionalFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
7 // The Widget for add additional elements
8 /****************************************************************************/
9 // SUMO, Simulation of Urban MObility; see http://sumo.dlr.de/
10 // Copyright (C) 2001-2017 DLR (http://www.dlr.de/) and contributors
11 /****************************************************************************/
12 //
13 // This file is part of SUMO.
14 // SUMO is free software: you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation, either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 /****************************************************************************/
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #ifdef _MSC_VER
25 #include <windows_config.h>
26 #else
27 #include <config.h>
28 #endif
29 
30 #include <iostream>
40 
41 #include "GNEAdditionalFrame.h"
42 #include "GNEViewNet.h"
43 #include "GNEViewParent.h"
44 #include "GNENet.h"
45 #include "GNEJunction.h"
46 #include "GNEEdge.h"
47 #include "GNELane.h"
48 #include "GNECrossing.h"
49 #include "GNEUndoList.h"
50 #include "GNEChange_Selection.h"
51 #include "GNEAttributeCarrier.h"
52 #include "GNEChange_Additional.h"
53 #include "GNEAdditional.h"
54 #include "GNEAdditionalHandler.h"
55 
56 
57 // ===========================================================================
58 // FOX callback mapping
59 // ===========================================================================
60 
61 FXDEFMAP(GNEAdditionalFrame) GNEAdditionalMap[] = {
63 };
64 
65 FXDEFMAP(GNEAdditionalFrame::AdditionalAttributeSingle) GNEsingleAdditionalParameterMap[] = {
68 };
69 
70 FXDEFMAP(GNEAdditionalFrame::AdditionalAttributeList) GNEsingleAdditionalParameterListMap[] = {
73 };
74 
75 FXDEFMAP(GNEAdditionalFrame::AdditionalAttributes) GNEadditionalParametersMap[] = {
77 };
78 
79 FXDEFMAP(GNEAdditionalFrame::NeteditAttributes) GNEEditorParametersMap[] = {
84 };
85 
86 FXDEFMAP(GNEAdditionalFrame::SelectorParentAdditional) GNEadditionalParentSelectorMap[] = {
89 };
90 
91 FXDEFMAP(GNEAdditionalFrame::SelectorParentEdges) GNEedgeParentsSelectorMap[] = {
98 };
99 
100 FXDEFMAP(GNEAdditionalFrame::SelectorParentLanes) GNElaneParentsSelectorMap[] = {
107 };
108 
109 // Object implementation
110 FXIMPLEMENT(GNEAdditionalFrame, FXVerticalFrame, GNEAdditionalMap, ARRAYNUMBER(GNEAdditionalMap))
111 FXIMPLEMENT(GNEAdditionalFrame::AdditionalAttributeSingle, FXHorizontalFrame, GNEsingleAdditionalParameterMap, ARRAYNUMBER(GNEsingleAdditionalParameterMap))
112 FXIMPLEMENT(GNEAdditionalFrame::AdditionalAttributeList, FXVerticalFrame, GNEsingleAdditionalParameterListMap, ARRAYNUMBER(GNEsingleAdditionalParameterListMap))
113 FXIMPLEMENT(GNEAdditionalFrame::AdditionalAttributes, FXGroupBox, GNEadditionalParametersMap, ARRAYNUMBER(GNEadditionalParametersMap))
114 FXIMPLEMENT(GNEAdditionalFrame::NeteditAttributes, FXGroupBox, GNEEditorParametersMap, ARRAYNUMBER(GNEEditorParametersMap))
115 FXIMPLEMENT(GNEAdditionalFrame::SelectorParentAdditional, FXGroupBox, GNEadditionalParentSelectorMap, ARRAYNUMBER(GNEadditionalParentSelectorMap))
116 FXIMPLEMENT(GNEAdditionalFrame::SelectorParentEdges, FXGroupBox, GNEedgeParentsSelectorMap, ARRAYNUMBER(GNEedgeParentsSelectorMap))
117 FXIMPLEMENT(GNEAdditionalFrame::SelectorParentLanes, FXGroupBox, GNElaneParentsSelectorMap, ARRAYNUMBER(GNElaneParentsSelectorMap))
118 
119 // ===========================================================================
120 // method definitions
121 // ===========================================================================
122 
123 GNEAdditionalFrame::GNEAdditionalFrame(FXHorizontalFrame* horizontalFrameParent, GNEViewNet* viewNet):
124  GNEFrame(horizontalFrameParent, viewNet, "Additionals"),
125  myActualAdditionalType(SUMO_TAG_NOTHING) {
126 
127  // Create groupBox for myAdditionalMatchBox
128  myGroupBoxForMyAdditionalMatchBox = new FXGroupBox(myContentFrame, "Additional element", GUIDesignGroupBoxFrame);
129 
130  // Create FXListBox in myGroupBoxForMyAdditionalMatchBox
131  myAdditionalMatchBox = new FXComboBox(myGroupBoxForMyAdditionalMatchBox, GUIDesignComboBoxNCol, this, MID_GNE_MODE_ADDITIONAL_ITEM, GUIDesignComboBox);
132 
133  // Create additional parameters
134  myadditionalParameters = new GNEAdditionalFrame::AdditionalAttributes(myViewNet, myContentFrame);
135 
136  // Create Netedit parameter
137  myEditorParameters = new GNEAdditionalFrame::NeteditAttributes(myContentFrame);
138 
139  // Create create list for additional Set
140  myAdditionalParentSelector = new GNEAdditionalFrame::SelectorParentAdditional(myContentFrame, myViewNet);
141 
143  myedgeParentsSelector = new GNEAdditionalFrame::SelectorParentEdges(myContentFrame, myViewNet);
144 
146  mylaneParentsSelector = new GNEAdditionalFrame::SelectorParentLanes(myContentFrame, myViewNet);
147 
148  // Add options to myAdditionalMatchBox
150  myAdditionalMatchBox->appendItem(toString(i).c_str());
151  }
152 
153  // Set visible items
154  myAdditionalMatchBox->setNumVisible((int)myAdditionalMatchBox->getNumItems());
155 
156  // If there are additionals
158  // Set myActualAdditionalType and show
159  myActualAdditionalType = GNEAttributeCarrier::allowedAdditionalTags().front();
160  setParametersOfAdditional(myActualAdditionalType);
161  }
162 }
163 
164 
167 }
168 
169 
172  // check if current selected additional is valid
174  myViewNet->setStatusBarText("Current selected additional isn't valid.");
176  }
177 
178  // Declare map to keep values
179  std::map<SumoXMLAttr, std::string> valuesOfElement = myadditionalParameters->getAttributesAndValues();
180 
181  // limit position depending if show grid is enabled
182  Position currentPosition = abstractViewParent->snapToActiveGrid(abstractViewParent->getPositionInformation());
183 
184  // Declare pointer to netElements
185  GNEJunction* pointed_junction = NULL;
186  GNEEdge* pointed_edge = NULL;
187  GNELane* pointed_lane = NULL;
188  GNECrossing* pointed_crossing = NULL;
189 
190  // Check if additional should be placed over a junction
192  pointed_junction = dynamic_cast<GNEJunction*>(netElement);
193  if (pointed_junction != NULL) {
194  // show warning dialogbox and stop check if input parameters are valid
195  if (myadditionalParameters->areValuesValid() == false) {
198  }
199  // Get attribute junction
200  valuesOfElement[SUMO_ATTR_JUNCTION] = pointed_junction->getID();
201  // Generate id of element based on the junction
202  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_junction);
203  } else {
205  }
206  }
207  // Check if additional should be placed over a edge
209  // Due a edge is composed of lanes, its neccesary check if clicked element is an lane
210  if (dynamic_cast<GNELane*>(netElement) != NULL) {
211  pointed_edge = &(dynamic_cast<GNELane*>(netElement)->getParentEdge());
212  }
213  if (pointed_edge != NULL) {
214  // show warning dialogbox and stop check if input parameters are valid
215  if (myadditionalParameters->areValuesValid() == false) {
218  }
219  // Get attribute edge
220  valuesOfElement[SUMO_ATTR_EDGE] = pointed_edge->getID();
221  // Generate id of element based on the edge
222  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_edge);
223  } else {
225  }
226  }
227  // Check if additional should be placed over a lane
229  pointed_lane = dynamic_cast<GNELane*>(netElement);
230  if (pointed_lane != NULL) {
231  // show warning dialogbox and stop check if input parameters are valid
232  if (myadditionalParameters->areValuesValid() == false) {
235  }
236  // Get attribute lane
237  valuesOfElement[SUMO_ATTR_LANE] = pointed_lane->getID();
238  // Generate id of element based on the lane
239  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_lane);
240  } else {
242  }
243  }
244  // Check if additional should be placed over a crossing
246  pointed_crossing = dynamic_cast<GNECrossing*>(netElement);
247  if (pointed_crossing != NULL) {
248  // show warning dialogbox and stop check if input parameters are valid
249  if (myadditionalParameters->areValuesValid() == false) {
252  }
253  // Get attribute crossing
254  valuesOfElement[SUMO_ATTR_CROSSING] = pointed_crossing->getID();
255  // Generate id of element based on the crossing
256  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_crossing);
257  } else {
259  }
260  } else {
261  // Generate id of element
262  valuesOfElement[SUMO_ATTR_ID] = generateID(NULL);
263  }
264 
265  // show warning dialogbox and stop check if input parameters are valid
266  if (myadditionalParameters->areValuesValid() == false) {
269  }
270 
271  // Obtain position attribute
272  if (pointed_edge) {
273  // Obtain position of the mouse over edge
274  double positionOfTheMouseOverEdge = pointed_edge->getLanes().at(0)->getShape().nearest_offset_to_point2D(currentPosition);
275  // If element has a StartPosition and EndPosition over edge, extract attributes
277  // First check that current length is valid
279  // check if current reference point is valid
281  myadditionalParameters->showWarningMessage("Current selected reference point isn't valid");
283  } else {
284  // set start and end position
285  valuesOfElement[SUMO_ATTR_STARTPOS] = toString(setStartPosition(positionOfTheMouseOverEdge, myEditorParameters->getLength()));
286  valuesOfElement[SUMO_ATTR_ENDPOS] = toString(setEndPosition(pointed_edge->getLanes().at(0)->getLaneShapeLength(), positionOfTheMouseOverEdge, myEditorParameters->getLength()));
287  }
288  } else {
290  }
291  }
292  // Extract position of lane
293  valuesOfElement[SUMO_ATTR_POSITION] = toString(positionOfTheMouseOverEdge);
294  } else if (pointed_lane) {
295  // Obtain position of the mouse over lane
296  double positionOfTheMouseOverLane = pointed_lane->getShape().nearest_offset_to_point2D(currentPosition);
297  // If element has a StartPosition and EndPosition over lane, extract attributes
299  // First check that current length is valid
301  // check if current reference point is valid
303  myadditionalParameters->showWarningMessage("Current selected reference point isn't valid");
305  } else {
306  // set start and end position
307  valuesOfElement[SUMO_ATTR_STARTPOS] = toString(setStartPosition(positionOfTheMouseOverLane, myEditorParameters->getLength()));
308  valuesOfElement[SUMO_ATTR_ENDPOS] = toString(setEndPosition(pointed_lane->getLaneShapeLength(), positionOfTheMouseOverLane, myEditorParameters->getLength()));
309  }
310  } else {
312  }
313  }
314  // Extract position of lane
315  valuesOfElement[SUMO_ATTR_POSITION] = toString(positionOfTheMouseOverLane);
316  } else {
317  // get position in map
318  valuesOfElement[SUMO_ATTR_POSITION] = toString(currentPosition);
319  }
320 
321  // If additional has a interval defined by a begin or end, check that is valid
323  double begin = GNEAttributeCarrier::parse<double>(valuesOfElement[SUMO_ATTR_STARTTIME]);
324  double end = GNEAttributeCarrier::parse<double>(valuesOfElement[SUMO_ATTR_END]);
325  if (begin > end) {
326  myadditionalParameters->showWarningMessage("Attribute '" + toString(SUMO_ATTR_STARTTIME) + "' cannot be greater than attribute '" + toString(SUMO_ATTR_END) + "'.");
328  }
329  }
330 
331  // If additional own the attribute SUMO_ATTR_FILE but was't defined, will defined as <ID>.txt
333  valuesOfElement[SUMO_ATTR_FILE] = (valuesOfElement[SUMO_ATTR_ID] + ".txt");
334  }
335 
336  // If additional own the attribute SUMO_ATTR_OUTPUT but was't defined, will defined as <ID>.txt
338  valuesOfElement[SUMO_ATTR_OUTPUT] = (valuesOfElement[SUMO_ATTR_ID] + ".txt");
339  }
340 
341  // Save block value
343 
344  // If element belongst to an additional Set, get id of parent from myAdditionalParentSelector
348  } else {
349  myadditionalParameters->showWarningMessage("A " + toString(SUMO_TAG_E3DETECTOR) + " must be selected before insertion of " + toString(myActualAdditionalType) + ".");
351  }
352  }
353 
354  // If element own a list of SelectorParentEdges as attribute
357  // Declare a vector of Id's
358  std::vector<std::string> vectorOfIds;
359  // get Selected edges
360  std::vector<GNEEdge*> selectedEdges = myViewNet->getNet()->retrieveEdges(true);
361  // Iterate over selectedEdges and getId
362  for (auto i : selectedEdges) {
363  vectorOfIds.push_back(i->getID());
364  }
365  // Set saved Ids in attribute edges
366  valuesOfElement[SUMO_ATTR_EDGES] = joinToString(vectorOfIds, " ");
367  } else {
369  }
370  // check if attribute has at least one edge
371  if (valuesOfElement[SUMO_ATTR_EDGES] == "") {
372  myadditionalParameters->showWarningMessage("List of " + toString(SUMO_TAG_EDGE) + "s cannot be empty");
374  }
375  }
376 
377  // If element own a list of SelectorParentLanes as attribute
380  // Declare a vector of Id's
381  std::vector<std::string> vectorOfIds;
382  // get Selected lanes
383  std::vector<GNELane*> selectedLanes = myViewNet->getNet()->retrieveLanes(true);
384  // Iterate over selectedLanes and getId
385  for (auto i : selectedLanes) {
386  vectorOfIds.push_back(i->getID());
387  }
388  // Set saved Ids in attribute lanes
389  valuesOfElement[SUMO_ATTR_LANES] = joinToString(vectorOfIds, " ");
390  } else {
392  }
393  // check if attribute has at least a lane
394  if (valuesOfElement[SUMO_ATTR_LANES] == "") {
395  myadditionalParameters->showWarningMessage("List of " + toString(SUMO_TAG_LANE) + "s cannot be empty");
397  }
398  }
399 
400  // Create additional
402  return ADDADDITIONAL_SUCCESS;
403  } else {
405  }
406 }
407 
408 void
410  myViewNet->getUndoList()->p_begin("delete " + toString(additional->getTag()));
411  // save selection status
412  if (gSelected.isSelected(GLO_ADDITIONAL, additional->getGlID())) {
413  std::set<GUIGlID> deselected;
414  deselected.insert(additional->getGlID());
415  myViewNet->getUndoList()->add(new GNEChange_Selection(myViewNet->getNet(), std::set<GUIGlID>(), deselected, true), true);
416  }
417  // remove additional
418  myViewNet->getUndoList()->add(new GNEChange_Additional(additional, false), true);
420 }
421 
422 
423 long
424 GNEAdditionalFrame::onCmdSelectAdditional(FXObject*, FXSelector, void*) {
425  // declare flag to save if additional name is correct
426  bool additionalNameCorrect = false;
427  // set parameters of additional, if it's correct
429  if (toString(i) == myAdditionalMatchBox->getText().text()) {
430  myAdditionalMatchBox->setTextColor(FXRGB(0, 0, 0));
431  myadditionalParameters->show();
432  myEditorParameters->show();
434  additionalNameCorrect = true;
435  }
436  }
437  // if additional name isn't correct, hidde all
438  if (additionalNameCorrect == false) {
440  myAdditionalMatchBox->setTextColor(FXRGB(255, 0, 0));
441  myadditionalParameters->hide();
442  myEditorParameters->hide();
444  myedgeParentsSelector->hide();
445  mylaneParentsSelector->hide();
446  }
447  return 1;
448 }
449 
450 
451 void
453  // Show frame
454  GNEFrame::show();
455  // Update UseSelectedLane CheckBox
457  // Update UseSelectedLane CheckBox
459 }
460 
461 
462 void
464  // Set new actualAdditionalType
465  myActualAdditionalType = actualAdditionalType;
466  // Clear internal attributes
468  // Hide length field and reference point
470  // Iterate over attributes of myActualAdditionalType
474  } else if (i.first == SUMO_ATTR_ENDPOS) {
476  }
477  }
478  // if there are parmeters, show and Recalc groupBox
481  } else {
483  }
484  // Show myAdditionalParentSelector if we're adding a Entry/Exit
487  } else {
489  }
490  // Show SelectorParentEdges if we're adding an additional that own the attribute SUMO_ATTR_EDGES
493  } else {
495  }
496  // Show SelectorParentLanes if we're adding an additional that own the attribute SUMO_ATTR_LANES
499  } else {
501  }
502 }
503 
504 
505 std::string
508  if (netElement) {
509  // generate ID using netElement
510  while (myViewNet->getNet()->getAdditional(myActualAdditionalType, toString(myActualAdditionalType) + "_" + netElement->getID() + "_" + toString(additionalIndex)) != NULL) {
511  additionalIndex++;
512  }
513  return toString(myActualAdditionalType) + "_" + netElement->getID() + "_" + toString(additionalIndex);
514  } else {
515  // generate ID without netElement
516  while (myViewNet->getNet()->getAdditional(myActualAdditionalType, toString(myActualAdditionalType) + "_" + toString(additionalIndex)) != NULL) {
517  additionalIndex++;
518  }
519  return toString(myActualAdditionalType) + "_" + toString(additionalIndex);
520  }
521 }
522 
523 
524 double
525 GNEAdditionalFrame::setStartPosition(double positionOfTheMouseOverLane, double lengthOfAdditional) {
528  return positionOfTheMouseOverLane;
530  return positionOfTheMouseOverLane - lengthOfAdditional;
532  return positionOfTheMouseOverLane - lengthOfAdditional / 2;
533  default:
534  throw InvalidArgument("Reference Point invalid");
535  }
536 }
537 
538 
539 double
540 GNEAdditionalFrame::setEndPosition(double /*laneLength*/, double positionOfTheMouseOverLane, double lengthOfAdditional) {
543  return positionOfTheMouseOverLane + lengthOfAdditional;
545  return positionOfTheMouseOverLane;
547  return positionOfTheMouseOverLane + lengthOfAdditional / 2;
548  default:
549  throw InvalidArgument("Reference Point invalid");
550  }
551 }
552 
553 // ---------------------------------------------------------------------------
554 // GNEAdditionalFrame::AdditionalAttributeSingle - methods
555 // ---------------------------------------------------------------------------
556 
558  FXHorizontalFrame(parent, GUIDesignAuxiliarHorizontalFrame),
559  myAdditionalTag(SUMO_TAG_NOTHING),
560  myAdditionalAttr(SUMO_ATTR_NOTHING) {
561  // Create visual elements
562  myLabel = new FXLabel(this, "name", 0, GUIDesignLabelAttribute);
567  // Hide elements
568  hideParameter();
569 }
570 
571 
573 
574 
575 void
577  myAdditionalTag = additionalTag;
578  myAdditionalAttr = additionalAttr;
579  myInvalidValue = "";
580  myLabel->setText(toString(myAdditionalAttr).c_str());
581  myLabel->show();
582  myTextFieldStrings->setTextColor(FXRGB(0, 0, 0));
583  myTextFieldStrings->setText(value.c_str());
584  myTextFieldStrings->show();
585  show();
586 }
587 
588 
589 void
591  myAdditionalTag = additionalTag;
592  myAdditionalAttr = additionalAttr;
593  myInvalidValue = "";
594  myLabel->setText(toString(myAdditionalAttr).c_str());
595  myLabel->show();
596  myTextFieldInt->setTextColor(FXRGB(0, 0, 0));
597  myTextFieldInt->setText(toString(value).c_str());
598  myTextFieldInt->show();
599  show();
600 }
601 
602 
603 void
605  myAdditionalTag = additionalTag;
606  myAdditionalAttr = additionalAttr;
607  myInvalidValue = "";
608  myLabel->setText(toString(myAdditionalAttr).c_str());
609  myLabel->show();
610  myTextFieldReal->setTextColor(FXRGB(0, 0, 0));
611  myTextFieldReal->setText(toString(value).c_str());
612  myTextFieldReal->show();
613  show();
614 }
615 
616 
617 void
619  myAdditionalTag = additionalTag;
620  myAdditionalAttr = additionalAttr;
621  myInvalidValue = "";
622  myLabel->setText(toString(myAdditionalAttr).c_str());
623  myLabel->show();
624  if (value) {
625  myBoolCheckButton->setCheck(true);
626  myBoolCheckButton->setText("true");
627  } else {
628  myBoolCheckButton->setCheck(false);
629  myBoolCheckButton->setText("false");
630  }
631  myBoolCheckButton->show();
632  show();
633 }
634 
635 
636 void
640  myLabel->hide();
641  myTextFieldInt->hide();
642  myTextFieldReal->hide();
643  myTextFieldStrings->hide();
644  myBoolCheckButton->hide();
645  hide();
646 }
647 
648 
651  return myAdditionalTag;
652 }
653 
654 
657  return myAdditionalAttr;
658 }
659 
660 
661 std::string
664  return (myBoolCheckButton->getCheck() == 1) ? "true" : "false";
666  return myTextFieldInt->getText().text();
668  return myTextFieldReal->getText().text();
669  } else {
670  return myTextFieldStrings->getText().text();
671  }
672 }
673 
674 
675 const std::string&
677  return myInvalidValue;
678 }
679 
680 
681 long
683  // We assume that current value is valid
684  myInvalidValue = "";
685  // Check if format of current value of myTextField is correct
687  if (GNEAttributeCarrier::canParse<int>(myTextFieldInt->getText().text())) {
688  // convert string to int
689  int intValue = GNEAttributeCarrier::parse<int>(myTextFieldInt->getText().text());
690  // Check if int value must be positive
692  myInvalidValue = "'" + toString(myAdditionalAttr) + "' cannot be negative";
693  }
694  } else {
695  myInvalidValue = "'" + toString(myAdditionalAttr) + "' doesn't have a valid 'int' format";
696  }
698  // time attributes work as positive doubles
699  if (GNEAttributeCarrier::canParse<double>(myTextFieldReal->getText().text())) {
700  // convert string to double
701  double doubleValue = GNEAttributeCarrier::parse<double>(myTextFieldReal->getText().text());
702  // Check if parsed value is negative
703  if (doubleValue < 0) {
704  myInvalidValue = "'" + toString(myAdditionalAttr) + "' cannot be negative";
705  }
706  } else {
707  myInvalidValue = "'" + toString(myAdditionalAttr) + "' doesn't have a valid 'time' format";
708  }
710  if (GNEAttributeCarrier::canParse<double>(myTextFieldReal->getText().text())) {
711  // convert string to double
712  double doubleValue = GNEAttributeCarrier::parse<double>(myTextFieldReal->getText().text());
713  // Check if double value must be positive
715  myInvalidValue = "'" + toString(myAdditionalAttr) + "' cannot be negative";
716  // check if double value is a probability
717  } else if (GNEAttributeCarrier::isProbability(myAdditionalTag, myAdditionalAttr) && ((doubleValue < 0) || doubleValue > 1)) {
718  myInvalidValue = "'" + toString(myAdditionalAttr) + "' takes only values between 0 and 1";
719  }
720  } else {
721  myInvalidValue = "'" + toString(myAdditionalAttr) + "' doesn't have a valid 'float' format";
722  }
724  // check if filename format is valid
725  if (GNEAttributeCarrier::isValidFilename(myTextFieldStrings->getText().text()) == false) {
726  myInvalidValue = "input contains invalid characters for a filename";
727  }
728  }
729  // change color of text field depending of myCurrentValueValid
730  if (myInvalidValue.size() == 0) {
731  myTextFieldInt->setTextColor(FXRGB(0, 0, 0));
732  myTextFieldInt->killFocus();
733  myTextFieldReal->setTextColor(FXRGB(0, 0, 0));
734  myTextFieldReal->killFocus();
735  myTextFieldStrings->setTextColor(FXRGB(0, 0, 0));
736  myTextFieldStrings->killFocus();
737  } else {
738  // IF value of TextField isn't valid, change their color to Red
739  myTextFieldInt->setTextColor(FXRGB(255, 0, 0));
740  myTextFieldReal->setTextColor(FXRGB(255, 0, 0));
741  myTextFieldStrings->setTextColor(FXRGB(255, 0, 0));
742  }
743  // Update aditional frame
744  update();
745  return 1;
746 }
747 
748 
749 long
751  if (myBoolCheckButton->getCheck()) {
752  myBoolCheckButton->setText("true");
753  } else {
754  myBoolCheckButton->setText("false");
755  }
756  return 0;
757 }
758 
759 // ---------------------------------------------------------------------------
760 // GNEAdditionalFrame::AdditionalAttributeList - methods
761 // ---------------------------------------------------------------------------
762 
764  FXVerticalFrame(parent, GUIDesignAuxiliarHorizontalFrame),
767  myNumberOfVisibleTextfields(1),
768  myMaxNumberOfValuesInParameterList(20) {
769  // Create elements
770  for (int i = 0; i < myMaxNumberOfValuesInParameterList; i++) {
771  myHorizontalFrames.push_back(new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame));
772  myLabels.push_back(new FXLabel(myHorizontalFrames.back(), "name", 0, GUIDesignLabelAttribute));
774  }
775  // Create label Row
776  myHorizontalFrameButtons = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
777  myLabels.push_back(new FXLabel(myHorizontalFrameButtons, "Rows", 0, GUIDesignLabelAttribute));
778  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(myHorizontalFrameButtons, GUIDesignAuxiliarHorizontalFrame);
779  // Create add button
780  myAddButton = new FXButton(buttonsFrame, "", GUIIconSubSys::getIcon(ICON_ADD), this, MID_GNE_ADDROW, GUIDesignButtonIcon);
781  // Create remove buttons
783  // Hide all para meters
784  hideParameter();
785 }
786 
787 
789 
790 
791 void
792 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<int> /* value */) {
793  myAdditionalTag = additionalTag;
794  myAdditionalAttr = additionalAttr;
795  // @todo finish
796 }
797 
798 
799 void
800 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<double> /* value */, bool /*isTime*/) {
801  myAdditionalTag = additionalTag;
802  myAdditionalAttr = additionalAttr;
803  // @todo finish
804 }
805 
806 
807 void
808 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<bool> /* value */) {
809  myAdditionalTag = additionalTag;
810  myAdditionalAttr = additionalAttr;
811  // @todo finish
812 }
813 
814 
815 void
816 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<std::string> value) {
817  if ((int)value.size() < myMaxNumberOfValuesInParameterList) {
818  myAdditionalTag = additionalTag;
819  myAdditionalAttr = additionalAttr;
820  myNumberOfVisibleTextfields = (int)value.size();
821  if (myNumberOfVisibleTextfields == 0) {
823  }
824  for (int i = 0; i < myMaxNumberOfValuesInParameterList; i++) {
825  myLabels.at(i)->setText((toString(myAdditionalAttr) + ": " + toString(i)).c_str());
826  }
827  for (int i = 0; i < myNumberOfVisibleTextfields; i++) {
828  myHorizontalFrames.at(i)->show();
829  }
830  myHorizontalFrameButtons->show();
831  FXVerticalFrame::show();
832  }
833 }
834 
835 
836 void
840  for (int i = 0; i < (int)myHorizontalFrames.size(); i++) {
841  myHorizontalFrames.at(i)->hide();
842  }
843  myHorizontalFrameButtons->hide();
844  FXVerticalFrame::hide();
845 }
846 
847 
850  return myAdditionalTag;
851 }
852 
855  return myAdditionalAttr;
856 }
857 
858 
859 std::string
861  // Declare, fill and return a string with the list values
862  std::string value;
863  for (int i = 0; i < myNumberOfVisibleTextfields; i++) {
864  if (!myTextFields.at(i)->getText().empty()) {
865  value += (myTextFields.at(i)->getText().text() + std::string(" "));
866  }
867  }
868  return value;
869 }
870 
871 
872 bool
875  return true;
876 }
877 
878 
879 long
884  getParent()->recalc();
885  }
886  return 1;
887 }
888 
889 
890 long
892  if (myNumberOfVisibleTextfields > 1) {
895  myTextFields.at(myNumberOfVisibleTextfields)->setText("");
896  getParent()->recalc();
897  }
898  return 1;
899 }
900 
901 // ---------------------------------------------------------------------------
902 // GNEAdditionalFrame::NeteditAttributes- methods
903 // ---------------------------------------------------------------------------
904 
906  FXGroupBox(parent, "Internal attributes", GUIDesignGroupBoxFrame),
907  myViewNet(viewNet),
908  myIndexParameter(0),
909  myIndexParameterList(0),
910  maxNumberOfParameters(GNEAttributeCarrier::getHigherNumberOfAttributes()),
911  maxNumberOfListParameters(2) {
912 
913  // Create single parameters
914  for (int i = 0; i < maxNumberOfParameters; i++) {
916  }
917 
918  // Create single list parameters
919  for (int i = 0; i < maxNumberOfListParameters; i++) {
921  }
922 
923  // Create help button
924  helpAdditional = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
925 }
926 
927 
929 }
930 
931 
932 void
934  // Hidde al fields
935  for (int i = 0; i < maxNumberOfParameters; i++) {
936  myVectorOfsingleAdditionalParameter.at(i)->hideParameter();
937  }
938 
939  // Hidde al list fields
940  for (int i = 0; i < maxNumberOfListParameters; i++) {
941  myVectorOfsingleAdditionalParameterList.at(i)->hideParameter();
942  }
943 
944  // Reset indexs
946  myIndexParameter = 0;
947 }
948 
949 
950 void
952  // Set current additional
953  myAdditionalTag = additionalTag;
954  // If parameter is of type list
955  if (GNEAttributeCarrier::isList(myAdditionalTag, AdditionalAttributeSingle)) {
956  // If parameter can be show
958  // Check type of attribute list
959  if (GNEAttributeCarrier::isInt(myAdditionalTag, AdditionalAttributeSingle)) {
960  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<int> >(myAdditionalTag, AdditionalAttributeSingle));
961  } else if (GNEAttributeCarrier::isFloat(myAdditionalTag, AdditionalAttributeSingle)) {
962  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<double> >(myAdditionalTag, AdditionalAttributeSingle));
963  } else if (GNEAttributeCarrier::isTime(myAdditionalTag, AdditionalAttributeSingle)) {
964  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<double> >(myAdditionalTag, AdditionalAttributeSingle), true);
965  } else if (GNEAttributeCarrier::isBool(myAdditionalTag, AdditionalAttributeSingle)) {
966  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<bool> >(myAdditionalTag, AdditionalAttributeSingle));
967  } else if (GNEAttributeCarrier::isString(myAdditionalTag, AdditionalAttributeSingle)) {
968  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<std::string> >(myAdditionalTag, AdditionalAttributeSingle));
969  }
970  // Update index
972  } else {
973  WRITE_ERROR("Max number of list attributes reached (" + toString(maxNumberOfListParameters) + ").");
974  }
975  } else {
977  // Check type of attribute list
978  if (GNEAttributeCarrier::isInt(myAdditionalTag, AdditionalAttributeSingle)) {
979  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<int>(myAdditionalTag, AdditionalAttributeSingle));
980  } else if (GNEAttributeCarrier::isFloat(myAdditionalTag, AdditionalAttributeSingle) || GNEAttributeCarrier::isTime(myAdditionalTag, AdditionalAttributeSingle)) {
981  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<double>(myAdditionalTag, AdditionalAttributeSingle));
982  } else if (GNEAttributeCarrier::isBool(myAdditionalTag, AdditionalAttributeSingle)) {
983  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<bool>(myAdditionalTag, AdditionalAttributeSingle));
984  } else if (GNEAttributeCarrier::isString(myAdditionalTag, AdditionalAttributeSingle)) {
985  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<std::string>(myAdditionalTag, AdditionalAttributeSingle));
986  } else {
987  WRITE_WARNING("Attribute '" + toString(AdditionalAttributeSingle) + "' doesn't have a defined type. Check definition in GNEAttributeCarrier");
988  }
989  // Update index parameter
991  } else {
992  WRITE_ERROR("Max number of attributes reached (" + toString(maxNumberOfParameters) + ").");
993  }
994  }
995 }
996 
997 
998 void
1000  recalc();
1001  show();
1002 }
1003 
1004 
1005 void
1007  hide();
1008 }
1009 
1010 
1011 std::map<SumoXMLAttr, std::string>
1013  std::map<SumoXMLAttr, std::string> values;
1014  // get standar Parameters
1015  for (int i = 0; i < myIndexParameter; i++) {
1016  values[myVectorOfsingleAdditionalParameter.at(i)->getAttr()] = myVectorOfsingleAdditionalParameter.at(i)->getValue();
1017  }
1018  // get list parameters
1019  for (int i = 0; i < myIndexParameterList; i++) {
1020  values[myVectorOfsingleAdditionalParameterList.at(i)->getAttr()] = myVectorOfsingleAdditionalParameterList.at(i)->getListValues();
1021  }
1022  return values;
1023 }
1024 
1025 
1026 void
1028  std::string errorMessage;
1029  // iterate over standar parameters
1030  for (int i = 0; (i < myIndexParameter) && errorMessage.empty(); i++) {
1031  // Return string with the error if at least one of the parameter isn't valid
1032  std::string attributeValue = myVectorOfsingleAdditionalParameter.at(i)->isAttributeValid();
1033  if (attributeValue.size() != 0) {
1034  errorMessage = attributeValue;
1035  }
1036  }
1037  // iterate over list parameters
1038  for (int i = 0; i < myIndexParameterList; i++) {
1039  // Return false if at least one of the list parameter isn't valid
1040  if (myVectorOfsingleAdditionalParameterList.at(i)->isCurrentListValid() == false) {
1041  ;
1042  }
1043  }
1044  // show warning box if input parameters aren't invalid
1045  if (extra.size() == 0) {
1046  errorMessage = "Invalid input parameter of " + toString(myAdditionalTag) + ": " + errorMessage;
1047  } else {
1048  errorMessage = "Invalid input parameter of " + toString(myAdditionalTag) + ": " + extra;
1049  }
1050 
1051  // set message in status bar
1052  myViewNet->setStatusBarText(errorMessage);
1053  // Write Warning in console if we're in testing mode
1054  if (OptionsCont::getOptions().getBool("gui-testing-debug")) {
1055  WRITE_WARNING(errorMessage);
1056  }
1057 }
1058 
1059 
1060 bool
1062  // iterate over standar parameters
1063  for (int i = 0; i < myIndexParameter; i++) {
1064  // Return false if error message of attriuve isn't empty
1065  if (myVectorOfsingleAdditionalParameter.at(i)->isAttributeValid().size() != 0) {
1066  return false;
1067  }
1068  }
1069  // iterate over list parameters
1070  for (int i = 0; i < myIndexParameterList; i++) {
1071  // Return false if at least one of the list parameter isn't valid
1072  if (myVectorOfsingleAdditionalParameterList.at(i)->isCurrentListValid() == false) {
1073  return false;
1074  }
1075  }
1076  return true;
1077 }
1078 
1079 
1080 int
1083 }
1084 
1085 
1086 long
1088  // Create help dialog
1089  FXDialogBox* helpDialog = new FXDialogBox(this, ("Parameters of " + toString(myAdditionalTag)).c_str(), GUIDesignDialogBox);
1090  // Create FXTable
1091  FXTable* myTable = new FXTable(helpDialog, this, MID_TABLE, TABLE_READONLY);
1092  myTable->setVisibleRows((FXint)(myIndexParameter + myIndexParameterList));
1093  myTable->setVisibleColumns(3);
1094  myTable->setTableSize((FXint)(myIndexParameter + myIndexParameterList), 3);
1095  myTable->setBackColor(FXRGB(255, 255, 255));
1096  myTable->setColumnText(0, "Name");
1097  myTable->setColumnText(1, "Value");
1098  myTable->setColumnText(2, "Definition");
1099  myTable->getRowHeader()->setWidth(0);
1100  FXHeader* header = myTable->getColumnHeader();
1101  header->setItemJustify(0, JUSTIFY_CENTER_X);
1102  header->setItemSize(0, 120);
1103  header->setItemJustify(1, JUSTIFY_CENTER_X);
1104  header->setItemSize(1, 80);
1105  int maxSizeColumnDefinitions = 0;
1106  // Iterate over vector of additional parameters
1107  for (int i = 0; i < myIndexParameter; i++) {
1108  SumoXMLTag additionalTag = myVectorOfsingleAdditionalParameter.at(i)->getTag();
1109  SumoXMLAttr additionalAttr = myVectorOfsingleAdditionalParameter.at(i)->getAttr();
1110  // Set name of attribute
1111  myTable->setItem(i, 0, new FXTableItem(toString(additionalAttr).c_str()));
1112  // Set type
1113  FXTableItem* type = new FXTableItem("");
1114  if (GNEAttributeCarrier::isInt(additionalTag, additionalAttr)) {
1115  type->setText("int");
1116  } else if (GNEAttributeCarrier::isFloat(additionalTag, additionalAttr)) {
1117  type->setText("float");
1118  } else if (GNEAttributeCarrier::isTime(additionalTag, additionalAttr)) {
1119  type->setText("time");
1120  } else if (GNEAttributeCarrier::isBool(additionalTag, additionalAttr)) {
1121  type->setText("bool");
1122  } else if (GNEAttributeCarrier::isColor(additionalTag, additionalAttr)) {
1123  type->setText("color");
1124  } else if (GNEAttributeCarrier::isString(additionalTag, additionalAttr)) {
1125  type->setText("string");
1126  }
1127  type->setJustify(FXTableItem::CENTER_X);
1128  myTable->setItem(i, 1, type);
1129  // Set definition
1130  FXTableItem* definition = new FXTableItem(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).c_str());
1131  definition->setJustify(FXTableItem::LEFT);
1132  myTable->setItem(i, 2, definition);
1133  if ((int)GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size() > maxSizeColumnDefinitions) {
1134  maxSizeColumnDefinitions = int(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size());
1135  }
1136  }
1137  // Iterate over vector of additional parameters list
1138  for (int i = 0; i < myIndexParameterList; i++) {
1139  SumoXMLTag additionalTag = myVectorOfsingleAdditionalParameterList.at(i)->getTag();
1140  SumoXMLAttr additionalAttr = myVectorOfsingleAdditionalParameterList.at(i)->getAttr();
1141  // Set name of attribute
1142  myTable->setItem(i, 0, new FXTableItem(toString(additionalAttr).c_str()));
1143  // Set type
1144  FXTableItem* type = new FXTableItem("");
1145  if (GNEAttributeCarrier::isInt(additionalTag, additionalAttr)) {
1146  type->setText("list of integers");
1147  } else if (GNEAttributeCarrier::isFloat(additionalTag, additionalAttr)) {
1148  type->setText("list of floats");
1149  } else if (GNEAttributeCarrier::isTime(additionalTag, additionalAttr)) {
1150  type->setText("list of times");
1151  } else if (GNEAttributeCarrier::isBool(additionalTag, additionalAttr)) {
1152  type->setText("list of booleans");
1153  } else if (GNEAttributeCarrier::isString(additionalTag, additionalAttr)) {
1154  type->setText("list of strings");
1155  }
1156  type->setJustify(FXTableItem::CENTER_X);
1157  myTable->setItem(i, 1, type);
1158  // Set definition
1159  FXTableItem* definition = new FXTableItem(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).c_str());
1160  definition->setJustify(FXTableItem::LEFT);
1161  myTable->setItem(i, 2, definition);
1162  if ((int)GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size() > maxSizeColumnDefinitions) {
1163  maxSizeColumnDefinitions = int(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size());
1164  }
1165  }
1166  // Set size of column
1167  header->setItemJustify(2, JUSTIFY_CENTER_X);
1168  header->setItemSize(2, maxSizeColumnDefinitions * 6);
1169  // Button Close
1170  new FXButton(helpDialog, "OK\t\tclose", GUIIconSubSys::getIcon(ICON_ACCEPT), helpDialog, FXDialogBox::ID_ACCEPT, GUIDesignButtonOK);
1171  helpDialog->create();
1172  helpDialog->show();
1173  return 1;
1174 }
1175 
1176 // ---------------------------------------------------------------------------
1177 // GNEAdditionalFrame::NeteditAttributes- methods
1178 // ---------------------------------------------------------------------------
1179 
1181  FXGroupBox(parent, "Netedit attributes", GUIDesignGroupBoxFrame),
1182  myActualAdditionalReferencePoint(GNE_ADDITIONALREFERENCEPOINT_LEFT),
1183  myCurrentLengthValid(true) {
1184  // Create FXListBox for the reference points and fill it
1186  myReferencePointMatchBox->appendItem("reference left");
1187  myReferencePointMatchBox->appendItem("reference right");
1188  myReferencePointMatchBox->appendItem("reference center");
1189  // Create Frame for Length Label and textField
1190  FXHorizontalFrame* lengthFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1191  myLengthLabel = new FXLabel(lengthFrame, toString(SUMO_ATTR_LENGTH).c_str(), 0, GUIDesignLabelAttribute);
1193  myLengthTextField->setText("10");
1194  // Create Frame for block movement label and checkBox (By default disabled)
1195  FXHorizontalFrame* blockMovement = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1196  myBlockLabel = new FXLabel(blockMovement, "block move", 0, GUIDesignLabelAttribute);
1197  myBlockMovementCheckButton = new FXCheckButton(blockMovement, "false", this, MID_GNE_SET_BLOCKING_MOVEMENT, GUIDesignCheckButtonAttribute);
1198  myBlockMovementCheckButton->setCheck(false);
1199  // Create help button
1200  helpReferencePoint = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1201  // Set visible items
1202  myReferencePointMatchBox->setNumVisible((int)myReferencePointMatchBox->getNumItems());
1203 }
1204 
1205 
1207 
1208 
1209 void
1211  myLengthLabel->show();
1212  myLengthTextField->show();
1213  myReferencePointMatchBox->show();
1214 }
1215 
1216 
1217 void
1219  myLengthLabel->hide();
1220  myLengthTextField->hide();
1221  myReferencePointMatchBox->hide();
1222 }
1223 
1224 
1228 }
1229 
1230 
1231 double
1233  return GNEAttributeCarrier::parse<double>(myLengthTextField->getText().text());
1234 }
1235 
1236 
1237 bool
1239  return myBlockMovementCheckButton->getCheck() == 1 ? true : false;
1240 }
1241 
1242 
1243 bool
1245  return myCurrentLengthValid;
1246 }
1247 
1248 
1249 long
1251  // change color of text field depending of the input length
1252  if (GNEAttributeCarrier::canParse<double>(myLengthTextField->getText().text()) &&
1253  GNEAttributeCarrier::parse<double>(myLengthTextField->getText().text()) > 0) {
1254  myLengthTextField->setTextColor(FXRGB(0, 0, 0));
1255  myLengthTextField->killFocus();
1256  myCurrentLengthValid = true;
1257  } else {
1258  myLengthTextField->setTextColor(FXRGB(255, 0, 0));
1259  myCurrentLengthValid = false;
1260  }
1261  // Update aditional frame
1262  update();
1263  return 1;
1264 }
1265 
1266 
1267 long
1269  // Cast actual reference point type
1270  if (myReferencePointMatchBox->getText() == "reference left") {
1271  myReferencePointMatchBox->setTextColor(FXRGB(0, 0, 0));
1273  myLengthTextField->enable();
1274  } else if (myReferencePointMatchBox->getText() == "reference right") {
1275  myReferencePointMatchBox->setTextColor(FXRGB(0, 0, 0));
1277  myLengthTextField->enable();
1278  } else if (myReferencePointMatchBox->getText() == "reference center") {
1279  myLengthTextField->enable();
1280  myReferencePointMatchBox->setTextColor(FXRGB(0, 0, 0));
1282  myLengthTextField->enable();
1283  } else {
1284  myReferencePointMatchBox->setTextColor(FXRGB(255, 0, 0));
1286  myLengthTextField->disable();
1287  }
1288  return 1;
1289 }
1290 
1291 
1292 long
1294  if (myBlockMovementCheckButton->getCheck()) {
1295  myBlockMovementCheckButton->setText("true");
1296  } else {
1297  myBlockMovementCheckButton->setText("false");
1298  }
1299  return 1;
1300 }
1301 
1302 
1303 long
1305  FXDialogBox* helpDialog = new FXDialogBox(this, "Parameter editor Help", GUIDesignDialogBox);
1306  std::ostringstream help;
1307  help
1308  << "Referece point: Mark the initial position of the additional element.\n"
1309  << "Example: If you want to create a busStop with a length of 30 in the point 100 of the lane:\n"
1310  << "- Reference Left will create it with startPos = 70 and endPos = 100.\n"
1311  << "- Reference Right will create it with startPos = 100 and endPos = 130.\n"
1312  << "- Reference Center will create it with startPos = 85 and endPos = 115.\n"
1313  << "\n"
1314  << "Block movement: if is enabled, the created additional element will be blocked. i.e. cannot be moved with\n"
1315  << "the mouse. This option can be modified with the Inspector.";
1316  new FXLabel(helpDialog, help.str().c_str(), 0, GUIDesignLabelLeft);
1317  // "OK"
1318  new FXButton(helpDialog, "OK\t\tclose", GUIIconSubSys::getIcon(ICON_ACCEPT), helpDialog, FXDialogBox::ID_ACCEPT, GUIDesignButtonOK);
1319  helpDialog->create();
1320  helpDialog->show();
1321  return 1;
1322 }
1323 
1324 
1325 std::string
1327  // Obtain Id's of list
1328  std::string vectorOfIds;
1329  for (int i = 0; i < list->getNumItems(); i++) {
1330  if (list->isItemSelected(i)) {
1331  if (vectorOfIds.size() > 0) {
1332  vectorOfIds += " ";
1333  }
1334  vectorOfIds += (list->getItem(i)->getText()).text();
1335  }
1336  }
1337  return vectorOfIds;
1338 }
1339 
1340 
1341 
1342 // ---------------------------------------------------------------------------
1343 // GNEAdditionalFrame::SelectorParentAdditional - methods
1344 // ---------------------------------------------------------------------------
1345 
1347  FXGroupBox(parent, "Additional Set selector", GUIDesignGroupBoxFrame),
1348  myUniqueSelection(false),
1349  myViewNet(viewNet) {
1350 
1351  // Create label with the type of SelectorParentAdditional
1352  mySetLabel = new FXLabel(this, "No additional selected", 0, GUIDesignLabelLeftThick);
1353 
1354  // Create list
1355  myList = new FXList(this, this, MID_GNE_SELECTADDITIONALPARENT, GUIDesignList, 0, 0, 0, 100);
1356 
1357  // Create help button
1358  myHelpAdditionalParentSelector = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1359 
1360  // Hide List
1362 }
1363 
1364 
1366 
1367 
1368 std::string
1370  for (int i = 0; i < myList->getNumItems(); i++) {
1371  if (myList->isItemSelected(i)) {
1372  return myList->getItem(i)->getText().text();
1373  }
1374  }
1375  return "";
1376 }
1377 
1378 
1379 void
1381  myUniqueSelection = uniqueSelection;
1382  mySetLabel->setText(("" + toString(type)).c_str());
1383  myList->clearItems();
1384  // obtain all additionals of class "type"
1385  std::vector<GNEAdditional*> vectorOfAdditionalParents = myViewNet->getNet()->getAdditionals(type);
1386  // fill list with IDs of additionals
1387  for (auto i : vectorOfAdditionalParents) {
1388  myList->appendItem(i->getID().c_str());
1389  }
1390  show();
1391 }
1392 
1393 
1394 void
1396  hide();
1397 }
1398 
1399 
1400 long
1402  return 1;
1403 }
1404 
1405 
1406 long
1408  return 1;
1409 }
1410 
1411 
1412 // ---------------------------------------------------------------------------
1413 // GNEAdditionalFrame::SelectorParentEdges - methods
1414 // ---------------------------------------------------------------------------
1415 
1417  FXGroupBox(parent, "Edges", GUIDesignGroupBoxFrame),
1418  myViewNet(viewNet) {
1419  // Create menuCheck for selected edges
1420  myUseSelectedEdgesCheckButton = new FXCheckButton(this, ("Use selected " + toString(SUMO_TAG_EDGE) + "s").c_str(), this, MID_GNE_SHOWONLYSELECTEDEDGES, GUIDesignCheckButtonAttribute);
1421 
1422  // Create search box
1424 
1425  // Create list
1426  myList = new FXList(this, this, MID_GNE_SELECTEDGE, GUIDesignList, 0, 0, 0, 100);
1427 
1428  // Create horizontal frame
1429  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1430 
1431  // Create button for clear selection
1432  myClearEdgesSelection = new FXButton(buttonsFrame, "Clear", 0, this, MID_GNE_CLEAREDGESELECTION, GUIDesignButtonRectangular);
1433 
1434  // Create button for invert selection
1435  myInvertEdgesSelection = new FXButton(buttonsFrame, "Invert", 0, this, MID_GNE_INVERTEDGESELECTION, GUIDesignButtonRectangular);
1436 
1437  // Create help button
1438  myHelpedgeParentsSelector = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1439 
1440  // Hide List
1441  hideList();
1442 }
1443 
1444 
1446 
1447 
1448 std::string
1451 }
1452 
1453 
1454 void
1456  // clear list of egdge ids
1457  myList->clearItems();
1458  // get all edges of net
1460  std::vector<GNEEdge*> vectorOfEdges = myViewNet->getNet()->retrieveEdges(false);
1461  // iterate over edges of net
1462  for (auto i : vectorOfEdges) {
1463  // If search criterium is correct, then append ittem
1464  if (i->getID().find(search) != std::string::npos) {
1465  myList->appendItem(i->getID().c_str());
1466  }
1467  }
1468  // By default, CheckBox for useSelectedEdges isn't checked
1469  myUseSelectedEdgesCheckButton->setCheck(false);
1470  // Recalc Frame
1471  recalc();
1472  // Update Frame
1473  update();
1474  // Show dialog
1475  show();
1476 }
1477 
1478 
1479 void
1481  FXGroupBox::hide();
1482 }
1483 
1484 
1485 void
1487  // Enable or disable use selected edges
1488  if (myViewNet->getNet()->retrieveEdges(true).size() > 0) {
1490  } else {
1491  myUseSelectedEdgesCheckButton->disable();
1492  }
1493 }
1494 
1495 
1496 bool
1498  if (myUseSelectedEdgesCheckButton->getCheck()) {
1499  return true;
1500  } else {
1501  return false;
1502  }
1503 }
1504 
1505 
1506 long
1508  if (myUseSelectedEdgesCheckButton->getCheck()) {
1509  myEdgesSearch->hide();
1510  myList->hide();
1511  myClearEdgesSelection->hide();
1512  myInvertEdgesSelection->hide();
1513  myHelpedgeParentsSelector->hide();
1514  } else {
1515  myEdgesSearch->show();
1516  myList->show();
1517  myClearEdgesSelection->show();
1518  myInvertEdgesSelection->show();
1519  myHelpedgeParentsSelector->show();
1520  }
1521  // Recalc Frame
1522  recalc();
1523  // Update Frame
1524  update();
1525  return 1;
1526 }
1527 
1528 
1529 long
1531  // Show only Id's of SelectorParentEdges that contains the searched string
1532  showList(myEdgesSearch->getText().text());
1533  return 1;
1534 }
1535 
1536 
1537 long
1539  return 1;
1540 }
1541 
1542 
1543 long
1545  for (int i = 0; i < myList->getNumItems(); i++) {
1546  if (myList->getItem(i)->isSelected()) {
1547  myList->deselectItem(i);
1548  }
1549  }
1550  return 1;
1551 }
1552 
1553 
1554 long
1556  for (int i = 0; i < myList->getNumItems(); i++) {
1557  if (myList->getItem(i)->isSelected()) {
1558  myList->deselectItem(i);
1559  } else {
1560  myList->selectItem(i);
1561  }
1562  }
1563  return 1;
1564 }
1565 
1566 
1567 long
1569  std::cout << "IMPLEMENT" << std::endl;
1570  return 1;
1571 }
1572 
1573 // ---------------------------------------------------------------------------
1574 // GNEAdditionalFrame::SelectorParentLanes - methods
1575 // ---------------------------------------------------------------------------
1576 
1578  FXGroupBox(parent, "Lanes", GUIDesignGroupBoxFrame),
1579  myViewNet(viewNet) {
1580  // Create CheckBox for selected lanes
1581  myUseSelectedLanesCheckButton = new FXCheckButton(this, ("Use selected " + toString(SUMO_TAG_LANE) + "s").c_str(), this, MID_GNE_USESELECTEDLANES, GUIDesignCheckButtonAttribute);
1582 
1583  // Create search box
1585 
1586  // Create list
1587  myList = new FXList(this, this, MID_GNE_SELECTLANE, GUIDesignList, 0, 0, 0, 100);
1588 
1589  // Create horizontal frame
1590  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1591 
1592  // Create button for clear selection
1593  clearLanesSelection = new FXButton(buttonsFrame, "clear", 0, this, MID_GNE_CLEARLANESELECTION, GUIDesignButtonRectangular);
1594 
1595  // Create button for invert selection
1596  invertLanesSelection = new FXButton(buttonsFrame, "invert", 0, this, MID_GNE_INVERTLANESELECTION, GUIDesignButtonRectangular);
1597 
1598  // Create help button
1599  helpLanes = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1600 
1601  // Hide List
1602  hideList();
1603 }
1604 
1605 
1607 
1608 
1609 std::string
1612 }
1613 
1614 
1615 void
1617  myList->clearItems();
1618  std::vector<GNELane*> vectorOfLanes = myViewNet->getNet()->retrieveLanes(false);
1619  for (auto i : vectorOfLanes) {
1620  if (i->getID().find(search) != std::string::npos) {
1621  myList->appendItem(i->getID().c_str());
1622  }
1623  }
1624  // By default, CheckBox for useSelectedLanes isn't checked
1625  myUseSelectedLanesCheckButton->setCheck(false);
1626  // Show list
1627  show();
1628 }
1629 
1630 
1631 void
1633  hide();
1634 }
1635 
1636 
1637 void
1639  // Enable or disable use selected Lanes
1640  if (myViewNet->getNet()->retrieveLanes(true).size() > 0) {
1642  } else {
1643  myUseSelectedLanesCheckButton->disable();
1644  }
1645 }
1646 
1647 
1648 bool
1650  if (myUseSelectedLanesCheckButton->getCheck()) {
1651  return true;
1652  } else {
1653  return false;
1654  }
1655 }
1656 
1657 
1658 long
1660  if (myUseSelectedLanesCheckButton->getCheck()) {
1661  myLanesSearch->hide();
1662  myList->hide();
1663  clearLanesSelection->hide();
1664  invertLanesSelection->hide();
1665  helpLanes->hide();
1666  } else {
1667  myLanesSearch->show();
1668  myList->show();
1669  clearLanesSelection->show();
1670  invertLanesSelection->show();
1671  helpLanes->show();
1672  }
1673  // Recalc Frame
1674  recalc();
1675  // Update Frame
1676  update();
1677  return 1;
1678 }
1679 
1680 
1681 long
1683  // Show only Id's of SelectorParentLanes that contains the searched string
1684  showList(myLanesSearch->getText().text());
1685  return 1;
1686 }
1687 
1688 
1689 long
1691  return 1;
1692 }
1693 
1694 
1695 long
1697  for (int i = 0; i < myList->getNumItems(); i++) {
1698  if (myList->getItem(i)->isSelected()) {
1699  myList->deselectItem(i);
1700  }
1701  }
1702  return 1;
1703 }
1704 
1705 
1706 long
1708  for (int i = 0; i < myList->getNumItems(); i++) {
1709  if (myList->getItem(i)->isSelected()) {
1710  myList->deselectItem(i);
1711  } else {
1712  myList->selectItem(i);
1713  }
1714  }
1715  return 1;
1716 }
1717 
1718 
1719 long
1721  return 1;
1722 }
1723 
1724 /****************************************************************************/
double setStartPosition(double positionOfTheMouseOverLane, double lengthOfAdditional)
obtain the Start position values of StoppingPlaces and E2 detector over the lane
std::string getIdsSelected() const
get list of selecte id&#39;s in string format
double getLaneShapeLength() const
returns the length of the lane&#39;s shape
Definition: GNELane.cpp:730
double getLength() const
get value of length
int maxNumberOfListParameters
max number of parameters (Defined in constructor)
use selected lanes
Definition: GUIAppEnum.h:626
std::vector< GNELane * > retrieveLanes(bool onlySelected=false)
return all lanes
Definition: GNENet.cpp:944
SumoXMLTag
Numbers representing SUMO-XML - element names.
long onCmdSelectReferencePoint(FXObject *, FXSelector, void *)
Called when user enters another reference point.
SumoXMLAttr myAdditionalAttr
current XML attribute
additionalReferencePoint myActualAdditionalReferencePoint
actual additional reference point selected in the match Box
#define GUIDesignComboBoxNCol
number of column of every combo box
Definition: GUIDesigns.h:197
AddAdditionalResult addAdditional(GNENetElement *netElement, GUISUMOAbstractView *abstractViewParent)
add additional element
#define GUIDesignCheckButtonAttribute
checkButton without thick extended over the frame used for attributes
Definition: GUIDesigns.h:117
int maxNumberOfParameters
max number of parameters (Defined in constructor)
invert selection of edges
Definition: GUIAppEnum.h:622
static bool isFloat(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is numerical of type float
GNEViewNet * myViewNet
pointer to viewNet
long onCmdHelp(FXObject *, FXSelector, void *)
Called when help button is pressed.
FXCheckButton * myUseSelectedLanesCheckButton
CheckBox for selected lanes.
bool isUseSelectedEdgesEnable() const
get status of checkBox UseSelectedEdges
search lane
Definition: GUIAppEnum.h:624
FXButton * myRemoveButton
Button to decrease the number of textFields.
long onCmdSelectLane(FXObject *, FXSelector, void *)
called when user select a lane of the list
begin/end of the description of a single lane
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
int getNumberOfAddedAttributes() const
get number of added attributes
GNEAdditionalFrame::AdditionalAttributes * myadditionalParameters
additional internal attributes
FXDEFMAP(GNEAdditionalFrame) GNEAdditionalMap[]
int myNumberOfVisibleTextfields
number of visible text fields
bool isCurrentLengthValid() const
check if current length is valid
std::string getValue() const
return value
FXList * myList
List of additional sets.
FXTextField * myTextFieldStrings
textField to modify the default value of string parameters
FXComboBox * myReferencePointMatchBox
match box with the list of reference points
SumoXMLAttr getAttr() const
return attribute of list
static bool buildAdditional(GNEViewNet *viewNet, bool allowUndoRedo, SumoXMLTag tag, std::map< SumoXMLAttr, std::string > values)
Build additionals.
double setEndPosition(double laneLength, double positionOfTheMouseOverLane, double lengthOfAdditional)
obtain the End position values of StoppingPlaces and E2 detector over the lane
FXCheckButton * myBoolCheckButton
check button to enable/disable the value of boolean parameters
long onCmdHelp(FXObject *, FXSelector, void *)
FXButton * myClearEdgesSelection
button for clear selection
std::string myInvalidValue
string which indicates the reason due current value is invalid
void remove2Update()
Removes the dialog to be updated.
static bool isPositive(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is only Positive (i.e. cannot take negative values)
void hideList()
hide SelectorParentLanes
long onCmdRemoveRow(FXObject *, FXSelector, void *)
add a new row int the list
long onCmdSelectAdditional(FXObject *, FXSelector, void *)
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
int myIndexParameter
Index for myVectorOfsingleAdditionalParameter.
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:54
long onCmdAddRow(FXObject *, FXSelector, void *)
void p_begin(const std::string &description)
Begin undo command sub-group. This begins a new group of commands that are treated as a single comman...
Definition: GNEUndoList.cpp:85
FXTextField * myLengthTextField
textField for length
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
show only selected edge in a list
Definition: GUIAppEnum.h:614
Position snapToActiveGrid(const Position &pos) const
Returns a position that is mapped to the closest grid point if the grid is active.
static bool isValidFilename(const std::string &value)
true if value is a valid file value
clear selection of edges
Definition: GUIAppEnum.h:620
long onCmdTypeInSearchBox(FXObject *, FXSelector, void *)
called when user type in search box
GNEViewNet * myViewNet
viewNet associated to GNEAdditionalFrame
static const std::vector< std::pair< SumoXMLAttr, std::string > > & allowedAttributes(SumoXMLTag tag)
get all editable attributes for tag and their default values.
GUIGlID getGlID() const
Returns the numerical id of the object.
void setParametersOfAdditional(SumoXMLTag actualAdditionalType)
set parameters depending of the new additionalType
bool myCurrentLengthValid
Flag to check if current length is valid.
int getNumberOfAdditionals(SumoXMLTag type=SUMO_TAG_NOTHING) const
Returns the number of additionals of the net.
Definition: GNENet.cpp:1715
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:200
FXTextField * myEdgesSearch
text field for search edge IDs
remove row
Definition: GUIAppEnum.h:602
void showList(std::string search="")
Show list of SelectorParentEdges.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:65
const std::string & isAttributeValid() const
returns a empty string if current value is valid, a string with information about invalid value in ot...
an e3 entry point
FXButton * myInvertEdgesSelection
button for invert selection
std::string getIdSelected() const
get if currently additional Set
bool isBlockEnabled() const
check if block is enabled
GNEUndoList * getUndoList() const
get the undoList object
additional match box messages
Definition: GUIAppEnum.h:464
static bool isString(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is of type string
#define GUIDesignComboBox
Definition: GUIDesigns.h:187
GNEViewNet * myViewNet
the window to inform when the tls is modfied
Definition: GNEFrame.h:95
FXCheckButton * myUseSelectedEdgesCheckButton
CheckBox for selected edges.
bool isUseSelectedLanesEnable() const
get status of checkBox UseSelectedLanes
static bool isInt(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is numerical or type int
select edge
Definition: GUIAppEnum.h:618
static bool isTime(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is time
FXButton * clearLanesSelection
button for clear selection
std::map< SumoXMLAttr, std::string > getAttributesAndValues() const
get attributes and their values
#define GUIDesignList
design for FXLists
Definition: GUIDesigns.h:419
FXLabel * myLengthLabel
Label for length.
void hideLengthFieldAndReferecePoint()
hide length field
long onCmdSetAttribute(FXObject *, FXSelector, void *)
#define GUIDesignTextField
Definition: GUIDesigns.h:41
the edges of a route
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:56
static bool hasAttribute(SumoXMLTag tag, SumoXMLAttr attr)
check if an element with certain tag has a certain attribute
The Table.
Definition: GUIAppEnum.h:291
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
Definition: GNECrossing.h:52
void addAttribute(SumoXMLTag additionalTag, SumoXMLAttr AdditionalAttributeSingle)
add attribute
add row
Definition: GUIAppEnum.h:600
static bool isColor(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is of type color for a certain tag
void p_end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise, the sub-group will be added as a new command into parent group. A matching begin() must have been called previously.
Definition: GNEUndoList.cpp:92
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:46
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:244
an e3 exit point
FXList * myList
List of SelectorParentLanes.
std::vector< FXLabel * > myLabels
vector with with the name of every parameter
long onCmdUseSelectedEdges(FXObject *, FXSelector, void *)
int myIndexParameterList
index for myIndexParameterList
static bool isFilename(SumoXMLTag tag, SumoXMLAttr attr)
whether a string attribute is a filename
long onCmdInvertSelection(FXObject *, FXSelector, void *)
called when invert selection button is pressed
attribute block movement
Definition: GUIAppEnum.h:588
SumoXMLTag myActualAdditionalType
actual additional type selected in the match Box
FXButton * myHelpAdditionalParentSelector
button for help
clear selection of lanes
Definition: GUIAppEnum.h:630
long onCmdHelp(FXObject *, FXSelector, void *)
Called when help button is pressed.
void removeAdditional(GNEAdditional *additional)
remove an additional element previously added
block movement of a graphic element
static T getDefaultValue(SumoXMLTag tag, SumoXMLAttr attr)
return the default value of the attribute of an element
SumoXMLAttr myAdditionalAttr
current XML attribute
invalid attribute
~GNEAdditionalFrame()
Destructor.
FXLabel * myBlockLabel
Label for block movement.
FXComboBox * myAdditionalMatchBox
combo box with the list of additional elements
FXTextField * myLanesSearch
text field for search lane IDs
GNEAdditionalFrame::NeteditAttributes * myEditorParameters
Netedit parameter.
void showWarningMessage(std::string extra="") const
show warning message with information about non-valid attributes
long onCmdClearSelection(FXObject *, FXSelector, void *)
called when clear selection button is pressed
const std::string getID() const
function to support debugging
#define GUIDesignButtonRectangular
little button rectangular (46x23) used in frames (For example, in "help" buttons) ...
Definition: GUIDesigns.h:63
std::vector< FXTextField * > myTextFields
vector textField to modify the value of parameter
additionalReferencePoint getActualReferencePoint() const
get actual reference point
void hideListOfAdditionals()
hide SelectorParentAdditional
#define GUIDesignButtonIcon
button only with icon (23x23)
Definition: GUIDesigns.h:66
FXButton * myAddButton
Button to increase the number of textFields.
begin/end of the description of an edge
std::vector< GNEAdditional * > getAdditionals(SumoXMLTag type=SUMO_TAG_NOTHING) const
get vector with additionals
Definition: GNENet.cpp:1703
GNEAdditionalFrame::SelectorParentLanes * mylaneParentsSelector
list of SelectorParentLanes
long onCmdClearSelection(FXObject *, FXSelector, void *)
called when clear selection button is pressed
GNEAdditionalFrame::SelectorParentEdges * myedgeParentsSelector
list of SelectorParentEdges
void showList(std::string search="")
Show list of SelectorParentLanes.
invert selection of lanes
Definition: GUIAppEnum.h:632
FXList * myList
List of SelectorParentEdges.
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:206
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:58
static bool isUnique(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is unique (may not be edited for a multi-selection and don&#39;t have a default valu...
bool areValuesValid() const
check if parameters of attributes are valid
search edge
Definition: GUIAppEnum.h:612
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition: GUIDesigns.h:50
compound additional
SumoXMLTag myAdditionalTag
current XML attribute
FXLabel * myLabel
lael with the name of the parameter
GNEAdditional * getAdditional(SumoXMLTag type, const std::string &id) const
Returns the named additional.
Definition: GNENet.cpp:1680
AddAdditionalResult
FOX-declaration.
long onCmdSetBlocking(FXObject *, FXSelector, void *)
Called when user changes the checkbox "set blocking".
SumoXMLTag myAdditionalTag
current additional tag
std::string generateID(GNENetElement *netElement) const
generate a ID for an additiona element
const PositionVector & getShape() const
returns the shape of the lane
Definition: GNELane.cpp:625
const std::vector< GNELane * > & getLanes()
returns a reference to the lane vector
Definition: GNEEdge.cpp:599
virtual void show()
show Frame
Definition: GNEFrame.cpp:98
static bool isProbability(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is a probability (i.e. oly can values between [0, 1])
long onCmdUseSelectedLanes(FXObject *, FXSelector, void *)
#define GUIDesignDialogBox
Definition: GUIDesigns.h:393
FXLabel * mySetLabel
Label with the name of additional.
static const std::vector< SumoXMLTag > & allowedAdditionalTags()
get all editable for tag additional elements
void show()
show additional frame and update use selected edges/lanes
std::vector< GNEEdge * > retrieveEdges(bool onlySelected=false)
return all edges
Definition: GNENet.cpp:932
void showParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::string value)
show name and value of attribute of type string
void showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector< int > value)
show name and value of parameters of type int
An Element which don&#39;t belongs to GNENet but has influency in the simulation.
Definition: GNEAdditional.h:62
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
Definition: GUIDesigns.h:219
static bool isBool(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is of type bool for a certain tag
weights: time range end
GNEViewNet * myViewNet
viewNet associated to GNEAdditionalFrame
std::string getListValues()
return the value of list
bool myUniqueSelection
flag to check if only a single parent is allowed
void showListOfAdditionals(SumoXMLTag type, bool uniqueSelection)
Show list of SelectorParentAdditional.
long onCmdSetBooleanAttribute(FXObject *, FXSelector, void *)
called when user change the value of myBoolCheckButton
void updateUseSelectedEdges()
Update use selectedEdges.
static std::string getDefinition(SumoXMLTag tag, SumoXMLAttr attr)
return definition of a certain SumoXMLAttr
GNENet * getNet() const
get the net object
#define GUIDesignTextFieldInt
text field extended over Frame with thick frame and limited to Integers
Definition: GUIDesigns.h:44
virtual void hide()
hide Frame
Definition: GNEFrame.cpp:107
long onCmdHelp(FXObject *, FXSelector, void *)
Called when user press the help button.
void text()
Definition: gl2psTest.c:260
SumoXMLTag getTag() const
return tag of list
#define GUIDesignTextFieldReal
text field extended over Frame with thick frame and limited to Doubles/doubles
Definition: GUIDesigns.h:47
void hideList()
hide SelectorParentEdges
#define GUIDesignButtonOK
Definition: GUIDesigns.h:98
SumoXMLTag getTag() const
get XML Tag assigned to this object
void setStatusBarText(const std::string &text)
set staturBar text
Definition: GNEViewNet.cpp:298
long onCmdInvertSelection(FXObject *, FXSelector, void *)
called when invert selection button is pressed
void showLengthFieldAndReferecePoint()
show length field and reference point
FXButton * invertLanesSelection
button for invert selection
parent of an additional element
long onCmdHelp(FXObject *, FXSelector, void *)
Called when help button is pressed.
bool isCurrentListValid() const
check that current list is valid
#define GUIDesignLabelLeft
Definition: GUIDesigns.h:144
help button
Definition: GUIAppEnum.h:404
GNEAdditionalFrame::SelectorParentAdditional * myAdditionalParentSelector
list of additional Set
FXTextField * myTextFieldInt
textField to modify the default value of int/float/string parameters
Position getPositionInformation() const
Returns the cursor&#39;s x/y position within the network.
static std::string getIdsSelected(const FXList *list)
get list of selecte id&#39;s in string format
std::string getIdsSelected() const
get list of selecte id&#39;s in string format
select additional parent
Definition: GUIAppEnum.h:610
#define GUIDesignLabelAttribute
label extended over the matrix column with thick frame
Definition: GUIDesigns.h:165
long onCmdSetLength(FXObject *, FXSelector, void *)
FXHorizontalFrame * myHorizontalFrameButtons
horizontal frame for buttons
std::vector< FXHorizontalFrame * > myHorizontalFrames
Vector with HorizontalFrames.
GUISelectedStorage gSelected
A global holder of selected objects.
long onCmdTypeInSearchBox(FXObject *, FXSelector, void *)
called when user type in search box
int myMaxNumberOfValuesInParameterList
Number max of values in a parameter of type list.
GNEViewNet * myViewNet
viewNet associated to GNEAdditionalFrame
long onCmdSelectAdditionalParent(FXObject *, FXSelector, void *)
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
std::vector< AdditionalAttributeSingle * > myVectorOfsingleAdditionalParameter
vector with the additional parameters
std::vector< AdditionalAttributeList * > myVectorOfsingleAdditionalParameterList
vector with the additional parameters of type list
#define GUIDesignLabelLeftThick
label extended over frame with thick and with text justify to left
Definition: GUIDesigns.h:156
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
Definition: ToString.h:237
select lane
Definition: GUIAppEnum.h:628
long onCmdSelectEdge(FXObject *, FXSelector, void *)
called when user select a edge of the list
static bool isList(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is of type bool
FXCheckButton * myBlockMovementCheckButton
checkBox for block movement
FXTextField * myTextFieldReal
textField to modify the default value of real/times parameters
FXButton * helpReferencePoint
Button for help about the reference point.
FXButton * myHelpedgeParentsSelector
button for help