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