Eclipse SUMO - Simulation of Urban MObility
GUIApplicationWindow.h
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3// Copyright (C) 2001-2022 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/****************************************************************************/
21// The main window of the SUMO-gui.
22/****************************************************************************/
23#pragma once
24#include <config.h>
25
26#include <string>
27#include <vector>
28#include <iostream>
39#include "GUISUMOViewParent.h"
40
41
42// ===========================================================================
43// class declarations
44// ===========================================================================
45class Command;
46class GUILoadThread;
47class GUIRunThread;
49class GUIEvent;
53
54
55// ===========================================================================
56// class definition
57// ===========================================================================
68 // FOX-declarations
69 FXDECLARE(GUIApplicationWindow)
70public:
71
76 GUIApplicationWindow(FXApp* a, const std::string& configPattern);
77
78
80 virtual ~GUIApplicationWindow();
81
82
85
87 virtual void create();
88
90 virtual void detach();
92
93 void loadOnStartup(const bool wait = false);
94
96 return myRunThread;
97 }
98
99 void dependentBuild(const bool isLibsumo);
100
101 void setStatusBarText(const std::string& text);
102
103 void addRecentFile(const FX::FXString& f);
104
105 FXGLCanvas* getBuildGLCanvas() const;
107 double getTrackerInterval() const;
108
109 FXCursor* getDefaultCursor();
110
111
112
113
116
117 virtual void eventOccurred();
123
124
125
128
130 long onCmdNewWindow(FXObject*, FXSelector, void*);
131
133 long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
134
136 long onCmdOpenNetwork(FXObject*, FXSelector, void*);
137
139 long onCmdOpenShapes(FXObject*, FXSelector, void*);
140
142 long onCmdOpenEdgeData(FXObject*, FXSelector, void*);
143
145 long onCmdReload(FXObject*, FXSelector, void*);
146
148 long onCmdQuickReload(FXObject*, FXSelector, void*);
149
151 long onCmdOpenRecent(FXObject*, FXSelector, void*);
152
154 long onCmdSaveConfig(FXObject*, FXSelector, void*);
155
157 long onCmdClose(FXObject*, FXSelector, void*);
158
162 long onCmdQuit(FXObject*, FXSelector, void*);
163
165 long onCmdEditChosen(FXObject*, FXSelector, void*);
166
168 long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
169
171 long onCmdEditViewScheme(FXObject*, FXSelector, void*);
172
174 long onCmdEditViewport(FXObject*, FXSelector, void*);
175
177 long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
178
180 long onCmdChangelog(FXObject* sender, FXSelector sel, void* ptr);
181
183 long onCmdHotkeys(FXObject* sender, FXSelector sel, void* ptr);
184
186 long onCmdTutorial(FXObject* sender, FXSelector sel, void* ptr);
187
189 long onCmdNetedit(FXObject*, FXSelector, void*);
190
192 long onCmdAppSettings(FXObject*, FXSelector, void*);
193
195 long onCmdGaming(FXObject*, FXSelector, void*);
196
198 long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);
199
201 long onCmdFullScreen(FXObject*, FXSelector, void*);
202
204 long onCmdListInternal(FXObject*, FXSelector, void*);
205
207 long onCmdListParking(FXObject*, FXSelector, void*);
208
210 long onCmdListTeleporting(FXObject*, FXSelector, void*);
211
213 long onCmdAbout(FXObject*, FXSelector, void*);
214
216 long onCmdHallOfFame(FXObject*, FXSelector, void*);
217
219 long onCmdStart(FXObject*, FXSelector, void*);
220
222 long onCmdStop(FXObject*, FXSelector, void*);
223
225 long onCmdStep(FXObject*, FXSelector, void*);
226
228 long onCmdSaveState(FXObject*, FXSelector, void*);
229
231 long onCmdLoadState(FXObject*, FXSelector, void*);
232
234 long onCmdTimeToggle(FXObject*, FXSelector, void*);
235
237 long onCmdDelayInc(FXObject*, FXSelector, void*);
238
240 long onCmdDelayDec(FXObject*, FXSelector, void*);
241
243 long onCmdDelayToggle(FXObject*, FXSelector, void*);
244
246 long onCmdDemandScale(FXObject*, FXSelector, void*);
247
249 long onCmdNewView(FXObject*, FXSelector, void*);
250
251#ifdef HAVE_OSG
253 long onCmdNewOSG(FXObject*, FXSelector, void*);
254#endif
255
257 long onUpdOpen(FXObject*, FXSelector, void*);
258
260 long onUpdReload(FXObject*, FXSelector, void*);
261
263 long onUpdOpenRecent(FXObject*, FXSelector, void*);
264
266 long onUpdAddView(FXObject*, FXSelector, void*);
267
269 long onUpdStart(FXObject* sender, FXSelector, void* ptr);
270
272 long onUpdStop(FXObject*, FXSelector, void*);
273
275 long onUpdStep(FXObject*, FXSelector, void*);
276
278 long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
279
281 long onUpdTraCIStatus(FXObject*, FXSelector, void*);
282
284 long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
285
287 long onCmdLocate(FXObject*, FXSelector, void*);
288
290 long onCmdShowStats(FXObject*, FXSelector, void*);
291
293 long onLoadThreadEvent(FXObject*, FXSelector, void*);
294
296 long onRunThreadEvent(FXObject*, FXSelector, void*);
297
299 long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
300
302 long onKeyPress(FXObject* o, FXSelector sel, void* data);
303 long onKeyRelease(FXObject* o, FXSelector sel, void* data);
305
306
310 virtual double getDelay() const {
311 return mySimDelay;
312 }
313
317 virtual void setDelay(double delay) {
318 mySimDelay = delay;
319 }
320
323 virtual void setBreakpoints(const std::vector<SUMOTime>& breakpoints);
324
328 virtual void sendBlockingEvent(GUIEvent* event);
329
330 const std::vector<SUMOTime> retrieveBreakpoints() const;
331
333 myBreakpointDialog = nullptr;
334 }
335
337 void addHotkey(int key, Command* press, Command* release);
338
339protected:
340 virtual void addToWindowsMenu(FXMenuPane*) { }
341
342private:
344 void loadConfigOrNet(const std::string& file);
345
347 void closeAllWindows();
348
350 void updateTimeLCD(SUMOTime time);
351
353
356
358 void checkGamingEvents();
360
361protected:
362 FOX_CONSTRUCTOR(GUIApplicationWindow)
363
364protected:
366 virtual void fillMenuBar();
367
369 virtual void buildToolBars();
370
371protected:
373 std::string myName;
374
377
380
382 bool myWasStarted = false;
383
386
389
392
395
397 FXMenuPane* myFileMenu = nullptr, *myEditMenu = nullptr, *mySelectByPermissions = nullptr, *mySettingsMenu = nullptr,
400
402 FXMenuCascade* mySelectLanesMenuCascade = nullptr;
403
405 std::vector<FXButton*> myStatButtons;
406
409
411 FXSplitter* myMainSplitter = nullptr;
412
414 FXToolBarShell* myToolBarDrag1 = nullptr, *myToolBarDrag2 = nullptr, *myToolBarDrag3 = nullptr,
415 *myToolBarDrag4 = nullptr, *myToolBarDrag5 = nullptr, *myMenuBarDrag = nullptr,
416 *myToolBarDrag8 = nullptr;
417
419 double mySimDelay = 0.;
420 FXDataTarget* mySimDelayTarget = nullptr;
421 FXRealSpinner* mySimDelaySpinner = nullptr;
422 FXSlider* mySimDelaySlider = nullptr;
423
425 FXRealSpinner* myDemandScaleSpinner = nullptr;
426
429
432
434 FXMDIMenu* myMDIMenu = nullptr;
435
437 FXMenuBar* myMenuBar = nullptr;
438
440 FXToolBar* myToolBar1 = nullptr, *myToolBar2 = nullptr, *myToolBar3 = nullptr, *myToolBar4 = nullptr, *myToolBar5 = nullptr, *myToolBar8 = nullptr;
441
444
447
450
453
455 std::string myConfigPattern;
456
458
461
464
467
469 FXCondition myEventCondition;
470
473
481 static std::mt19937 myGamingRNG;
485
495 FXToolBar* myToolBar6 = nullptr, *myToolBar7 = nullptr, *myToolBar9 = nullptr, *myToolBar10 = nullptr;
496 FXToolBarShell* myToolBarDrag6 = nullptr, *myToolBarDrag7 = nullptr, *myToolBarDrag9 = nullptr, *myToolBarDrag10 = nullptr;
498
501
503 std::map<int, Command*> myHotkeyPress;
504 std::map<int, Command*> myHotkeyRelease;
505
507};
long long int SUMOTime
Definition: GUI.h:36
Base (microsim) event class.
Definition: Command.h:50
The main window of the SUMO-gui.
long onCmdDelayInc(FXObject *, FXSelector, void *)
Called on "delay inc".
long onUpdReload(FXObject *, FXSelector, void *)
Determines whether reloading is enabled.
long onCmdShowStats(FXObject *, FXSelector, void *)
Called on commands from the statistic buttons.
FXToolBarShell * myToolBarDrag2
long onCmdTimeToggle(FXObject *, FXSelector, void *)
Called on "time toggle".
virtual void sendBlockingEvent(GUIEvent *event)
Sends an event from the application thread to the GUI and waits until it is handled.
GUIDialog_Breakpoints * myBreakpointDialog
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
void handleEvent_Message(GUIEvent *e)
GUILoadThread * myLoadThread
the thread that loads simulations
void handleEvent_SimulationEnded(GUIEvent *e)
FXMenuCheck * myGamingModeCheckbox
menu checkbox to activate game mode
int myViewNumber
The current view number.
FXToolBarShell * myToolBarDrag4
long onCmdAbout(FXObject *, FXSelector, void *)
Shows the about dialog.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
Somebody wants our clipped text.
long onUpdTraCIStatus(FXObject *, FXSelector, void *)
Determines whether traci is active.
long onUpdStep(FXObject *, FXSelector, void *)
Determines whether "step" is enabled.
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onCmdAppSettings(FXObject *, FXSelector, void *)
Opens the application settings menu (Settings->Application Settings...)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
handle keys
void handleEvent_SimulationLoaded(GUIEvent *e)
FXToolBarShell * myToolBarDrag9
FXRealSpinner * mySimDelaySpinner
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
void handleEvent_SimulationStep(GUIEvent *e)
bool myHaveNotifiedAboutSimEnd
whether the simulation end was already announced
void setStatusBarText(const std::string &text)
get status bar text (can be implemented in children)
FXToolBarShell * myToolBarDrag10
void addRecentFile(const FX::FXString &f)
long onCmdStop(FXObject *, FXSelector, void *)
Called on "stop".
virtual void setDelay(double delay)
Sets the delay of the parent application.
double myJamSoundTime
waiting time after which vehicles trigger jam sounds
FXRealSpinner * myDemandScaleSpinner
the demand scale
long onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
MFXLCDLabel * myEmergencyVehicleLabel
FXToolBarShell * myToolBarDrag7
double mySimDelay
the simulation delay in milliseconds
SUMOTime getCurrentSimTime() const
get current sim time (must be implemented in all children)
long onUpdAddView(FXObject *, FXSelector, void *)
Determines whether adding a view is enabled.
FXToolBarShell * myToolBarDrag1
for some menu detaching fun
long onCmdEditViewScheme(FXObject *, FXSelector, void *)
Called on menu Edit->Visualization.
long onRunThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the simulation thread.
MFXLCDLabel * myTotalDistanceLabel
MFXRecentNetworks myRecentNetworksAndConfigs
List of recent networks and configs.
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdListTeleporting(FXObject *, FXSelector, void *)
Toggle listing of teleporting vehicles.
long onCmdNewWindow(FXObject *, FXSelector, void *)
Called on menu File->New Window.
long onCmdStep(FXObject *, FXSelector, void *)
Called on "step".
FXMutex myEventMutex
the mutex for the waiting semaphore
FXMenuPane * mySelectByPermissions
double getTrackerInterval() const
get tracker interval (must be implemented in all children)
long onCmdClose(FXObject *, FXSelector, void *)
Called on menu File->Close.
virtual void buildToolBars()
Builds the tool bar.
long onCmdDelayToggle(FXObject *, FXSelector, void *)
Called on "delay toggle".
FXMenuPane * myFileMenu
the submenus
long onCmdStart(FXObject *, FXSelector, void *)
Called on "play".
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
GUIRunThread * getRunner()
void loadConfigOrNet(const std::string &file)
FXToolBar * myToolBar1
The application tool bar.
bool myWasStarted
the information whether the simulation was started before
virtual void addToWindowsMenu(FXMenuPane *)
std::string myName
the name of the simulation
FXSplitter * myMainSplitter
The splitter that divides the main window into views and the log window.
long onCmdListParking(FXObject *, FXSelector, void *)
Toggle listing of parking vehicles.
void loadOnStartup(const bool wait=false)
long onCmdListInternal(FXObject *, FXSelector, void *)
Toggle listing of internal structures.
bool myTLSGame
current game mode
FXEX::MFXThreadEvent myRunThreadEvent
io-event with the run-thread
void dependentBuild(const bool isLibsumo)
long onCmdFullScreen(FXObject *, FXSelector, void *)
Toggle full screen mode.
GUIApplicationWindow(FXApp *a, const std::string &configPattern)
Constructor.
long onCmdEditBreakpoints(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Breakpoints.
long onCmdOpenShapes(FXObject *, FXSelector, void *)
Called on menu File->Load Shapes.
FXToolBarShell * myMenuBarDrag
const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve breakpoints if provided by the application
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
FXToolBarShell * myToolBarDrag8
long onUpdStart(FXObject *sender, FXSelector, void *ptr)
Determines whether "play" is enabled.
GUISUMOAbstractView * openNewView(GUISUMOViewParent::ViewType vt=GUISUMOViewParent::VIEW_2D_OPENGL, std::string caption="")
FXGLCanvas * getBuildGLCanvas() const
get build GL Canvas (must be implemented in all children)
RandomDistributor< std::string > myJamSounds
long onCmdNewView(FXObject *, FXSelector, void *)
Called if a new view shall be opened (2D view)
GUIRunThread * myRunThread
the thread that runs simulations
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
Called if the message window shall be cleared.
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
Toggle draw junction shape.
long onCmdNetedit(FXObject *, FXSelector, void *)
Called on menu Edit->Netedit.
virtual void create()
Creates the main window (required by FOX)
std::map< int, Command * > myHotkeyPress
custom hotkeys
FXToolBarShell * myToolBarDrag5
MFXLCDLabel * myWaitingTimeLabel
performance indicators
long onCmdDemandScale(FXObject *, FXSelector, void *)
Called on "demand scale".
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
RandomDistributor< std::string > myCollisionSounds
FXMenuCascade * mySelectLanesMenuCascade
the menu cascades
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
Called on menu File->Open Network.
std::string myConfigPattern
Input file pattern.
virtual void setBreakpoints(const std::vector< SUMOTime > &breakpoints)
Sets the breakpoints of the parent application.
long onCmdLoadState(FXObject *, FXSelector, void *)
Called on "save state".
long onCmdEditChosen(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Chosen.
virtual void detach()
Detaches the tool/menu bar.
long onCmdDelayDec(FXObject *, FXSelector, void *)
Called on "delay dec".
long onCmdOpenRecent(FXObject *, FXSelector, void *)
Called on opening a recent file.
long onUpdOpenRecent(FXObject *, FXSelector, void *)
Determines whether opening a recent file is enabled.
MFXSynchQue< GUIEvent * > myEvents
List of got requests.
bool myShowTimeAsHMS
whether to show time as hour:minute:second
double myAlternateSimDelay
The alternate simulation delay in milliseconds for toggling.
long onUpdStop(FXObject *, FXSelector, void *)
Determines whether "stop" is enabled.
FXDataTarget * mySimDelayTarget
long onCmdSaveConfig(FXObject *, FXSelector, void *)
Called on menu File->Close.
void updateTimeLCD(SUMOTime time)
updates the simulation time display
long onCmdSaveState(FXObject *, FXSelector, void *)
Called on "save state".
std::map< int, Command * > myHotkeyRelease
FXToolBarShell * myToolBarDrag3
long onLoadThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the loading thread.
long onCmdReload(FXObject *, FXSelector, void *)
Called on reload.
long onUpdNeedsSimulation(FXObject *, FXSelector, void *)
Determines whether some buttons which require an active simulation may be shown.
long onUpdOpen(FXObject *, FXSelector, void *)
Determines whether opening is enabled.
long onCmdHallOfFame(FXObject *, FXSelector, void *)
Shows the Hall of Fame dialog.
long onCmdLocate(FXObject *, FXSelector, void *)
Called on menu commands from the Locator menu.
FXToolBarShell * myToolBarDrag6
long long myGuiSettingsFileMTime
last modification time of the gui setting file
long onCmdOpenConfiguration(FXObject *, FXSelector, void *)
Called on menu File->Open Configuration.
long onCmdOpenEdgeData(FXObject *, FXSelector, void *)
Called on menu File->Load EdgeData.
virtual double getDelay() const
Returns the simulation delay.
FXCondition myEventCondition
the semaphore when waiting for event completion
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
MFXLCDLabel * myLCDLabel
the simulation step display
FXMenuBar * myMenuBar
The application menu bar.
static std::mt19937 myGamingRNG
A random number generator used to choose a gaming sound.
long onCmdHotkeys(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Hotkeys
long myLastStepEventMillis
last time the simulation view was redrawn due to a simStep
virtual ~GUIApplicationWindow()
Destructor.
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
void addHotkey(int key, Command *press, Command *release)
register custom hotkey action
virtual void fillMenuBar()
Builds the menu bar.
bool myIsReload
whether we are reloading the simulation
std::vector< FXButton * > myStatButtons
Buttons showing and running values and triggering statistic windows.
void checkGamingEvents()
handles additional game-related events
long onCmdQuickReload(FXObject *, FXSelector, void *)
Called on quick-reload.
long onCmdGaming(FXObject *, FXSelector, void *)
Toggle gaming mode.
Editor for simulation breakpoints.
A logging window for the gui.
A window containing a gl-object's parameter.
A window which displays the time line of one (or more) value(s)
ViewType
Available view types.
@ VIEW_2D_OPENGL
plain 2D openGL view (
A widget which has the seven-segment display used as the drawing object for each letter in the label....
Definition: MFXLCDLabel.h:34
MFXRecentNetworks.