Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/changes/GNEChange_GenericData.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_GenericData.cpp
15
/// @author Pablo Alvarez Lopez
16
/// @date Jan 2020
17
///
18
// A network change in which a generic data set 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
#include <netedit/elements/data/GNEDataInterval.h>
26
27
#include "GNEChange_GenericData.h"
28
29
// ===========================================================================
30
// FOX-declarations
31
// ===========================================================================
32
33
FXIMPLEMENT_ABSTRACT(GNEChange_GenericData, GNEChange, nullptr, 0)
34
35
// ===========================================================================
36
// member method definitions
37
// ===========================================================================
38
39
GNEChange_GenericData::GNEChange_GenericData(GNEGenericData* genericData, bool forward) :
40
GNEChange(Supermode::DATA, genericData, forward, genericData->isAttributeCarrierSelected()),
41
myGenericData(genericData),
42
myDataIntervalParent(genericData->getDataIntervalParent()) {
43
myGenericData->incRef("GNEChange_GenericData");
44
}
45
46
47
GNEChange_GenericData::~GNEChange_GenericData() {
48
// only continue we have undo-redo mode enabled
49
if (myGenericData->getNet()->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed()) {
50
myGenericData->decRef("GNEChange_GenericData");
51
if (myGenericData->unreferenced() &&
52
myGenericData->getNet()->getAttributeCarriers()->retrieveDataInterval(myDataIntervalParent, false) &&
53
myGenericData->getNet()->getAttributeCarriers()->retrieveGenericData(myGenericData, false)) {
54
// delete generic data from interval parent
55
myDataIntervalParent->removeGenericDataChild(myGenericData);
56
// delete generic data
57
delete myGenericData;
58
}
59
}
60
}
61
62
63
void
64
GNEChange_GenericData::undo() {
65
if (myForward) {
66
// unselect if mySelectedElement is enabled
67
if (mySelectedElement) {
68
myGenericData->unselectAttributeCarrier();
69
}
70
// delete generic data from interval parent
71
myDataIntervalParent->removeGenericDataChild(myGenericData);
72
// remove element from parent and children
73
removeElementFromParentsAndChildren(myGenericData);
74
} else {
75
// select if mySelectedElement is enabled
76
if (mySelectedElement) {
77
myGenericData->selectAttributeCarrier();
78
}
79
// add element in parent and children
80
addElementInParentsAndChildren(myGenericData);
81
// insert generic data into interval parent
82
myDataIntervalParent->addGenericDataChild(myGenericData);
83
}
84
// require always save elements
85
myGenericData->getNet()->getSavingStatus()->requireSaveDataElements();
86
}
87
88
89
void
90
GNEChange_GenericData::redo() {
91
if (myForward) {
92
// select if mySelectedElement is enabled
93
if (mySelectedElement) {
94
myGenericData->selectAttributeCarrier();
95
}
96
// add element in parent and children
97
addElementInParentsAndChildren(myGenericData);
98
// insert generic data into interval parent
99
myDataIntervalParent->addGenericDataChild(myGenericData);
100
} else {
101
// unselect if mySelectedElement is enabled
102
if (mySelectedElement) {
103
myGenericData->unselectAttributeCarrier();
104
}
105
// delete generic data from interval parent
106
myDataIntervalParent->removeGenericDataChild(myGenericData);
107
// remove element from parent and children
108
removeElementFromParentsAndChildren(myGenericData);
109
}
110
// require always save elements
111
myGenericData->getNet()->getSavingStatus()->requireSaveDataElements();
112
}
113
114
115
std::string
116
GNEChange_GenericData::undoName() const {
117
if (myForward) {
118
return (TL("Undo create ") + myGenericData->getTagStr());
119
} else {
120
return (TL("Undo delete ") + myGenericData->getTagStr());
121
}
122
}
123
124
125
std::string
126
GNEChange_GenericData::redoName() const {
127
if (myForward) {
128
return (TL("Redo create ") + myGenericData->getTagStr());
129
} else {
130
return (TL("Redo delete ") + myGenericData->getTagStr());
131
}
132
}
133
134