SUMO - Simulation of Urban MObility
GNEAdditionalFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
17 // The Widget for add additional elements
18 /****************************************************************************/
19 
20 // ===========================================================================
21 // included modules
22 // ===========================================================================
23 #ifdef _MSC_VER
24 #include <windows_config.h>
25 #else
26 #include <config.h>
27 #endif
28 
29 #include <iostream>
39 
40 #include "GNEAdditionalFrame.h"
41 #include "GNEViewNet.h"
42 #include "GNEViewParent.h"
43 #include "GNENet.h"
44 #include "GNEJunction.h"
45 #include "GNEEdge.h"
46 #include "GNELane.h"
47 #include "GNECrossing.h"
48 #include "GNEUndoList.h"
49 #include "GNEChange_Selection.h"
50 #include "GNEAttributeCarrier.h"
51 #include "GNEChange_Additional.h"
52 #include "GNEAdditional.h"
53 #include "GNEAdditionalHandler.h"
54 
55 
56 // ===========================================================================
57 // FOX callback mapping
58 // ===========================================================================
59 
60 FXDEFMAP(GNEAdditionalFrame) GNEAdditionalMap[] = {
62 };
63 
64 FXDEFMAP(GNEAdditionalFrame::AdditionalAttributeSingle) GNEsingleAdditionalParameterMap[] = {
67 };
68 
69 FXDEFMAP(GNEAdditionalFrame::AdditionalAttributeList) GNEsingleAdditionalParameterListMap[] = {
72 };
73 
74 FXDEFMAP(GNEAdditionalFrame::AdditionalAttributes) GNEadditionalParametersMap[] = {
76 };
77 
78 FXDEFMAP(GNEAdditionalFrame::NeteditAttributes) GNEEditorParametersMap[] = {
83 };
84 
85 FXDEFMAP(GNEAdditionalFrame::SelectorParentAdditional) GNEadditionalParentSelectorMap[] = {
88 };
89 
90 FXDEFMAP(GNEAdditionalFrame::SelectorParentEdges) GNEedgeParentsSelectorMap[] = {
97 };
98 
99 FXDEFMAP(GNEAdditionalFrame::SelectorParentLanes) GNElaneParentsSelectorMap[] = {
106 };
107 
108 // Object implementation
109 FXIMPLEMENT(GNEAdditionalFrame, FXVerticalFrame, GNEAdditionalMap, ARRAYNUMBER(GNEAdditionalMap))
110 FXIMPLEMENT(GNEAdditionalFrame::AdditionalAttributeSingle, FXHorizontalFrame, GNEsingleAdditionalParameterMap, ARRAYNUMBER(GNEsingleAdditionalParameterMap))
111 FXIMPLEMENT(GNEAdditionalFrame::AdditionalAttributeList, FXVerticalFrame, GNEsingleAdditionalParameterListMap, ARRAYNUMBER(GNEsingleAdditionalParameterListMap))
112 FXIMPLEMENT(GNEAdditionalFrame::AdditionalAttributes, FXGroupBox, GNEadditionalParametersMap, ARRAYNUMBER(GNEadditionalParametersMap))
113 FXIMPLEMENT(GNEAdditionalFrame::NeteditAttributes, FXGroupBox, GNEEditorParametersMap, ARRAYNUMBER(GNEEditorParametersMap))
114 FXIMPLEMENT(GNEAdditionalFrame::SelectorParentAdditional, FXGroupBox, GNEadditionalParentSelectorMap, ARRAYNUMBER(GNEadditionalParentSelectorMap))
115 FXIMPLEMENT(GNEAdditionalFrame::SelectorParentEdges, FXGroupBox, GNEedgeParentsSelectorMap, ARRAYNUMBER(GNEedgeParentsSelectorMap))
116 FXIMPLEMENT(GNEAdditionalFrame::SelectorParentLanes, FXGroupBox, GNElaneParentsSelectorMap, ARRAYNUMBER(GNElaneParentsSelectorMap))
117 
118 // ===========================================================================
119 // method definitions
120 // ===========================================================================
121 
122 GNEAdditionalFrame::GNEAdditionalFrame(FXHorizontalFrame* horizontalFrameParent, GNEViewNet* viewNet):
123  GNEFrame(horizontalFrameParent, viewNet, "Additionals"),
124  myActualAdditionalType(SUMO_TAG_NOTHING) {
125 
126  // Create groupBox for myAdditionalMatchBox
127  myGroupBoxForMyAdditionalMatchBox = new FXGroupBox(myContentFrame, "Additional element", GUIDesignGroupBoxFrame);
128 
129  // Create FXListBox in myGroupBoxForMyAdditionalMatchBox
130  myAdditionalMatchBox = new FXComboBox(myGroupBoxForMyAdditionalMatchBox, GUIDesignComboBoxNCol, this, MID_GNE_ADDITIONALFRAME_SELECTADDITIONALTYPE, GUIDesignComboBox);
131 
132  // Create additional parameters
133  myadditionalParameters = new GNEAdditionalFrame::AdditionalAttributes(myViewNet, myContentFrame);
134 
135  // Create Netedit parameter
136  myEditorParameters = new GNEAdditionalFrame::NeteditAttributes(myContentFrame);
137 
138  // Create create list for additional Set
139  myAdditionalParentSelector = new GNEAdditionalFrame::SelectorParentAdditional(myContentFrame, myViewNet);
140 
142  myedgeParentsSelector = new GNEAdditionalFrame::SelectorParentEdges(myContentFrame, myViewNet);
143 
145  mylaneParentsSelector = new GNEAdditionalFrame::SelectorParentLanes(myContentFrame, myViewNet);
146 
147  // Add options to myAdditionalMatchBox
149  myAdditionalMatchBox->appendItem(toString(i).c_str());
150  }
151 
152  // Set visible items
153  myAdditionalMatchBox->setNumVisible((int)myAdditionalMatchBox->getNumItems());
154 
155  // If there are additionals
157  // Set myActualAdditionalType and show
158  myActualAdditionalType = GNEAttributeCarrier::allowedAdditionalTags().front();
159  setParametersOfAdditional(myActualAdditionalType);
160  }
161 }
162 
163 
166 }
167 
168 
171  // check if current selected additional is valid
173  myViewNet->setStatusBarText("Current selected additional isn't valid.");
175  }
176 
177  // Declare map to keep values
178  std::map<SumoXMLAttr, std::string> valuesOfElement = myadditionalParameters->getAttributesAndValues();
179 
180  // limit position depending if show grid is enabled
181  Position currentPosition = abstractViewParent->snapToActiveGrid(abstractViewParent->getPositionInformation());
182 
183  // Declare pointer to netElements
184  GNEJunction* pointed_junction = NULL;
185  GNEEdge* pointed_edge = NULL;
186  GNELane* pointed_lane = NULL;
187  GNECrossing* pointed_crossing = NULL;
188 
189  // Check if additional should be placed over a junction
191  pointed_junction = dynamic_cast<GNEJunction*>(netElement);
192  if (pointed_junction != NULL) {
193  // show warning dialogbox and stop check if input parameters are valid
194  if (myadditionalParameters->areValuesValid() == false) {
197  }
198  // Get attribute junction
199  valuesOfElement[SUMO_ATTR_JUNCTION] = pointed_junction->getID();
200  // Generate id of element based on the junction
201  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_junction);
202  } else {
204  }
205  }
206  // Check if additional should be placed over a edge
208  // Due a edge is composed of lanes, its neccesary check if clicked element is an lane
209  if (dynamic_cast<GNELane*>(netElement) != NULL) {
210  pointed_edge = &(dynamic_cast<GNELane*>(netElement)->getParentEdge());
211  }
212  if (pointed_edge != NULL) {
213  // show warning dialogbox and stop check if input parameters are valid
214  if (myadditionalParameters->areValuesValid() == false) {
217  }
218  // Get attribute edge
219  valuesOfElement[SUMO_ATTR_EDGE] = pointed_edge->getID();
220  // Generate id of element based on the edge
221  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_edge);
222  } else {
224  }
225  }
226  // Check if additional should be placed over a lane
228  pointed_lane = dynamic_cast<GNELane*>(netElement);
229  if (pointed_lane != NULL) {
230  // show warning dialogbox and stop check if input parameters are valid
231  if (myadditionalParameters->areValuesValid() == false) {
234  }
235  // Get attribute lane
236  valuesOfElement[SUMO_ATTR_LANE] = pointed_lane->getID();
237  // Generate id of element based on the lane
238  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_lane);
239  } else {
241  }
242  }
243  // Check if additional should be placed over a crossing
245  pointed_crossing = dynamic_cast<GNECrossing*>(netElement);
246  if (pointed_crossing != NULL) {
247  // show warning dialogbox and stop check if input parameters are valid
248  if (myadditionalParameters->areValuesValid() == false) {
251  }
252  // Get attribute crossing
253  valuesOfElement[SUMO_ATTR_CROSSING] = pointed_crossing->getID();
254  // Generate id of element based on the crossing
255  valuesOfElement[SUMO_ATTR_ID] = generateID(pointed_crossing);
256  } else {
258  }
259  } else {
260  // Generate id of element
261  valuesOfElement[SUMO_ATTR_ID] = generateID(NULL);
262  }
263 
264  // show warning dialogbox and stop check if input parameters are valid
265  if (myadditionalParameters->areValuesValid() == false) {
268  }
269 
270  // Obtain position attribute if wasn't previously setted
271  if (valuesOfElement.find(SUMO_ATTR_POSITION) == valuesOfElement.end()) {
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 
322  // If additional has a interval defined by a begin or end, check that is valid
324  double begin = GNEAttributeCarrier::parse<double>(valuesOfElement[SUMO_ATTR_STARTTIME]);
325  double end = GNEAttributeCarrier::parse<double>(valuesOfElement[SUMO_ATTR_END]);
326  if (begin > end) {
327  myadditionalParameters->showWarningMessage("Attribute '" + toString(SUMO_ATTR_STARTTIME) + "' cannot be greater than attribute '" + toString(SUMO_ATTR_END) + "'.");
329  }
330  }
331 
332  // If additional own the attribute SUMO_ATTR_FILE but was't defined, will defined as <ID>.txt
334  valuesOfElement[SUMO_ATTR_FILE] = (valuesOfElement[SUMO_ATTR_ID] + ".txt");
335  }
336 
337  // If additional own the attribute SUMO_ATTR_OUTPUT but was't defined, will defined as <ID>.txt
339  valuesOfElement[SUMO_ATTR_OUTPUT] = (valuesOfElement[SUMO_ATTR_ID] + ".txt");
340  }
341 
342  // Save block value if additional can be blocked
345  }
346 
347  // If element belongst to an additional Set, get id of parent from myAdditionalParentSelector
351  } else {
352  myadditionalParameters->showWarningMessage("A " + toString(SUMO_TAG_E3DETECTOR) + " must be selected before insertion of " + toString(myActualAdditionalType) + ".");
354  }
355  }
356 
357  // If element own a list of SelectorParentEdges as attribute
360  // Declare a vector of Id's
361  std::vector<std::string> vectorOfIds;
362  // get Selected edges
363  std::vector<GNEEdge*> selectedEdges = myViewNet->getNet()->retrieveEdges(true);
364  // Iterate over selectedEdges and getId
365  for (auto i : selectedEdges) {
366  vectorOfIds.push_back(i->getID());
367  }
368  // Set saved Ids in attribute edges
369  valuesOfElement[SUMO_ATTR_EDGES] = joinToString(vectorOfIds, " ");
370  } else {
372  }
373  // check if attribute has at least one edge
374  if (valuesOfElement[SUMO_ATTR_EDGES] == "") {
375  myadditionalParameters->showWarningMessage("List of " + toString(SUMO_TAG_EDGE) + "s cannot be empty");
377  }
378  }
379 
380  // If element own a list of SelectorParentLanes as attribute
383  // Declare a vector of Id's
384  std::vector<std::string> vectorOfIds;
385  // get Selected lanes
386  std::vector<GNELane*> selectedLanes = myViewNet->getNet()->retrieveLanes(true);
387  // Iterate over selectedLanes and getId
388  for (auto i : selectedLanes) {
389  vectorOfIds.push_back(i->getID());
390  }
391  // Set saved Ids in attribute lanes
392  valuesOfElement[SUMO_ATTR_LANES] = joinToString(vectorOfIds, " ");
393  } else {
395  }
396  // check if attribute has at least a lane
397  if (valuesOfElement[SUMO_ATTR_LANES] == "") {
398  myadditionalParameters->showWarningMessage("List of " + toString(SUMO_TAG_LANE) + "s cannot be empty");
400  }
401  }
402 
403  // Create additional
405  return ADDADDITIONAL_SUCCESS;
406  } else {
408  }
409 }
410 
411 void
413  myViewNet->getUndoList()->p_begin("delete " + toString(additional->getTag()));
414  // save selection status
415  if (gSelected.isSelected(GLO_ADDITIONAL, additional->getGlID())) {
416  std::set<GUIGlID> deselected;
417  deselected.insert(additional->getGlID());
418  myViewNet->getUndoList()->add(new GNEChange_Selection(myViewNet->getNet(), std::set<GUIGlID>(), deselected, true), true);
419  }
420  // first remove all additional childs of this additional calling this function recursively
421  while (additional->getAdditionalChilds().size() > 0) {
422  removeAdditional(additional->getAdditionalChilds().front());
423  }
424  // remove additional
425  myViewNet->getUndoList()->add(new GNEChange_Additional(additional, false), true);
427 }
428 
429 
430 long
431 GNEAdditionalFrame::onCmdSelectAdditional(FXObject*, FXSelector, void*) {
432  // declare flag to save if additional name is correct
433  bool additionalNameCorrect = false;
434  // set parameters of additional, if it's correct
436  if (toString(i) == myAdditionalMatchBox->getText().text()) {
437  myAdditionalMatchBox->setTextColor(FXRGB(0, 0, 0));
438  myadditionalParameters->show();
440  myEditorParameters->show();
441  } else {
442  myEditorParameters->hide();
443  }
445  additionalNameCorrect = true;
446  }
447  }
448  // if additional name isn't correct, hidde all
449  if (additionalNameCorrect == false) {
451  myAdditionalMatchBox->setTextColor(FXRGB(255, 0, 0));
452  myadditionalParameters->hide();
453  myEditorParameters->hide();
455  myedgeParentsSelector->hide();
456  mylaneParentsSelector->hide();
457  }
458  return 1;
459 }
460 
461 
462 void
464  // Show frame
465  GNEFrame::show();
466  // Update UseSelectedLane CheckBox
468  // Update UseSelectedLane CheckBox
470 }
471 
472 
473 void
475  // Set new actualAdditionalType
476  myActualAdditionalType = actualAdditionalType;
477  // Clear internal attributes
479  // Hide length field and reference point
481  // Iterate over attributes of myActualAdditionalType
485  } else if (i.first == SUMO_ATTR_ENDPOS) {
487  }
488  }
489  // if there are parmeters, show and Recalc groupBox
492  } else {
494  }
495  // Show myAdditionalParentSelector if we're adding a Entry/Exit
498  } else {
500  }
501  // Show SelectorParentEdges if we're adding an additional that own the attribute SUMO_ATTR_EDGES
504  } else {
506  }
507  // Show SelectorParentLanes if we're adding an additional that own the attribute SUMO_ATTR_LANES
510  } else {
512  }
513 }
514 
515 
516 std::string
519  if (netElement) {
520  // generate ID using netElement
521  while (myViewNet->getNet()->getAdditional(myActualAdditionalType, toString(myActualAdditionalType) + "_" + netElement->getID() + "_" + toString(additionalIndex)) != NULL) {
522  additionalIndex++;
523  }
524  return toString(myActualAdditionalType) + "_" + netElement->getID() + "_" + toString(additionalIndex);
525  } else {
526  // generate ID without netElement
527  while (myViewNet->getNet()->getAdditional(myActualAdditionalType, toString(myActualAdditionalType) + "_" + toString(additionalIndex)) != NULL) {
528  additionalIndex++;
529  }
530  return toString(myActualAdditionalType) + "_" + toString(additionalIndex);
531  }
532 }
533 
534 
535 double
536 GNEAdditionalFrame::setStartPosition(double positionOfTheMouseOverLane, double lengthOfAdditional) {
539  return positionOfTheMouseOverLane;
541  return positionOfTheMouseOverLane - lengthOfAdditional;
543  return positionOfTheMouseOverLane - lengthOfAdditional / 2;
544  default:
545  throw InvalidArgument("Reference Point invalid");
546  }
547 }
548 
549 
550 double
551 GNEAdditionalFrame::setEndPosition(double /*laneLength*/, double positionOfTheMouseOverLane, double lengthOfAdditional) {
554  return positionOfTheMouseOverLane + lengthOfAdditional;
556  return positionOfTheMouseOverLane;
558  return positionOfTheMouseOverLane + lengthOfAdditional / 2;
559  default:
560  throw InvalidArgument("Reference Point invalid");
561  }
562 }
563 
564 // ---------------------------------------------------------------------------
565 // GNEAdditionalFrame::AdditionalAttributeSingle - methods
566 // ---------------------------------------------------------------------------
567 
569  FXHorizontalFrame(parent, GUIDesignAuxiliarHorizontalFrame),
570  myAdditionalTag(SUMO_TAG_NOTHING),
571  myAdditionalAttr(SUMO_ATTR_NOTHING) {
572  // Create visual elements
573  myLabel = new FXLabel(this, "name", 0, GUIDesignLabelAttribute);
578  // Hide elements
579  hideParameter();
580 }
581 
582 
584 
585 
586 void
588  myAdditionalTag = additionalTag;
589  myAdditionalAttr = additionalAttr;
590  myInvalidValue = "";
591  myLabel->setText(toString(myAdditionalAttr).c_str());
592  myLabel->show();
593  myTextFieldStrings->setTextColor(FXRGB(0, 0, 0));
594  myTextFieldStrings->setText(value.c_str());
595  myTextFieldStrings->show();
596  show();
597 }
598 
599 
600 void
602  myAdditionalTag = additionalTag;
603  myAdditionalAttr = additionalAttr;
604  myInvalidValue = "";
605  myLabel->setText(toString(myAdditionalAttr).c_str());
606  myLabel->show();
607  myTextFieldInt->setTextColor(FXRGB(0, 0, 0));
608  myTextFieldInt->setText(toString(value).c_str());
609  myTextFieldInt->show();
610  show();
611 }
612 
613 
614 void
616  myAdditionalTag = additionalTag;
617  myAdditionalAttr = additionalAttr;
618  myInvalidValue = "";
619  myLabel->setText(toString(myAdditionalAttr).c_str());
620  myLabel->show();
621  myTextFieldReal->setTextColor(FXRGB(0, 0, 0));
622  myTextFieldReal->setText(toString(value).c_str());
623  myTextFieldReal->show();
624  show();
625 }
626 
627 
628 void
630  myAdditionalTag = additionalTag;
631  myAdditionalAttr = additionalAttr;
632  myInvalidValue = "";
633  myLabel->setText(toString(myAdditionalAttr).c_str());
634  myLabel->show();
635  if (value) {
636  myBoolCheckButton->setCheck(true);
637  myBoolCheckButton->setText("true");
638  } else {
639  myBoolCheckButton->setCheck(false);
640  myBoolCheckButton->setText("false");
641  }
642  myBoolCheckButton->show();
643  show();
644 }
645 
646 
647 void
651  myLabel->hide();
652  myTextFieldInt->hide();
653  myTextFieldReal->hide();
654  myTextFieldStrings->hide();
655  myBoolCheckButton->hide();
656  hide();
657 }
658 
659 
662  return myAdditionalTag;
663 }
664 
665 
668  return myAdditionalAttr;
669 }
670 
671 
672 std::string
675  return (myBoolCheckButton->getCheck() == 1) ? "true" : "false";
677  return myTextFieldInt->getText().text();
679  return myTextFieldReal->getText().text();
680  } else {
681  return myTextFieldStrings->getText().text();
682  }
683 }
684 
685 
686 const std::string&
688  return myInvalidValue;
689 }
690 
691 
692 long
694  // We assume that current value is valid
695  myInvalidValue = "";
696  // Check if format of current value of myTextField is correct
698  if (GNEAttributeCarrier::canParse<int>(myTextFieldInt->getText().text())) {
699  // convert string to int
700  int intValue = GNEAttributeCarrier::parse<int>(myTextFieldInt->getText().text());
701  // Check if int value must be positive
703  myInvalidValue = "'" + toString(myAdditionalAttr) + "' cannot be negative";
704  }
705  } else {
706  myInvalidValue = "'" + toString(myAdditionalAttr) + "' doesn't have a valid 'int' format";
707  }
709  // time attributes work as positive doubles
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 parsed value is negative
714  if (doubleValue < 0) {
715  myInvalidValue = "'" + toString(myAdditionalAttr) + "' cannot be negative";
716  }
717  } else {
718  myInvalidValue = "'" + toString(myAdditionalAttr) + "' doesn't have a valid 'time' format";
719  }
721  if (GNEAttributeCarrier::canParse<double>(myTextFieldReal->getText().text())) {
722  // convert string to double
723  double doubleValue = GNEAttributeCarrier::parse<double>(myTextFieldReal->getText().text());
724  // Check if double value must be positive
726  myInvalidValue = "'" + toString(myAdditionalAttr) + "' cannot be negative";
727  // check if double value is a probability
728  } else if (GNEAttributeCarrier::isProbability(myAdditionalTag, myAdditionalAttr) && ((doubleValue < 0) || doubleValue > 1)) {
729  myInvalidValue = "'" + toString(myAdditionalAttr) + "' takes only values between 0 and 1";
730  }
731  } else {
732  myInvalidValue = "'" + toString(myAdditionalAttr) + "' doesn't have a valid 'float' format";
733  }
735  // check if filename format is valid
736  if (GNEAttributeCarrier::isValidFilename(myTextFieldStrings->getText().text()) == false) {
737  myInvalidValue = "input contains invalid characters for a filename";
738  }
740  // check if lists of Vclass are valid
741  if (canParseVehicleClasses(myTextFieldStrings->getText().text()) == false) {
742  myInvalidValue = "list of VClass isn't valid";
743  }
744  } else if (myAdditionalAttr == SUMO_ATTR_ROUTEPROBE) {
745  // check if filename format is valid
746  if (GNEAttributeCarrier::isValidID(myTextFieldStrings->getText().text()) == false) {
747  myInvalidValue = "RouteProbe ID contains invalid characters";
748  }
749  }
750  // change color of text field depending of myCurrentValueValid
751  if (myInvalidValue.size() == 0) {
752  myTextFieldInt->setTextColor(FXRGB(0, 0, 0));
753  myTextFieldInt->killFocus();
754  myTextFieldReal->setTextColor(FXRGB(0, 0, 0));
755  myTextFieldReal->killFocus();
756  myTextFieldStrings->setTextColor(FXRGB(0, 0, 0));
757  myTextFieldStrings->killFocus();
758  } else {
759  // IF value of TextField isn't valid, change their color to Red
760  myTextFieldInt->setTextColor(FXRGB(255, 0, 0));
761  myTextFieldReal->setTextColor(FXRGB(255, 0, 0));
762  myTextFieldStrings->setTextColor(FXRGB(255, 0, 0));
763  }
764  // Update aditional frame
765  update();
766  return 1;
767 }
768 
769 
770 long
772  if (myBoolCheckButton->getCheck()) {
773  myBoolCheckButton->setText("true");
774  } else {
775  myBoolCheckButton->setText("false");
776  }
777  return 0;
778 }
779 
780 // ---------------------------------------------------------------------------
781 // GNEAdditionalFrame::AdditionalAttributeList - methods
782 // ---------------------------------------------------------------------------
783 
785  FXVerticalFrame(parent, GUIDesignAuxiliarHorizontalFrame),
788  myNumberOfVisibleTextfields(1),
789  myMaxNumberOfValuesInParameterList(20) {
790  // Create elements
791  for (int i = 0; i < myMaxNumberOfValuesInParameterList; i++) {
792  myHorizontalFrames.push_back(new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame));
793  myLabels.push_back(new FXLabel(myHorizontalFrames.back(), "name", 0, GUIDesignLabelAttribute));
795  }
796  // Create label Row
797  myHorizontalFrameButtons = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
798  myLabels.push_back(new FXLabel(myHorizontalFrameButtons, "Rows", 0, GUIDesignLabelAttribute));
799  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(myHorizontalFrameButtons, GUIDesignAuxiliarHorizontalFrame);
800  // Create add button
802  // Create remove buttons
804  // Hide all para meters
805  hideParameter();
806 }
807 
808 
810 
811 
812 void
813 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<int> /* value */) {
814  myAdditionalTag = additionalTag;
815  myAdditionalAttr = additionalAttr;
816  // @todo finish
817 }
818 
819 
820 void
821 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<double> /* value */, bool /*isTime*/) {
822  myAdditionalTag = additionalTag;
823  myAdditionalAttr = additionalAttr;
824  // @todo finish
825 }
826 
827 
828 void
829 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<bool> /* value */) {
830  myAdditionalTag = additionalTag;
831  myAdditionalAttr = additionalAttr;
832  // @todo finish
833 }
834 
835 
836 void
837 GNEAdditionalFrame::AdditionalAttributeList::showListParameter(SumoXMLTag additionalTag, SumoXMLAttr additionalAttr, std::vector<std::string> value) {
838  if ((int)value.size() < myMaxNumberOfValuesInParameterList) {
839  myAdditionalTag = additionalTag;
840  myAdditionalAttr = additionalAttr;
841  myNumberOfVisibleTextfields = (int)value.size();
842  if (myNumberOfVisibleTextfields == 0) {
844  }
845  for (int i = 0; i < myMaxNumberOfValuesInParameterList; i++) {
846  myLabels.at(i)->setText((toString(myAdditionalAttr) + ": " + toString(i)).c_str());
847  }
848  for (int i = 0; i < myNumberOfVisibleTextfields; i++) {
849  myHorizontalFrames.at(i)->show();
850  }
851  myHorizontalFrameButtons->show();
852  FXVerticalFrame::show();
853  }
854 }
855 
856 
857 void
861  for (int i = 0; i < (int)myHorizontalFrames.size(); i++) {
862  myHorizontalFrames.at(i)->hide();
863  }
864  myHorizontalFrameButtons->hide();
865  FXVerticalFrame::hide();
866 }
867 
868 
871  return myAdditionalTag;
872 }
873 
876  return myAdditionalAttr;
877 }
878 
879 
880 std::string
882  // Declare, fill and return a string with the list values
883  std::string value;
884  for (int i = 0; i < myNumberOfVisibleTextfields; i++) {
885  if (!myTextFields.at(i)->getText().empty()) {
886  value += (myTextFields.at(i)->getText().text() + std::string(" "));
887  }
888  }
889  return value;
890 }
891 
892 
893 bool
896  return true;
897 }
898 
899 
900 long
905  getParent()->recalc();
906  }
907  return 1;
908 }
909 
910 
911 long
913  if (myNumberOfVisibleTextfields > 1) {
916  myTextFields.at(myNumberOfVisibleTextfields)->setText("");
917  getParent()->recalc();
918  }
919  return 1;
920 }
921 
922 // ---------------------------------------------------------------------------
923 // GNEAdditionalFrame::AdditionalAttributes - methods
924 // ---------------------------------------------------------------------------
925 
927  FXGroupBox(parent, "Internal attributes", GUIDesignGroupBoxFrame),
928  myViewNet(viewNet),
929  myIndexParameter(0),
930  myIndexParameterList(0),
931  maxNumberOfParameters(GNEAttributeCarrier::getHigherNumberOfAttributes()),
932  maxNumberOfListParameters(2) {
933 
934  // Create single parameters
935  for (int i = 0; i < maxNumberOfParameters; i++) {
937  }
938 
939  // Create single list parameters
940  for (int i = 0; i < maxNumberOfListParameters; i++) {
942  }
943 
944  // Create help button
945  helpAdditional = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
946 }
947 
948 
950 
951 
952 void
954  // Hidde al fields
955  for (int i = 0; i < maxNumberOfParameters; i++) {
956  myVectorOfsingleAdditionalParameter.at(i)->hideParameter();
957  }
958 
959  // Hidde al list fields
960  for (int i = 0; i < maxNumberOfListParameters; i++) {
961  myVectorOfsingleAdditionalParameterList.at(i)->hideParameter();
962  }
963 
964  // Reset indexs
966  myIndexParameter = 0;
967 }
968 
969 
970 void
972  // Set current additional
973  myAdditionalTag = additionalTag;
974  // If parameter is of type list
975  if (GNEAttributeCarrier::isList(myAdditionalTag, AdditionalAttributeSingle)) {
976  // If parameter can be show
978  // Check type of attribute list
979  if (GNEAttributeCarrier::isInt(myAdditionalTag, AdditionalAttributeSingle)) {
980  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<int> >(myAdditionalTag, AdditionalAttributeSingle));
981  } else if (GNEAttributeCarrier::isFloat(myAdditionalTag, AdditionalAttributeSingle)) {
982  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<double> >(myAdditionalTag, AdditionalAttributeSingle));
983  } else if (GNEAttributeCarrier::isTime(myAdditionalTag, AdditionalAttributeSingle)) {
984  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<double> >(myAdditionalTag, AdditionalAttributeSingle), true);
985  } else if (GNEAttributeCarrier::isBool(myAdditionalTag, AdditionalAttributeSingle)) {
986  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<bool> >(myAdditionalTag, AdditionalAttributeSingle));
987  } else if (GNEAttributeCarrier::isString(myAdditionalTag, AdditionalAttributeSingle)) {
988  myVectorOfsingleAdditionalParameterList.at(myIndexParameterList)->showListParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue< std::vector<std::string> >(myAdditionalTag, AdditionalAttributeSingle));
989  }
990  // Update index
992  } else {
993  WRITE_ERROR("Max number of list attributes reached (" + toString(maxNumberOfListParameters) + ").");
994  }
995  } else {
997  // Check type of attribute list
998  if (GNEAttributeCarrier::isInt(myAdditionalTag, AdditionalAttributeSingle)) {
999  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<int>(myAdditionalTag, AdditionalAttributeSingle));
1000  } else if (GNEAttributeCarrier::isFloat(myAdditionalTag, AdditionalAttributeSingle) || GNEAttributeCarrier::isTime(myAdditionalTag, AdditionalAttributeSingle)) {
1001  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<double>(myAdditionalTag, AdditionalAttributeSingle));
1002  } else if (GNEAttributeCarrier::isBool(myAdditionalTag, AdditionalAttributeSingle)) {
1003  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<bool>(myAdditionalTag, AdditionalAttributeSingle));
1004  } else if (GNEAttributeCarrier::isString(myAdditionalTag, AdditionalAttributeSingle)) {
1005  myVectorOfsingleAdditionalParameter.at(myIndexParameter)->showParameter(myAdditionalTag, AdditionalAttributeSingle, GNEAttributeCarrier::getDefaultValue<std::string>(myAdditionalTag, AdditionalAttributeSingle));
1006  } else {
1007  WRITE_WARNING("Attribute '" + toString(AdditionalAttributeSingle) + "' doesn't have a defined type. Check definition in GNEAttributeCarrier");
1008  }
1009  // Update index parameter
1010  myIndexParameter++;
1011  } else {
1012  WRITE_ERROR("Max number of attributes reached (" + toString(maxNumberOfParameters) + ").");
1013  }
1014  }
1015 }
1016 
1017 
1018 void
1020  recalc();
1021  show();
1022 }
1023 
1024 
1025 void
1027  hide();
1028 }
1029 
1030 
1031 std::map<SumoXMLAttr, std::string>
1033  std::map<SumoXMLAttr, std::string> values;
1034  // get standar Parameters
1035  for (int i = 0; i < myIndexParameter; i++) {
1036  values[myVectorOfsingleAdditionalParameter.at(i)->getAttr()] = myVectorOfsingleAdditionalParameter.at(i)->getValue();
1037  }
1038  // get list parameters
1039  for (int i = 0; i < myIndexParameterList; i++) {
1040  values[myVectorOfsingleAdditionalParameterList.at(i)->getAttr()] = myVectorOfsingleAdditionalParameterList.at(i)->getListValues();
1041  }
1042  return values;
1043 }
1044 
1045 
1046 void
1048  std::string errorMessage;
1049  // iterate over standar parameters
1050  for (int i = 0; (i < myIndexParameter) && errorMessage.empty(); i++) {
1051  // Return string with the error if at least one of the parameter isn't valid
1052  std::string attributeValue = myVectorOfsingleAdditionalParameter.at(i)->isAttributeValid();
1053  if (attributeValue.size() != 0) {
1054  errorMessage = attributeValue;
1055  }
1056  }
1057  // iterate over list parameters
1058  for (int i = 0; i < myIndexParameterList; i++) {
1059  // Return false if at least one of the list parameter isn't valid
1060  if (myVectorOfsingleAdditionalParameterList.at(i)->isCurrentListValid() == false) {
1061  ;
1062  }
1063  }
1064  // show warning box if input parameters aren't invalid
1065  if (extra.size() == 0) {
1066  errorMessage = "Invalid input parameter of " + toString(myAdditionalTag) + ": " + errorMessage;
1067  } else {
1068  errorMessage = "Invalid input parameter of " + toString(myAdditionalTag) + ": " + extra;
1069  }
1070 
1071  // set message in status bar
1072  myViewNet->setStatusBarText(errorMessage);
1073  // Write Warning in console if we're in testing mode
1074  if (OptionsCont::getOptions().getBool("gui-testing-debug")) {
1075  WRITE_WARNING(errorMessage);
1076  }
1077 }
1078 
1079 
1080 bool
1082  // iterate over standar parameters
1083  for (int i = 0; i < myIndexParameter; i++) {
1084  // Return false if error message of attriuve isn't empty
1085  if (myVectorOfsingleAdditionalParameter.at(i)->isAttributeValid().size() != 0) {
1086  return false;
1087  }
1088  }
1089  // iterate over list parameters
1090  for (int i = 0; i < myIndexParameterList; i++) {
1091  // Return false if at least one of the list parameter isn't valid
1092  if (myVectorOfsingleAdditionalParameterList.at(i)->isCurrentListValid() == false) {
1093  return false;
1094  }
1095  }
1096  return true;
1097 }
1098 
1099 
1100 int
1103 }
1104 
1105 
1106 long
1108  // Create help dialog
1109  FXDialogBox* helpDialog = new FXDialogBox(this, ("Parameters of " + toString(myAdditionalTag)).c_str(), GUIDesignDialogBox);
1110  // Create FXTable
1111  FXTable* myTable = new FXTable(helpDialog, this, MID_TABLE, TABLE_READONLY);
1112  myTable->setVisibleRows((FXint)(myIndexParameter + myIndexParameterList));
1113  myTable->setVisibleColumns(3);
1114  myTable->setTableSize((FXint)(myIndexParameter + myIndexParameterList), 3);
1115  myTable->setBackColor(FXRGB(255, 255, 255));
1116  myTable->setColumnText(0, "Name");
1117  myTable->setColumnText(1, "Value");
1118  myTable->setColumnText(2, "Definition");
1119  myTable->getRowHeader()->setWidth(0);
1120  FXHeader* header = myTable->getColumnHeader();
1121  header->setItemJustify(0, JUSTIFY_CENTER_X);
1122  header->setItemSize(0, 120);
1123  header->setItemJustify(1, JUSTIFY_CENTER_X);
1124  header->setItemSize(1, 80);
1125  int maxSizeColumnDefinitions = 0;
1126  // Iterate over vector of additional parameters
1127  for (int i = 0; i < myIndexParameter; i++) {
1128  SumoXMLTag additionalTag = myVectorOfsingleAdditionalParameter.at(i)->getTag();
1129  SumoXMLAttr additionalAttr = myVectorOfsingleAdditionalParameter.at(i)->getAttr();
1130  // Set name of attribute
1131  myTable->setItem(i, 0, new FXTableItem(toString(additionalAttr).c_str()));
1132  // Set type
1133  FXTableItem* type = new FXTableItem("");
1134  if (GNEAttributeCarrier::isInt(additionalTag, additionalAttr)) {
1135  type->setText("int");
1136  } else if (GNEAttributeCarrier::isFloat(additionalTag, additionalAttr)) {
1137  type->setText("float");
1138  } else if (GNEAttributeCarrier::isTime(additionalTag, additionalAttr)) {
1139  type->setText("time");
1140  } else if (GNEAttributeCarrier::isBool(additionalTag, additionalAttr)) {
1141  type->setText("bool");
1142  } else if (GNEAttributeCarrier::isColor(additionalTag, additionalAttr)) {
1143  type->setText("color");
1144  } else if (GNEAttributeCarrier::isString(additionalTag, additionalAttr)) {
1145  type->setText("string");
1146  }
1147  type->setJustify(FXTableItem::CENTER_X);
1148  myTable->setItem(i, 1, type);
1149  // Set definition
1150  FXTableItem* definition = new FXTableItem(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).c_str());
1151  definition->setJustify(FXTableItem::LEFT);
1152  myTable->setItem(i, 2, definition);
1153  if ((int)GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size() > maxSizeColumnDefinitions) {
1154  maxSizeColumnDefinitions = int(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size());
1155  }
1156  }
1157  // Iterate over vector of additional parameters list
1158  for (int i = 0; i < myIndexParameterList; i++) {
1159  SumoXMLTag additionalTag = myVectorOfsingleAdditionalParameterList.at(i)->getTag();
1160  SumoXMLAttr additionalAttr = myVectorOfsingleAdditionalParameterList.at(i)->getAttr();
1161  // Set name of attribute
1162  myTable->setItem(i, 0, new FXTableItem(toString(additionalAttr).c_str()));
1163  // Set type
1164  FXTableItem* type = new FXTableItem("");
1165  if (GNEAttributeCarrier::isInt(additionalTag, additionalAttr)) {
1166  type->setText("list of integers");
1167  } else if (GNEAttributeCarrier::isFloat(additionalTag, additionalAttr)) {
1168  type->setText("list of floats");
1169  } else if (GNEAttributeCarrier::isTime(additionalTag, additionalAttr)) {
1170  type->setText("list of times");
1171  } else if (GNEAttributeCarrier::isBool(additionalTag, additionalAttr)) {
1172  type->setText("list of booleans");
1173  } else if (GNEAttributeCarrier::isString(additionalTag, additionalAttr)) {
1174  type->setText("list of strings");
1175  }
1176  type->setJustify(FXTableItem::CENTER_X);
1177  myTable->setItem(i, 1, type);
1178  // Set definition
1179  FXTableItem* definition = new FXTableItem(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).c_str());
1180  definition->setJustify(FXTableItem::LEFT);
1181  myTable->setItem(i, 2, definition);
1182  if ((int)GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size() > maxSizeColumnDefinitions) {
1183  maxSizeColumnDefinitions = int(GNEAttributeCarrier::getDefinition(additionalTag, additionalAttr).size());
1184  }
1185  }
1186  // Set size of column
1187  header->setItemJustify(2, JUSTIFY_CENTER_X);
1188  header->setItemSize(2, maxSizeColumnDefinitions * 6);
1189  // Button Close
1190  new FXButton(helpDialog, "OK\t\tclose", GUIIconSubSys::getIcon(ICON_ACCEPT), helpDialog, FXDialogBox::ID_ACCEPT, GUIDesignButtonOK);
1191  helpDialog->create();
1192  helpDialog->show();
1193  return 1;
1194 }
1195 
1196 // ---------------------------------------------------------------------------
1197 // GNEAdditionalFrame::NeteditAttributes- methods
1198 // ---------------------------------------------------------------------------
1199 
1201  FXGroupBox(parent, "Netedit attributes", GUIDesignGroupBoxFrame),
1202  myActualAdditionalReferencePoint(GNE_ADDITIONALREFERENCEPOINT_LEFT),
1203  myCurrentLengthValid(true) {
1204  // Create FXListBox for the reference points and fill it
1206  myReferencePointMatchBox->appendItem("reference left");
1207  myReferencePointMatchBox->appendItem("reference right");
1208  myReferencePointMatchBox->appendItem("reference center");
1209  // Create Frame for Length Label and textField
1210  FXHorizontalFrame* lengthFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1211  myLengthLabel = new FXLabel(lengthFrame, toString(SUMO_ATTR_LENGTH).c_str(), 0, GUIDesignLabelAttribute);
1213  myLengthTextField->setText("10");
1214  // Create Frame for block movement label and checkBox (By default disabled)
1215  FXHorizontalFrame* blockMovement = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1216  myBlockLabel = new FXLabel(blockMovement, "block move", 0, GUIDesignLabelAttribute);
1217  myBlockMovementCheckButton = new FXCheckButton(blockMovement, "false", this, MID_GNE_ADDITIONALFRAME_BLOCKMOVEMENT, GUIDesignCheckButtonAttribute);
1218  myBlockMovementCheckButton->setCheck(false);
1219  // Create help button
1220  helpReferencePoint = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1221  // Set visible items
1222  myReferencePointMatchBox->setNumVisible((int)myReferencePointMatchBox->getNumItems());
1223 }
1224 
1225 
1227 
1228 
1229 void
1231  myLengthLabel->show();
1232  myLengthTextField->show();
1233  myReferencePointMatchBox->show();
1234 }
1235 
1236 
1237 void
1239  myLengthLabel->hide();
1240  myLengthTextField->hide();
1241  myReferencePointMatchBox->hide();
1242 }
1243 
1244 
1248 }
1249 
1250 
1251 double
1253  return GNEAttributeCarrier::parse<double>(myLengthTextField->getText().text());
1254 }
1255 
1256 
1257 bool
1259  return myBlockMovementCheckButton->getCheck() == 1 ? true : false;
1260 }
1261 
1262 
1263 bool
1265  return myCurrentLengthValid;
1266 }
1267 
1268 
1269 long
1271  // change color of text field depending of the input length
1272  if (GNEAttributeCarrier::canParse<double>(myLengthTextField->getText().text()) &&
1273  GNEAttributeCarrier::parse<double>(myLengthTextField->getText().text()) > 0) {
1274  myLengthTextField->setTextColor(FXRGB(0, 0, 0));
1275  myLengthTextField->killFocus();
1276  myCurrentLengthValid = true;
1277  } else {
1278  myLengthTextField->setTextColor(FXRGB(255, 0, 0));
1279  myCurrentLengthValid = false;
1280  }
1281  // Update aditional frame
1282  update();
1283  return 1;
1284 }
1285 
1286 
1287 long
1289  // Cast actual reference point type
1290  if (myReferencePointMatchBox->getText() == "reference left") {
1291  myReferencePointMatchBox->setTextColor(FXRGB(0, 0, 0));
1293  myLengthTextField->enable();
1294  } else if (myReferencePointMatchBox->getText() == "reference right") {
1295  myReferencePointMatchBox->setTextColor(FXRGB(0, 0, 0));
1297  myLengthTextField->enable();
1298  } else if (myReferencePointMatchBox->getText() == "reference center") {
1299  myLengthTextField->enable();
1300  myReferencePointMatchBox->setTextColor(FXRGB(0, 0, 0));
1302  myLengthTextField->enable();
1303  } else {
1304  myReferencePointMatchBox->setTextColor(FXRGB(255, 0, 0));
1306  myLengthTextField->disable();
1307  }
1308  return 1;
1309 }
1310 
1311 
1312 long
1314  if (myBlockMovementCheckButton->getCheck()) {
1315  myBlockMovementCheckButton->setText("true");
1316  } else {
1317  myBlockMovementCheckButton->setText("false");
1318  }
1319  return 1;
1320 }
1321 
1322 
1323 long
1325  FXDialogBox* helpDialog = new FXDialogBox(this, "Parameter editor Help", GUIDesignDialogBox);
1326  std::ostringstream help;
1327  help
1328  << "Referece point: Mark the initial position of the additional element.\n"
1329  << "Example: If you want to create a busStop with a length of 30 in the point 100 of the lane:\n"
1330  << "- Reference Left will create it with startPos = 70 and endPos = 100.\n"
1331  << "- Reference Right will create it with startPos = 100 and endPos = 130.\n"
1332  << "- Reference Center will create it with startPos = 85 and endPos = 115.\n"
1333  << "\n"
1334  << "Block movement: if is enabled, the created additional element will be blocked. i.e. cannot be moved with\n"
1335  << "the mouse. This option can be modified with the Inspector.";
1336  new FXLabel(helpDialog, help.str().c_str(), 0, GUIDesignLabelFrameInformation);
1337  // "OK"
1338  new FXButton(helpDialog, "OK\t\tclose", GUIIconSubSys::getIcon(ICON_ACCEPT), helpDialog, FXDialogBox::ID_ACCEPT, GUIDesignButtonOK);
1339  helpDialog->create();
1340  helpDialog->show();
1341  return 1;
1342 }
1343 
1344 
1345 std::string
1347  // Obtain Id's of list
1348  std::string vectorOfIds;
1349  for (int i = 0; i < list->getNumItems(); i++) {
1350  if (list->isItemSelected(i)) {
1351  if (vectorOfIds.size() > 0) {
1352  vectorOfIds += " ";
1353  }
1354  vectorOfIds += (list->getItem(i)->getText()).text();
1355  }
1356  }
1357  return vectorOfIds;
1358 }
1359 
1360 
1361 
1362 // ---------------------------------------------------------------------------
1363 // GNEAdditionalFrame::SelectorParentAdditional - methods
1364 // ---------------------------------------------------------------------------
1365 
1367  FXGroupBox(parent, "Additional Set selector", GUIDesignGroupBoxFrame),
1368  myUniqueSelection(false),
1369  myViewNet(viewNet) {
1370 
1371  // Create label with the type of SelectorParentAdditional
1372  mySetLabel = new FXLabel(this, "No additional selected", 0, GUIDesignLabelLeftThick);
1373 
1374  // Create list
1375  myList = new FXList(this, this, MID_GNE_ADDITIONALFRAME_SELECTADDITIONALPARENT, GUIDesignList, 0, 0, 0, 100);
1376 
1377  // Create help button
1378  myHelpAdditionalParentSelector = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1379 
1380  // Hide List
1382 }
1383 
1384 
1386 
1387 
1388 std::string
1390  for (int i = 0; i < myList->getNumItems(); i++) {
1391  if (myList->isItemSelected(i)) {
1392  return myList->getItem(i)->getText().text();
1393  }
1394  }
1395  return "";
1396 }
1397 
1398 
1399 void
1401  myUniqueSelection = uniqueSelection;
1402  mySetLabel->setText(("" + toString(type)).c_str());
1403  myList->clearItems();
1404  // obtain all additionals of class "type"
1405  std::vector<GNEAdditional*> vectorOfAdditionalParents = myViewNet->getNet()->getAdditionals(type);
1406  // fill list with IDs of additionals
1407  for (auto i : vectorOfAdditionalParents) {
1408  myList->appendItem(i->getID().c_str());
1409  }
1410  show();
1411 }
1412 
1413 
1414 void
1416  hide();
1417 }
1418 
1419 
1420 long
1422  return 1;
1423 }
1424 
1425 
1426 long
1428  return 1;
1429 }
1430 
1431 
1432 // ---------------------------------------------------------------------------
1433 // GNEAdditionalFrame::SelectorParentEdges - methods
1434 // ---------------------------------------------------------------------------
1435 
1437  FXGroupBox(parent, "Edges", GUIDesignGroupBoxFrame),
1438  myViewNet(viewNet) {
1439  // Create menuCheck for selected edges
1440  myUseSelectedEdgesCheckButton = new FXCheckButton(this, ("Use selected " + toString(SUMO_TAG_EDGE) + "s").c_str(), this, MID_GNE_ADDITIONALFRAME_SHOWONLYSELECTEDEDGES, GUIDesignCheckButtonAttribute);
1441 
1442  // Create search box
1444 
1445  // Create list
1446  myList = new FXList(this, this, MID_GNE_ADDITIONALFRAME_SELECTEDGE, GUIDesignList, 0, 0, 0, 100);
1447 
1448  // Create horizontal frame
1449  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1450 
1451  // Create button for clear selection
1452  myClearEdgesSelection = new FXButton(buttonsFrame, "Clear", 0, this, MID_GNE_ADDITIONALFRAME_CLEAREDGESELECTION, GUIDesignButtonRectangular);
1453 
1454  // Create button for invert selection
1455  myInvertEdgesSelection = new FXButton(buttonsFrame, "Invert", 0, this, MID_GNE_ADDITIONALFRAME_INVERTEDGESELECTION, GUIDesignButtonRectangular);
1456 
1457  // Create help button
1458  myHelpedgeParentsSelector = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1459 
1460  // Hide List
1461  hideList();
1462 }
1463 
1464 
1466 
1467 
1468 std::string
1471 }
1472 
1473 
1474 void
1476  // clear list of egdge ids
1477  myList->clearItems();
1478  // get all edges of net
1480  std::vector<GNEEdge*> vectorOfEdges = myViewNet->getNet()->retrieveEdges(false);
1481  // iterate over edges of net
1482  for (auto i : vectorOfEdges) {
1483  // If search criterium is correct, then append ittem
1484  if (i->getID().find(search) != std::string::npos) {
1485  myList->appendItem(i->getID().c_str());
1486  }
1487  }
1488  // By default, CheckBox for useSelectedEdges isn't checked
1489  myUseSelectedEdgesCheckButton->setCheck(false);
1490  // Recalc Frame
1491  recalc();
1492  // Update Frame
1493  update();
1494  // Show dialog
1495  show();
1496 }
1497 
1498 
1499 void
1501  FXGroupBox::hide();
1502 }
1503 
1504 
1505 void
1507  // Enable or disable use selected edges
1508  if (myViewNet->getNet()->retrieveEdges(true).size() > 0) {
1510  } else {
1511  myUseSelectedEdgesCheckButton->disable();
1512  }
1513 }
1514 
1515 
1516 bool
1518  if (myUseSelectedEdgesCheckButton->getCheck()) {
1519  return true;
1520  } else {
1521  return false;
1522  }
1523 }
1524 
1525 
1526 long
1528  if (myUseSelectedEdgesCheckButton->getCheck()) {
1529  myEdgesSearch->hide();
1530  myList->hide();
1531  myClearEdgesSelection->hide();
1532  myInvertEdgesSelection->hide();
1533  myHelpedgeParentsSelector->hide();
1534  } else {
1535  myEdgesSearch->show();
1536  myList->show();
1537  myClearEdgesSelection->show();
1538  myInvertEdgesSelection->show();
1539  myHelpedgeParentsSelector->show();
1540  }
1541  // Recalc Frame
1542  recalc();
1543  // Update Frame
1544  update();
1545  return 1;
1546 }
1547 
1548 
1549 long
1551  // Show only Id's of SelectorParentEdges that contains the searched string
1552  showList(myEdgesSearch->getText().text());
1553  return 1;
1554 }
1555 
1556 
1557 long
1559  return 1;
1560 }
1561 
1562 
1563 long
1565  for (int i = 0; i < myList->getNumItems(); i++) {
1566  if (myList->getItem(i)->isSelected()) {
1567  myList->deselectItem(i);
1568  }
1569  }
1570  return 1;
1571 }
1572 
1573 
1574 long
1576  for (int i = 0; i < myList->getNumItems(); i++) {
1577  if (myList->getItem(i)->isSelected()) {
1578  myList->deselectItem(i);
1579  } else {
1580  myList->selectItem(i);
1581  }
1582  }
1583  return 1;
1584 }
1585 
1586 
1587 long
1589  std::cout << "IMPLEMENT" << std::endl;
1590  return 1;
1591 }
1592 
1593 // ---------------------------------------------------------------------------
1594 // GNEAdditionalFrame::SelectorParentLanes - methods
1595 // ---------------------------------------------------------------------------
1596 
1598  FXGroupBox(parent, "Lanes", GUIDesignGroupBoxFrame),
1599  myViewNet(viewNet) {
1600  // Create CheckBox for selected lanes
1601  myUseSelectedLanesCheckButton = new FXCheckButton(this, ("Use selected " + toString(SUMO_TAG_LANE) + "s").c_str(), this, MID_GNE_ADDITIONALFRAME_USESELECTEDLANES, GUIDesignCheckButtonAttribute);
1602 
1603  // Create search box
1605 
1606  // Create list
1607  myList = new FXList(this, this, MID_GNE_ADDITIONALFRAME_SELECTLANE, GUIDesignList, 0, 0, 0, 100);
1608 
1609  // Create horizontal frame
1610  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(this, GUIDesignAuxiliarHorizontalFrame);
1611 
1612  // Create button for clear selection
1613  clearLanesSelection = new FXButton(buttonsFrame, "clear", 0, this, MID_GNE_ADDITIONALFRAME_CLEARLANESELECTION, GUIDesignButtonRectangular);
1614 
1615  // Create button for invert selection
1616  invertLanesSelection = new FXButton(buttonsFrame, "invert", 0, this, MID_GNE_ADDITIONALFRAME_INVERTLANESELECTION, GUIDesignButtonRectangular);
1617 
1618  // Create help button
1619  helpLanes = new FXButton(this, "Help", 0, this, MID_HELP, GUIDesignButtonRectangular);
1620 
1621  // Hide List
1622  hideList();
1623 }
1624 
1625 
1627 
1628 
1629 std::string
1632 }
1633 
1634 
1635 void
1637  myList->clearItems();
1638  std::vector<GNELane*> vectorOfLanes = myViewNet->getNet()->retrieveLanes(false);
1639  for (auto i : vectorOfLanes) {
1640  if (i->getID().find(search) != std::string::npos) {
1641  myList->appendItem(i->getID().c_str());
1642  }
1643  }
1644  // By default, CheckBox for useSelectedLanes isn't checked
1645  myUseSelectedLanesCheckButton->setCheck(false);
1646  // Show list
1647  show();
1648 }
1649 
1650 
1651 void
1653  hide();
1654 }
1655 
1656 
1657 void
1659  // Enable or disable use selected Lanes
1660  if (myViewNet->getNet()->retrieveLanes(true).size() > 0) {
1662  } else {
1663  myUseSelectedLanesCheckButton->disable();
1664  }
1665 }
1666 
1667 
1668 bool
1670  if (myUseSelectedLanesCheckButton->getCheck()) {
1671  return true;
1672  } else {
1673  return false;
1674  }
1675 }
1676 
1677 
1678 long
1680  if (myUseSelectedLanesCheckButton->getCheck()) {
1681  myLanesSearch->hide();
1682  myList->hide();
1683  clearLanesSelection->hide();
1684  invertLanesSelection->hide();
1685  helpLanes->hide();
1686  } else {
1687  myLanesSearch->show();
1688  myList->show();
1689  clearLanesSelection->show();
1690  invertLanesSelection->show();
1691  helpLanes->show();
1692  }
1693  // Recalc Frame
1694  recalc();
1695  // Update Frame
1696  update();
1697  return 1;
1698 }
1699 
1700 
1701 long
1703  // Show only Id's of SelectorParentLanes that contains the searched string
1704  showList(myLanesSearch->getText().text());
1705  return 1;
1706 }
1707 
1708 
1709 long
1711  return 1;
1712 }
1713 
1714 
1715 long
1717  for (int i = 0; i < myList->getNumItems(); i++) {
1718  if (myList->getItem(i)->isSelected()) {
1719  myList->deselectItem(i);
1720  }
1721  }
1722  return 1;
1723 }
1724 
1725 
1726 long
1728  for (int i = 0; i < myList->getNumItems(); i++) {
1729  if (myList->getItem(i)->isSelected()) {
1730  myList->deselectItem(i);
1731  } else {
1732  myList->selectItem(i);
1733  }
1734  }
1735  return 1;
1736 }
1737 
1738 
1739 long
1741  return 1;
1742 }
1743 
1744 /****************************************************************************/
double setStartPosition(double positionOfTheMouseOverLane, double lengthOfAdditional)
obtain the Start position values of StoppingPlaces and E2 detector over the lane
int maxNumberOfListParameters
max number of parameters (Defined in constructor)
std::vector< GNELane * > retrieveLanes(bool onlySelected=false)
return all lanes
Definition: GNENet.cpp:986
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:199
AddAdditionalResult addAdditional(GNENetElement *netElement, GUISUMOAbstractView *abstractViewParent)
add additional element
#define GUIDesignCheckButtonAttribute
checkButton without thick extended over the frame used for attributes
Definition: GUIDesigns.h:116
int maxNumberOfParameters
max number of parameters (Defined in constructor)
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.
additionalReferencePoint getActualReferencePoint() const
get actual reference point
FXCheckButton * myUseSelectedLanesCheckButton
CheckBox for selected lanes.
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
bool isUseSelectedLanesEnable() const
get status of checkBox UseSelectedLanes
SumoXMLAttr getAttr() const
return attribute of list
GNEAdditionalFrame::AdditionalAttributes * myadditionalParameters
additional internal attributes
GNEAdditional * getAdditional(SumoXMLTag type, const std::string &id) const
Returns the named additional.
Definition: GNENet.cpp:1667
FXDEFMAP(GNEAdditionalFrame) GNEAdditionalMap[]
int myNumberOfVisibleTextfields
number of visible text fields
Position snapToActiveGrid(const Position &pos) const
Returns a position that is mapped to the closest grid point if the grid is active.
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
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
SumoXMLTag getTag() const
return tag of list
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.
change parameter of type text
Definition: GUIAppEnum.h:635
int myIndexParameter
Index for myVectorOfsingleAdditionalParameter.
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:53
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:84
int getNumberOfAdditionals(SumoXMLTag type=SUMO_TAG_NOTHING) const
Returns the number of additionals of the net.
Definition: GNENet.cpp:1709
FXTextField * myLengthTextField
textField for length
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
bool areValuesValid() const
check if parameters of attributes are valid
static bool isValidFilename(const std::string &value)
true if value is a valid file value
long onCmdTypeInSearchBox(FXObject *, FXSelector, void *)
called when user type in search box
help button
Definition: GUIAppEnum.h:396
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.
int getNumberOfAddedAttributes() const
get number of added attributes
void setParametersOfAdditional(SumoXMLTag actualAdditionalType)
set parameters depending of the new additionalType
bool myCurrentLengthValid
Flag to check if current length is valid.
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:199
FXTextField * myEdgesSearch
text field for search edge IDs
void showList(std::string search="")
Show list of SelectorParentEdges.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:64
an e3 entry point
FXButton * myInvertEdgesSelection
button for invert selection
std::string getIdSelected() const
get if currently additional Set
static bool isString(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is of type string
#define GUIDesignComboBox
Definition: GUIDesigns.h:189
GNEViewNet * myViewNet
View Net for changes.
Definition: GNEFrame.h:337
FXCheckButton * myUseSelectedEdgesCheckButton
CheckBox for selected edges.
static bool isInt(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is numerical or type int
static bool isVClass(SumoXMLTag tag, SumoXMLAttr attr)
whether a string attribute is a list of Vehicle Classes
static bool isValidID(const std::string &value)
true if value is a valid sumo ID
static bool isTime(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is time
GNEUndoList * getUndoList() const
get the undoList object
FXButton * clearLanesSelection
button for clear selection
#define GUIDesignList
design for FXLists
Definition: GUIDesigns.h:421
FXLabel * myLengthLabel
Label for length.
void hideLengthFieldAndReferecePoint()
hide length field
long onCmdSetAttribute(FXObject *, FXSelector, void *)
#define GUIDesignTextField
Definition: GUIDesigns.h:40
the edges of a route
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:55
static bool hasAttribute(SumoXMLTag tag, SumoXMLAttr attr)
check if an element with certain tag has a certain attribute
std::map< SumoXMLAttr, std::string > getAttributesAndValues() const
get attributes and their values
This object is responsible for drawing a shape and for supplying a a popup menu. Messages are routete...
Definition: GNECrossing.h:51
static bool canBlockMovement(SumoXMLTag tag)
return true if element tag can block their movement
bool isCurrentLengthValid() const
check if current length is valid
void addAttribute(SumoXMLTag additionalTag, SumoXMLAttr AdditionalAttributeSingle)
add attribute
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:91
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:45
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:246
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
SumoXMLTag myActualAdditionalType
actual additional type selected in the match Box
FXButton * myHelpAdditionalParentSelector
button for help
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
void showWarningMessage(std::string extra="") const
show warning message with information about non-valid attributes
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.
const std::string getID() const
function to support debugging
long onCmdClearSelection(FXObject *, FXSelector, void *)
called when clear selection button is pressed
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
Definition: GUIDesigns.h:182
#define GUIDesignButtonRectangular
little button rectangular (46x23) used in frames (For example, in "help" buttons) ...
Definition: GUIDesigns.h:62
std::vector< FXTextField * > myTextFields
vector textField to modify the value of parameter
double getLaneShapeLength() const
returns the length of the lane&#39;s shape
Definition: GNELane.cpp:712
double getLength() const
get value of length
void hideListOfAdditionals()
hide SelectorParentAdditional
#define GUIDesignButtonIcon
button only with icon (23x23)
Definition: GUIDesigns.h:65
FXButton * myAddButton
Button to increase the number of textFields.
begin/end of the description of an edge
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.
bool canParseVehicleClasses(const std::string &classes)
Checks whether the given string contains only known vehicle classes.
change parameter of tpye bool
Definition: GUIAppEnum.h:637
FXList * myList
List of SelectorParentEdges.
A road/street connecting two junctions (netedit-version)
Definition: GNEEdge.h:56
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...
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:205
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition: GUIDesigns.h:49
compound additional
SumoXMLTag myAdditionalTag
current XML attribute
FXLabel * myLabel
lael with the name of the parameter
AddAdditionalResult
FOX-declaration.
long onCmdSetBlocking(FXObject *, FXSelector, void *)
Called when user changes the checkbox "set blocking".
SumoXMLTag myAdditionalTag
current additional tag
const PositionVector & getShape() const
returns the shape of the lane
Definition: GNELane.cpp:599
const std::vector< GNELane * > & getLanes()
returns a reference to the lane vector
Definition: GNEEdge.cpp:653
virtual void show()
show Frame
Definition: GNEFrame.cpp:546
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:395
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:974
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:59
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
Definition: GUIDesigns.h:221
static bool isBool(SumoXMLTag tag, SumoXMLAttr attr)
whether an attribute is of type bool for a certain tag
weights: time range end
attribute block movement
Definition: GUIAppEnum.h:639
GNEViewNet * myViewNet
viewNet associated to GNEAdditionalFrame
std::string getListValues()
return the value of list
std::vector< GNEAdditional * > getAdditionals(SumoXMLTag type=SUMO_TAG_NOTHING) const
get vector with additionals
Definition: GNENet.cpp:1679
bool myUniqueSelection
flag to check if only a single parent is allowed
bool isCurrentListValid() const
check that current list is valid
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.
bool isBlockEnabled() const
check if block is enabled
static std::string getDefinition(SumoXMLTag tag, SumoXMLAttr attr)
return definition of a certain SumoXMLAttr
#define GUIDesignTextFieldInt
text field extended over Frame with thick frame and limited to Integers
Definition: GUIDesigns.h:43
virtual void hide()
hide Frame
Definition: GNEFrame.cpp:555
std::string generateID(GNENetElement *netElement) const
generate a ID for an additiona element
long onCmdHelp(FXObject *, FXSelector, void *)
Called when user press the help button.
show only selected edge in a list
Definition: GUIAppEnum.h:651
GNENet * getNet() const
get the net object
#define GUIDesignTextFieldReal
text field extended over Frame with thick frame and limited to Doubles/doubles
Definition: GUIDesigns.h:46
void hideList()
hide SelectorParentEdges
GUIGlID getGlID() const
Returns the numerical id of the object.
#define GUIDesignButtonOK
Definition: GUIDesigns.h:97
const std::string & isAttributeValid() const
returns a empty string if current value is valid, a string with information about invalid value in ot...
void setStatusBarText(const std::string &text)
set staturBar text
Definition: GNEViewNet.cpp:322
long onCmdInvertSelection(FXObject *, FXSelector, void *)
called when invert selection button is pressed
bool isUseSelectedEdgesEnable() const
get status of checkBox UseSelectedEdges
Position getPositionInformation() const
Returns the cursor&#39;s x/y position within the network.
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.
The Table.
Definition: GUIAppEnum.h:288
std::string getIdsSelected() const
get list of selecte id&#39;s in string format
GNEAdditionalFrame::SelectorParentAdditional * myAdditionalParentSelector
list of additional Set
FXTextField * myTextFieldInt
textField to modify the default value of int/float/string parameters
static std::string getIdsSelected(const FXList *list)
get list of selecte id&#39;s in string format
#define GUIDesignLabelAttribute
label extended over the matrix column with thick frame and height of 23
Definition: GUIDesigns.h:164
std::string getIdsSelected() const
get list of selecte id&#39;s in string format
long onCmdSetLength(FXObject *, FXSelector, void *)
FXHorizontalFrame * myHorizontalFrameButtons
horizontal frame for buttons
double nearest_offset_to_point2D(const Position &p, bool perpendicular=true) const
return the nearest offest to point 2D
const std::vector< GNEAdditional * > & getAdditionalChilds() const
return vector of additionals that have as Parent this edge (For example, Calibrators) ...
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 and height of 23 ...
Definition: GUIDesigns.h:155
std::string joinToString(const std::vector< T > &v, const T_BETWEEN &between, std::streamsize accuracy=gPrecision)
Definition: ToString.h:236
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.
SumoXMLTag getTag() const
get XML Tag assigned to this object
FXButton * myHelpedgeParentsSelector
button for help