Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/changes/GNEChange_Edge.cpp
169678 views
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
/****************************************************************************/
14
/// @file GNEChange_Edge.cpp
15
/// @author Jakob Erdmann
16
/// @date Mar 2011
17
///
18
// A network change in which a single edge is created or deleted
19
/****************************************************************************/
20
21
#include <netedit/GNENet.h>
22
#include <netedit/GNEViewNet.h>
23
#include <netedit/GNEViewParent.h>
24
#include <netedit/GNEApplicationWindow.h>
25
26
#include "GNEChange_Edge.h"
27
28
// ===========================================================================
29
// FOX-declarations
30
// ===========================================================================
31
32
FXIMPLEMENT_ABSTRACT(GNEChange_Edge, GNEChange, nullptr, 0)
33
34
// ===========================================================================
35
// member method definitions
36
// ===========================================================================
37
38
39
/// @brief constructor for creating an edge
40
GNEChange_Edge::GNEChange_Edge(GNEEdge* edge, bool forward):
41
GNEChange(Supermode::NETWORK, edge, forward, edge->isAttributeCarrierSelected()),
42
myEdge(edge) {
43
edge->incRef("GNEChange_Edge");
44
}
45
46
47
GNEChange_Edge::~GNEChange_Edge() {
48
// only continue we have undo-redo mode enabled
49
if (myEdge->getNet()->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed()) {
50
myEdge->decRef("GNEChange_Edge");
51
if (myEdge->unreferenced()) {
52
// delete edge
53
delete myEdge;
54
}
55
}
56
}
57
58
59
void
60
GNEChange_Edge::undo() {
61
if (myForward) {
62
// unselect if mySelectedElement is enabled
63
if (mySelectedElement) {
64
myEdge->unselectAttributeCarrier();
65
}
66
// delete edge from net
67
myEdge->getNet()->getAttributeCarriers()->deleteSingleEdge(myEdge);
68
// remove element from parent and children
69
removeElementFromParentsAndChildren(myEdge);
70
} else {
71
// select if mySelectedElement is enabled
72
if (mySelectedElement) {
73
myEdge->selectAttributeCarrier();
74
}
75
// add element in parent and children
76
addElementInParentsAndChildren(myEdge);
77
// insert edge into net
78
myEdge->getNet()->getAttributeCarriers()->insertEdge(myEdge);
79
}
80
// enable save networkElements
81
myEdge->getNet()->getSavingStatus()->requireSaveNetwork();
82
}
83
84
85
void
86
GNEChange_Edge::redo() {
87
if (myForward) {
88
// select if mySelectedElement is enabled
89
if (mySelectedElement) {
90
myEdge->selectAttributeCarrier();
91
}
92
// add element in parent and children
93
addElementInParentsAndChildren(myEdge);
94
// insert edge into net
95
myEdge->getNet()->getAttributeCarriers()->insertEdge(myEdge);
96
} else {
97
// unselect if mySelectedElement is enabled
98
if (mySelectedElement) {
99
myEdge->unselectAttributeCarrier();
100
}
101
// delete edge from net
102
myEdge->getNet()->getAttributeCarriers()->deleteSingleEdge(myEdge);
103
// remove element from parent and children
104
removeElementFromParentsAndChildren(myEdge);
105
}
106
// enable save networkElements
107
myEdge->getNet()->getSavingStatus()->requireSaveNetwork();
108
}
109
110
111
std::string
112
GNEChange_Edge::undoName() const {
113
if (myForward) {
114
return (TL("Undo create edge '") + myEdge->getID() + "'");
115
} else {
116
return (TL("Undo delete edge '") + myEdge->getID() + "'");
117
}
118
}
119
120
121
std::string
122
GNEChange_Edge::redoName() const {
123
if (myForward) {
124
return (TL("Redo create edge '") + myEdge->getID() + "'");
125
} else {
126
return (TL("Redo delete edge '") + myEdge->getID() + "'");
127
}
128
}
129
130