Eclipse SUMO - Simulation of Urban MObility
GNEStopFrame.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// The Widget for add Stops elements
19/****************************************************************************/
20#include <config.h>
21
22#include <netedit/GNENet.h>
23#include <netedit/GNEViewNet.h>
25
26#include "GNEStopFrame.h"
27
28// ===========================================================================
29// method definitions
30// ===========================================================================
31
32// ---------------------------------------------------------------------------
33// GNEStopFrame::HelpCreation - methods
34// ---------------------------------------------------------------------------
35
37 MFXGroupBoxModule(StopFrameParent, TL("Help")),
38 myStopFrameParent(StopFrameParent) {
40}
41
42
44
45
46void
48 // first update help creation
49 updateHelpCreation();
50 // show module
51 show();
52}
53
54
55void
57 hide();
58}
59
60
61void
63 // create information label
64 std::ostringstream information;
65 // set text depending of selected Stop type
66 if (myStopFrameParent->myStopTagSelector->getCurrentTemplateAC()) {
67 switch (myStopFrameParent->myStopTagSelector->getCurrentTemplateAC()->getTagProperty().getTag()) {
70 information
71 << TL("- Shift+Click to select parent\n")
72 << TL("- Click over a bus stop to\n")
73 << TL(" create a stop.");
74 break;
77 information
78 << TL("- Shift+Click to select parent\n")
79 << TL("- Click over a container stop\n")
80 << TL(" to create a stop.");
81 break;
84 information
85 << TL("- Shift+Click to select parent\n")
86 << TL("- Click over a charging station\n")
87 << TL(" to create a stop.");
88 break;
91 information
92 << TL("- Shift+Click to select parent\n")
93 << TL("- Click over a parking area\n")
94 << TL(" to create a stop.");
95 break;
98 information
99 << TL("- Shift+Click to select parent\n")
100 << TL("- Click over a lane to create\n")
101 << TL(" a stop.");
102 break;
103 default:
104 information
105 << TL("- No stop parents in current\n")
106 << TL(" network.");
107 break;
108 }
109 }
110 // set information label
111 myInformationLabel->setText(information.str().c_str());
112}
113
114// ---------------------------------------------------------------------------
115// GNEStopFrame - methods
116// ---------------------------------------------------------------------------
117
119 GNEFrame(viewParent, viewNet, "Stops"),
120 myRouteHandler("", viewNet->getNet(), true, false),
121 myStopParentBaseObject(new CommonXMLStructure::SumoBaseObject(nullptr)) {
122
123 // Create Stop parent selector
124 myStopParentSelector = new DemandElementSelector(this, {GNETagProperties::TagType::VEHICLE, GNETagProperties::TagType::ROUTE});
125
126 // Create item Selector module for Stops
127 myStopTagSelector = new GNETagSelector(this, GNETagProperties::TagType::STOP, SUMO_TAG_STOP_LANE);
128
129 // Create Stop parameters
131
132 // Create Netedit parameter
134
135 // Create Help Creation Module
136 myHelpCreation = new HelpCreation(this);
137
138 // refresh myStopParentMatchBox
140}
141
142
145}
146
147
148void
150 // first check if stop frame modules can be shown
151 bool validStopParent = false;
152 // check if at least there an item that supports an stop
153 for (auto i = myStopParentSelector->getAllowedTags().begin(); (i != myStopParentSelector->getAllowedTags().end()) && (validStopParent == false); i++) {
154 if (myViewNet->getNet()->getAttributeCarriers()->getDemandElements().at(*i).size() > 0) {
155 validStopParent = true;
156 }
157 }
158 // show or hide modules depending of validStopParent
159 if (validStopParent) {
160 // refresh tag selector
162 // refresh vType selector
164 // refresh tag selector
166 // show
169 } else {
170 // hide modules (except help creation)
175 // show help creation module
177 }
178 // reset last position
180 // show frame
182}
183
184
185bool
187 // first check stop type
188 if (myStopTagSelector->getCurrentTemplateAC() == nullptr) {
189 WRITE_WARNING(TL("Selected Stop type isn't valid."));
190 return false;
191 }
192 // check if we're selecting a new stop parent
193 if (mouseButtonKeyPressed.shiftKeyPressed()) {
194 if (objectsUnderCursor.getDemandElementFront() &&
195 (objectsUnderCursor.getDemandElementFront()->getTagProperty().isVehicle() || objectsUnderCursor.getDemandElementFront()->getTagProperty().getTag() == SUMO_TAG_ROUTE)) {
197 WRITE_WARNING("Selected " + objectsUnderCursor.getDemandElementFront()->getTagStr() + " '" + objectsUnderCursor.getDemandElementFront()->getID() + "' as stop parent.");
198 return true;
199 } else {
200 WRITE_WARNING(TL("Selected Stop parent isn't valid."));
201 return false;
202 }
203 } else {
204 // now check if stop parent selector is valid
206 WRITE_WARNING(TL("Current selected Stop parent isn't valid."));
207 return false;
208 }
209 // create stop base object
211 objectsUnderCursor.getLaneFront(), objectsUnderCursor.getAdditionalFront());
214 myStopParentBaseObject->getSumoBaseObjectChildren().front()->getStopParameter());
215 // show all trips
218 } else {
220 }
221 // stop successfully created, then return true
222 return true;
223 } else {
224 return false;
225 }
226 }
227}
228
229bool
230GNEStopFrame::getStopParameter(const SumoXMLTag stopTag, const GNELane* lane, const GNEAdditional* stoppingPlace) {
231 // first clear stop base object
233 // declare stop parameters
235 // first check that current selected Stop is valid
236 if (stopTag == SUMO_TAG_NOTHING) {
237 WRITE_WARNING(TL("Current selected Stop type isn't valid."));
238 return false;
239 } else if ((stopTag == SUMO_TAG_STOP_LANE) || (stopTag == GNE_TAG_WAYPOINT_LANE)) {
240 if (lane) {
241 stop.lane = lane->getID();
242 if ((stopTag == GNE_TAG_WAYPOINT_LANE) && (stop.speed == 0)) {
243 stop.speed = lane->getSpeed();
244 }
245 } else {
246 WRITE_WARNING("Click over a " + toString(SUMO_TAG_LANE) + " to create a stop placed in a " + toString(SUMO_TAG_LANE));
247 return false;
248 }
249 } else if (stopTag == GNE_TAG_STOPPERSON_EDGE) {
250 if (lane) {
251 stop.edge = lane->getParentEdge()->getID();
252 } else {
253 WRITE_WARNING("Click over a " + toString(SUMO_TAG_EDGE) + " to create a stop placed in a " + toString(SUMO_TAG_EDGE));
254 return false;
255 }
256 } else if (stoppingPlace) {
257 if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_BUS_STOP) {
258 if ((stopTag != SUMO_TAG_STOP_BUSSTOP) && (stopTag != GNE_TAG_WAYPOINT_BUSSTOP) && (stopTag != GNE_TAG_STOPPERSON_BUSSTOP)) {
259 WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
260 return false;
261 } else {
262 stop.busstop = stoppingPlace->getID();
263 if ((stopTag == GNE_TAG_WAYPOINT_BUSSTOP) && (stop.speed == 0)) {
264 stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
265 }
266 stop.startPos = 0;
267 stop.endPos = 0;
268 }
269 } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_CONTAINER_STOP) {
270 if ((stopTag != SUMO_TAG_STOP_CONTAINERSTOP) && (stopTag != GNE_TAG_WAYPOINT_CONTAINERSTOP)) {
271 WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
272 return false;
273 } else {
274 stop.containerstop = stoppingPlace->getID();
275 if ((stopTag == GNE_TAG_WAYPOINT_CONTAINERSTOP) && (stop.speed == 0)) {
276 stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
277 }
278 stop.startPos = 0;
279 stop.endPos = 0;
280 }
281 } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_CHARGING_STATION) {
282 if ((stopTag != SUMO_TAG_STOP_CHARGINGSTATION) && (stopTag != GNE_TAG_WAYPOINT_CHARGINGSTATION)) {
283 WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
284 return false;
285 } else {
286 stop.chargingStation = stoppingPlace->getID();
287 if ((stopTag == GNE_TAG_WAYPOINT_CHARGINGSTATION) && (stop.speed == 0)) {
288 stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
289 }
290 stop.startPos = 0;
291 stop.endPos = 0;
292 }
293 } else if (stoppingPlace->getTagProperty().getTag() == SUMO_TAG_PARKING_AREA) {
294 if ((stopTag != SUMO_TAG_STOP_PARKINGAREA) && (stopTag != GNE_TAG_WAYPOINT_PARKINGAREA)) {
295 WRITE_WARNING("Invalid clicked stopping place to create a stop placed in a " + stoppingPlace->getTagProperty().getTagStr());
296 return false;
297 } else {
298 stop.parkingarea = stoppingPlace->getID();
299 if ((stopTag == GNE_TAG_WAYPOINT_PARKINGAREA) && (stop.speed == 0)) {
300 stop.speed = stoppingPlace->getParentLanes().front()->getSpeed();
301 }
302 stop.startPos = 0;
303 stop.endPos = 0;
304 }
305 }
306 } else {
307 if ((stopTag == SUMO_TAG_STOP_BUSSTOP) || (stopTag == GNE_TAG_WAYPOINT_BUSSTOP)) {
308 WRITE_WARNING("Click over a " + toString(SUMO_TAG_STOP_BUSSTOP) + " to create a stop placed in a " + toString(SUMO_TAG_STOP_BUSSTOP));
309 } else if ((stopTag == SUMO_TAG_STOP_CONTAINERSTOP) || (stopTag == GNE_TAG_WAYPOINT_CONTAINERSTOP)) {
310 WRITE_WARNING("Click over a " + toString(SUMO_TAG_CONTAINER_STOP) + " to create a stop placed in a " + toString(SUMO_TAG_CONTAINER_STOP));
311 } else if ((stopTag == SUMO_TAG_STOP_CHARGINGSTATION) || (stopTag == GNE_TAG_WAYPOINT_CHARGINGSTATION)) {
312 WRITE_WARNING("Click over a " + toString(SUMO_TAG_CHARGING_STATION) + " to create a stop placed in a " + toString(SUMO_TAG_CHARGING_STATION));
313 } else if ((stopTag == SUMO_TAG_STOP_PARKINGAREA) || (stopTag == GNE_TAG_WAYPOINT_PARKINGAREA)) {
314 WRITE_WARNING("Click over a " + toString(SUMO_TAG_PARKING_AREA) + " to create a stop placed in a " + toString(SUMO_TAG_PARKING_AREA));
315 } else if (stopTag == GNE_TAG_STOPPERSON_BUSSTOP) {
316 WRITE_WARNING("Click over a " + toString(SUMO_TAG_STOP_BUSSTOP) + " to create a person stop placed in a " + toString(SUMO_TAG_STOP_BUSSTOP));
317 }
318 return false;
319 }
320 // check if stop attributes are valid
323 return false;
324 }
325 // get stop parent
327 // if stopParent is a route, check that stop is placed over a route's edge
328 if (stopParent->isRoute() && lane) {
329 bool found = false;
330 for (const auto& edge : stopParent->getParentEdges()) {
331 if (edge == lane->getParentEdge()) {
332 found = true;
333 }
334 }
335 if (!found) {
336 WRITE_WARNING(TL("Stop must be placed over a route's edge"));
337 return false;
338 }
339 }
340 // same if stoParent is a vehicle/flow with embedded route
341 if (stopParent->getChildDemandElements().size() > 0 && stopParent->getChildDemandElements().front()->getTagProperty().isRoute() && lane) {
342 bool found = false;
343 for (const auto& edge : stopParent->getChildDemandElements().front()->getParentEdges()) {
344 if (edge == lane->getParentEdge()) {
345 found = true;
346 }
347 }
348 if (!found) {
349 WRITE_WARNING(TL("Stop must be placed over an embeded route's edge"));
350 return false;
351 }
352 }
353 // set parent tag and id
356 // add route, from and to attributes
357 if (stopParent->getTagProperty().hasAttribute(SUMO_ATTR_ROUTE)) {
359 }
360 if (stopParent->getTagProperty().hasAttribute(SUMO_ATTR_FROM)) {
362 }
363 if (stopParent->getTagProperty().hasAttribute(SUMO_ATTR_TO)) {
365 }
366 // create stop object
368 // get stop attributes
369 myStopAttributes->getAttributesAndValues(stopBaseObject, true);
370 // add netedit values
371 if (!stop.edge.empty() || !stop.lane.empty()) {
373 // check if start position can be parsed
374 if (stopBaseObject->hasDoubleAttribute(SUMO_ATTR_STARTPOS)) {
375 stop.startPos = stopBaseObject->getDoubleAttribute(SUMO_ATTR_STARTPOS);
377 }
378 // check if end position can be parsed
379 if (stopBaseObject->hasDoubleAttribute(SUMO_ATTR_ENDPOS)) {
380 stop.endPos = stopBaseObject->getDoubleAttribute(SUMO_ATTR_ENDPOS);
382 }
383 }
384 // obtain friendly position
385 if (stopBaseObject->hasBoolAttribute(SUMO_ATTR_FRIENDLY_POS)) {
387 }
388 // obtain posLat
389 if (stopBaseObject->hasStringAttribute(SUMO_ATTR_POSITION_LAT)) {
390 if (GNEAttributeCarrier::canParse<double>(stopBaseObject->getStringAttribute(SUMO_ATTR_POSITION_LAT))) {
391 stop.posLat = GNEAttributeCarrier::parse<double>(stopBaseObject->getStringAttribute(SUMO_ATTR_POSITION_LAT));
393 } else {
394 stop.posLat = INVALID_DOUBLE;
395 }
396 }
397 // obtain actType
398 if (stopBaseObject->hasStringAttribute(SUMO_ATTR_ACTTYPE)) {
399 stop.actType = stopBaseObject->getStringAttribute(SUMO_ATTR_ACTTYPE);
400 }
401 // fill rest of parameters depending if it was edited
402 if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_DURATION)) {
403 stop.duration = stopBaseObject->getTimeAttribute(SUMO_ATTR_DURATION);
405 } else {
406 stop.duration = -1;
407 }
408 if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_UNTIL)) {
409 stop.until = stopBaseObject->getTimeAttribute(SUMO_ATTR_UNTIL);
411 } else {
412 stop.until = -1;
413 }
414 if (stopBaseObject->hasTimeAttribute(SUMO_ATTR_EXTENSION)) {
415 stop.extension = stopBaseObject->getTimeAttribute(SUMO_ATTR_EXTENSION);
417 }
418 if (stopBaseObject->hasStringAttribute(SUMO_ATTR_TRIGGERED)) {
419 if (stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "person") {
421 stop.triggered = true;
422 } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "container") {
425 stop.containerTriggered = true;
426 } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_TRIGGERED) == "join") {
428 stop.joinTriggered = true;
429 }
430 }
431 if (stopBaseObject->hasStringListAttribute(SUMO_ATTR_EXPECTED)) {
432 const auto expected = stopBaseObject->getStringListAttribute(SUMO_ATTR_EXPECTED);
433 if (expected.size() > 0) {
434 if (stop.triggered) {
435 for (const auto& id : expected) {
436 stop.awaitedPersons.insert(id);
437 }
439 } else if (stop.containerTriggered) {
440 for (const auto& id : expected) {
441 stop.awaitedContainers.insert(id);
442 }
444 }
445 }
446 }
447 if (stopBaseObject->hasStringListAttribute(SUMO_ATTR_PERMITTED)) {
448 const auto permitted = stopBaseObject->getStringListAttribute(SUMO_ATTR_PERMITTED);
449 if (permitted.size() > 0) {
451 for (const auto& permit : permitted) {
452 stop.permitted.insert(permit);
453 }
454 }
455 }
456 if (stopBaseObject->hasBoolAttribute(SUMO_ATTR_PARKING)) {
457 if (stopBaseObject->getBoolAttribute(SUMO_ATTR_PARKING)) {
459 }
460 }
461 if (stopBaseObject->hasStringAttribute(SUMO_ATTR_TRIP_ID)) {
462 stop.tripId = stopBaseObject->getStringAttribute(SUMO_ATTR_TRIP_ID);
464 }
465 if (stopBaseObject->hasStringAttribute(SUMO_ATTR_LINE)) {
466 stop.line = stopBaseObject->getStringAttribute(SUMO_ATTR_LINE);
468 }
469 if (stopBaseObject->hasBoolAttribute(SUMO_ATTR_ONDEMAND)) {
470 stop.onDemand = stopBaseObject->getBoolAttribute(SUMO_ATTR_ONDEMAND);
472 }
473 if (stopBaseObject->hasDoubleAttribute(SUMO_ATTR_SPEED) && (stopBaseObject->getDoubleAttribute(SUMO_ATTR_SPEED) > 0)) {
474 stop.speed = stopBaseObject->getDoubleAttribute(SUMO_ATTR_SPEED);
476 }
477 if (stopBaseObject->hasStringAttribute(SUMO_ATTR_INDEX)) {
478 if (stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX) == "fit") {
479 stop.index = STOP_INDEX_FIT;
480 } else if (stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX) == "end") {
481 stop.index = STOP_INDEX_END;
482 } else if (GNEAttributeCarrier::canParse<int>(stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX))) {
483 stop.index = GNEAttributeCarrier::parse<int>(stopBaseObject->getStringAttribute(SUMO_ATTR_INDEX));
484 } else {
485 stop.index = STOP_INDEX_END;
486 }
487 } else {
488 stop.index = STOP_INDEX_END;
489 }
490 // refresh stop attributes
492 // set tag
493 stopBaseObject->setTag(stopTag);
494 stopBaseObject->setStopParameter(stop);
495 return true;
496}
497
498
502}
503
504// ===========================================================================
505// protected
506// ===========================================================================
507
508void
511 // show Stop type selector module
515 // reset last position
517 } else {
518 // hide all modules if stop parent isn't valid
522 }
523}
524
525
526void
528 // show or hide modules depending if current selected stop parent is valid
532 // show modules
536 } else {
540 }
541 } else {
542 // hide modules
547 }
548}
549
550
551/****************************************************************************/
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
Definition: GUIDesigns.h:271
#define WRITE_WARNING(msg)
Definition: MsgHandler.h:265
#define TL(string)
Definition: MsgHandler.h:282
const int STOP_DURATION_SET
const int STOP_INDEX_END
const int STOP_POSLAT_SET
const int STOP_EXPECTED_SET
const int STOP_SPEED_SET
const int STOP_UNTIL_SET
const int STOP_LINE_SET
const int STOP_PARKING_SET
const int STOP_TRIP_ID_SET
const int STOP_PERMITTED_SET
const int STOP_START_SET
const int STOP_CONTAINER_TRIGGER_SET
const int STOP_EXTENSION_SET
const int STOP_INDEX_FIT
const int STOP_TRIGGER_SET
const int STOP_ONDEMAND_SET
const int STOP_END_SET
const int STOP_EXPECTED_CONTAINERS_SET
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_STOP_CONTAINERSTOP
stop placed over a containerStop (used in netedit)
@ GNE_TAG_WAYPOINT_PARKINGAREA
waypoint placed over a parking area (used in netedit)
@ SUMO_TAG_CHARGING_STATION
A Charging Station.
@ SUMO_TAG_NOTHING
invalid tag
@ SUMO_TAG_CONTAINER_STOP
A container stop.
@ SUMO_TAG_STOP_CHARGINGSTATION
stop placed over a charging station (used in netedit)
@ SUMO_TAG_STOP_LANE
stop placed over a lane (used in netedit)
@ GNE_TAG_WAYPOINT_CONTAINERSTOP
waypoint placed over a containerStop (used in netedit)
@ GNE_TAG_WAYPOINT_BUSSTOP
waypoint placed over a busStop (used in netedit)
@ SUMO_TAG_BUS_STOP
A bus stop.
@ GNE_TAG_WAYPOINT_CHARGINGSTATION
waypoint placed over a charging station (used in netedit)
@ GNE_TAG_STOPPERSON_BUSSTOP
@ SUMO_TAG_PARKING_AREA
A parking area.
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_STOP_BUSSTOP
stop placed over a busStop (used in netedit)
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ GNE_TAG_WAYPOINT_LANE
waypoint placed over a lane (used in netedit)
@ SUMO_TAG_STOP_PARKINGAREA
stop placed over a parking area (used in netedit)
@ GNE_TAG_STOPPERSON_EDGE
@ SUMO_TAG_EDGE
begin/end of the description of an edge
@ SUMO_ATTR_STARTPOS
@ SUMO_ATTR_PARKING
@ SUMO_ATTR_EXTENSION
@ SUMO_ATTR_SPEED
@ SUMO_ATTR_ENDPOS
@ SUMO_ATTR_ACTTYPE
@ SUMO_ATTR_POSITION_LAT
@ SUMO_ATTR_EXPECTED
@ SUMO_ATTR_LINE
@ SUMO_ATTR_ONDEMAND
@ SUMO_ATTR_INDEX
@ SUMO_ATTR_TRIP_ID
@ SUMO_ATTR_TO
@ SUMO_ATTR_FROM
@ SUMO_ATTR_PERMITTED
@ SUMO_ATTR_FRIENDLY_POS
@ SUMO_ATTR_ROUTE
@ SUMO_ATTR_ID
@ SUMO_ATTR_UNTIL
@ SUMO_ATTR_TRIGGERED
@ SUMO_ATTR_DURATION
const double INVALID_DOUBLE
Definition: StdDefs.h:60
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
SUMOTime getTimeAttribute(const SumoXMLAttr attr) const
get time attribute
bool hasBoolAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given bool attribute
bool hasStringAttribute(const SumoXMLAttr attr) const
has function
void setTag(const SumoXMLTag tag)
set SumoBaseObject tag
bool hasTimeAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given time attribute
bool hasDoubleAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given double attribute
bool getBoolAttribute(const SumoXMLAttr attr) const
get bool attribute
void addStringAttribute(const SumoXMLAttr attr, const std::string &value)
void setStopParameter(const SUMOVehicleParameter::Stop &stopParameter)
add stop parameters
double getDoubleAttribute(const SumoXMLAttr attr) const
get double attribute
const std::vector< std::string > & getStringListAttribute(const SumoXMLAttr attr) const
get string list attribute
bool hasStringListAttribute(const SumoXMLAttr attr) const
check if current SumoBaseObject has the given string list attribute
void clear()
clear SumoBaseObject
const std::string & getStringAttribute(const SumoXMLAttr attr) const
get string attribute
const std::vector< SumoBaseObject * > & getSumoBaseObjectChildren() const
get SumoBaseObject children
GNEDemandElement * getCurrentDemandElement() const
get current demand element
void refreshDemandElementSelector()
refresh demand element selector
const std::vector< SumoXMLTag > & getAllowedTags() const
void setDemandElement(GNEDemandElement *demandElement)
set current demand element
void showDemandElementSelector()
show demand element selector
void hideDemandElementSelector()
hide demand element selector
An Element which don't belong to GNENet but has influence in the simulation.
Definition: GNEAdditional.h:48
const std::string getID() const
get ID (all Attribute Carriers have one)
const std::string & getTagStr() const
get tag assigned to this object in string format
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
void getAttributesAndValues(CommonXMLStructure::SumoBaseObject *baseObject, bool includeAll) const
get attributes and their values
bool areValuesValid() const
check if parameters of attributes are valid
void showAttributesCreatorModule(GNEAttributeCarrier *templateAC, const std::vector< SumoXMLAttr > &hiddenAttributes)
show GNEAttributesCreator modul
void hideAttributesCreatorModule()
hide group box
void showWarningMessage(std::string extra="") const
show warning message with information about non-valid attributes
void refreshAttributesCreator()
refresh attribute creator
An Element which don't belong to GNENet but has influence in the simulation.
virtual std::string getAttribute(SumoXMLAttr key) const =0
GNEViewNet * myViewNet
FOX need this.
Definition: GNEFrame.h:117
virtual void show()
show Frame
Definition: GNEFrame.cpp:115
virtual void hide()
hide Frame
Definition: GNEFrame.cpp:124
const std::vector< GNEDemandElement * > & getChildDemandElements() const
return child demand elements
const std::vector< GNEEdge * > & getParentEdges() const
get parent edges
const std::vector< GNELane * > & getParentLanes() const
get parent lanes
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
Definition: GNELane.h:46
double getSpeed() const
returns the current speed of lane
Definition: GNELane.cpp:888
GNEEdge * getParentEdge() const
get parent edge
Definition: GNELane.cpp:124
const std::map< SumoXMLTag, std::set< GNEDemandElement * > > & getDemandElements() const
get demand elements
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:132
void showNeteditAttributesModule(GNEAttributeCarrier *templateAC)
show Netedit attributes modul
void hideNeteditAttributesModule()
hide Netedit attributes modul
bool getNeteditAttributesAndValues(CommonXMLStructure::SumoBaseObject *baseObject, const GNELane *lane) const
fill valuesMap with netedit attributes
bool isRoute() const
check if pathElement is a route
void buildStop(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const SUMOVehicleParameter::Stop &stopParameters)
build stop
void updateHelpCreation()
update HelpCreation
void showHelpCreation()
show HelpCreation
FXLabel * myInformationLabel
Label with creation information.
Definition: GNEStopFrame.h:69
void hideHelpCreation()
hide HelpCreation
HelpCreation(GNEStopFrame *StopFrameParent)
constructor
CommonXMLStructure::SumoBaseObject * myStopParentBaseObject
stop parent base object
Definition: GNEStopFrame.h:109
void show()
show Frame
GNERouteHandler myRouteHandler
route handler
Definition: GNEStopFrame.h:106
DemandElementSelector * getStopParentSelector() const
get stop parent selector
bool getStopParameter(const SumoXMLTag stopTag, const GNELane *lane, const GNEAdditional *stoppingPlace)
get stop parameters
~GNEStopFrame()
Destructor.
GNEStopFrame(GNEViewParent *viewParent, GNEViewNet *viewNet)
Constructor.
void demandElementSelected()
selected demand element in DemandElementSelector
GNETagSelector * myStopTagSelector
stop tag selector selector (used to select diffent kind of Stops)
Definition: GNEStopFrame.h:115
HelpCreation * myHelpCreation
Help creation.
Definition: GNEStopFrame.h:124
void tagSelected()
Tag selected in GNETagSelector.
GNEAttributesCreator * myStopAttributes
internal Stop attributes
Definition: GNEStopFrame.h:118
DemandElementSelector * myStopParentSelector
Stop parent selectors.
Definition: GNEStopFrame.h:112
bool addStop(const GNEViewNetHelper::ObjectsUnderCursor &objectsUnderCursor, const GNEViewNetHelper::MouseButtonKeyPressed &mouseButtonKeyPressed)
add Stop element
GNENeteditAttributes * myNeteditAttributes
Netedit parameter.
Definition: GNEStopFrame.h:121
const std::string & getTagStr() const
get Tag vinculated with this attribute Property in String Format (used to avoid multiple calls to toS...
bool isVehicle() const
return true if tag correspond to a vehicle element
bool isStop() const
return true if tag correspond to a stop element
SumoXMLTag getTag() const
get Tag vinculated with this attribute Property
bool hasAttribute(SumoXMLAttr attr) const
check if current TagProperties owns the attribute "attr"
void refreshTagSelector()
refresh tagSelector (used when frameParent is show)
void showTagSelector()
show item selector
GNEAttributeCarrier * getCurrentTemplateAC() const
get current templateAC
void hideTagSelector()
hide item selector
class used to group all variables related with objects under cursor after a click over view
GNELane * getLaneFront() const
get front lane or a pointer to nullptr
GNEAdditional * getAdditionalFront() const
get front additional element or a pointer to nullptr
GNEDemandElement * getDemandElementFront() const
get front demand element or a pointer to nullptr
GNENet * getNet() const
get the net object
void resetLastClickedPosition()
reset last clicked position
Definition: GNEViewNet.cpp:774
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
Definition: GNEViewNet.cpp:650
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:84
void setChecked(bool val)
check or uncheck this MFXCheckableButton
MFXGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
Definition of vehicle stop (position and duration)
std::string edge
The edge to stop at (used only in NETEDIT)
std::string lane
The lane to stop at.
SUMOTime extension
The maximum time extension for boarding / loading.
bool friendlyPos
enable or disable friendly position (used by NETEDIT)
double speed
the speed at which this stop counts as reached (waypoint mode)
std::string parkingarea
(Optional) parking area if one is assigned to the stop
double startPos
The stopping position start.
std::string line
the new line id of the trip within a cyclical public transport route
double posLat
the lateral offset when stopping
bool onDemand
whether the stop may be skipped
std::string chargingStation
(Optional) charging station if one is assigned to the stop
std::set< std::string > permitted
IDs of persons or containers that may board/load at this stop.
int parametersSet
Information for the output which parameter were set.
int index
at which position in the stops list
SUMOTime until
The time at which the vehicle may continue its journey.
std::string actType
act Type (only used by Persons) (used by NETEDIT)
bool triggered
whether an arriving person lets the vehicle continue
double endPos
The stopping position end.
std::set< std::string > awaitedPersons
IDs of persons the vehicle has to wait for until departing.
std::set< std::string > awaitedContainers
IDs of containers the vehicle has to wait for until departing.
std::string busstop
(Optional) bus stop if one is assigned to the stop
bool joinTriggered
whether an joined vehicle lets this vehicle continue
std::string tripId
id of the trip within a cyclical public transport route
std::string containerstop
(Optional) container stop if one is assigned to the stop
bool containerTriggered
whether an arriving container lets the vehicle continue
SUMOTime duration
The stopping duration.
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
class used to group all variables related with mouse buttons and key pressed after certain events
bool shiftKeyPressed() const
check if SHIFT is pressed during current event