Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/dialogs/GNEParametersDialog.h
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 GNEParametersDialog.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jul 2018
17
///
18
// Dialog for edit parameters
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <netedit/dialogs/elements/GNEVehicleTypeDialog.h>
24
#include <utils/xml/SUMOSAXHandler.h>
25
26
#include "GNEDialog.h"
27
28
// ===========================================================================
29
// class definitions
30
// ===========================================================================
31
32
class GNEAttributeCarrier;
33
class GNEAttributesEditorType;
34
class GNEViewNet;
35
class NBLoadedSUMOTLDef;
36
37
// ===========================================================================
38
// class definitions
39
// ===========================================================================
40
41
class GNEParametersDialog : public GNEDialog {
42
/// @brief FOX-declaration
43
FXDECLARE(GNEParametersDialog)
44
45
public:
46
47
// ===========================================================================
48
// class ParametersValues
49
// ===========================================================================
50
51
class ParametersValues : protected FXGroupBox {
52
/// @brief FOX-declaration
53
FXDECLARE(GNEParametersDialog::ParametersValues)
54
55
/// @brief declare class
56
class ParameterRow;
57
58
public:
59
/// @brief constructor
60
ParametersValues(FXHorizontalFrame* frame, const std::string& name);
61
62
/// @brief destructor
63
~ParametersValues();
64
65
/// @brief set parameters map
66
void setParameters(const Parameterised::Map& newParameters);
67
68
/// @brief set parameters
69
void setParameters(const std::vector<std::pair<std::string, std::string> >& newParameters);
70
71
/// @brief add a single parameter
72
void addParameter(std::pair<std::string, std::string> newParameter);
73
74
/// @brief clear all parameters
75
void clearParameters();
76
77
/// @brief get vector with the ParameterRows
78
const std::vector<ParameterRow*> getParameterRows() const;
79
80
/// @brief check if given key exist already
81
bool keyExist(const std::string& key) const;
82
83
/// @name FOX-callbacks
84
/// @{
85
/// @brief on paint function (reimplemented from FXGroupBox)
86
long onPaint(FXObject* o, FXSelector f, void* p);
87
88
/// @brief event when user change an attribute
89
long onCmdSetAttribute(FXObject*, FXSelector, void*);
90
91
/// @brief event when user press a remove (or add) button
92
long onCmdButtonPress(FXObject*, FXSelector, void*);
93
94
/// @}
95
96
protected:
97
/// @brief FOX need this
98
FOX_CONSTRUCTOR(ParametersValues)
99
100
private:
101
/// @brief class for parameters Row
102
class ParameterRow {
103
104
public:
105
/// @brief constructor
106
ParameterRow(ParametersValues* ParametersValues, FXVerticalFrame* verticalFrameParent);
107
108
/// @brief destructor
109
~ParameterRow();
110
111
/// @brief disable row
112
void disableRow();
113
114
/// @brief enable row
115
void enableRow(const std::string& parameter, const std::string& value) const;
116
117
/// @brief toggle add button
118
void toggleAddButton();
119
120
/// @brief check if remove button is in mode "add"
121
bool isButtonInAddMode() const;
122
123
/// @brief copy values of other parameter Row
124
void copyValues(const ParameterRow& other);
125
126
/// @brief TextField for parameter
127
FXTextField* keyField;
128
129
/// @brief TextField for value
130
FXTextField* valueField;
131
132
/// @brief Button for add or remove row
133
FXButton* button;
134
private:
135
/// @brief frame in which elements of ParameterRow are placed
136
FXHorizontalFrame* horizontalFrame;
137
};
138
139
/// @brief label for key (its neccesary because has to be resized in every onPaint() iteration)
140
FXLabel* myKeyLabel;
141
142
/// @brief vertical frame in which rows are placed
143
FXVerticalFrame* myVerticalFrameRow;
144
145
/// @brief vector with the ParameterRows
146
std::vector<ParameterRow*> myParameterRows;
147
};
148
149
// ===========================================================================
150
// class ParametersOperations
151
// ===========================================================================
152
153
class ParametersOperations : protected FXGroupBox {
154
/// @brief FOX-declaration
155
FXDECLARE(GNEParametersDialog::ParametersOperations)
156
157
public:
158
/// @brief constructor
159
ParametersOperations(FXHorizontalFrame* frame, GNEParametersDialog* ParameterDialogParent);
160
161
/// @brief destructor
162
~ParametersOperations();
163
164
/// @name FOX-callbacks
165
/// @{
166
/// @brief event when user press load parameters button
167
long onCmdLoadParameters(FXObject*, FXSelector, void*);
168
169
/// @brief event when user press save parameters button
170
long onCmdSaveParameters(FXObject*, FXSelector, void*);
171
172
/// @brief event when user press clear parameters button
173
long onCmdClearParameters(FXObject*, FXSelector, void*);
174
175
/// @brief event when user press sort parameters button
176
long onCmdSortParameters(FXObject*, FXSelector, void*);
177
178
/// @brief event when user press help parameters button
179
long onCmdHelpParameter(FXObject*, FXSelector, void*);
180
181
/// @}
182
183
protected:
184
/// @brief FOX need this
185
FOX_CONSTRUCTOR(ParametersOperations)
186
187
private:
188
/// @class GNEParameterHandler
189
/// @brief load parameters from a filename
190
class GNEParameterHandler : public SUMOSAXHandler {
191
192
public:
193
/// @brief Constructor
194
GNEParameterHandler(ParametersOperations* ParametersOperationsParent, const std::string& file);
195
196
/// @brief Destructor
197
~GNEParameterHandler();
198
199
/// @name inherited from SAXHandler
200
/// @{
201
/**@brief Called on the opening of a tag;
202
* @param[in] element ID of the currently opened element
203
* @param[in] attrs Attributes within the currently opened element
204
* @exception ProcessError If something fails
205
* @see SAXHandler::myStartElement
206
*/
207
void myStartElement(int element, const SUMOSAXAttributes& attrs);
208
209
private:
210
/// @brief pointer to ParametersOperations parent
211
ParametersOperations* myParametersOperationsParent;
212
};
213
214
/// @brief pointer to Shape Frame Parent
215
GNEParametersDialog* myParameterDialogParent;
216
217
/// @brief sort button
218
FXButton* mySortButton;
219
220
/// @brief clear button
221
FXButton* myClearButton;
222
223
/// @brief load button
224
FXButton* myLoadButton;
225
226
/// @brief save button
227
FXButton* mySaveButton;
228
229
/// @brief help button
230
FXButton* myHelpButton;
231
};
232
233
/// @brief constructor
234
GNEParametersDialog(GNEApplicationWindow* applicationWindow, const Parameterised::Map& parameters);
235
236
/// @brief destructor
237
~GNEParametersDialog();
238
239
/// @brief run internal test
240
void runInternalTest(const InternalTestStep::DialogArgument* dialogArgument);
241
242
/// @brief get edited parameters
243
std::vector<std::pair<std::string, std::string> > getEditedParameters() const;
244
245
/// @name FOX-callbacks
246
/// @{
247
248
/// @brief event after press accept button
249
long onCmdAccept(FXObject*, FXSelector, void*);
250
251
/// @brief event after press reset button
252
long onCmdReset(FXObject*, FXSelector, void*);
253
254
/// @}
255
256
protected:
257
/// @brief FOX need this
258
FOX_CONSTRUCTOR(GNEParametersDialog)
259
260
/// @brief original parameters
261
const Parameterised::Map myOriginalParameters;
262
263
/// @brief pointer to parameters values
264
ParametersValues* myParametersValues = nullptr;
265
266
/// @brief pointer to parameters operations
267
ParametersOperations* myParametersOperations = nullptr;
268
269
private:
270
/// @brief Invalidated copy constructor.
271
GNEParametersDialog(const GNEParametersDialog&) = delete;
272
273
/// @brief Invalidated assignment operator.
274
GNEParametersDialog& operator=(const GNEParametersDialog&) = delete;
275
};
276
277