Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/GNEApplicationWindow.h
169666 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 GNEApplicationWindow.h
15
/// @author Jakob Erdmann
16
/// @date Feb 2011
17
///
18
// The main window of Netedit (adapted from GUIApplicationWindow)
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include "GNEApplicationWindowHelper.h"
24
25
// ===========================================================================
26
// class declarations
27
// ===========================================================================
28
29
class GUIEvent;
30
class GNEUndoListDialog;
31
class GNEUndoList;
32
class GNETagPropertiesDatabase;
33
class GNELoadThread;
34
class GNEInternalTest;
35
class GNEExternalRunner;
36
37
// ===========================================================================
38
// class definition
39
// ===========================================================================
40
/**
41
* @class GNEApplicationWindow
42
* @brief The main window of Netedit.
43
*
44
* Contains the file opening support and a canvas to display the network in.
45
*
46
* Beside views on the simulation, shown within a MDI-window, the main window
47
* may also have some further views (children) assigned which are stored
48
* within a separate list.
49
*/
50
class GNEApplicationWindow : public GUIMainWindow, public MFXInterThreadEventClient {
51
/// @brief FOX-declaration
52
FXDECLARE(GNEApplicationWindow)
53
54
public:
55
56
/**@brief Constructor
57
* @param[in] app The FOX application
58
* @param[in] tagPropertiesDatabase pointer to tag properties database
59
* @param[in] configPattern The pattern used for loading configurations
60
*/
61
GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern);
62
63
/// @brief Destructor
64
~GNEApplicationWindow();
65
66
/// @brief Creates the main window (required by FOX)
67
void create();
68
69
/// @brief load net on startup
70
void loadOptionOnStartup();
71
72
/// @brief create new network
73
void createNewNetwork();
74
75
/// @brief load network
76
void loadNetwork(const std::string& networkFile);
77
78
/// @brief starts to load a configuration
79
void loadConfiguration(const std::string& configurationFile);
80
81
/// @brief starts to load a OSM File
82
void loadOSM(const std::string& OSMFile);
83
84
/// @brief build dependent
85
void dependentBuild();
86
87
/// @brief set text of the statusBar
88
void setStatusBarText(const std::string& statusBarText);
89
90
/// @brief called if the user selects Processing->compute junctions with volatile options
91
long computeJunctionWithVolatileOptions();
92
93
/// @brief check if console options was already loaded
94
bool consoleOptionsLoaded();
95
96
/// @name functions related with external runner
97
/// @{
98
99
/// @brief get external runner
100
GNEExternalRunner* getExternalRunner() const;
101
102
/// @brief set external runner
103
void setExternalRunner(GNEExternalRunner* externalRunner);
104
105
/// @}
106
107
/// @name Inter-thread event handling
108
/// @{
109
/// @brief called when an event occurred
110
void eventOccurred();
111
112
/// @brief handle event of type Network loaded
113
void handleEvent_NetworkLoaded(GUIEvent* e);
114
115
/// @brief handle event of type message
116
void handleEvent_Message(GUIEvent* e);
117
/// @}
118
119
/// @name FOX-callbacks
120
/// @{
121
/// @brief called when the command/FXCall new window is executed
122
long onCmdNewWindow(FXObject*, FXSelector, void*);
123
124
/// @brief called when the command/FXCall new network is executed
125
long onCmdNewNetwork(FXObject*, FXSelector, void*);
126
127
/// @brief called when the command/FXCall open netconvertconfiguration is executed
128
long onCmdOpenNetconvertConfig(FXObject*, FXSelector, void*);
129
130
/// @brief called when the command/FXCall open network is executed
131
long onCmdOpenNetwork(FXObject*, FXSelector, void*);
132
133
/// @brief called when the command/FXCall open foreign is executed
134
long onCmdOpenForeign(FXObject*, FXSelector, void*);
135
136
/// @brief called when the command/FXCall open netedit config is executed
137
long onCmdOpenNeteditConfig(FXObject*, FXSelector, void*);
138
139
/// @brief called when the command/FXCall open SumoConfig is executed
140
long onCmdOpenSumoConfig(FXObject*, FXSelector, void*);
141
142
/// @brief called when the command/FXCall reload netedit config is executed
143
long onCmdReloadNeteditConfig(FXObject*, FXSelector, void*);
144
145
/// @brief called when the command/FXCall reload SumoConfig is executed
146
long onCmdReloadSumoConfig(FXObject*, FXSelector, void*);
147
148
/// @brief called when the command/FXCall reload netedit config is updated
149
long onUpdReloadNeteditConfig(FXObject*, FXSelector, void*);
150
151
/// @brief called when the command/FXCall reload SumoConfig is updated
152
long onUpdReloadSumoConfig(FXObject*, FXSelector, void*);
153
154
/// @brief called when the command/FXCall open TLS programs is executed
155
long onCmdOpenTLSPrograms(FXObject*, FXSelector, void*);
156
157
/// @brief called when the command/FXCall reload TLS programs is executed
158
long onCmdReloadTLSPrograms(FXObject*, FXSelector, void*);
159
160
/// @brief called when the command/FXCall reload TLS programs is updated
161
long onUpdReloadTLSPrograms(FXObject*, FXSelector, void*);
162
163
/// @brief called when the command/FXCall open edgeType is executed
164
long onCmdOpenEdgeTypes(FXObject*, FXSelector, void*);
165
166
/// @brief called when the command/FXCall reload edge types is executed
167
long onCmdReloadEdgeTypes(FXObject*, FXSelector, void*);
168
169
/// @brief called when the command/FXCall reload edge types is updated
170
long onUpdReloadEdgeTypes(FXObject*, FXSelector, void*);
171
172
/// @brief called when the command/FXCall smart reload is executed
173
long onCmdSmartReload(FXObject*, FXSelector, void*);
174
175
/// @brief called when the update/FXCall smart reload is executed
176
long onUpdSmartReload(FXObject*, FXSelector, void*);
177
178
/// @brief called when the command/FXCall network reload is executed
179
long onCmdReloadNetwork(FXObject*, FXSelector, void*);
180
181
/// @brief called when the update/FXCall network reload is executed
182
long onUpdReloadNetwork(FXObject*, FXSelector, void*);
183
184
/// @brief called when the command/FXCall open recent is executed
185
long onCmdOpenRecent(FXObject*, FXSelector, void*);
186
187
/// @brief called when the command/FXCall close is executed
188
long onCmdClose(FXObject*, FXSelector, void*);
189
190
/// @brief Called on menu Edit->Visualization
191
long onCmdEditViewScheme(FXObject*, FXSelector, void*);
192
193
/// @brief Called on menu Edit->Viewport
194
long onCmdEditViewport(FXObject*, FXSelector, void*);
195
196
/// @brief called when the command/FXCall locate is executed
197
long onCmdLocate(FXObject*, FXSelector, void*);
198
199
/// @brief called when user press over a tool dialog button
200
long onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*);
201
202
/// @brief called when user run a tool
203
long onCmdRunPythonTool(FXObject* obj, FXSelector, void*);
204
205
/// @brief post processing after run tool
206
long onCmdPostProcessingPythonTool(FXObject* obj, FXSelector, void*);
207
208
/// @brief called when the command/FXCall python tool is updated
209
long onUpdPythonTool(FXObject*, FXSelector, void*);
210
211
/// @brief called when the command/FXCall save network is executed
212
long onCmdSaveNetwork(FXObject*, FXSelector, void*);
213
214
/// @brief called when the command/FXCall save network as is executed
215
long onCmdSaveNetworkAs(FXObject*, FXSelector, void*);
216
217
/// @brief called when the command/FXCall save as plain xml is executed
218
long onCmdSavePlainXMLAs(FXObject*, FXSelector, void*);
219
220
/// @brief called when the command/FXCall save joined is executed
221
long onCmdSaveJoinedJunctionsAs(FXObject*, FXSelector, void*);
222
223
/// @brief called when the command/FXCall save netedit config is executed
224
long onCmdSaveNeteditConfig(FXObject*, FXSelector, void*);
225
226
/// @brief called when the command/FXCall save netedit config as is executed
227
long onCmdSaveNeteditConfigAs(FXObject*, FXSelector, void*);
228
229
/// @brief called when the command/FXCall save netedit config is updated
230
long onUpdSaveNeteditConfig(FXObject*, FXSelector, void*);
231
232
/// @brief called when the command/FXCall save SumoConfig is executed
233
long onCmdSaveSumoConfig(FXObject*, FXSelector, void*);
234
235
/// @brief called when the command/FXCall save SumoConfig as is executed
236
long onCmdSaveSumoConfigAs(FXObject*, FXSelector, void*);
237
238
/// @brief called when the command/FXCall save SumoConfig is updated
239
long onUpdSaveSumoConfig(FXObject*, FXSelector, void*);
240
241
/// @brief called when the command/FXCall save TLSPrograms is executed
242
long onCmdSaveTLSPrograms(FXObject*, FXSelector, void*);
243
244
/// @brief called when the command/FXCall save TLSPrograms is updated
245
long onUpdSaveTLSPrograms(FXObject*, FXSelector, void*);
246
247
/// @brief called when the command/FXCall save edge types is executed
248
long onCmdSaveEdgeTypes(FXObject*, FXSelector, void*);
249
250
/// @brief called when the command/FXCall save edge types is updated
251
long onUpdSaveEdgeTypes(FXObject*, FXSelector, void*);
252
253
/// @brief called when the command/FXCall save TLSPrograms as is executed
254
long onCmdSaveTLSProgramsAs(FXObject*, FXSelector, void*);
255
256
/// @brief called when the command/FXCall save edgeTypes as is executed
257
long onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*);
258
259
/// @brief called when the command/FXCall open additionals is executed
260
long onCmdOpenAdditionalElements(FXObject*, FXSelector, void*);
261
262
/// @brief called when the command/FXCall reload additionals is executed
263
long onCmdReloadAdditionalElements(FXObject*, FXSelector, void*);
264
265
/// @brief called when the command/FXCall reload additionals is updated
266
long onUpdReloadAdditionalElements(FXObject*, FXSelector, void*);
267
268
/// @brief called when the command/FXCall save additionals is executed
269
long onCmdSaveAdditionalElements(FXObject*, FXSelector, void*);
270
271
/// @brief called when the command/FXCall save additionals unified is executed
272
long onCmdSaveAdditionalElementsUnified(FXObject*, FXSelector, void*);
273
274
/// @brief called when the command/FXCall save JuPedSim elements as is executed
275
long onCmdSaveJuPedSimElementsAs(FXObject*, FXSelector, void*);
276
277
/// @brief called when the command/FXCall open demand is executed
278
long onCmdOpenDemandElements(FXObject*, FXSelector, void*);
279
280
/// @brief called when the command/FXCall reload demand elements is executed
281
long onCmdReloadDemandElements(FXObject*, FXSelector, void*);
282
283
/// @brief called when the command/FXCall reload demand elements is updated
284
long onUpdReloadDemandElements(FXObject*, FXSelector, void*);
285
286
/// @brief called when the command/FXCall save demand elements is executed
287
long onCmdSaveDemandElements(FXObject*, FXSelector, void*);
288
289
/// @brief called when the command/FXCall open data is executed
290
long onCmdOpenDataElements(FXObject*, FXSelector, void*);
291
292
/// @brief called when the command/FXCall reload data elements is executed
293
long onCmdReloadDataElements(FXObject*, FXSelector, void*);
294
295
/// @brief called when the command/FXCall reload data elements is updated
296
long onUpdReloadDataElements(FXObject*, FXSelector, void*);
297
298
/// @brief called when the command/FXCall save demand elements unified is executed
299
long onCmdSaveDemandElementsUnified(FXObject*, FXSelector, void*);
300
301
/// @brief called when the command/FXCall save data elements is executed
302
long onCmdSaveDataElements(FXObject*, FXSelector, void*);
303
304
/// @brief called when the command/FXCall save data elements unified is executed
305
long onCmdSaveDataElementsUnified(FXObject*, FXSelector, void*);
306
307
/// @brief called when the command/FXCall open meanDatas is executed
308
long onCmdOpenMeanDataElements(FXObject*, FXSelector, void*);
309
310
/// @brief called when the command/FXCall reload meanDatas is executed
311
long onCmdReloadMeanDataElements(FXObject*, FXSelector, void*);
312
313
/// @brief called when the command/FXCall reload meanDatas is updated
314
long onUpdReloadMeanDataElements(FXObject*, FXSelector, void*);
315
316
/// @brief called when the command/FXCall save meanDatas is executed
317
long onCmdSaveMeanDataElements(FXObject*, FXSelector, void*);
318
319
/// @brief called when the command/FXCall save meanDatas unified is executed
320
long onCmdSaveMeanDataElementsUnified(FXObject*, FXSelector, void*);
321
322
/// @brief called when the update/FXCall needs network is executed
323
long onUpdNeedsNetwork(FXObject*, FXSelector, void*);
324
325
/// @brief called when the update/FXCall needs at least one network element is executed
326
long onUpdNeedsNetworkElement(FXObject*, FXSelector, void*);
327
328
/// @brief called when the update/FXCall needs front element is executed
329
long onUpdNeedsFrontElement(FXObject*, FXSelector, void*);
330
331
/// @brief called when the update/FXCall save network is executed
332
long onUpdSaveNetwork(FXObject*, FXSelector, void*);
333
334
/// @brief called when the update/FXCall save additionals is executed
335
long onUpdSaveAdditionalElements(FXObject*, FXSelector, void*);
336
337
/// @brief called when the update/FXCall save additionals unified is executed
338
long onUpdSaveAdditionalElementsUnified(FXObject*, FXSelector, void*);
339
340
/// @brief called when the update/FXCall save juPedSim as is executed
341
long onUpdSaveJuPedSimElementsAs(FXObject*, FXSelector, void*);
342
343
/// @brief called when the update/FXCall save demand elements is executed
344
long onUpdSaveDemandElements(FXObject*, FXSelector, void*);
345
346
/// @brief called when the update/FXCall save demand elements unified is executed
347
long onUpdSaveDemandElementsUnified(FXObject*, FXSelector, void*);
348
349
/// @brief called when the update/FXCall save data elements is executed
350
long onUpdSaveDataElements(FXObject*, FXSelector, void*);
351
352
/// @brief called when the update/FXCall save data elements unified is executed
353
long onUpdSaveDataElementsUnified(FXObject*, FXSelector, void*);
354
355
/// @brief called when the update/FXCall save meanDatas is executed
356
long onUpdSaveMeanDataElements(FXObject*, FXSelector, void*);
357
358
/// @brief called when the update/FXCall save meanDatas unified is executed
359
long onUpdSaveMeanDataElementsUnified(FXObject*, FXSelector, void*);
360
361
/// @brief called when the update/FXCall undo is executed
362
long onUpdUndo(FXObject* obj, FXSelector sel, void* ptr);
363
364
/// @brief called when the update/FXCall redo is executed
365
long onUpdRedo(FXObject* obj, FXSelector sel, void* ptr);
366
367
/// @brief called when the update/FXCall compute path manager is executed
368
long onUpdComputePathManager(FXObject* obj, FXSelector sel, void* ptr);
369
370
/// @brief toggle viewOption
371
long onCmdToggleViewOption(FXObject*, FXSelector, void*);
372
373
/// @brief update viewOption
374
long onUpdToggleViewOption(FXObject*, FXSelector, void*);
375
376
/// @brief called when a key is pressed
377
long onKeyPress(FXObject* o, FXSelector sel, void* data);
378
379
/// @brief called when a key is released
380
long onKeyRelease(FXObject* o, FXSelector sel, void* data);
381
382
/// @brief Called by FOX if the application shall be closed
383
long onCmdQuit(FXObject*, FXSelector, void*);
384
385
/// @brief called when the command/FXCall edit chosen is executed
386
long onCmdEditChosen(FXObject*, FXSelector, void*);
387
388
/// @brief called when the command/FXCall show about dialog is executed
389
long onCmdAbout(FXObject*, FXSelector, void*);
390
391
/// @brief called when the command/FXCall on update open executed
392
long onUpdOpen(FXObject*, FXSelector, void*);
393
394
/// @brief called when the command/FXCall clear message windows is executed
395
long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
396
397
/// @brief called when user toggle windows checkbox "load additionals"
398
long onCmdLoadAdditionalsInSUMOGUI(FXObject*, FXSelector, void*);
399
400
/// @brief called when user toggle windows checkbox "load demand"
401
long onCmdLoadDemandInSUMOGUI(FXObject*, FXSelector, void*);
402
403
/// @brief called when the command/FXCall load thread is executed
404
long onLoadThreadEvent(FXObject*, FXSelector, void*);
405
406
/// @brief called when the command/FXCall clipboard request is executed
407
long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
408
409
/// @brief called if the user hits an edit-supermode hotkey
410
long onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr);
411
412
/// @brief called if the user hits an edit-mode hotkey
413
long onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr);
414
415
/// @brief called when user press a lock menu check
416
long onCmdLockElements(FXObject*, FXSelector sel, void*);
417
418
/// @brief called when user press lock all elements button
419
long onCmdLockAllElements(FXObject*, FXSelector sel, void*);
420
421
/// @brief called when user press unlock all elements button
422
long onCmdUnlockAllElements(FXObject*, FXSelector sel, void*);
423
424
/// @brief called when user press lock select elements button
425
long onCmdLockSelectElements(FXObject*, FXSelector sel, void*);
426
427
/// @brief enable or disable lock menu title
428
long onUpdLockMenuTitle(FXObject*, FXSelector sel, void*);
429
430
/// @brief called when user press a process button (or a shortcut)
431
long onCmdProcessButton(FXObject* sender, FXSelector sel, void*);
432
433
/// @brief called if the user hints ctrl + T
434
long onCmdOpenSUMOGUI(FXObject* sender, FXSelector sel, void* ptr);
435
436
/// @brief called if the user hits esc
437
long onCmdAbort(FXObject* sender, FXSelector sel, void* ptr);
438
439
/// @brief called if the user hits del
440
long onCmdDel(FXObject* sender, FXSelector sel, void* ptr);
441
442
/// @brief called if the user hits enter
443
long onCmdEnter(FXObject* sender, FXSelector sel, void* ptr);
444
445
/// @brief called if the user hits backspace
446
long onCmdBackspace(FXObject* sender, FXSelector sel, void* ptr);
447
448
/// @brief called if the user hits key combination for clear selection
449
long onCmdClearSelectionShortcut(FXObject* sender, FXSelector sel, void* ptr);
450
451
/// @brief called if the user hits key combination for focus on frame
452
long onCmdFocusFrame(FXObject* sender, FXSelector sel, void* ptr);
453
454
/// @brief called if the user press the toggle time format button
455
long onCmdToggleTimeFormat(FXObject* sender, FXSelector sel, void* ptr);
456
457
/// @brief update toggle time format button
458
long onUpdToggleTimeFormat(FXObject* sender, FXSelector sel, void* ptr);
459
460
/// @brief run tests
461
long onCmdRunTests(FXObject*, FXSelector, void*);
462
463
/// @brief enable or disable sender object depending if viewNet exist
464
long onUpdRequireViewNet(FXObject* sender, FXSelector sel, void* ptr);
465
466
/// @brief update label for require recomputing
467
long onUpdRequireRecomputing(FXObject* sender, FXSelector sel, void* ptr);
468
469
/// @brief called when run netgenerate is called
470
long onCmdRunNetgenerate(FXObject* sender, FXSelector sel, void* ptr);
471
472
/// @brief postprocessing netgenerate
473
long onCmdPostprocessingNetgenerate(FXObject* sender, FXSelector sel, void* ptr);
474
475
/// @brief called if the user press key combination Ctrl + G to toggle grid
476
long onCmdToggleGrid(FXObject*, FXSelector, void*);
477
478
/// @brief called if the user press key combination Ctrl + J to toggle draw junction shape
479
long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);
480
481
/// @brief called if the user call set front element
482
long onCmdSetFrontElement(FXObject*, FXSelector, void*);
483
484
/// @brief called if the user press key combination Alt + <0-9>
485
long onCmdToggleEditOptions(FXObject*, FXSelector, void*);
486
487
/// @brief called if the user selects help->Documentation
488
long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
489
490
/// @brief called if the user selects help->Changelog
491
long onCmdChangelog(FXObject* sender, FXSelector sel, void* ptr);
492
493
/// @brief called if the user selects help->Hotkeys
494
long onCmdHotkeys(FXObject* sender, FXSelector sel, void* ptr);
495
496
/// @brief called if the user selects help->Tutorial
497
long onCmdTutorial(FXObject* sender, FXSelector sel, void* ptr);
498
499
/// @brief called if the user selects help->feedback
500
long onCmdFeedback(FXObject* sender, FXSelector sel, void* ptr);
501
502
/// @brief called when toggle checkbox compute network when switching between supermodes
503
long onCmdToggleComputeNetworkData(FXObject*, FXSelector, void*);
504
505
/// @brief called when toggle checkbox disable undo redo (processing)
506
long onCmdToggleUndoRedo(FXObject*, FXSelector, void*);
507
508
/// @brief called when toggle checkbox disable undo redo during loading (file)
509
long onCmdToggleUndoRedoLoading(FXObject*, FXSelector, void*);
510
511
/// @brief called when user press "options" button
512
long onCmdOpenOptionsDialog(FXObject*, FXSelector, void*);
513
514
/// @brief called when user press "sumo options" button
515
long onCmdOpenSumoOptionsDialog(FXObject*, FXSelector, void*);
516
517
/// @brief called when user press "netgenerate" button
518
long onCmdOpenNetgenerateDialog(FXObject*, FXSelector, void*);
519
520
/// @brief called when user press "netgenerate options" button
521
long onCmdOpenNetgenerateOptionsDialog(FXObject*, FXSelector, void*);
522
523
/// @brief called when user press Ctrl+Z
524
long onCmdUndo(FXObject* sender, FXSelector, void*);
525
526
// @brief called when user press Ctrl+Y
527
long onCmdRedo(FXObject* sender, FXSelector, void*);
528
529
// @brief called when user press open undoList dialog
530
long onCmdOpenUndoListDialog(FXObject*, FXSelector, void*);
531
532
// @brief called when openUndoList is updated
533
long onUpdOpenUndoListDialog(FXObject*, FXSelector, void*);
534
535
// @brief called when user press compute path manager
536
long onCmdComputePathManager(FXObject*, FXSelector, void*);
537
538
/// @brief called when user press Ctrl+Z
539
long onCmdCut(FXObject*, FXSelector, void*);
540
541
// @brief called when user press Ctrl+Y
542
long onCmdCopy(FXObject*, FXSelector, void*);
543
544
// @brief called when user press Ctrl+Y
545
long onCmdPaste(FXObject*, FXSelector, void*);
546
547
// @brief called when user press Ctrl+F1
548
long onCmdSetTemplate(FXObject*, FXSelector, void*);
549
550
// @brief called when user press Ctrl+F2
551
long onCmdCopyTemplate(FXObject*, FXSelector, void*);
552
553
// @brief called when user press Ctrl+F3
554
long onCmdClearTemplate(FXObject*, FXSelector, void*);
555
556
/// @}
557
558
/// @name inherited from GUIMainWindow
559
/// @{
560
/// @brief get build OpenGL Canvas (due netedit only uses a single View, it always return nullptr)
561
FXGLCanvas* getBuildGLCanvas() const;
562
563
/// @brief get current simulation time (pure virtual but we don't need it)
564
SUMOTime getCurrentSimTime() const;
565
566
/// @brief get current tracker interval (pure virtual but we don't need it)
567
double getTrackerInterval() const;
568
/// @}
569
570
/// @brief get default cursor
571
FXCursor* getDefaultCursor();
572
573
/// @brief get tag properties database
574
const GNETagPropertiesDatabase* getTagPropertiesDatabase() const;
575
576
/// @brief get pointer to undoList
577
GNEUndoList* getUndoList();
578
579
/// @brief get pointer to viewNet
580
GNEViewNet* getViewNet();
581
582
/// @brief get ToolbarsGrip
583
GNEApplicationWindowHelper::ToolbarsGrip& getToolbarsGrip();
584
585
/// @brief update recomputing label
586
void updateRecomputingLabel();
587
588
/// @brief update control contents after undo/redo or recompute
589
void updateControls();
590
591
/// @brief update FXMenuCommands depending of supermode
592
void updateSuperModeMenuCommands(const Supermode supermode);
593
594
/// @name functions related with undo-redo
595
/// @{
596
/// @brief check if undo-redo is allow (processing/checkbox)
597
bool isUndoRedoAllowed() const;
598
599
/// @brief enable undo-redo temporally (for example, after creating an edge)
600
void enableUndoRedoTemporally();
601
602
/// @brief disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)
603
void disableUndoRedoTemporally(const std::string& reason);
604
605
/// @brief check if undo-redo is enabled temporally
606
const std::string& isUndoRedoEnabledTemporally() const;
607
608
/// @brief clear undo list
609
void clearUndoList();
610
611
/// @}
612
613
/// @brief get file Menu Commands (needed for show/hide menu commands)
614
GNEApplicationWindowHelper::FileMenuCommands& getFileMenuCommands();
615
616
/// @brief get modes Menu Commands (needed for show/hide menu commands)
617
GNEApplicationWindowHelper::ModesMenuCommands& getModesMenuCommands();
618
619
/// @brief get Edit Menu Commands (needed for show/hide menu commands)
620
GNEApplicationWindowHelper::EditMenuCommands& getEditMenuCommands();
621
622
/// @brief get processing Menu Commands
623
const GNEApplicationWindowHelper::ProcessingMenuCommands& getProcessingMenuCommands() const;
624
625
/// @brief get lock Menu Commands
626
GNEApplicationWindowHelper::LockMenuCommands& getLockMenuCommands();
627
628
/// @brief get SUMO options container
629
OptionsCont& getSumoOptions();
630
631
/// @brief get netgenerate options container
632
OptionsCont& getNetgenerateOptions();
633
634
/// @brief load additional elements
635
void loadAdditionalElements();
636
637
/// @brief load demand elements
638
void loadDemandElements();
639
640
/// @brief load data elements
641
void loadDataElements();
642
643
/// @brief load meanData elements
644
void loadMeanDataElements();
645
646
/// @brief load traffic lights
647
void loadTrafficLights(const bool reloading);
648
649
/// @brief load meanData elements
650
void loadEdgeTypes(const bool reloading);
651
652
/// @name functions related with test system
653
/// @{
654
655
/// @brief get netedit test system
656
GNEInternalTest* getInternalTest() const;
657
658
/// @brief check if ignore input signal (using during netedit tests)
659
bool allowInputSignals(FXObject* obj) const;
660
661
/// @}
662
663
protected:
664
/// @brief FOX needs this for static members
665
GNEApplicationWindow();
666
667
/// @brief external runner for running external tools
668
GNEExternalRunner* myExternalRunner = nullptr;
669
670
/// @brief the thread that loads the network
671
GNELoadThread* myLoadThread = nullptr;
672
673
/// @brief internal test system
674
public:
675
GNEInternalTest* myInternalTest = nullptr;
676
private:
677
/// @brief information whether the gui is currently loading and the load-options shall be greyed out
678
bool myAmLoading = false;
679
680
/// @brief the submenus
681
FXMenuPane* myFileMenu = nullptr;
682
FXMenuPane* myFileMenuNeteditConfig = nullptr;
683
FXMenuPane* myFileMenuSumoConfig = nullptr;
684
FXMenuPane* myFileMenuTLS = nullptr;
685
FXMenuPane* myFileMenuEdgeTypes = nullptr;
686
FXMenuPane* myFileMenuAdditionals = nullptr;
687
FXMenuPane* myFileMenuDemandElements = nullptr;
688
FXMenuPane* myFileMenuDataElements = nullptr;
689
FXMenuPane* myFileMenuMeanDataElements = nullptr;
690
FXMenuPane* myFileMenuRecentNetworks = nullptr;
691
FXMenuPane* myFileMenuRecentConfigs = nullptr;
692
FXMenuPane* myModesMenu = nullptr;
693
FXMenuPane* myEditMenu = nullptr;
694
FXMenuPane* myLockMenu = nullptr;
695
FXMenuPane* myProcessingMenu = nullptr;
696
FXMenuPane* myLocatorMenu = nullptr;
697
FXMenuPane* myToolsMenu = nullptr;
698
FXMenuPane* myToolsAssignMenu = nullptr;
699
FXMenuPane* myToolsDetectorMenu = nullptr;
700
FXMenuPane* myToolsDistrictMenu = nullptr;
701
FXMenuPane* myToolsDRTMenu = nullptr;
702
FXMenuPane* myToolsEmissionsMenu = nullptr;
703
FXMenuPane* myToolsImportMenu = nullptr;
704
FXMenuPane* myToolsImportCityBrainMenu = nullptr;
705
FXMenuPane* myToolsImportGTFSMenu = nullptr;
706
FXMenuPane* myToolsImportVissim = nullptr;
707
FXMenuPane* myToolsImportVisum = nullptr;
708
FXMenuPane* myToolsNetMenu = nullptr;
709
FXMenuPane* myToolsRouteMenu = nullptr;
710
FXMenuPane* myToolsOutputMenu = nullptr;
711
FXMenuPane* myToolsShapes = nullptr;
712
FXMenuPane* myToolsTLS = nullptr;
713
FXMenuPane* myToolsTriggerMenu = nullptr;
714
FXMenuPane* myToolsTurnDefs = nullptr;
715
FXMenuPane* myToolsVisualizationMenu = nullptr;
716
FXMenuPane* myToolsXML = nullptr;
717
FXMenuPane* myWindowMenu = nullptr;
718
FXMenuPane* myHelpMenu = nullptr;
719
720
/// @brief map with menu pane tools and strings
721
std::map<std::string, FXMenuPane*> myMenuPaneToolMaps;
722
723
/// @brief menu title for modes
724
FXMenuTitle* myModesMenuTitle = nullptr;
725
726
/// @brief menu title for lock
727
FXMenuTitle* myLockMenuTitle = nullptr;
728
729
/// @brief A window to display messages, warnings and error in
730
GUIMessageWindow* myMessageWindow = nullptr;
731
732
/// @brief The splitter that divides the main window into view and the log window
733
FXSplitter* myMainSplitter = nullptr;
734
735
/// @brief Button used for show if recomputing is needed
736
MFXButtonTooltip* myRequireRecomputingButton = nullptr;
737
738
/// @brief List of load requests
739
MFXSynchQue<GUIEvent*> myThreadEvents;
740
741
/// @brief io-event with the load-thread
742
FXEX::MFXThreadEvent myLoadThreadEvent;
743
744
/// @brief check if had dependent build
745
bool myHadDependentBuild = false;
746
747
/// @brief tagProperties database
748
const GNETagPropertiesDatabase* myTagPropertiesDatabase = nullptr;
749
750
/// @brief we are responsible for the net
751
GNENet* myNet = nullptr;
752
753
/// @brief the one and only undo list
754
GNEUndoList* myUndoList = nullptr;
755
756
/// @brief Input file pattern
757
std::string myConfigPattern;
758
759
/// @brief string to check if undo/redo list is enabled (a String is used to keep the disabling reason)
760
std::string myUndoRedoListEnabled;
761
762
/// @brief original netedit options container
763
OptionsCont myOriginalNeteditOptions;
764
765
/// @brief sumo options container
766
OptionsCont mySumoOptions;
767
768
/// @brief original sumo options container
769
OptionsCont myOriginalSumoOptions;
770
771
/// @brief netgenerate options container
772
OptionsCont myNetgenerateOptions;
773
774
/// @brief original netgenerate options container
775
OptionsCont myOriginalNetgenerateOptions;
776
777
/// @brief flag for check if console options was already loaded
778
bool myConsoleOptionsLoaded = true;
779
780
private:
781
/// @brief Toolbars Grip
782
GNEApplicationWindowHelper::ToolbarsGrip myToolbarsGrip;
783
784
/// @brief MenuBarFile
785
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile;
786
787
/// @brief File Menu Commands
788
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands;
789
790
/// @brief Modes Menu Commands
791
GNEApplicationWindowHelper::ModesMenuCommands myModesMenuCommands;
792
793
/// @brief Edit Menu Commands
794
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands;
795
796
/// @brief Lock Menu Commands
797
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands;
798
799
/// @brief Processing Menu Commands
800
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands;
801
802
/// @brief Locate Menu Commands
803
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands;
804
805
/// @brief Tools Menu Commands
806
GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands;
807
808
/// @brief Windows Menu Commands
809
GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands;
810
811
/// @brief Help Menu Commands
812
GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands;
813
814
/// @brief Supermode Commands
815
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands;
816
817
/// @brief pointer to current view net
818
GNEViewNet* myViewNet = nullptr;
819
820
/// @brief the prefix for the window title
821
const FXString myTitlePrefix;
822
823
/// @brief allow undo-redo (read from registry)
824
bool myAllowUndoRedo = true;
825
826
/// @brief allow undo-redo loading (read from registry)
827
bool myAllowUndoRedoLoading = true;
828
829
/// @brief The menu used for the MDI-windows
830
FXMDIMenu* myMDIMenu = nullptr;
831
832
/// @brief Builds the menu bar
833
void fillMenuBar();
834
835
/// @brief this method closes all windows and deletes the current simulation */
836
void closeAllWindows();
837
838
/// @brief warns about unsaved changes and gives the user the option to abort
839
bool askSaveElements();
840
841
/// @brief set input files in sumo options
842
void setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes);
843
844
/// @brief extract folder
845
FXString getFolder(const std::string& folder) const;
846
847
/// @brief Invalidated copy constructor.
848
GNEApplicationWindow(const GNEApplicationWindow&) = delete;
849
850
/// @brief Invalidated assignment operator.
851
GNEApplicationWindow& operator=(const GNEApplicationWindow&) = delete;
852
};
853
854