diff --git a/src/netedit/elements/demand/GNEPersonTrip.cpp b/src/netedit/elements/demand/GNEPersonTrip.cpp index 7d1614e1a91..4acd6cf4c34 100644 --- a/src/netedit/elements/demand/GNEPersonTrip.cpp +++ b/src/netedit/elements/demand/GNEPersonTrip.cpp @@ -310,6 +310,7 @@ GNEPersonTrip::getAttribute(SumoXMLAttr key) const { switch (key) { // Common person plan attributes case SUMO_ATTR_ID: + case GNE_ATTR_PARENT: return getParentDemandElements().front()->getID(); case SUMO_ATTR_FROM: return getParentEdges().front()->getID(); @@ -338,8 +339,6 @@ GNEPersonTrip::getAttribute(SumoXMLAttr key) const { return toString(isAttributeCarrierSelected()); case GNE_ATTR_PARAMETERS: return getParametersStr(); - case GNE_ATTR_PARENT: - return getParentDemandElements().front()->getID(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } @@ -398,6 +397,7 @@ GNEPersonTrip::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoLi case SUMO_ATTR_MODES: case SUMO_ATTR_VTYPES: case GNE_ATTR_SELECTED: + case GNE_ATTR_PARENT: case GNE_ATTR_PARAMETERS: undoList->changeAttribute(new GNEChange_Attribute(this, key, value)); break; @@ -477,6 +477,14 @@ GNEPersonTrip::isValid(SumoXMLAttr key, const std::string& value) { return canParse(value); case GNE_ATTR_PARAMETERS: return Parameterised::areParametersValid(value); + case GNE_ATTR_PARENT: + if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSON, value, false) != nullptr) { + return true; + } else if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSONFLOW, value, false) != nullptr) { + return true; + } else { + return false; + } default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } @@ -594,6 +602,14 @@ GNEPersonTrip::setAttribute(SumoXMLAttr key, const std::string& value) { case GNE_ATTR_PARAMETERS: setParametersStr(value); break; + case GNE_ATTR_PARENT: + if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSON, value, false) != nullptr) { + replaceDemandElementParent(SUMO_TAG_ROUTE, value, 0); + } else if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSONFLOW, value, false) != nullptr) { + replaceDemandElementParent(SUMO_TAG_PERSONFLOW, value, 0); + } + updateGeometry(); + break; default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } diff --git a/src/netedit/elements/demand/GNERide.cpp b/src/netedit/elements/demand/GNERide.cpp index 1d8ffeceec2..d0be491a7f1 100644 --- a/src/netedit/elements/demand/GNERide.cpp +++ b/src/netedit/elements/demand/GNERide.cpp @@ -290,6 +290,7 @@ GNERide::getAttribute(SumoXMLAttr key) const { switch (key) { // Common person plan attributes case SUMO_ATTR_ID: + case GNE_ATTR_PARENT: return getParentDemandElements().front()->getID(); case SUMO_ATTR_FROM: return getParentEdges().front()->getID(); @@ -310,8 +311,6 @@ GNERide::getAttribute(SumoXMLAttr key) const { return toString(isAttributeCarrierSelected()); case GNE_ATTR_PARAMETERS: return getParametersStr(); - case GNE_ATTR_PARENT: - return getParentDemandElements().front()->getID(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } @@ -362,6 +361,7 @@ GNERide::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* un case SUMO_ATTR_ARRIVALPOS: case SUMO_ATTR_LINES: case GNE_ATTR_SELECTED: + case GNE_ATTR_PARENT: case GNE_ATTR_PARAMETERS: undoList->changeAttribute(new GNEChange_Attribute(this, key, value)); break; @@ -432,6 +432,14 @@ GNERide::isValid(SumoXMLAttr key, const std::string& value) { return canParse(value); case GNE_ATTR_PARAMETERS: return Parameterised::areParametersValid(value); + case GNE_ATTR_PARENT: + if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSON, value, false) != nullptr) { + return true; + } else if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSONFLOW, value, false) != nullptr) { + return true; + } else { + return false; + } default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } @@ -530,6 +538,14 @@ GNERide::setAttribute(SumoXMLAttr key, const std::string& value) { case GNE_ATTR_PARAMETERS: setParametersStr(value); break; + case GNE_ATTR_PARENT: + if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSON, value, false) != nullptr) { + replaceDemandElementParent(SUMO_TAG_ROUTE, value, 0); + } else if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSONFLOW, value, false) != nullptr) { + replaceDemandElementParent(SUMO_TAG_PERSONFLOW, value, 0); + } + updateGeometry(); + break; default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } diff --git a/src/netedit/elements/demand/GNEWalk.cpp b/src/netedit/elements/demand/GNEWalk.cpp index 4f720b4778b..99d68997608 100644 --- a/src/netedit/elements/demand/GNEWalk.cpp +++ b/src/netedit/elements/demand/GNEWalk.cpp @@ -348,6 +348,7 @@ GNEWalk::getAttribute(SumoXMLAttr key) const { switch (key) { // Common person plan attributes case SUMO_ATTR_ID: + case GNE_ATTR_PARENT: return getParentDemandElements().front()->getID(); case SUMO_ATTR_FROM: if (myTagProperty.getTag() == GNE_TAG_WALK_ROUTE) { @@ -382,8 +383,6 @@ GNEWalk::getAttribute(SumoXMLAttr key) const { return toString(isAttributeCarrierSelected()); case GNE_ATTR_PARAMETERS: return getParametersStr(); - case GNE_ATTR_PARENT: - return getParentDemandElements().front()->getID(); default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } @@ -444,6 +443,7 @@ GNEWalk::setAttribute(SumoXMLAttr key, const std::string& value, GNEUndoList* un case SUMO_ATTR_FROMJUNCTION: case SUMO_ATTR_ARRIVALPOS: case GNE_ATTR_SELECTED: + case GNE_ATTR_PARENT: case GNE_ATTR_PARAMETERS: undoList->changeAttribute(new GNEChange_Attribute(this, key, value)); break; @@ -565,6 +565,14 @@ GNEWalk::isValid(SumoXMLAttr key, const std::string& value) { return canParse(value); case GNE_ATTR_PARAMETERS: return Parameterised::areParametersValid(value); + case GNE_ATTR_PARENT: + if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSON, value, false) != nullptr) { + return true; + } else if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSONFLOW, value, false) != nullptr) { + return true; + } else { + return false; + } default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); } @@ -690,6 +698,14 @@ GNEWalk::setAttribute(SumoXMLAttr key, const std::string& value) { case GNE_ATTR_PARAMETERS: setParametersStr(value); break; + case GNE_ATTR_PARENT: + if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSON, value, false) != nullptr) { + replaceDemandElementParent(SUMO_TAG_ROUTE, value, 0); + } else if (myNet->getAttributeCarriers()->retrieveDemandElement(SUMO_TAG_PERSONFLOW, value, false) != nullptr) { + replaceDemandElementParent(SUMO_TAG_PERSONFLOW, value, 0); + } + updateGeometry(); + break; default: throw InvalidArgument(getTagStr() + " doesn't have an attribute of type '" + toString(key) + "'"); }