/****************************************************************************/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_Edge.cpp14/// @author Jakob Erdmann15/// @date Mar 201116///17// A network change in which a single edge is created or deleted18/****************************************************************************/1920#include <netedit/GNENet.h>21#include <netedit/GNEViewNet.h>22#include <netedit/GNEViewParent.h>23#include <netedit/GNEApplicationWindow.h>2425#include "GNEChange_Edge.h"2627// ===========================================================================28// FOX-declarations29// ===========================================================================3031FXIMPLEMENT_ABSTRACT(GNEChange_Edge, GNEChange, nullptr, 0)3233// ===========================================================================34// member method definitions35// ===========================================================================363738/// @brief constructor for creating an edge39GNEChange_Edge::GNEChange_Edge(GNEEdge* edge, bool forward):40GNEChange(Supermode::NETWORK, edge, forward, edge->isAttributeCarrierSelected()),41myEdge(edge) {42edge->incRef("GNEChange_Edge");43}444546GNEChange_Edge::~GNEChange_Edge() {47// only continue we have undo-redo mode enabled48if (myEdge->getNet()->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed()) {49myEdge->decRef("GNEChange_Edge");50if (myEdge->unreferenced()) {51// delete edge52delete myEdge;53}54}55}565758void59GNEChange_Edge::undo() {60if (myForward) {61// unselect if mySelectedElement is enabled62if (mySelectedElement) {63myEdge->unselectAttributeCarrier();64}65// delete edge from net66myEdge->getNet()->getAttributeCarriers()->deleteSingleEdge(myEdge);67// remove element from parent and children68removeElementFromParentsAndChildren(myEdge);69} else {70// select if mySelectedElement is enabled71if (mySelectedElement) {72myEdge->selectAttributeCarrier();73}74// add element in parent and children75addElementInParentsAndChildren(myEdge);76// insert edge into net77myEdge->getNet()->getAttributeCarriers()->insertEdge(myEdge);78}79// enable save networkElements80myEdge->getNet()->getSavingStatus()->requireSaveNetwork();81}828384void85GNEChange_Edge::redo() {86if (myForward) {87// select if mySelectedElement is enabled88if (mySelectedElement) {89myEdge->selectAttributeCarrier();90}91// add element in parent and children92addElementInParentsAndChildren(myEdge);93// insert edge into net94myEdge->getNet()->getAttributeCarriers()->insertEdge(myEdge);95} else {96// unselect if mySelectedElement is enabled97if (mySelectedElement) {98myEdge->unselectAttributeCarrier();99}100// delete edge from net101myEdge->getNet()->getAttributeCarriers()->deleteSingleEdge(myEdge);102// remove element from parent and children103removeElementFromParentsAndChildren(myEdge);104}105// enable save networkElements106myEdge->getNet()->getSavingStatus()->requireSaveNetwork();107}108109110std::string111GNEChange_Edge::undoName() const {112if (myForward) {113return (TL("Undo create edge '") + myEdge->getID() + "'");114} else {115return (TL("Undo delete edge '") + myEdge->getID() + "'");116}117}118119120std::string121GNEChange_Edge::redoName() const {122if (myForward) {123return (TL("Redo create edge '") + myEdge->getID() + "'");124} else {125return (TL("Redo delete edge '") + myEdge->getID() + "'");126}127}128129130