Path: blob/main/src/netedit/changes/GNEChange_DemandElement.cpp
169678 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEChange_DemandElement.cpp14/// @author Pablo Alvarez Lopez15/// @date Jan 201916///17// A network change in which a busStop is created or deleted18/****************************************************************************/1920#include <netedit/GNENet.h>21#include <netedit/GNETagProperties.h>22#include <netedit/GNEViewNet.h>23#include <netedit/GNEViewParent.h>24#include <netedit/GNEApplicationWindow.h>25#include <netedit/frames/demand/GNETypeFrame.h>2627#include "GNEChange_DemandElement.h"2829// ===========================================================================30// FOX-declarations31// ===========================================================================32FXIMPLEMENT_ABSTRACT(GNEChange_DemandElement, GNEChange, nullptr, 0)3334// ===========================================================================35// member method definitions36// ===========================================================================3738GNEChange_DemandElement::GNEChange_DemandElement(GNEDemandElement* demandElement, bool forward) :39GNEChange(Supermode::DEMAND, demandElement, forward, demandElement->isAttributeCarrierSelected()),40myDemandElement(demandElement) {41myDemandElement->incRef("GNEChange_DemandElement");42}434445GNEChange_DemandElement::~GNEChange_DemandElement() {46// only continue we have undo-redo mode enabled47if (myDemandElement->getNet()->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed()) {48myDemandElement->decRef("GNEChange_DemandElement");49if (myDemandElement->unreferenced()) {50// make sure that element isn't in net before removing51if (myDemandElement->getNet()->getAttributeCarriers()->retrieveDemandElement(myDemandElement, false)) {52// remove demand element of network53myDemandElement->getNet()->getAttributeCarriers()->deleteDemandElement(myDemandElement, false);54}55delete myDemandElement;56}57}58}596061void62GNEChange_DemandElement::undo() {63if (myForward) {64// unselect if mySelectedElement is enabled65if (mySelectedElement) {66myDemandElement->unselectAttributeCarrier();67}68// delete demand element from net69myDemandElement->getNet()->getAttributeCarriers()->deleteDemandElement(myDemandElement, true);70// remove element from parent and children71removeElementFromParentsAndChildren(myDemandElement);72} else {73// select if mySelectedElement is enabled74if (mySelectedElement) {75myDemandElement->selectAttributeCarrier();76}77// add element in parent and children78addElementInParentsAndChildren(myDemandElement);79// insert demand element into net80myDemandElement->getNet()->getAttributeCarriers()->insertDemandElement(myDemandElement);81}82// update vehicle type selector if demand element is a VType and vehicle type Frame is shown83if ((myDemandElement->getTagProperty()->getTag() == SUMO_TAG_VTYPE) && myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->shown()) {84myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(true);85}86// update stack labels87const auto parentEdges = myParents.get<GNEEdge*>();88if (parentEdges.size() > 0) {89parentEdges.front()->updateVehicleStackLabels();90parentEdges.front()->updatePersonStackLabels();91parentEdges.front()->updateContainerStackLabels();92}93// require always save elements94myDemandElement->getNet()->getSavingStatus()->requireSaveDemandElements();95}969798void99GNEChange_DemandElement::redo() {100if (myForward) {101// select if mySelectedElement is enabled102if (mySelectedElement) {103myDemandElement->selectAttributeCarrier();104}105// add element in parent and children106addElementInParentsAndChildren(myDemandElement);107// insert demand element into net108myDemandElement->getNet()->getAttributeCarriers()->insertDemandElement(myDemandElement);109} else {110// unselect if mySelectedElement is enabled111if (mySelectedElement) {112myDemandElement->unselectAttributeCarrier();113}114// delete demand element from net115myDemandElement->getNet()->getAttributeCarriers()->deleteDemandElement(myDemandElement, true);116// remove element from parent and children117removeElementFromParentsAndChildren(myDemandElement);118}119// update vehicle type selector if demand element is a VType and vehicle type Frame is shown120if ((myDemandElement->getTagProperty()->getTag() == SUMO_TAG_VTYPE) && myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->shown()) {121myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(true);122}123// update stack labels124const auto parentEdges = myParents.get<GNEEdge*>();125if (parentEdges.size() > 0) {126parentEdges.front()->updateVehicleStackLabels();127parentEdges.front()->updatePersonStackLabels();128parentEdges.front()->updateContainerStackLabels();129}130// require always save elements131myDemandElement->getNet()->getSavingStatus()->requireSaveDemandElements();132}133134135std::string136GNEChange_DemandElement::undoName() const {137if (myForward) {138return (TL("Undo create ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");139} else {140return (TL("Undo delete ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");141}142}143144145std::string146GNEChange_DemandElement::redoName() const {147if (myForward) {148return (TL("Redo create ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");149} else {150return (TL("Redo delete ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");151}152}153154155