Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/frames/network/GNECreateEdgeFrame.h
193871 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2026 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 GNECreateEdgeFrame.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Dec 2018
17
///
18
// The Widget for create edges (and junctions)
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <netedit/frames/GNEFrame.h>
24
#include <netedit/frames/common/GNEGroupBoxModule.h>
25
26
// ===========================================================================
27
// class declaration
28
// ===========================================================================
29
30
class GNEEdgeType;
31
class GNEAttributesEditor;
32
33
// ===========================================================================
34
// class definitions
35
// ===========================================================================
36
37
class GNECreateEdgeFrame : public GNEFrame {
38
39
public:
40
41
// ===========================================================================
42
// class EdgeTypeSelector
43
// ===========================================================================
44
45
class EdgeTypeSelector : public GNEGroupBoxModule {
46
/// @brief FOX-declaration
47
FXDECLARE(GNECreateEdgeFrame::EdgeTypeSelector)
48
49
public:
50
/// @brief constructor
51
EdgeTypeSelector(GNECreateEdgeFrame* createEdgeFrameParent);
52
53
/// @brief destructor
54
~EdgeTypeSelector();
55
56
/// @brief refresh edge type selector
57
void refreshEdgeTypeSelector();
58
59
/// @brief update id in comboBox
60
void updateIDinComboBox(const std::string& oldID, const std::string& newID);
61
62
/// @brief check if we're using default edge type
63
bool useDefaultEdgeType() const;
64
65
/// @brief check if we're using default edge type short
66
bool useDefaultEdgeTypeShort() const;
67
68
/// @brief check if we have to use edge template
69
bool useEdgeTemplate() const;
70
71
/// @brief void enable checkbox for disable pedestrians
72
void enableCheckBoxDisablePedestrians();
73
74
/// @brief get edgeType selected
75
GNEEdgeType* getEdgeTypeSelected() const;
76
77
/// @brief check if no pedestrian check button is enabled
78
bool isNoPedestriansEnabled() const;
79
80
/// @brief check if add sidewalk check button is enabled
81
bool isAddSidewalkEnabled() const;
82
83
/// @brief check if add bikelane check button is enabled
84
bool isAddBikelaneEnabled() const;
85
86
/// @brief clear edgeType selected
87
void clearEdgeTypeSelected();
88
89
/// @brief set current edgeType
90
void setCurrentEdgeType(const GNEEdgeType* edgeType);
91
92
/// @brief use template
93
void useTemplate();
94
95
/// @name FOX-callbacks
96
/// @{
97
/// @brief Called when the user press a radio button
98
long onCmdRadioButton(FXObject*, FXSelector, void*);
99
100
/// @brief Called when the user press button for add a new edge type
101
long onCmdAddEdgeType(FXObject*, FXSelector, void*);
102
103
/// @brief Called when the user press button for delete edge type
104
long onCmdDeleteEdgeType(FXObject*, FXSelector, void*);
105
106
/// @brief Called when the user press select an edgeType or template in comboBox
107
long onCmdSelectEdgeTypeOrTemplate(FXObject*, FXSelector, void*);
108
109
/// @brief Called when the user press create edgeType from Template
110
long onCmdCreateFromTemplate(FXObject*, FXSelector, void*);
111
112
/// @brief Called when check buttons are updated
113
long onUpdCheckButtons(FXObject*, FXSelector, void*);
114
115
/// @}
116
117
protected:
118
/// @brief FOX need this
119
FOX_CONSTRUCTOR(EdgeTypeSelector);
120
121
/// @brief fill comboBox
122
void fillComboBox();
123
124
private:
125
/// @brief pointer to createEdgeFrameParent
126
GNECreateEdgeFrame* myCreateEdgeFrameParent;
127
128
/// @brief selected edgeType
129
GNEEdgeType* myEdgeTypeSelected = nullptr;
130
131
/// @brief currentIndex
132
int myCurrentIndex;
133
134
/// @brief create default edge
135
FXRadioButton* myCreateDefaultEdgeType = nullptr;
136
137
/// @brief create default edge short
138
FXRadioButton* myCreateDefaultShortEdgeType = nullptr;
139
140
/// @brief no pedestrian check button
141
FXCheckButton* myNoPedestriansCheckButton = nullptr;
142
143
/// @brief add sidewalk check button
144
FXCheckButton* myAddSidewalkCheckButton = nullptr;
145
146
/// @brief add bike check button
147
FXCheckButton* myAddBikelaneCheckButton = nullptr;
148
149
/// @brief create custom edge
150
FXRadioButton* myCreateCustomEdgeType = nullptr;
151
152
/// @brief ComboBox for edge types
153
MFXComboBoxIcon* myEdgeTypesComboBox = nullptr;
154
155
/// @brief button for create new edge type
156
FXButton* myAddEdgeTypeButton = nullptr;
157
158
/// @brief button for delete edge type
159
FXButton* myDeleteEdgeTypeButton = nullptr;
160
161
/// @brief button for create edgeType from template
162
FXButton* myCreateFromTemplate = nullptr;
163
};
164
165
// ===========================================================================
166
// class LaneTypeSelector
167
// ===========================================================================
168
169
class LaneTypeSelector : public GNEGroupBoxModule {
170
/// @brief FOX-declaration
171
FXDECLARE(GNECreateEdgeFrame::LaneTypeSelector)
172
173
public:
174
/// @brief constructor
175
LaneTypeSelector(GNECreateEdgeFrame* createEdgeFrameParent);
176
177
/// @brief destructor
178
~LaneTypeSelector();
179
180
/// @brief show lane type selector
181
void showLaneTypeSelector();
182
183
/// @brief hide lane type selector
184
void hideLaneTypeSelector();
185
186
/// @brief refresh LaneTypeSelector
187
void refreshLaneTypeSelector();
188
189
/// @name FOX-callbacks
190
/// @{
191
/// @brief Called when the user press button for add a new lane type
192
long onCmdAddLaneType(FXObject*, FXSelector, void*);
193
194
/// @brief Called when the user press button for delete lane type
195
long onCmdDeleteLaneType(FXObject*, FXSelector, void*);
196
197
/// @brief Called when the user press select an laneType in comboBox
198
long onCmdSelectLaneType(FXObject*, FXSelector, void*);
199
200
/// @}
201
202
protected:
203
/// @brief FOX need this
204
FOX_CONSTRUCTOR(LaneTypeSelector);
205
206
/// @brief update comboBox
207
void updateComboBox();
208
209
private:
210
/// @brief pointer to createEdgeFrameParent
211
GNECreateEdgeFrame* myCreateEdgeFrameParent;
212
213
/// @brief lane index
214
int myLaneIndex;
215
/// @brief ComboBox for lane types
216
MFXComboBoxIcon* myLaneTypesComboBox = nullptr;
217
218
/// @brief button for create new lane type
219
FXButton* myAddLaneTypeButton = nullptr;
220
221
/// @brief button for delete lane type
222
FXButton* myDeleteLaneTypeButton = nullptr;
223
};
224
225
// ===========================================================================
226
// class Legend
227
// ===========================================================================
228
229
class Legend : public GNEGroupBoxModule {
230
231
public:
232
/// @brief constructor
233
Legend(GNECreateEdgeFrame* createEdgeFrameParent);
234
235
/// @brief destructor
236
~Legend();
237
};
238
239
/**@brief Constructor
240
* @brief viewParent GNEViewParent in which this GNEFrame is placed
241
* @brief viewNet viewNet that uses this GNEFrame
242
*/
243
GNECreateEdgeFrame(GNEViewParent* viewParent, GNEViewNet* viewNet);
244
245
/// @brief Destructor
246
~GNECreateEdgeFrame();
247
248
/**@brief handle processClick and set the relative coloring
249
* @param[in] clickedPosition clicked position over ViewNet
250
* @param viewObjects collection of objects under cursor after click over view
251
* @param oppositeEdge automatically create an opposite edge
252
* @param chainEdge create edges in chain mode
253
*/
254
void processClick(const Position& clickedPosition, const GNEViewNetHelper::ViewObjectsSelector& viewObjects, const bool oppositeEdge, const bool chainEdge);
255
256
/// @brief abort current edge creation
257
void abortEdgeCreation();
258
259
/// @brief get junction source for new edge
260
const GNEJunction* getJunctionSource() const;
261
262
/// @brief show create edge frame
263
void show();
264
265
/// @brief hide create edge frame
266
void hide();
267
268
/// @brief get edgeType selector
269
EdgeTypeSelector* getEdgeTypeSelector() const;
270
271
/// @brief get edgeType attributes
272
GNEAttributesEditor* getEdgeTypeAttributes() const;
273
274
/// @brief get lane type selector
275
LaneTypeSelector* getLaneTypeSelector();
276
277
/// @brief get laneType attributes
278
GNEAttributesEditor* getLaneTypeAttributes() const;
279
280
/// @brief set default to using edge template
281
void setUseEdgeTemplate();
282
283
protected:
284
/// @brief edge type selector
285
EdgeTypeSelector* myEdgeTypeSelector = nullptr;
286
287
/// @brief internal edgeType attributes
288
GNEAttributesEditor* myEdgeTypeAttributesEditor = nullptr;
289
290
/// @brief lane type selector
291
GNECreateEdgeFrame::LaneTypeSelector* myLaneTypeSelector = nullptr;
292
293
/// @brief internal laneType attributes
294
GNEAttributesEditor* myLaneTypeAttributesEditor = nullptr;
295
296
/// @brief Legend
297
GNECreateEdgeFrame::Legend* myLegend = nullptr;
298
299
/// @brief disable pedestrians in the given edge (within undoRedo)
300
void disablePedestrians(GNEEdge* edge) const;
301
302
/// @brief add sidewalk in the given edge
303
void addSidewalk(GNEEdge* edge, const std::string& sidewalkWidth) const;
304
305
/// @brief add bikelane in the given edge
306
void addBikelane(GNEEdge* edge, const std::string& bikelaneWidth) const;
307
308
private:
309
/// @brief source junction for new edge
310
GNEJunction* myJunctionSource;
311
};
312
313