Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNECalibratorFlowDialog.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 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 calibrator flows
19/****************************************************************************/
20
21#include <netedit/GNENet.h>
22#include <netedit/GNEUndoList.h>
23#include <netedit/GNEViewNet.h>
27
29
30// ===========================================================================
31// FOX callback mapping
32// ===========================================================================
33
40
41// Object implementation
42FXIMPLEMENT(GNECalibratorFlowDialog, GNEAdditionalDialog, GNECalibratorFlowDialogMap, ARRAYNUMBER(GNECalibratorFlowDialogMap))
43
44// ===========================================================================
45// member method definitions
46// ===========================================================================
47
48GNECalibratorFlowDialog::GNECalibratorFlowDialog(GNEAdditional* editedCalibratorFlow, bool updatingElement) :
49 GNEAdditionalDialog(editedCalibratorFlow, updatingElement, 600, 280),
50 myCalibratorFlowValid(false),
51 myInvalidAttr(SUMO_ATTR_VEHSPERHOUR) {
52 // change default header
53 std::string typeOfOperation = updatingElement ? "Edit " + myEditedAdditional->getTagStr() + " of " : "Create " + myEditedAdditional->getTagStr() + " for ";
54 changeAdditionalDialogHeader(typeOfOperation + myEditedAdditional->getParentAdditionals().at(0)->getTagStr() + " '" + myEditedAdditional->getParentAdditionals().at(0)->getID() + "'");
55
56 // Create auxiliar frames for tables
57 FXHorizontalFrame* columns = new FXHorizontalFrame(myContentFrame, GUIDesignUniformHorizontalFrame);
58 FXVerticalFrame* columnLeftLabel = new FXVerticalFrame(columns, GUIDesignAuxiliarFrame);
59 FXVerticalFrame* columnLeftValue = new FXVerticalFrame(columns, GUIDesignAuxiliarFrame);
60 FXVerticalFrame* columnRightLabel = new FXVerticalFrame(columns, GUIDesignAuxiliarFrame);
61 FXVerticalFrame* columnRightValue = new FXVerticalFrame(columns, GUIDesignAuxiliarFrame);
62
63 // 1 create combobox for type
64 new FXLabel(columnLeftLabel, toString(SUMO_TAG_VTYPE).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
65 myComboBoxVehicleType = new MFXComboBoxIcon(columnLeftValue, GUIDesignComboBoxNCol, true, GUIDesignComboBoxVisibleItems,
67 // 2 create combobox for route
68 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_ROUTE).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
69 myComboBoxRoute = new MFXComboBoxIcon(columnLeftValue, GUIDesignComboBoxNCol, true, GUIDesignComboBoxVisibleItems,
71 // 3 create textfield for vehs per hour
72 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_VEHSPERHOUR).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
73 myTextFieldVehsPerHour = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
74 // 4 create textfield for vehs per hour
75 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_SPEED).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
76 myTextFieldSpeed = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
77 // 5 create textfield for color
78 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_COLOR).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
79 myTextFieldColor = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
80 // 6 create textfield for lane
81 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_DEPARTLANE).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
82 myTextFieldDepartLane = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
83 // 7 create textfield for pos
84 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_DEPARTPOS).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
85 myTextFieldDepartPos = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
86 // 8 create textfield for speed
87 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_DEPARTSPEED).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
88 myTextFieldDepartSpeed = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
89 // 9 create textfield for lane
90 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_ARRIVALLANE).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
91 myTextFieldArrivalLane = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
92 // 10 create textfield for arrival pos
93 new FXLabel(columnLeftLabel, toString(SUMO_ATTR_ARRIVALPOS).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
94 myTextFieldArrivalPos = new FXTextField(columnLeftValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
95 // 11 create textfield for arrival speed
96 new FXLabel(columnRightLabel, toString(SUMO_ATTR_ARRIVALSPEED).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
97 myTextFieldArrivalSpeed = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
98 // 12 create textfield for arrival line
99 new FXLabel(columnRightLabel, toString(SUMO_ATTR_LINE).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
100 myTextFieldLine = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
101 // 13 create textfield for person number
102 new FXLabel(columnRightLabel, toString(SUMO_ATTR_PERSON_NUMBER).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
103 myTextFieldPersonNumber = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
104 // 14 create textfield for container number
105 new FXLabel(columnRightLabel, toString(SUMO_ATTR_CONTAINER_NUMBER).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
106 myTextFieldContainerNumber = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
107 // 15 create textfield for reroute
108 new FXLabel(columnRightLabel, toString(SUMO_ATTR_REROUTE).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
109 myRerouteCheckButton = new FXCheckButton(columnRightValue, "false", this, MID_GNE_SET_ATTRIBUTE, GUIDesignCheckButton);
110 // 16 create textfield for depart pos lat
111 new FXLabel(columnRightLabel, toString(SUMO_ATTR_DEPARTPOS_LAT).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
112 myTextFieldDepartPosLat = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
113 // 17 create textfield for arrival pos lat
114 new FXLabel(columnRightLabel, toString(SUMO_ATTR_ARRIVALPOS_LAT).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
115 myTextFieldArrivalPosLat = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
116 // 18 create textfield for begin
117 new FXLabel(columnRightLabel, toString(SUMO_ATTR_BEGIN).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
118 myTextFieldBegin = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
119 // 19 create textfield for end
120 new FXLabel(columnRightLabel, toString(SUMO_ATTR_END).c_str(), nullptr, GUIDesignLabelThick(JUSTIFY_NORMAL));
121 myTextFieldEnd = new FXTextField(columnRightValue, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
122
123 // fill comboBox of VTypes
124 for (const auto& vType : myEditedAdditional->getNet()->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_VTYPE)) {
125 myComboBoxVehicleType->appendIconItem(vType.second->getID().c_str(), vType.second->getACIcon());
126 }
127
128 // fill comboBox of Routes
129 for (const auto& route : myEditedAdditional->getNet()->getViewNet()->getNet()->getAttributeCarriers()->getDemandElements().at(SUMO_TAG_ROUTE)) {
130 myComboBoxRoute->appendIconItem(route.second->getID().c_str(), route.second->getACIcon());
131 }
132
133 // update tables
134 updateCalibratorFlowValues();
135
136 // start a undo list for editing local to this additional
137 initChanges();
138
139 // add element if we aren't updating an existent element
140 if (!myUpdatingElement) {
141 myEditedAdditional->getNet()->getViewNet()->getUndoList()->add(new GNEChange_Additional(myEditedAdditional, true), true);
142 }
143
144 // open as modal dialog
145 openAsModalDialog();
146}
147
148
150
151
152long
153GNECalibratorFlowDialog::onCmdAccept(FXObject*, FXSelector, void*) {
154 std::string operation1 = myUpdatingElement ? ("updating") : ("creating");
155 std::string operation2 = myUpdatingElement ? ("updated") : ("created");
156 std::string parentTagString = myEditedAdditional->getParentAdditionals().at(0)->getTagStr();
157 std::string tagString = myEditedAdditional->getTagStr();
159 // open warning dialog box
160 FXMessageBox::warning(getApp(), MBOX_OK,
161 ("Error " + operation1 + " " + parentTagString + "'s " + tagString).c_str(), "%s",
162 (parentTagString + "'s " + tagString + " cannot be " + operation2 +
163 " because parameter " + toString(myInvalidAttr) +
164 " is invalid.").c_str());
165 return 0;
166 } else if (!myEditedAdditional->getParentAdditionals().at(0)->checkChildAdditionalsOverlapping()) {
167 // open warning dialog box
168 FXMessageBox::warning(getApp(), MBOX_OK,
169 ("Error " + operation1 + " " + parentTagString + "'s " + tagString).c_str(), "%s",
170 (parentTagString + "'s " + tagString + " cannot be " + operation2 +
171 " because there is overlapping with another " + tagString + ".").c_str());
172 return 0;
175 // open warning dialog box
176 FXMessageBox::warning(getApp(), MBOX_OK,
177 ("Error " + operation1 + " " + parentTagString + "'s " + tagString).c_str(), "%s",
178 (parentTagString + "'s " + tagString + " cannot be " + operation2 +
179 " because parameters " + toString(SUMO_ATTR_VEHSPERHOUR) + " and " + toString(SUMO_ATTR_SPEED) +
180 " cannot be defined together.").c_str());
181 return 0;
182 } else {
183 // accept changes before closing dialog
185 // stop dialog successfully
186 getApp()->stopModal(this, TRUE);
187 return 1;
188 }
189}
190
191
192long
193GNECalibratorFlowDialog::onCmdCancel(FXObject*, FXSelector, void*) {
194 // cancel changes
196 // Stop Modal
197 getApp()->stopModal(this, FALSE);
198 return 1;
199}
200
201
202long
203GNECalibratorFlowDialog::onCmdReset(FXObject*, FXSelector, void*) {
204 // reset changes
205 resetChanges();
206 // update tables
208 return 1;
209}
210
211
212long
213GNECalibratorFlowDialog::onCmdSetVariable(FXObject*, FXSelector, void*) {
214 // At start we assumed, that all values are valid
217 // get pointer to undo list (Only for code legibility)
219 // set color of myComboBoxVehicleType, depending if current value is valid or not
221 myComboBoxVehicleType->setTextColor(FXRGB(0, 0, 0));
223 } else {
224 myComboBoxVehicleType->setTextColor(FXRGB(255, 0, 0));
225 myCalibratorFlowValid = false;
227 }
228 // set color of myComboBoxRoute, depending if current value is valid or not
230 myComboBoxRoute->setTextColor(FXRGB(0, 0, 0));
232 } else {
233 myComboBoxRoute->setTextColor(FXRGB(255, 0, 0));
234 myCalibratorFlowValid = false;
236 }
237 // set color of myTextFieldVehsPerHour, depending if current value is valid or not
239 myTextFieldVehsPerHour->setTextColor(FXRGB(0, 0, 0));
241 } else {
242 myTextFieldVehsPerHour->setTextColor(FXRGB(255, 0, 0));
243 myCalibratorFlowValid = false;
245 }
246 // set color of myTextFieldSpeed, depending if current value is valid or not
248 myTextFieldSpeed->setTextColor(FXRGB(0, 0, 0));
250 // Check VehsPerHour again
252 myTextFieldVehsPerHour->setTextColor(FXRGB(0, 0, 0));
257 }
258 }
259 } else {
260 myTextFieldSpeed->setTextColor(FXRGB(255, 0, 0));
261 myCalibratorFlowValid = false;
263 }
264 // set color of myTextFieldColor, depending if current value is valid or not
266 myTextFieldColor->setTextColor(FXRGB(0, 0, 0));
268 } else {
269 myTextFieldColor->setTextColor(FXRGB(255, 0, 0));
270 myCalibratorFlowValid = false;
272 }
273 // set color of myTextFieldDepartLane, depending if current value is valid or not
275 myTextFieldDepartLane->setTextColor(FXRGB(0, 0, 0));
277 } else {
278 myTextFieldDepartLane->setTextColor(FXRGB(255, 0, 0));
279 myCalibratorFlowValid = false;
281 }
282 // set color of myTextFieldDepartPos, depending if current value is valid or not
284 myTextFieldDepartPos->setTextColor(FXRGB(0, 0, 0));
286 } else {
287 myTextFieldDepartPos->setTextColor(FXRGB(255, 0, 0));
288 myCalibratorFlowValid = false;
290 }
291 // set color of setDepartSpeed, depending if current value is valid or not
293 myTextFieldDepartSpeed->setTextColor(FXRGB(0, 0, 0));
295 } else {
296 myTextFieldDepartSpeed->setTextColor(FXRGB(255, 0, 0));
297 myCalibratorFlowValid = false;
299 }
300 // set color of myTextFieldArrivalLane, depending if current value is valid or not
302 myTextFieldArrivalLane->setTextColor(FXRGB(0, 0, 0));
304 } else {
305 myTextFieldArrivalLane->setTextColor(FXRGB(255, 0, 0));
306 myCalibratorFlowValid = false;
308 }
309 // set color of myTextFieldArrivalPos, depending if current value is valid or not
311 myTextFieldArrivalPos->setTextColor(FXRGB(0, 0, 0));
313 } else {
314 myTextFieldArrivalPos->setTextColor(FXRGB(255, 0, 0));
315 myCalibratorFlowValid = false;
317 }
318 // set color of setArrivalSpeed, depending if current value is valid or not
320 myTextFieldArrivalSpeed->setTextColor(FXRGB(0, 0, 0));
322 } else {
323 myTextFieldArrivalSpeed->setTextColor(FXRGB(255, 0, 0));
324 myCalibratorFlowValid = false;
326 }
327 // set color of myTextFieldLine, depending if current value is valid or not
328 if (myEditedAdditional->isValid(SUMO_ATTR_LINE, myTextFieldLine->getText().text())) {
329 myTextFieldLine->setTextColor(FXRGB(0, 0, 0));
330 myEditedAdditional->setAttribute(SUMO_ATTR_LINE, myTextFieldLine->getText().text(), undoList);
331 } else {
332 myTextFieldLine->setTextColor(FXRGB(255, 0, 0));
333 myCalibratorFlowValid = false;
335 }
336 // set color of myTextFieldPersonNumber, depending if current value is valid or not
338 myTextFieldPersonNumber->setTextColor(FXRGB(0, 0, 0));
340 } else {
341 myTextFieldPersonNumber->setTextColor(FXRGB(255, 0, 0));
342 myCalibratorFlowValid = false;
344 }
345 // set color of myTextFieldContainerNumber, depending if current value is valid or not
347 myTextFieldContainerNumber->setTextColor(FXRGB(0, 0, 0));
349 } else {
350 myTextFieldContainerNumber->setTextColor(FXRGB(255, 0, 0));
351 myCalibratorFlowValid = false;
353 }
354 // set reroute
355 if (myRerouteCheckButton->getCheck()) {
357 myRerouteCheckButton->setText("true");
358 } else {
360 myRerouteCheckButton->setText("false");
361 }
362 // set color of myTextFieldDepartPosLat, depending if current value is valid or not
364 myTextFieldDepartPosLat->setTextColor(FXRGB(0, 0, 0));
366 } else {
367 myTextFieldDepartPosLat->setTextColor(FXRGB(255, 0, 0));
368 myCalibratorFlowValid = false;
370 }
371 // set color of myTextFieldArrivalPosLat, depending if current value is valid or not
373 myTextFieldArrivalPosLat->setTextColor(FXRGB(0, 0, 0));
375 } else {
376 myTextFieldArrivalPosLat->setTextColor(FXRGB(255, 0, 0));
377 myCalibratorFlowValid = false;
379 }
380 // set color of myTextFieldBegin, depending if current value is valid or not
382 myTextFieldBegin->setTextColor(FXRGB(0, 0, 0));
384 } else {
385 myTextFieldBegin->setTextColor(FXRGB(255, 0, 0));
386 myCalibratorFlowValid = false;
388 }
389 // set color of myTextFieldEnd, depending if current value is valid or not
390 if (myEditedAdditional->isValid(SUMO_ATTR_END, myTextFieldEnd->getText().text())) {
391 myTextFieldEnd->setTextColor(FXRGB(0, 0, 0));
392 myEditedAdditional->setAttribute(SUMO_ATTR_END, myTextFieldEnd->getText().text(), undoList);
393 } else {
394 myTextFieldEnd->setTextColor(FXRGB(255, 0, 0));
395 myCalibratorFlowValid = false;
397 }
398 return 1;
399}
400
401
402void
404 // update fields
407 if (routeIndex == -1) {
409 } else {
410 myComboBoxRoute->setCurrentItem(routeIndex);
411 }
424 myRerouteCheckButton->setCheck(GNEAttributeCarrier::parse<bool>(myEditedAdditional->getAttribute(SUMO_ATTR_REROUTE).c_str()));
429}
430
431
432/****************************************************************************/
FXDEFMAP(GNECalibratorFlowDialog) GNECalibratorFlowDialogMap[]
@ MID_GNE_SET_ATTRIBUTE
attribute edited
Definition GUIAppEnum.h:991
@ MID_GNE_BUTTON_CANCEL
cancel button
@ MID_GNE_BUTTON_RESET
reset button
@ MID_GNE_BUTTON_ACCEPT
accept button
#define GUIDesignComboBox
Definition GUIDesigns.h:293
#define GUIDesignComboBoxNCol
number of column of every combo box
Definition GUIDesigns.h:311
#define GUIDesignTextField
Definition GUIDesigns.h:59
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition GUIDesigns.h:74
#define GUIDesignUniformHorizontalFrame
design for horizontal frame used to pack another frames with a uniform width
Definition GUIDesigns.h:411
#define GUIDesignComboBoxVisibleItems
Definition GUIDesigns.h:49
#define GUIDesignLabelThick(justify)
label extended over frame with thick and with text justify to left
Definition GUIDesigns.h:249
#define GUIDesignCheckButton
checkButton placed in left position
Definition GUIDesigns.h:192
#define GUIDesignAuxiliarFrame
design for auxiliar (Without borders) frame extended in all directions
Definition GUIDesigns.h:390
@ SUMO_TAG_VTYPE
description of a vehicle/person/container type
@ SUMO_TAG_ROUTE
description of a route
@ SUMO_ATTR_ARRIVALSPEED
@ SUMO_ATTR_ARRIVALLANE
@ SUMO_ATTR_VEHSPERHOUR
@ SUMO_ATTR_SPEED
@ SUMO_ATTR_DEPARTPOS_LAT
@ SUMO_ATTR_ARRIVALPOS
@ SUMO_ATTR_BEGIN
weights: time range begin
@ SUMO_ATTR_CONTAINER_NUMBER
@ SUMO_ATTR_LINE
@ SUMO_ATTR_DEPARTPOS
@ SUMO_ATTR_REROUTE
@ SUMO_ATTR_DEPARTSPEED
@ SUMO_ATTR_END
weights: time range end
@ SUMO_ATTR_DEPARTLANE
@ SUMO_ATTR_TYPE
@ SUMO_ATTR_ROUTE
@ SUMO_ATTR_PERSON_NUMBER
@ SUMO_ATTR_COLOR
A color information.
@ SUMO_ATTR_ARRIVALPOS_LAT
@ SUMO_ATTR_NOTHING
invalid attribute, must be the last one
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
Dialog to edit sequences, parameters, etc.. of Additionals.
bool myUpdatingElement
flag to indicate if additional are being created or modified (cannot be changed after open dialog)
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.
virtual std::string getAttribute(SumoXMLAttr key) const =0
virtual void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)=0
method for setting the attribute and letting the object perform additional changes
virtual bool isValid(SumoXMLAttr key, const std::string &value)=0
method for checking if the key and their correspondent attribute are valids
const std::string & getTagStr() const
get tag assigned to this object in string format
GNENet * getNet() const
get pointer to net
Dialog for editing calibrator flows.
FXTextField * myTextFieldPersonNumber
TextField for PersonNumber.
long onCmdReset(FXObject *, FXSelector, void *)
event after press reset button
FXTextField * myTextFieldDepartPos
TextField for Depart Pos.
long onCmdSetVariable(FXObject *, FXSelector, void *)
event after change value
long onCmdAccept(FXObject *, FXSelector, void *)
FXTextField * myTextFieldVehsPerHour
TextField for VehsPerHour.
FXTextField * myTextFieldEnd
TextField for End.
long onCmdCancel(FXObject *, FXSelector, void *)
event after press cancel button
FXTextField * myTextFieldColor
TextField for Color.
MFXComboBoxIcon * myComboBoxVehicleType
ComboBox for Type.
FXTextField * myTextFieldBegin
TextField for Begin.
MFXComboBoxIcon * myComboBoxRoute
TextField for Route.
FXTextField * myTextFieldArrivalSpeed
TextField for Arrival Speed.
FXTextField * myTextFieldArrivalLane
TextField for Arrival Lane.
SumoXMLAttr myInvalidAttr
current sumo attribute invalid
FXTextField * myTextFieldDepartPosLat
TextField for DepartPosLat.
FXTextField * myTextFieldLine
TextField for Line.
FXTextField * myTextFieldDepartSpeed
TextField for Depart Speed.
FXTextField * myTextFieldDepartLane
TextField for Depart Lane.
FXTextField * myTextFieldContainerNumber
TextField for Container Number.
FXTextField * myTextFieldArrivalPosLat
TextField for ArrivalPosLat.
FXTextField * myTextFieldSpeed
TextField for Speed.
FXTextField * myTextFieldArrivalPos
TextField for Arrival Pos.
FXCheckButton * myRerouteCheckButton
checkButton for Reroute
void updateCalibratorFlowValues()
update data fields
bool myCalibratorFlowValid
flag to check if current calibrator flow is valid
const GNEHierarchicalContainerParents< GNEAdditional * > & getParentAdditionals() const
get parent additionals
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2195
GNEUndoList * getUndoList() const
get the undoList object
long setCurrentItem(const FXint index, FXbool notify=FALSE)
Set the current item (index is zero-based)
FXint findItem(const FXString &text) const
find item
FXString getText() const
Get the text.
void setTextColor(FXColor clr)
Change text color.