Eclipse SUMO - Simulation of Urban MObility
GNEDialog_FixDemandElements.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-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
15 // Dialog used to fix demand elements during saving
16 /****************************************************************************/
17 
18 // ===========================================================================
19 // included modules
20 // ===========================================================================
21 #include <config.h>
22 
26 #include <netedit/GNENet.h>
27 #include <netedit/GNEViewNet.h>
28 #include <netedit/GNEUndoList.h>
29 
31 
32 
33 // ===========================================================================
34 // FOX callback mapping
35 // ===========================================================================
36 
37 FXDEFMAP(GNEDialog_FixDemandElements) GNEDialog_FixDemandElementsMap[] = {
41 };
42 
43 // Object implementation
44 FXIMPLEMENT(GNEDialog_FixDemandElements, FXDialogBox, GNEDialog_FixDemandElementsMap, ARRAYNUMBER(GNEDialog_FixDemandElementsMap))
45 
46 // ===========================================================================
47 // member method definitions
48 // ===========================================================================
49 
50 GNEDialog_FixDemandElements::GNEDialog_FixDemandElements(GNEViewNet* viewNet, const std::vector<GNEDemandElement*>& invalidDemandElements) :
51  FXDialogBox(viewNet->getApp(), "Fix demand elements problems", GUIDesignDialogBoxExplicit(500, 420)),
52  myViewNet(viewNet) {
53  // set busStop icon for this dialog
55  // create main frame
56  myMainFrame = new FXVerticalFrame(this, GUIDesignAuxiliarFrame);
57  // create demand list
58  myDemandList = new DemandList(this, invalidDemandElements);
59  // create fix route options
60  myFixRouteOptions = new FixRouteOptions(this);
61  // create fix vehicle options
62  myFixVehicleOptions = new FixVehicleOptions(this);
63  // create fix stops options
64  myFixStopOptions = new FixStopOptions(this);
65  // check if fix route options has to be disabled
66  if (myDemandList->myInvalidRoutes.empty()) {
67  myFixRouteOptions->disableFixRouteOptions();
68  }
69  // check if fix vehicle options has to be disabled
70  if (myDemandList->myInvalidVehicles.empty()) {
71  myFixVehicleOptions->disableFixVehicleOptions();
72  }
73  // check if fix vehicle options has to be disabled
74  if (myDemandList->myInvalidVehicles.empty()) {
75  myFixStopOptions->disableFixStopOptions();
76  }
77  // create dialog buttons bot centered
78  FXHorizontalFrame* buttonsFrame = new FXHorizontalFrame(myMainFrame, GUIDesignHorizontalFrame);
79  new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
80  myAcceptButton = new FXButton(buttonsFrame, FXWindow::tr("&Accept"), GUIIconSubSys::getIcon(ICON_ACCEPT), this, MID_GNE_ADDITIONALDIALOG_BUTTONACCEPT, GUIDesignButtonAccept);
81  myCancelButton = new FXButton(buttonsFrame, FXWindow::tr("&Cancel"), GUIIconSubSys::getIcon(ICON_CANCEL), this, MID_GNE_ADDITIONALDIALOG_BUTTONCANCEL, GUIDesignButtonCancel);
82  new FXHorizontalFrame(buttonsFrame, GUIDesignAuxiliarHorizontalFrame);
83  // set focus in accept button
84  myAcceptButton->setFocus();
85 }
86 
87 
89 }
90 
91 
92 long
93 GNEDialog_FixDemandElements::onCmdSelectOption(FXObject* obj, FXSelector, void*) {
97  return 1;
98 }
99 
100 
101 long
102 GNEDialog_FixDemandElements::onCmdAccept(FXObject*, FXSelector, void*) {
103  bool continueSaving = true;
104  // first check options for invalid routes
105  if (myDemandList->myInvalidRoutes.size() > 0) {
106  if (myFixRouteOptions->removeInvalidRoutes->getCheck() == TRUE) {
107  // begin undo list
108  myViewNet->getUndoList()->p_begin("delete invalid routes");
109  // iterate over invalid routes to delete it
110  for (auto i : myDemandList->myInvalidRoutes) {
112  }
113  // end undo list
115  } else if (myFixRouteOptions->selectInvalidRoutesAndCancel->getCheck() == TRUE) {
116  // begin undo list
117  myViewNet->getUndoList()->p_begin("select invalid routes");
118  // iterate over invalid single lane elements to select all elements
119  for (auto i : myDemandList->myInvalidRoutes) {
120  i->setAttribute(GNE_ATTR_SELECTED, "true", myViewNet->getUndoList());
121  }
122  // end undo list
124  // abort saving
125  continueSaving = false;
126  }
127  }
128  // first check options for invalid vehicles
129  if (myDemandList->myInvalidVehicles.size() > 0) {
130  if (myFixVehicleOptions->removeInvalidVehicles->getCheck() == TRUE) {
131  // begin undo list
132  myViewNet->getUndoList()->p_begin("delete invalid vehicles");
133  // iterate over invalid stops to delete it
134  for (auto i : myDemandList->myInvalidVehicles) {
136  }
137  // end undo list
139  } else if (myFixVehicleOptions->selectInvalidVehiclesAndCancel->getCheck() == TRUE) {
140  // begin undo list
141  myViewNet->getUndoList()->p_begin("select invalid vehicles");
142  // iterate over invalid single lane elements to select all elements
143  for (auto i : myDemandList->myInvalidVehicles) {
144  i->setAttribute(GNE_ATTR_SELECTED, "true", myViewNet->getUndoList());
145  }
146  // end undo list
148  // abort saving
149  continueSaving = false;
150  }
151  }
152  // first check options for stops
153  if (myDemandList->myInvalidStops.size() > 0) {
154  if (myFixStopOptions->activateFriendlyPositionAndSave->getCheck() == TRUE) {
155  // begin undo list
156  myViewNet->getUndoList()->p_begin("change " + toString(SUMO_ATTR_FRIENDLY_POS) + " of invalid stops");
157  // iterate over invalid stops to enable friendly position
158  for (auto i : myDemandList->myInvalidStops) {
159  i->setAttribute(SUMO_ATTR_FRIENDLY_POS, "true", myViewNet->getUndoList());
160  }
162  } else if (myFixStopOptions->fixPositionsAndSave->getCheck() == TRUE) {
163  myViewNet->getUndoList()->p_begin("fix positions of invalid stops");
164  // iterate over invalid stops to fix positions
165  for (auto i : myDemandList->myInvalidStops) {
166  i->fixDemandElementProblem();
167  }
169  } else if (myFixStopOptions->selectInvalidStopsAndCancel->getCheck() == TRUE) {
170  myViewNet->getUndoList()->p_begin("select invalid stops");
171  // iterate over invalid stops to select all elements
172  for (auto i : myDemandList->myInvalidStops) {
173  i->setAttribute(GNE_ATTR_SELECTED, "true", myViewNet->getUndoList());
174  }
175  // end undo list
177  // abort saving
178  continueSaving = false;
179  }
180  }
181  if (continueSaving) {
182  // stop modal with TRUE (continue saving)
183  getApp()->stopModal(this, TRUE);
184  } else {
185  // stop modal with TRUE (abort saving)
186  getApp()->stopModal(this, FALSE);
187  }
188  return 1;
189 }
190 
191 
192 long
193 GNEDialog_FixDemandElements::onCmdCancel(FXObject*, FXSelector, void*) {
194  // Stop Modal (abort saving)
195  getApp()->stopModal(this, FALSE);
196  return 1;
197 }
198 
199 // ---------------------------------------------------------------------------
200 // GNEDialog_FixDemandElements::DemandList - methods
201 // ---------------------------------------------------------------------------
202 
203 GNEDialog_FixDemandElements::DemandList::DemandList(GNEDialog_FixDemandElements* fixDemandElementsDialogParents, const std::vector<GNEDemandElement*>& invalidDemandElements) :
204  FXGroupBox(fixDemandElementsDialogParents->myMainFrame, "Routes and Vehicles with conflicts", GUIDesignGroupBoxFrameFill) {
205  // Create table, copy intervals and update table
207  myTable->setSelBackColor(FXRGBA(255, 255, 255, 255));
208  myTable->setSelTextColor(FXRGBA(0, 0, 0, 255));
209  myTable->setEditable(false);
210  // separate demand elements in three groups
211  for (const auto& i : invalidDemandElements) {
212  if (i->getTagProperty().isVehicle()) {
213  myInvalidVehicles.push_back(i);
214  } else if (i->getTagProperty().isStop()) {
215  myInvalidStops.push_back(i);
216  } else {
217  myInvalidRoutes.push_back(i);
218  }
219  }
220  // clear table
221  myTable->clearItems();
222  // set number of rows
223  myTable->setTableSize((int)(myInvalidRoutes.size() + myInvalidVehicles.size()), 3);
224  // Configure list
225  myTable->setVisibleColumns(4);
226  myTable->setColumnWidth(0, GUIDesignTableIconCellWidth);
227  myTable->setColumnWidth(1, 160);
228  myTable->setColumnWidth(2, 280);
229  myTable->setColumnText(0, "");
230  myTable->setColumnText(1, toString(SUMO_ATTR_ID).c_str());
231  myTable->setColumnText(2, "Conflict");
232  myTable->getRowHeader()->setWidth(0);
233  // Declare index for rows and pointer to FXTableItem
234  int indexRow = 0;
235  FXTableItem* item = nullptr;
236  // iterate over invalid routes
237  for (auto i : myInvalidRoutes) {
238  // Set icon
239  item = new FXTableItem("", i->getIcon());
240  item->setIconPosition(FXTableItem::CENTER_X);
241  myTable->setItem(indexRow, 0, item);
242  // Set ID
243  item = new FXTableItem(i->getID().c_str());
244  item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
245  myTable->setItem(indexRow, 1, item);
246  // Set conflict
247  item = new FXTableItem(i->getDemandElementProblem().c_str());
248  item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
249  myTable->setItem(indexRow, 2, item);
250  // Update index
251  indexRow++;
252  }
253  // iterate over invalid vehicles
254  for (auto i : myInvalidVehicles) {
255  // Set icon
256  item = new FXTableItem("", i->getIcon());
257  item->setIconPosition(FXTableItem::CENTER_X);
258  myTable->setItem(indexRow, 0, item);
259  // Set ID
260  item = new FXTableItem(i->getID().c_str());
261  item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
262  myTable->setItem(indexRow, 1, item);
263  // Set conflict
264  item = new FXTableItem(i->getDemandElementProblem().c_str());
265  item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
266  myTable->setItem(indexRow, 2, item);
267  // Update index
268  indexRow++;
269  }
270  // iterate over invalid stops
271  for (auto i : myInvalidStops) {
272  // Set icon
273  item = new FXTableItem("", i->getIcon());
274  item->setIconPosition(FXTableItem::CENTER_X);
275  myTable->setItem(indexRow, 0, item);
276  // Set ID
277  item = new FXTableItem(i->getID().c_str());
278  item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
279  myTable->setItem(indexRow, 1, item);
280  // Set conflict
281  item = new FXTableItem(i->getDemandElementProblem().c_str());
282  item->setJustify(FXTableItem::LEFT | FXTableItem::CENTER_Y);
283  myTable->setItem(indexRow, 2, item);
284  // Update index
285  indexRow++;
286  }
287 }
288 
289 
290 // ---------------------------------------------------------------------------
291 // GNEDialog_FixDemandElements::FixRouteOptions - methods
292 // ---------------------------------------------------------------------------
293 
295  FXGroupBox(fixDemandElementsDialogParents->myMainFrame, "Solution for routes", GUIDesignGroupBoxFrame) {
296  // create horizontal frames for radio buttons
297  FXHorizontalFrame* radioButtonsFrame = new FXHorizontalFrame(this, GUIDesignHorizontalFrame);
298  // create radio button for remove invalid routes
299  removeInvalidRoutes = new FXRadioButton(radioButtonsFrame, "Remove invalid routes",
300  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
301  // create radio button for save invalid routes
302  saveInvalidRoutes = new FXRadioButton(radioButtonsFrame, "Save invalid routes",
303  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
304  // create radio button for select invalid routes
305  selectInvalidRoutesAndCancel = new FXRadioButton(radioButtonsFrame, "Select invalid routes",
306  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
307  // leave option "removeInvalidRoutes" as default
308  removeInvalidRoutes->setCheck(true);
309 }
310 
311 
312 void
314  if (option == removeInvalidRoutes) {
315  removeInvalidRoutes->setCheck(true);
316  saveInvalidRoutes->setCheck(false);
317  selectInvalidRoutesAndCancel->setCheck(false);
318  } else if (option == saveInvalidRoutes) {
319  removeInvalidRoutes->setCheck(false);
320  saveInvalidRoutes->setCheck(true);
321  selectInvalidRoutesAndCancel->setCheck(false);
322  } else if (option == selectInvalidRoutesAndCancel) {
323  removeInvalidRoutes->setCheck(false);
324  saveInvalidRoutes->setCheck(false);
325  selectInvalidRoutesAndCancel->setCheck(true);
326  }
327 }
328 
329 
330 void
332  removeInvalidRoutes->enable();
333  saveInvalidRoutes->enable();
335 }
336 
337 
338 void
340  removeInvalidRoutes->disable();
341  saveInvalidRoutes->disable();
342  selectInvalidRoutesAndCancel->disable();
343 }
344 
345 // ---------------------------------------------------------------------------
346 // GNEDialog_FixDemandElements::FixVehicleOptions - methods
347 // ---------------------------------------------------------------------------
348 
350  FXGroupBox(fixDemandElementsDialogParents->myMainFrame, "Solution for vehicles", GUIDesignGroupBoxFrame) {
351  // create horizontal frames for radio buttons
352  FXHorizontalFrame* radioButtonsFrame = new FXHorizontalFrame(this, GUIDesignHorizontalFrame);
353  // create radio button for remove invalid vehicles
354  removeInvalidVehicles = new FXRadioButton(radioButtonsFrame, "Remove invalid vehicles",
355  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
356  // create radio button for save invalid vehicles
357  saveInvalidVehicles = new FXRadioButton(radioButtonsFrame, "Save invalid vehicles",
358  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
359  // create radio button for select invalid vehicles
360  selectInvalidVehiclesAndCancel = new FXRadioButton(radioButtonsFrame, "Select invalid vehicle",
361  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
362  // leave option "buildConnectionBetweenLanes" and "removeInvalidRoutes" as default
363  removeInvalidVehicles->setCheck(true);
364 }
365 
366 
367 void
369  if (option == removeInvalidVehicles) {
370  removeInvalidVehicles->setCheck(true);
371  saveInvalidVehicles->setCheck(false);
372  selectInvalidVehiclesAndCancel->setCheck(false);
373  } else if (option == saveInvalidVehicles) {
374  removeInvalidVehicles->setCheck(false);
375  saveInvalidVehicles->setCheck(true);
376  selectInvalidVehiclesAndCancel->setCheck(false);
377  } else if (option == selectInvalidVehiclesAndCancel) {
378  removeInvalidVehicles->setCheck(false);
379  saveInvalidVehicles->setCheck(false);
380  selectInvalidVehiclesAndCancel->setCheck(true);
381  }
382 }
383 
384 
385 void
387  removeInvalidVehicles->enable();
388  saveInvalidVehicles->enable();
390 }
391 
392 
393 void
395  removeInvalidVehicles->disable();
396  saveInvalidVehicles->disable();
398 }
399 
400 // ---------------------------------------------------------------------------
401 // GNEDialog_FixDemandElements::FixStopOptions - methods
402 // ---------------------------------------------------------------------------
403 
405  FXGroupBox(fixDemandElementsDialogParents->myMainFrame, "Select a solution for stops", GUIDesignGroupBoxFrame) {
406  // create horizontal frames for radio buttons
407  FXHorizontalFrame* RadioButtons = new FXHorizontalFrame(this, GUIDesignHorizontalFrame);
408  // create Vertical Frame for left options
409  FXVerticalFrame* RadioButtonsLeft = new FXVerticalFrame(RadioButtons, GUIDesignAuxiliarVerticalFrame);
410  activateFriendlyPositionAndSave = new FXRadioButton(RadioButtonsLeft, "Activate friendlyPos and save",
411  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
412  saveInvalid = new FXRadioButton(RadioButtonsLeft, "Save invalid positions",
413  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
414  // create Vertical Frame for right options
415  FXVerticalFrame* RadioButtonsRight = new FXVerticalFrame(RadioButtons, GUIDesignAuxiliarVerticalFrame);
416  selectInvalidStopsAndCancel = new FXRadioButton(RadioButtonsRight, "Select invalid Stops",
417  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
418  fixPositionsAndSave = new FXRadioButton(RadioButtonsRight, "Fix positions and save",
419  fixDemandElementsDialogParents, MID_CHOOSEN_OPERATION, GUIDesignRadioButton);
420  // leave option "activateFriendlyPositionAndSave" as default
421  activateFriendlyPositionAndSave->setCheck(true);
422 }
423 
424 
425 void
427  if (option == activateFriendlyPositionAndSave) {
428  activateFriendlyPositionAndSave->setCheck(true);
429  fixPositionsAndSave->setCheck(false);
430  saveInvalid->setCheck(false);
431  selectInvalidStopsAndCancel->setCheck(false);
432  } else if (option == fixPositionsAndSave) {
433  activateFriendlyPositionAndSave->setCheck(false);
434  fixPositionsAndSave->setCheck(true);
435  saveInvalid->setCheck(false);
436  selectInvalidStopsAndCancel->setCheck(false);
437  } else if (option == saveInvalid) {
438  activateFriendlyPositionAndSave->setCheck(false);
439  fixPositionsAndSave->setCheck(false);
440  saveInvalid->setCheck(true);
441  selectInvalidStopsAndCancel->setCheck(false);
442  } else if (option == selectInvalidStopsAndCancel) {
443  activateFriendlyPositionAndSave->setCheck(false);
444  fixPositionsAndSave->setCheck(false);
445  saveInvalid->setCheck(false);
446  selectInvalidStopsAndCancel->setCheck(true);
447  }
448 }
449 
450 
451 void
454  fixPositionsAndSave->enable();
455  saveInvalid->enable();
456  selectInvalidStopsAndCancel->enable();
457 }
458 
459 
460 void
463  fixPositionsAndSave->disable();
464  saveInvalid->disable();
465  selectInvalidStopsAndCancel->disable();
466 }
467 
468 /****************************************************************************/
#define GUIDesignTableIconCellWidth
width of cells that only contains an Icon
Definition: GUIDesigns.h:483
FixStopOptions(GNEDialog_FixDemandElements *fixDemandElementsDialogParents)
build Position Options
FXRadioButton * fixPositionsAndSave
Option "Fix Positions and save".
#define GUIDesignHorizontalFrame
Definition: GUIDesigns.h:240
groupbox for all radio buttons related with fix stop options
FXRadioButton * removeInvalidVehicles
Option "remove invalid elements".
FXRadioButton * selectInvalidRoutesAndCancel
Option "Select invalid routes and cancel".
FXRadioButton * activateFriendlyPositionAndSave
Option "Activate friendlyPos and save".
FXRadioButton * selectInvalidVehiclesAndCancel
Option "Select invalid vehicles and cancel".
long onCmdSelectOption(FXObject *obj, FXSelector, void *)
void deleteDemandElement(GNEDemandElement *demandElement, GNEUndoList *undoList)
remove demand element
Definition: GNENet.cpp:638
std::vector< GNEDemandElement * > myInvalidRoutes
vector with the invalid routes
FXDEFMAP(GNEDialog_FixDemandElements) GNEDialog_FixDemandElementsMap[]
groupbox for all radio buttons related with fix vehicle options
#define GUIDesignButtonCancel
Cancel Button.
Definition: GUIDesigns.h:120
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:73
std::vector< GNEDemandElement * > myInvalidVehicles
vector with the invalid vehicles
FXRadioButton * saveInvalidRoutes
Option "Save invalid routes".
FixStoppingPlaces dialog.
Definition: GUIAppEnum.h:1035
FixRouteOptions(GNEDialog_FixDemandElements *fixDemandElementsDialogParents)
constructor
long onCmdAccept(FXObject *, FXSelector, void *)
event after press accept button
FixRouteOptions * myFixRouteOptions
fix route options
FXRadioButton * selectInvalidStopsAndCancel
Option "Select invalid stops and cancel".
GNEUndoList * getUndoList() const
get the undoList object
Definition: GNEViewNet.cpp:933
set type of selection
Definition: GUIAppEnum.h:493
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frames used to pack another frames extended in all directions ...
Definition: GUIDesigns.h:286
FixStopOptions * myFixStopOptions
fix stop options
std::vector< GNEDemandElement * > myInvalidStops
vector with the invalid stops
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:48
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
#define GUIDesignDialogBoxExplicit(width, height)
design for dialog box with specift width and height (for example, additional dialogs) ...
Definition: GUIDesigns.h:461
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:80
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:289
FXVerticalFrame * myMainFrame
main frame
FXTable * myTable
list with the demand elements
DemandList * myDemandList
list with the demand elements
#define GUIDesignTableAdditionals
design for tables used in additional dialogs
Definition: GUIDesigns.h:480
#define GUIDesignGroupBoxFrameFill
Group box design extended over frame (X and Y)
Definition: GUIDesigns.h:258
#define GUIDesignAuxiliarVerticalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames ...
Definition: GUIDesigns.h:292
#define GUIDesignButtonAccept
Accept Button.
Definition: GUIDesigns.h:117
groupbox for all radio buttons related with fix route options
#define GUIDesignGroupBoxFrame
Group box design extended over frame.
Definition: GUIDesigns.h:255
element is selected
FXRadioButton * saveInvalid
Option "Save invalid".
GNENet * getNet() const
get the net object
Definition: GNEViewNet.cpp:927
DemandList(GNEDialog_FixDemandElements *fixDemandElementsDialogParents, const std::vector< GNEDemandElement *> &invalidDemandElements)
constructor
void enableFixVehicleOptions()
enable consecutive lane options
FixVehicleOptions(GNEDialog_FixDemandElements *fixDemandElementsDialogParents)
constructor
FixVehicleOptions * myFixVehicleOptions
fix vehicle options
FXRadioButton * saveInvalidVehicles
Option "save invalid vehicles".
#define GUIDesignRadioButton
Definition: GUIDesigns.h:155
static FXIcon * getIcon(GUIIcon which)
returns a icon previously defined in the enum GUIIcon
An Element which don&#39;t belongs to GNENet but has influency in the simulation.
FXRadioButton * removeInvalidRoutes
Option "Remove invalid routes".
void disableFixVehicleOptions()
disable consecutive lane options