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