Eclipse SUMO - Simulation of Urban MObility
GNECalibratorDialog.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-2022 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// Dialog for edit calibrators
19/****************************************************************************/
20
25#include <netedit/GNENet.h>
26#include <netedit/GNEViewNet.h>
27#include <netedit/GNEUndoList.h>
32
33#include "GNECalibratorDialog.h"
35#include "GNERouteDialog.h"
37
38// ===========================================================================
39// FOX callback mapping
40// ===========================================================================
41
42FXDEFMAP(GNECalibratorDialog) GNECalibratorDialogMap[] = {
49};
50
51// Object implementation
52FXIMPLEMENT(GNECalibratorDialog, GNEAdditionalDialog, GNECalibratorDialogMap, ARRAYNUMBER(GNECalibratorDialogMap))
53
54// ===========================================================================
55// member method definitions
56// ===========================================================================
57
59 GNEAdditionalDialog(editedCalibrator, false, 640, 480) {
60
61 // Create two columns, one for Routes and VehicleTypes, and other for Flows
62 FXHorizontalFrame* columns = new FXHorizontalFrame(myContentFrame, GUIDesignUniformHorizontalFrame);
63 FXVerticalFrame* columnLeft = new FXVerticalFrame(columns, GUIDesignAuxiliarFrame);
64 FXVerticalFrame* columnRight = new FXVerticalFrame(columns, GUIDesignAuxiliarFrame);
65
66 // create add button and label for routes
67 FXHorizontalFrame* buttonAndLabelRoute = new FXHorizontalFrame(columnLeft, GUIDesignAuxiliarHorizontalFrame);
68 myAddRoute = new FXButton(buttonAndLabelRoute, "", GUIIconSubSys::getIcon(GUIIcon::ADD), this, MID_GNE_CALIBRATORDIALOG_ADD_ROUTE, GUIDesignButtonIcon);
69 new FXLabel(buttonAndLabelRoute, ("Add new " + toString(SUMO_TAG_ROUTE) + "s").c_str(), nullptr, GUIDesignLabelThick);
70
71 // Create table in left frame
72 myRouteList = new FXTable(columnLeft, this, MID_GNE_CALIBRATORDIALOG_TABLE_ROUTE, GUIDesignTableAdditionals);
73 myRouteList->setSelBackColor(FXRGBA(255, 255, 255, 255));
74 myRouteList->setSelTextColor(FXRGBA(0, 0, 0, 255));
75 myRouteList->setEditable(false);
76
77 // create add button and label for vehicle types
78 FXHorizontalFrame* buttonAndLabelVehicleType = new FXHorizontalFrame(columnLeft, GUIDesignAuxiliarHorizontalFrame);
79 myAddVehicleType = new FXButton(buttonAndLabelVehicleType, "", GUIIconSubSys::getIcon(GUIIcon::ADD), this, MID_GNE_CALIBRATORDIALOG_ADD_VEHICLETYPE, GUIDesignButtonIcon);
80 new FXLabel(buttonAndLabelVehicleType, ("Add new " + toString(SUMO_TAG_VTYPE) + "s").c_str(), nullptr, GUIDesignLabelThick);
81
82 // Create table in left frame
83 myVehicleTypeList = new FXTable(columnLeft, this, MID_GNE_CALIBRATORDIALOG_TABLE_VEHICLETYPE, GUIDesignTableAdditionals);
84 myVehicleTypeList->setSelBackColor(FXRGBA(255, 255, 255, 255));
85 myVehicleTypeList->setSelTextColor(FXRGBA(0, 0, 0, 255));
86 myVehicleTypeList->setEditable(false);
87
88 // create add button and label for flows in right frame
89 FXHorizontalFrame* buttonAndLabelFlow = new FXHorizontalFrame(columnRight, GUIDesignAuxiliarHorizontalFrame);
90 myAddFlow = new FXButton(buttonAndLabelFlow, "", GUIIconSubSys::getIcon(GUIIcon::ADD), this, MID_GNE_CALIBRATORDIALOG_ADD_FLOW, GUIDesignButtonIcon);
91 myLabelFlow = new FXLabel(buttonAndLabelFlow, ("Add new " + toString(GNE_TAG_CALIBRATOR_FLOW) + "s").c_str(), nullptr, GUIDesignLabelThick);
92
93 // Create table in right frame
94 myFlowList = new FXTable(columnRight, this, MID_GNE_CALIBRATORDIALOG_TABLE_FLOW, GUIDesignTableAdditionals);
95 myFlowList->setSelBackColor(FXRGBA(255, 255, 255, 255));
96 myFlowList->setSelTextColor(FXRGBA(0, 0, 0, 255));
97 myFlowList->setEditable(false);
98
99 // update tables
100 updateRouteTable();
101 updateVehicleTypeTable();
102 updateFlowTable();
103
104 // start a undo list for editing local to this additional
105 initChanges();
106
107 // Open dialog as modal
108 openAsModalDialog();
109}
110
111
113
114
115long
116GNECalibratorDialog::onCmdAccept(FXObject*, FXSelector, void*) {
117 // accept changes before closing dialog
119 // Stop Modal
120 getApp()->stopModal(this, TRUE);
121 return 1;
122}
123
124
125long
126GNECalibratorDialog::onCmdCancel(FXObject*, FXSelector, void*) {
127 // cancel changes
129 // Stop Modal
130 getApp()->stopModal(this, FALSE);
131 return 1;
132}
133
134
135long
136GNECalibratorDialog::onCmdReset(FXObject*, FXSelector, void*) {
137 // reset changes
138 resetChanges();
139 // update tables
143 return 1;
144}
145
146
147long
148GNECalibratorDialog::onCmdAddRoute(FXObject*, FXSelector, void*) {
149 // create new calibrator route and configure it with modal GNERouteDialog
150 GNERouteDialog(new GNERoute(myEditedAdditional->getNet()), false); // NOSONAR, constructor returns after dialog has been closed
151 // update routes table
153 return 1;
154}
155
156
157long
158GNECalibratorDialog::onCmdClickedRoute(FXObject*, FXSelector, void*) {
159 // check if some delete button was pressed
160 for (int i = 0; i < (int)myEditedAdditional->getNet()->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_ROUTE).size(); i++) {
161 // obtain rerouter
163 if (myRouteList->getItem(i, 2)->hasFocus()) {
164 // find all flows that contains route to delete as "route" parameter
165 std::vector<GNEAdditional*> calibratorFlowsToErase;
166 for (auto j : myEditedAdditional->getChildAdditionals()) {
167 if (j->getAttribute(SUMO_ATTR_ROUTE) == myRouteList->getItem(i, 0)->getText().text()) {
168 calibratorFlowsToErase.push_back(j);
169 }
170 }
171 // if there are flows that has route to remove as "route" parameter
172 if (calibratorFlowsToErase.size() > 0) {
173 // write warning if netedit is running in testing mode
174 WRITE_DEBUG("Opening FXMessageBox of type 'question'");
175 // open question dialog box
176 const std::string msg = ("Deletion of " + toString(SUMO_TAG_ROUTE) + " '" + myRouteList->getItem(i, 0)->getText().text() + "' will remove " +
177 toString(calibratorFlowsToErase.size()) + " " + toString(GNE_TAG_CALIBRATOR_FLOW) + (calibratorFlowsToErase.size() > 1 ? ("s") : ("")) + ". Continue?");
178 FXuint answer = FXMessageBox::question(getApp(), MBOX_YES_NO, ("Remove " + toString(GNE_TAG_CALIBRATOR_FLOW) + "s").c_str(), "%s", msg.c_str());
179 if (answer != 1) { //1:yes, 2:no, 4:esc
180 // write warning if netedit is running in testing mode
181 if (answer == 2) {
182 WRITE_DEBUG("Closed FXMessageBox of type 'question' with 'No'");
183 } else if (answer == 4) {
184 WRITE_DEBUG("Closed FXMessageBox of type 'question' with 'ESC'");
185 }
186 // abort deletion of route
187 return 0;
188 } else {
189 // write warning if netedit is running in testing mode
190 WRITE_DEBUG("Closed FXMessageBox of type 'question' with 'Yes'");
191 // remove affected flows of calibrator flows
192 for (auto j : calibratorFlowsToErase) {
194 }
195 // remove route of calibrator routes
196 myEditedAdditional->getNet()->getViewNet()->getUndoList()->add(new GNEChange_DemandElement(routeToEdit, false), true);
197 // update flows and route table
200 return 1;
201 }
202 } else {
203 // remove route
204 myEditedAdditional->getNet()->getViewNet()->getUndoList()->add(new GNEChange_DemandElement(routeToEdit, false), true);
205 // update routes table
207 return 1;
208 }
209 } else if (myRouteList->getItem(i, 0)->hasFocus() || myRouteList->getItem(i, 1)->hasFocus()) {
210 // modify route of calibrator routes with modal dialog
211 GNERouteDialog(routeToEdit, true); // NOSONAR, constructor returns after dialog has been closed
212 // update routes table
214 // update Flows routes also because Route ID could be changed
216 return 1;
217 }
218 }
219 // nothing to do
220 return 0;
221}
222
223
224long
225GNECalibratorDialog::onCmdAddFlow(FXObject*, FXSelector, void*) {
226 // get routes and vTypes
229 // only add flow if there is at least a GNERoute (There is always a Vehicle Type)
230 if (routes.size() > 0) {
231 // create new calibrator and configure it with modal GNECalibratorFlowDialog
232 GNECalibratorFlowDialog(new GNECalibratorFlow(myEditedAdditional, defaultVType, *routes.begin()), false); // NOSONAR, constructor returns after dialog has been closed
233 // update flows table
235 return 1;
236 } else {
237 throw ProcessError("routes cannot be empty");
238 }
239}
240
241
242long
243GNECalibratorDialog::onCmdClickedFlow(FXObject*, FXSelector, void*) {
244 // check if some delete button was pressed
245 for (int i = 0; i < (int)myEditedAdditional->getChildAdditionals().size(); i++) {
246 if (myFlowList->getItem(i, 2)->hasFocus()) {
247 // remove flow of calibrator flows
249 // update flows table
251 return 1;
252 } else if (myFlowList->getItem(i, 0)->hasFocus() || myFlowList->getItem(i, 1)->hasFocus()) {
253 // modify flow of calibrator flows (temporal) with modal dialog
254 GNECalibratorFlowDialog(myEditedAdditional->getChildAdditionals().at(i), true); // NOSONAR, constructor returns after dialog has been closed
255 // update flows table
257 return 1;
258 }
259 }
260 // nothing to do
261 return 0;
262}
263
264
265long
266GNECalibratorDialog::onCmdAddVehicleType(FXObject*, FXSelector, void*) {
267 // create a new Vehicle Type and configure it with modal GNEVehicleTypeDialog
269 GNEVehicleTypeDialog(new GNEVType(myEditedAdditional->getNet(), vehicleTypeID, SVC_PASSENGER), false); // NOSONAR, constructor returns after dialog has been closed
270 // update vehicle types table
272 return 1;
273}
274
275
276long
277GNECalibratorDialog::onCmdClickedVehicleType(FXObject*, FXSelector, void*) {
278 // check if some delete button was pressed
279 for (int i = 0; i < (int)myEditedAdditional->getNet()->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_VTYPE).size(); i++) {
280 // obtain vehicle type
282 // Make sure that default vehicle isn't edited
283 if ((i == 0) && (myVehicleTypeList->getItem(i, 0)->hasFocus() || myVehicleTypeList->getItem(i, 1)->hasFocus() || myVehicleTypeList->getItem(i, 2)->hasFocus())) {
284 FXMessageBox::warning(getApp(), MBOX_OK,
285 ("Error editing default " + toString(SUMO_TAG_VTYPE)).c_str(), "%s",
286 ("Default " + toString(SUMO_TAG_VTYPE) + " cannot be either edited or deleted.").c_str());
287 } else if (myVehicleTypeList->getItem(i, 2)->hasFocus()) {
288 // find all flows that contains vehicle type to delete as "vehicle type" parameter
289 std::vector<GNEAdditional*> calibratorFlowsToErase;
290 for (auto j : myEditedAdditional->getChildAdditionals()) {
291 if (j->getAttribute(SUMO_ATTR_TYPE) == myVehicleTypeList->getItem(i, 0)->getText().text()) {
292 calibratorFlowsToErase.push_back(j);
293 }
294 }
295 // if there are flows that has vehicle type to remove as "vehicle type" parameter
296 if (calibratorFlowsToErase.size() > 0) {
297 const std::string msg = ("Deletion of " + toString(SUMO_TAG_VTYPE) + " '" + myVehicleTypeList->getItem(i, 0)->getText().text() + "' will remove " +
298 toString(calibratorFlowsToErase.size()) + " " + toString(GNE_TAG_CALIBRATOR_FLOW) + (calibratorFlowsToErase.size() > 1 ? ("s") : ("")) + ". Continue?");
299 FXuint answer = FXMessageBox::question(getApp(), MBOX_YES_NO, ("Remove " + toString(GNE_TAG_CALIBRATOR_FLOW) + "s").c_str(), "%s", msg.c_str());
300 if (answer != 1) { //1:yes, 2:no, 4:esc
301 // write warning if netedit is running in testing mode
302 if (answer == 2) {
303 WRITE_DEBUG("Closed FXMessageBox of type 'question' with 'No'");
304 } else if (answer == 4) {
305 WRITE_DEBUG("Closed FXMessageBox of type 'question' with 'ESC'");
306 }
307 // abort deletion of vehicle type
308 return 0;
309 } else {
310 // write warning if netedit is running in testing mode
311 WRITE_DEBUG("Closed FXMessageBox of type 'question' with 'Yes'");
312 // remove affected flows of calibrator flows
313 for (auto j : calibratorFlowsToErase) {
315 }
316 // remove vehicle type of calibrator vehicle types
318 // update flows and vehicle types table
321 return 1;
322 }
323 } else {
324 // remove vehicle type of calibrator vehicle types
326 // update vehicle types table
328 return 1;
329 }
330 } else if (myVehicleTypeList->getItem(i, 0)->hasFocus() || myVehicleTypeList->getItem(i, 1)->hasFocus()) {
331 // modify vehicle type with modal dialog
332 GNEVehicleTypeDialog(vType, true); // NOSONAR, constructor returns after dialog has been closed
333 // update vehicle types table
335 // update Flows routes also because VType ID could be changed
337 return 1;
338 }
339 }
340 // nothing to do
341 return 0;
342}
343
344
345void
347 // clear table
348 myRouteList->clearItems();
349 // set number of rows
351 // Configure list
352 myRouteList->setVisibleColumns(4);
353 myRouteList->setColumnWidth(0, 136);
354 myRouteList->setColumnWidth(1, 136);
355 myRouteList->setColumnWidth(2, GUIDesignHeight);
356 myRouteList->setColumnText(0, toString(SUMO_ATTR_ID).c_str());
357 myRouteList->setColumnText(1, toString(SUMO_ATTR_EDGES).c_str());
358 myRouteList->setColumnText(2, "");
359 myRouteList->getRowHeader()->setWidth(0);
360 // Declare index for rows and pointer to FXTableItem
361 int indexRow = 0;
362 FXTableItem* item = nullptr;
363 // iterate over routes
365 // Set ID
366 item = new FXTableItem(toString(route->getAttribute(SUMO_ATTR_ID)).c_str());
367 myRouteList->setItem(indexRow, 0, item);
368 // Set edges
369 item = new FXTableItem(toString(route->getAttribute(SUMO_ATTR_EDGES)).c_str());
370 myRouteList->setItem(indexRow, 1, item);
371 // set remove
372 item = new FXTableItem("", GUIIconSubSys::getIcon(GUIIcon::REMOVE));
373 item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
374 item->setEnabled(false);
375 myRouteList->setItem(indexRow, 2, item);
376 // Update index
377 indexRow++;
378 }
379 // enable or disable flow and label button
381}
382
383
384void
386 // clear table
387 myFlowList->clearItems();
388 // set number of rows
389 myFlowList->setTableSize(int(myEditedAdditional->getChildAdditionals().size()), 3);
390 // Configure list
391 myFlowList->setVisibleColumns(3);
392 myFlowList->setColumnWidth(0, 136);
393 myFlowList->setColumnWidth(1, 136);
394 myFlowList->setColumnWidth(2, GUIDesignHeight);
395 myFlowList->setColumnText(0, toString(SUMO_ATTR_TYPE).c_str());
396 myFlowList->setColumnText(1, toString(SUMO_ATTR_VCLASS).c_str());
397 myFlowList->setColumnText(2, "");
398 myFlowList->getRowHeader()->setWidth(0);
399 // Declare index for rows and pointer to FXTableItem
400 int indexRow = 0;
401 FXTableItem* item = nullptr;
402 // iterate over flows
403 for (auto i : myEditedAdditional->getChildAdditionals()) {
404 // Set vehicle type
405 item = new FXTableItem(i->getAttribute(SUMO_ATTR_TYPE).c_str());
406 myFlowList->setItem(indexRow, 0, item);
407 // Set route
408 item = new FXTableItem(i->getAttribute(SUMO_ATTR_ROUTE).c_str());
409 myFlowList->setItem(indexRow, 1, item);
410 // set remove
411 item = new FXTableItem("", GUIIconSubSys::getIcon(GUIIcon::REMOVE));
412 item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
413 item->setEnabled(false);
414 myFlowList->setItem(indexRow, 2, item);
415 // Update index
416 indexRow++;
417 }
418 // enable or disable flow and label button
420}
421
422
423void
425 // clear table
426 myVehicleTypeList->clearItems();
427 // set number of rows
429 // Configure list
430 myVehicleTypeList->setVisibleColumns(4);
431 myVehicleTypeList->setColumnWidth(0, 136);
432 myVehicleTypeList->setColumnWidth(1, 136);
433 myVehicleTypeList->setColumnWidth(2, GUIDesignHeight);
434 myVehicleTypeList->setColumnText(0, toString(SUMO_ATTR_ID).c_str());
435 myVehicleTypeList->setColumnText(1, toString(SUMO_ATTR_VCLASS).c_str());
436 myVehicleTypeList->setColumnText(2, "");
437 myVehicleTypeList->getRowHeader()->setWidth(0);
438 // Declare index for rows and pointer to FXTableItem
439 int indexRow = 0;
440 FXTableItem* item = nullptr;
441 // iterate over vehicle types
443 // Set id
444 item = new FXTableItem(vType->getAttribute(SUMO_ATTR_ID).c_str());
445 myVehicleTypeList->setItem(indexRow, 0, item);
446 // Set VClass
447 item = new FXTableItem(vType->getAttribute(SUMO_ATTR_VCLASS).c_str());
448 myVehicleTypeList->setItem(indexRow, 1, item);
449 // set remove icon except for default vehicle type
450 if (indexRow != 0) {
451 item = new FXTableItem("", GUIIconSubSys::getIcon(GUIIcon::REMOVE));
452 } else {
453 item = new FXTableItem("");
454 }
455 item->setJustify(FXTableItem::CENTER_X | FXTableItem::CENTER_Y);
456 item->setEnabled(false);
457 myVehicleTypeList->setItem(indexRow, 2, item);
458 // Update index
459 indexRow++;
460 }
461 // enable or disable flow and label button
463}
464
465
466void
468 // disable AddFlow button if no route is defined
470 myAddFlow->disable();
471 myFlowList->disable();
472 myLabelFlow->setText(TL("No routes defined"));
473 } else {
474 myAddFlow->enable();
475 myFlowList->enable();
476 myLabelFlow->setText(("Add new " + toString(GNE_TAG_CALIBRATOR_FLOW) + "s").c_str());
477 }
478}
479
480
481/****************************************************************************/
FXDEFMAP(GNECalibratorDialog) GNECalibratorDialogMap[]
@ MID_GNE_CALIBRATORDIALOG_TABLE_FLOW
change table flow
Definition: GUIAppEnum.h:1368
@ MID_GNE_CALIBRATORDIALOG_ADD_ROUTE
add new route
Definition: GUIAppEnum.h:1366
@ MID_GNE_CALIBRATORDIALOG_ADD_FLOW
Definition: GUIAppEnum.h:1369
@ MID_GNE_CALIBRATORDIALOG_ADD_VEHICLETYPE
add vehicle type
Definition: GUIAppEnum.h:1373
@ MID_GNE_CALIBRATORDIALOG_TABLE_ROUTE
change table route
Definition: GUIAppEnum.h:1364
@ MID_GNE_CALIBRATORDIALOG_TABLE_VEHICLETYPE
change table route
Definition: GUIAppEnum.h:1371
#define GUIDesignButtonIcon
button only with icon
Definition: GUIDesigns.h:86
#define GUIDesignTableAdditionals
design for tables used in additional dialogs
Definition: GUIDesigns.h:616
#define GUIDesignHeight
define a standard height for all elements (Change it carefully)
Definition: GUIDesigns.h:37
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition: GUIDesigns.h:397
#define GUIDesignUniformHorizontalFrame
design for horizontal frame used to pack another frames with a uniform width
Definition: GUIDesigns.h:406
#define GUIDesignLabelThick
label extended over frame with thick and with text justify to left
Definition: GUIDesigns.h:226
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frames used to pack another frames extended in all directions
Definition: GUIDesigns.h:394
#define WRITE_DEBUG(msg)
Definition: MsgHandler.h:276
#define TL(string)
Definition: MsgHandler.h:282
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SUMO_TAG_VTYPE
description of a vehicle/person/container type
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ GNE_TAG_CALIBRATOR_FLOW
a flow definition within in Calibrator
@ SUMO_ATTR_EDGES
the edges of a route
@ SUMO_ATTR_VCLASS
@ SUMO_ATTR_TYPE
@ SUMO_ATTR_ROUTE
@ SUMO_ATTR_ID
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
Dialog to edit sequences, parameters, etc.. of Additionals.
void acceptChanges()
Accept changes did in this dialog.
void cancelChanges()
Cancel changes did in this dialog.
GNEAdditional * myEditedAdditional
pointer to edited additional
void resetChanges()
reset changes did in this dialog.
GNENet * getNet() const
get pointer to net
Dialog for edit calibrators.
long onCmdReset(FXObject *, FXSelector, void *)
event after press reset button
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
FXTable * myFlowList
list with flows
long onCmdClickedFlow(FXObject *, FXSelector, void *)
remove or edit flow
FXLabel * myLabelFlow
label for flows
long onCmdClickedVehicleType(FXObject *, FXSelector, void *)
remove or edit vehicle type
FXTable * myVehicleTypeList
list with vehicle types
long onCmdAccept(FXObject *, FXSelector, void *)
long onCmdAddVehicleType(FXObject *, FXSelector, void *)
add new vehicle type
long onCmdClickedRoute(FXObject *, FXSelector, void *)
remove or edit route
void updateRouteTable()
update data table with routes
void updateFlowAndLabelButton()
update flow and label button
FXTable * myRouteList
list with routes
long onCmdAddFlow(FXObject *, FXSelector, void *)
add new flow
long onCmdAddRoute(FXObject *, FXSelector, void *)
add new route
FXButton * myAddFlow
button for add new flow
void updateFlowTable()
update data table with flows
void updateVehicleTypeTable()
update data table with vehicle types
Dialog for editing calibrator flows.
An Element which don't belong to GNENet but has influence in the simulation.
const std::vector< GNEAdditional * > & getChildAdditionals() const
return child additionals
const std::map< SumoXMLTag, std::set< GNEDemandElement * > > & getDemandElements() const
get demand elements
std::string generateDemandElementID(SumoXMLTag tag) const
generate demand element id
GNEDemandElement * retrieveDemandElement(SumoXMLTag type, const std::string &id, bool hardFail=true) const
Returns the named demand element.
GNEDemandElement * getDefaultType() const
get default type
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:132
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:1987
Dialog for editing Calibrator Routes.
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
Dialog for editing calibrator vehicle types.
GNENet * getNet() const
get the net object
GNEUndoList * getUndoList() const
get the undoList object
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon