Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/dialogs/tools/GNEPythonToolDialogElements.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 GNEPythonToolDialogElements.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jun 2022
17
///
18
// Elements used in GNEPythonToolDialog
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <string>
24
#include <vector>
25
#include <utils/foxtools/fxheader.h>
26
27
// ===========================================================================
28
// class declaration
29
// ===========================================================================
30
31
class GNEApplicationWindow;
32
class GNEPythonTool;
33
class GNEPythonToolDialog;
34
class MFXButtonTooltip;
35
class MFXLabelTooltip;
36
class Option;
37
38
// ===========================================================================
39
// class definitions
40
// ===========================================================================
41
42
/// @brief elements used in Tool Dialogs
43
class GNEPythonToolDialogElements {
44
45
public:
46
/// @brief category
47
class Category : public FXHorizontalFrame {
48
49
public:
50
/// @brief constructor
51
Category(FXVerticalFrame* argumentFrame, const std::string& category);
52
53
/// @brief destructor
54
~Category();
55
56
private:
57
/// @brief Invalidated copy constructor.
58
Category(const Category&) = delete;
59
60
/// @brief Invalidated assignment operator.
61
Category& operator=(const Category&) = delete;
62
};
63
64
/// @brief argument
65
class Argument : public FXHorizontalFrame {
66
/// @brief FOX-declaration
67
FXDECLARE_ABSTRACT(GNEPythonToolDialogElements::Argument)
68
69
public:
70
/// @brief constructor (we need pythonTool and applicationWindow because is called during GNEPythonToolDialog constructor)
71
Argument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
72
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
73
const std::string& parameter, Option* option);
74
75
/// @brief destructor
76
~Argument();
77
78
/// @brief reset to default value
79
virtual void reset() = 0;
80
81
/// @brief get parameter label
82
MFXLabelTooltip* getParameterLabel() const;
83
84
/// @brief get argument
85
const std::string getArgument() const;
86
87
/// @brief check if required attribute is set
88
bool requiredAttributeSet() const;
89
90
/// @name FOX-callbacks
91
/// @{
92
93
/// @brief Called when user changes argument value
94
virtual long onCmdSetValue(FXObject*, FXSelector, void*) = 0;
95
96
/// @brief Called when user press reset button
97
long onCmdResetValue(FXObject*, FXSelector, void*);
98
99
/// @brief Called when user press reset button
100
long onUpdResetValue(FXObject*, FXSelector, void*);
101
102
/// @}
103
104
protected:
105
/// @brief default constructor
106
Argument();
107
108
/// @brief get value
109
virtual const std::string getValue() const = 0;
110
111
/// @brief tool dialog parent
112
GNEPythonToolDialog* myToolDialogParent;
113
114
/// @brief option
115
Option* myOption;
116
117
/// @brief default value
118
const std::string myDefaultValue;
119
120
/// @brief auxiliar elements frame
121
FXHorizontalFrame* myElementsFrame = nullptr;
122
123
private:
124
/// @brief parameter label
125
MFXLabelTooltip* myParameterLabel = nullptr;
126
127
/// @brief reset button
128
FXButton* myResetButton = nullptr;
129
130
/// @brief Invalidated copy constructor.
131
Argument(const Argument&) = delete;
132
133
/// @brief Invalidated assignment operator.
134
Argument& operator=(const Argument&) = delete;
135
};
136
137
138
/// @brief edge vector argument
139
class EdgeVectorArgument : public Argument {
140
/// @brief FOX-declaration
141
FXDECLARE(GNEPythonToolDialogElements::EdgeVectorArgument)
142
143
public:
144
/// @brief constructor
145
EdgeVectorArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
146
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
147
const std::string name, Option* option);
148
149
/// @brief reset to default value
150
void reset();
151
152
/// @brief Called when user changes argument value
153
long onCmdSetValue(FXObject*, FXSelector, void*);
154
155
/// @brief Called when user press use seleted edges button
156
long onCmdUseCurrent(FXObject*, FXSelector, void*);
157
158
/// @brief enable or disable use selected edges button
159
long onUpdUseCurrent(FXObject* sender, FXSelector, void*);
160
161
protected:
162
/// @brief FOX need this
163
EdgeVectorArgument();
164
165
/// @brief get value
166
const std::string getValue() const;
167
168
/// @brief edge vectgor textField
169
FXTextField* myEdgeVectorTextField = nullptr;
170
171
private:
172
/// @brief current edges button
173
MFXButtonTooltip* myCurrentEdgesButton = nullptr;
174
175
/// @brief Invalidated copy constructor.
176
EdgeVectorArgument(const EdgeVectorArgument&) = delete;
177
178
/// @brief Invalidated assignment operator.
179
EdgeVectorArgument& operator=(const EdgeVectorArgument&) = delete;
180
};
181
182
183
/// @brief filename argument
184
class FileNameArgument : public Argument {
185
/// @brief FOX-declaration
186
FXDECLARE(GNEPythonToolDialogElements::FileNameArgument)
187
188
public:
189
/// @brief constructor
190
FileNameArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
191
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
192
const std::string name, Option* option);
193
194
/// @brief reset to default value
195
void reset();
196
197
/// @brief Called when user press open filename button
198
long onCmdOpenFilename(FXObject*, FXSelector, void*);
199
200
/// @brief Called when user set filename
201
long onCmdSetValue(FXObject*, FXSelector, void*);
202
203
protected:
204
/// @brief FOX need this
205
FileNameArgument();
206
207
/// @brief constructor for current buttons
208
FileNameArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
209
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
210
const std::string name, Option* option, const std::string& useCurrent);
211
212
/// @brief get value
213
const std::string getValue() const;
214
215
/// @brief filename textField
216
FXTextField* myFilenameTextField = nullptr;
217
218
private:
219
/// @brief current button
220
MFXButtonTooltip* myCurrentButton = nullptr;
221
222
/// @brief filename button
223
MFXButtonTooltip* myOpenFilenameButton = nullptr;
224
225
/// @brief Invalidated copy constructor.
226
FileNameArgument(const FileNameArgument&) = delete;
227
228
/// @brief Invalidated assignment operator.
229
FileNameArgument& operator=(const FileNameArgument&) = delete;
230
};
231
232
/// @brief network argument
233
class NetworkArgument : public FileNameArgument {
234
/// @brief FOX-declaration
235
FXDECLARE(GNEPythonToolDialogElements::NetworkArgument)
236
237
public:
238
/// @brief constructor
239
NetworkArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
240
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
241
const std::string name, Option* option);
242
243
/// @brief Called when user press open filename button
244
long onCmdOpenFilename(FXObject*, FXSelector, void*);
245
246
/// @brief Called when user press use current button
247
long onCmdUseCurrentNetworkFile(FXObject*, FXSelector, void*);
248
249
/// @brief enable or disable use current button
250
long onUpdUseCurrentNetworkFile(FXObject* sender, FXSelector, void*);
251
252
protected:
253
/// @brief FOX need this
254
NetworkArgument();
255
256
private:
257
/// @brief Invalidated copy constructor.
258
NetworkArgument(const NetworkArgument&) = delete;
259
260
/// @brief Invalidated assignment operator.
261
NetworkArgument& operator=(const NetworkArgument&) = delete;
262
};
263
264
/// @brief additional argument
265
class AdditionalArgument : public FileNameArgument {
266
/// @brief FOX-declaration
267
FXDECLARE(GNEPythonToolDialogElements::AdditionalArgument)
268
269
public:
270
/// @brief constructor
271
AdditionalArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
272
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
273
const std::string name, Option* option);
274
275
/// @brief Called when user press open filename button
276
long onCmdOpenFilename(FXObject*, FXSelector, void*);
277
278
/// @brief Called when user press use current button
279
long onCmdUseCurrentAdditionalFile(FXObject*, FXSelector, void*);
280
281
/// @brief enable or disable use current button
282
long onUpdUseCurrentAdditionalFile(FXObject* sender, FXSelector, void*);
283
284
protected:
285
/// @brief FOX need this
286
AdditionalArgument();
287
288
private:
289
/// @brief Invalidated copy constructor.
290
AdditionalArgument(const AdditionalArgument&) = delete;
291
292
/// @brief Invalidated assignment operator.
293
AdditionalArgument& operator=(const AdditionalArgument&) = delete;
294
};
295
296
/// @brief route argument
297
class RouteArgument : public FileNameArgument {
298
/// @brief FOX-declaration
299
FXDECLARE(GNEPythonToolDialogElements::RouteArgument)
300
301
public:
302
/// @brief constructor
303
RouteArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
304
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
305
const std::string name, Option* option);
306
307
/// @brief Called when user press open filename button
308
long onCmdOpenFilename(FXObject*, FXSelector, void*);
309
310
/// @brief Called when user press use current button
311
long onCmdUseCurrentRouteFile(FXObject*, FXSelector, void*);
312
313
/// @brief enable or disable use current button
314
long onUpdUseCurrentRouteFile(FXObject* sender, FXSelector, void*);
315
316
protected:
317
/// @brief FOX need this
318
RouteArgument();
319
320
private:
321
/// @brief Invalidated copy constructor.
322
RouteArgument(const RouteArgument&) = delete;
323
324
/// @brief Invalidated assignment operator.
325
RouteArgument& operator=(const RouteArgument&) = delete;
326
};
327
328
/// @brief data argument
329
class DataArgument : public FileNameArgument {
330
/// @brief FOX-declaration
331
FXDECLARE(GNEPythonToolDialogElements::DataArgument)
332
333
public:
334
/// @brief constructor
335
DataArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
336
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
337
const std::string name, Option* option);
338
339
/// @brief Called when user press open filename button
340
long onCmdOpenFilename(FXObject*, FXSelector, void*);
341
342
/// @brief Called when user press use current button
343
long onCmdUseCurrentDataFile(FXObject*, FXSelector, void*);
344
345
/// @brief enable or disable use current button
346
long onUpdUseCurrentDataFile(FXObject* sender, FXSelector, void*);
347
348
protected:
349
/// @brief FOX need this
350
DataArgument();
351
352
private:
353
/// @brief Invalidated copy constructor.
354
DataArgument(const DataArgument&) = delete;
355
356
/// @brief Invalidated assignment operator.
357
DataArgument& operator=(const DataArgument&) = delete;
358
};
359
360
/// @brief sumo config argument
361
class SumoConfigArgument : public FileNameArgument {
362
/// @brief FOX-declaration
363
FXDECLARE(GNEPythonToolDialogElements::SumoConfigArgument)
364
365
public:
366
/// @brief constructor
367
SumoConfigArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
368
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
369
const std::string name, Option* option);
370
371
/// @brief Called when user press open filename button
372
long onCmdOpenFilename(FXObject*, FXSelector, void*);
373
374
/// @brief Called when user press use current button
375
long onCmdUseCurrentSumoConfigFile(FXObject*, FXSelector, void*);
376
377
/// @brief enable or disable use current button
378
long onUpdUseCurrentSumoConfigFile(FXObject* sender, FXSelector, void*);
379
380
protected:
381
/// @brief FOX need this
382
SumoConfigArgument();
383
384
private:
385
/// @brief Invalidated copy constructor.
386
SumoConfigArgument(const SumoConfigArgument&) = delete;
387
388
/// @brief Invalidated assignment operator.
389
SumoConfigArgument& operator=(const SumoConfigArgument&) = delete;
390
};
391
392
/// @brief int argument
393
class EdgeArgument : public Argument {
394
395
public:
396
/// @brief constructor
397
EdgeArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
398
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
399
const std::string name, Option* option);
400
401
/// @brief reset to default value
402
void reset();
403
404
/// @brief Called when user set int value
405
long onCmdSetValue(FXObject*, FXSelector, void*);
406
407
protected:
408
/// @brief get value
409
const std::string getValue() const;
410
411
/// @brief int textField
412
FXTextField* myEdgeTextField = nullptr;
413
414
private:
415
/// @brief invalid int in string format
416
static const std::string INVALID_INT_STR;
417
418
/// @brief Invalidated copy constructor.
419
EdgeArgument(const EdgeArgument&) = delete;
420
421
/// @brief Invalidated assignment operator.
422
EdgeArgument& operator=(const EdgeArgument&) = delete;
423
};
424
425
/// @brief string argument
426
class StringArgument : public Argument {
427
428
public:
429
/// @brief constructor
430
StringArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
431
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
432
const std::string name, Option* option);
433
434
/// @brief reset to default value
435
void reset();
436
437
/// @brief Called when user set string value
438
long onCmdSetValue(FXObject*, FXSelector, void*);
439
440
protected:
441
/// @brief get value
442
const std::string getValue() const;
443
444
/// @brief string textField
445
FXTextField* myStringTextField = nullptr;
446
447
private:
448
/// @brief Invalidated copy constructor.
449
StringArgument(const StringArgument&) = delete;
450
451
/// @brief Invalidated assignment operator.
452
StringArgument& operator=(const StringArgument&) = delete;
453
};
454
455
/// @brief int argument
456
class IntArgument : public Argument {
457
458
public:
459
/// @brief constructor
460
IntArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
461
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
462
const std::string name, Option* option);
463
464
/// @brief reset to default value
465
void reset();
466
467
/// @brief Called when user set int value
468
long onCmdSetValue(FXObject*, FXSelector, void*);
469
470
protected:
471
/// @brief get value
472
const std::string getValue() const;
473
474
/// @brief int textField
475
FXTextField* myIntTextField = nullptr;
476
477
private:
478
/// @brief invalid int in string format
479
static const std::string INVALID_INT_STR;
480
481
/// @brief Invalidated copy constructor.
482
IntArgument(const IntArgument&) = delete;
483
484
/// @brief Invalidated assignment operator.
485
IntArgument& operator=(const IntArgument&) = delete;
486
};
487
488
/// @brief float argument
489
class FloatArgument : public Argument {
490
491
public:
492
/// @brief constructor
493
FloatArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
494
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
495
const std::string name, Option* option);
496
497
/// @brief reset to default value
498
void reset();
499
500
/// @brief Called when user set float value
501
long onCmdSetValue(FXObject*, FXSelector, void*);
502
503
protected:
504
/// @brief get value
505
const std::string getValue() const;
506
507
/// @brief float textField
508
FXTextField* myFloatTextField = nullptr;
509
510
private:
511
/// @brief invalid float in string format
512
static const std::string INVALID_DOUBLE_STR;
513
514
/// @brief Invalidated copy constructor.
515
FloatArgument(const IntArgument&) = delete;
516
517
/// @brief Invalidated assignment operator.
518
FloatArgument& operator=(const IntArgument&) = delete;
519
};
520
521
522
/// @brief bool argument
523
class BoolArgument : public Argument {
524
525
public:
526
/// @brief constructor
527
BoolArgument(GNEPythonToolDialog* toolDialogParent, const GNEPythonTool* pythonTool,
528
GNEApplicationWindow* applicationWindow, FXVerticalFrame* argumentFrame,
529
const std::string name, Option* option);
530
531
/// @brief reset to default value
532
void reset();
533
534
/// @brief Called when user set bool value
535
long onCmdSetValue(FXObject*, FXSelector, void*);
536
537
protected:
538
/// @brief get value
539
const std::string getValue() const;
540
541
/// @brief check button
542
FXCheckButton* myCheckButton = nullptr;
543
544
private:
545
/// @brief Invalidated copy constructor.
546
BoolArgument(const IntArgument&) = delete;
547
548
/// @brief Invalidated assignment operator.
549
BoolArgument& operator=(const IntArgument&) = delete;
550
};
551
};
552
553