Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/changes/GNEChange_DemandElement.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_DemandElement.cpp
15
/// @author Pablo Alvarez Lopez
16
/// @date Jan 2019
17
///
18
// A network change in which a busStop is created or deleted
19
/****************************************************************************/
20
21
#include <netedit/GNENet.h>
22
#include <netedit/GNETagProperties.h>
23
#include <netedit/GNEViewNet.h>
24
#include <netedit/GNEViewParent.h>
25
#include <netedit/GNEApplicationWindow.h>
26
#include <netedit/frames/demand/GNETypeFrame.h>
27
28
#include "GNEChange_DemandElement.h"
29
30
// ===========================================================================
31
// FOX-declarations
32
// ===========================================================================
33
FXIMPLEMENT_ABSTRACT(GNEChange_DemandElement, GNEChange, nullptr, 0)
34
35
// ===========================================================================
36
// member method definitions
37
// ===========================================================================
38
39
GNEChange_DemandElement::GNEChange_DemandElement(GNEDemandElement* demandElement, bool forward) :
40
GNEChange(Supermode::DEMAND, demandElement, forward, demandElement->isAttributeCarrierSelected()),
41
myDemandElement(demandElement) {
42
myDemandElement->incRef("GNEChange_DemandElement");
43
}
44
45
46
GNEChange_DemandElement::~GNEChange_DemandElement() {
47
// only continue we have undo-redo mode enabled
48
if (myDemandElement->getNet()->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed()) {
49
myDemandElement->decRef("GNEChange_DemandElement");
50
if (myDemandElement->unreferenced()) {
51
// make sure that element isn't in net before removing
52
if (myDemandElement->getNet()->getAttributeCarriers()->retrieveDemandElement(myDemandElement, false)) {
53
// remove demand element of network
54
myDemandElement->getNet()->getAttributeCarriers()->deleteDemandElement(myDemandElement, false);
55
}
56
delete myDemandElement;
57
}
58
}
59
}
60
61
62
void
63
GNEChange_DemandElement::undo() {
64
if (myForward) {
65
// unselect if mySelectedElement is enabled
66
if (mySelectedElement) {
67
myDemandElement->unselectAttributeCarrier();
68
}
69
// delete demand element from net
70
myDemandElement->getNet()->getAttributeCarriers()->deleteDemandElement(myDemandElement, true);
71
// remove element from parent and children
72
removeElementFromParentsAndChildren(myDemandElement);
73
} else {
74
// select if mySelectedElement is enabled
75
if (mySelectedElement) {
76
myDemandElement->selectAttributeCarrier();
77
}
78
// add element in parent and children
79
addElementInParentsAndChildren(myDemandElement);
80
// insert demand element into net
81
myDemandElement->getNet()->getAttributeCarriers()->insertDemandElement(myDemandElement);
82
}
83
// update vehicle type selector if demand element is a VType and vehicle type Frame is shown
84
if ((myDemandElement->getTagProperty()->getTag() == SUMO_TAG_VTYPE) && myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->shown()) {
85
myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(true);
86
}
87
// update stack labels
88
const auto parentEdges = myParents.get<GNEEdge*>();
89
if (parentEdges.size() > 0) {
90
parentEdges.front()->updateVehicleStackLabels();
91
parentEdges.front()->updatePersonStackLabels();
92
parentEdges.front()->updateContainerStackLabels();
93
}
94
// require always save elements
95
myDemandElement->getNet()->getSavingStatus()->requireSaveDemandElements();
96
}
97
98
99
void
100
GNEChange_DemandElement::redo() {
101
if (myForward) {
102
// select if mySelectedElement is enabled
103
if (mySelectedElement) {
104
myDemandElement->selectAttributeCarrier();
105
}
106
// add element in parent and children
107
addElementInParentsAndChildren(myDemandElement);
108
// insert demand element into net
109
myDemandElement->getNet()->getAttributeCarriers()->insertDemandElement(myDemandElement);
110
} else {
111
// unselect if mySelectedElement is enabled
112
if (mySelectedElement) {
113
myDemandElement->unselectAttributeCarrier();
114
}
115
// delete demand element from net
116
myDemandElement->getNet()->getAttributeCarriers()->deleteDemandElement(myDemandElement, true);
117
// remove element from parent and children
118
removeElementFromParentsAndChildren(myDemandElement);
119
}
120
// update vehicle type selector if demand element is a VType and vehicle type Frame is shown
121
if ((myDemandElement->getTagProperty()->getTag() == SUMO_TAG_VTYPE) && myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->shown()) {
122
myDemandElement->getNet()->getViewNet()->getViewParent()->getTypeFrame()->getTypeSelector()->refreshTypeSelector(true);
123
}
124
// update stack labels
125
const auto parentEdges = myParents.get<GNEEdge*>();
126
if (parentEdges.size() > 0) {
127
parentEdges.front()->updateVehicleStackLabels();
128
parentEdges.front()->updatePersonStackLabels();
129
parentEdges.front()->updateContainerStackLabels();
130
}
131
// require always save elements
132
myDemandElement->getNet()->getSavingStatus()->requireSaveDemandElements();
133
}
134
135
136
std::string
137
GNEChange_DemandElement::undoName() const {
138
if (myForward) {
139
return (TL("Undo create ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");
140
} else {
141
return (TL("Undo delete ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");
142
}
143
}
144
145
146
std::string
147
GNEChange_DemandElement::redoName() const {
148
if (myForward) {
149
return (TL("Redo create ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");
150
} else {
151
return (TL("Redo delete ") + myDemandElement->getTagStr() + " '" + myDemandElement->getID() + "'");
152
}
153
}
154
155