Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/frames/data/GNEGenericDataFrame.h
193678 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 GNEGenericDataFrame.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jan 2020
17
///
18
// The Widget for add genericData elements
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 GNEAttributesEditor;
31
class GNEAttributesEditorType;
32
class GNEDataInterval;
33
class GNEDataSet;
34
class GNEPathCreator;
35
36
// ===========================================================================
37
// class definitions
38
// ===========================================================================
39
40
class GNEGenericDataFrame : public GNEFrame {
41
42
public:
43
// ===========================================================================
44
// class DataSetSelector
45
// ===========================================================================
46
47
class DataSetSelector : public GNEGroupBoxModule {
48
/// @brief FOX-declaration
49
FXDECLARE(GNEGenericDataFrame::DataSetSelector)
50
51
public:
52
/// @brief constructor
53
DataSetSelector(GNEGenericDataFrame* genericDataFrameParent);
54
55
/// @brief destructor
56
~DataSetSelector();
57
58
/// @brief refresh interval selector
59
void refreshDataSetSelector(const GNEDataSet* currentDataSet);
60
61
/// @brief get current select data set ID
62
GNEDataSet* getDataSet() const;
63
64
/// @name FOX-callbacks
65
/// @{
66
/// @brief called when user press button "create dataSet"
67
long onCmdCreateDataSet(FXObject*, FXSelector, void*);
68
69
/// @brief Called when the user set a new data set ID
70
long onCmdSetNewDataSetID(FXObject*, FXSelector, void*);
71
72
/// @brief Called when the user select an existent data set
73
long onCmdSelectDataSet(FXObject* obj, FXSelector, void*);
74
75
/// @brief Called when the user select check button
76
long onCmdSelectCheckButton(FXObject* obj, FXSelector, void*);
77
78
/// @}
79
80
protected:
81
FOX_CONSTRUCTOR(DataSetSelector)
82
83
private:
84
/// @brief pointer to genericData frame Parent
85
GNEGenericDataFrame* myGenericDataFrameParent;
86
87
/// @brief check button to create a new dataSet
88
FXCheckButton* myNewDataSetCheckButton;
89
90
/// @brief horizontal frame new id
91
FXHorizontalFrame* myHorizontalFrameNewID;
92
93
/// @brief interval new id
94
FXTextField* myNewDataSetIDTextField;
95
96
/// @brief create dataSet button
97
FXButton* myCreateDataSetButton;
98
99
/// @brief comboBox with intervals
100
MFXComboBoxIcon* myDataSetsComboBox;
101
};
102
103
// ===========================================================================
104
// class IntervalSelector
105
// ===========================================================================
106
107
class IntervalSelector : public GNEGroupBoxModule {
108
/// @brief FOX-declaration
109
FXDECLARE(GNEGenericDataFrame::IntervalSelector)
110
111
public:
112
/// @brief constructor
113
IntervalSelector(GNEGenericDataFrame* genericDataFrameParent);
114
115
/// @brief destructor
116
~IntervalSelector();
117
118
/// @brief enable contents
119
void enableContents() const;
120
121
/// @brief disable contents
122
void disableContents() const;
123
124
/// @brief refresh interval selector
125
void refreshIntervalSelector();
126
127
/// @brief get current select data set ID
128
GNEDataInterval* getDataInterval() const;
129
130
/// @name FOX-callbacks
131
/// @{
132
/// @brief called when user press button "create interval"
133
long onCmdCreateInterval(FXObject*, FXSelector, void*);
134
135
/// @brief Called when the user select an interval in the list
136
long onCmdSelectInterval(FXObject*, FXSelector, void*);
137
138
/// @brief Called when the user changes begin or end
139
long onCmdSetIntervalAttribute(FXObject*, FXSelector, void*);
140
141
/// @brief Called when the user select check button
142
long onCmdSelectCheckButton(FXObject* obj, FXSelector, void*);
143
144
/// @}
145
146
protected:
147
/// @brief FOX needs this
148
FOX_CONSTRUCTOR(IntervalSelector)
149
150
private:
151
/// @brief add interval item into list
152
FXTreeItem* addIntervalItem(GNEDataInterval* dataInterval, FXTreeItem* itemParent = nullptr);
153
154
/// @brief pointer to genericData frame Parent
155
GNEGenericDataFrame* myGenericDataFrameParent;
156
157
/// @brief check button to create a new interval
158
FXCheckButton* myNewIntervalCheckButton;
159
160
/// @brief interval begin horizontal frame
161
FXHorizontalFrame* myHorizontalFrameBegin;
162
163
/// @brief interval begin text field
164
FXTextField* myBeginTextField;
165
166
/// @brief interval end horizontal frame
167
FXHorizontalFrame* myHorizontalFrameEnd;
168
169
/// @brief interval end
170
FXTextField* myEndTextField;
171
172
/// @brief create interval button
173
FXButton* myCreateIntervalButton;
174
175
/// @brief tree list to show the interval list
176
FXTreeList* myIntervalsTreelist;
177
178
/// @brief map used to save the Tree items with their GNEDataInterval
179
std::map<FXTreeItem*, GNEDataInterval*> myTreeItemIntervalMap;
180
};
181
182
// ===========================================================================
183
// class AttributeSelector
184
// ===========================================================================
185
186
class AttributeSelector : public GNEGroupBoxModule {
187
/// @brief FOX-declaration
188
FXDECLARE(GNEGenericDataFrame::AttributeSelector)
189
190
public:
191
/// @brief constructor
192
AttributeSelector(GNEGenericDataFrame* genericDataFrameParent, SumoXMLTag tag);
193
194
/// @brief destructor
195
~AttributeSelector();
196
197
/// @brief refresh interval selector
198
void refreshAttributeSelector();
199
200
/// @brief get filtered attribute
201
std::string getFilteredAttribute() const;
202
203
/// @brief get color for the given value
204
const RGBColor& getScaledColor(const double min, const double max, const double value) const;
205
206
/// @brief getgeneric data tag
207
SumoXMLTag getGenericDataTag() const;
208
209
/// @name FOX-callbacks
210
/// @{
211
212
/// @brief Called when the user select a attribute in the combo boz
213
long onCmdSelectAttribute(FXObject*, FXSelector, void*);
214
215
/// @}
216
217
protected:
218
FOX_CONSTRUCTOR(AttributeSelector)
219
220
private:
221
/// @brief pointer to genericData frame Parent
222
GNEGenericDataFrame* myGenericDataFrameParent;
223
224
/// @brief combo box for attributes
225
MFXComboBoxIcon* myAttributesComboBox;
226
227
/// @brief label for min/max attribute
228
FXLabel* myMinMaxLabel;
229
230
/// @brief generic data tag
231
SumoXMLTag myGenericDataTag;
232
};
233
234
/// @brief get dataSet selector modul
235
const DataSetSelector* getDataSetSelector() const;
236
237
/// @brief get interval selector modul
238
const IntervalSelector* getIntervalSelector() const;
239
240
/// @brief getattribute selector modul
241
const AttributeSelector* getAttributeSelector() const;
242
243
/// @brief get GNEPathCreator modul
244
GNEPathCreator* getPathCreator() const;
245
246
/// @brief show Frame
247
void show();
248
249
/// @brief hide Frame
250
void hide();
251
252
/// @brief function called after undo/redo in the current frame
253
void updateFrameAfterUndoRedo();
254
255
protected:
256
/**@brief Constructor (protected due GNEGenericDataFrame is abtract)
257
* @brief viewParent GNEViewParent in which this GNEFrame is placed
258
* @brief viewNet GNEViewNet that uses this GNEFrame
259
* @brief tag generic data tag
260
* @brief pathCreator flag to create pathCreator
261
*/
262
GNEGenericDataFrame(GNEViewParent* viewParent, GNEViewNet* viewNet, SumoXMLTag tag, const bool pathCreator);
263
264
/// @brief Destructor
265
~GNEGenericDataFrame();
266
267
/// @brief interval selected
268
void intervalSelected();
269
270
/// @brief create path
271
virtual bool createPath(const bool useLastRoute);
272
273
/// @brief dataSet selector modul
274
DataSetSelector* myDataSetSelector = nullptr;
275
276
/// @brief interval selector modul
277
IntervalSelector* myIntervalSelector = nullptr;
278
279
/// @brief attribute selector modul
280
AttributeSelector* myAttributeSelector = nullptr;
281
282
/// @brief parameters editor creator
283
GNEAttributesEditor* myGenericDataAttributesEditor = nullptr;
284
285
/// @brief edge path creator (used for Walks, rides and trips)
286
GNEPathCreator* myPathCreator = nullptr;
287
288
private:
289
/// @brief Invalidated copy constructor.
290
GNEGenericDataFrame(const GNEGenericDataFrame&) = delete;
291
292
/// @brief Invalidated assignment operator.
293
GNEGenericDataFrame& operator=(const GNEGenericDataFrame&) = delete;
294
};
295
296