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 // ===========================================================================
45 class GUILoadThread;
46 class GUIRunThread;
47 class GUIMessageWindow;
48 class GUIEvent;
51 
52 
53 // ===========================================================================
54 // class definition
55 // ===========================================================================
66  // FOX-declarations
67  FXDECLARE(GUIApplicationWindow)
68 public:
69 
74  GUIApplicationWindow(FXApp* a, const std::string& configPattern);
75 
76 
78  virtual ~GUIApplicationWindow();
79 
80 
83 
85  virtual void create();
86 
88  virtual void detach();
90 
91  void loadOnStartup();
92 
93 
94  void dependentBuild();
95 
96  void setStatusBarText(const std::string& text);
97 
98  void addRecentFile(const FX::FXString& f);
99 
100  FXGLCanvas* getBuildGLCanvas() const;
101  SUMOTime getCurrentSimTime() const;
102  double getTrackerInterval() const;
103 
104  FXCursor* getDefaultCursor();
105 
106 
107 
108 
111 
112  virtual void eventOccurred();
115  void handleEvent_Message(GUIEvent* e);
118 
119 
120 
123 
125  long onCmdNewWindow(FXObject*, FXSelector, void*);
126 
128  long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
129 
131  long onCmdOpenNetwork(FXObject*, FXSelector, void*);
132 
134  long onCmdOpenShapes(FXObject*, FXSelector, void*);
135 
137  long onCmdOpenEdgeData(FXObject*, FXSelector, void*);
138 
140  long onCmdReload(FXObject*, FXSelector, void*);
141 
143  long onCmdOpenRecent(FXObject*, FXSelector, void*);
144 
146  long onCmdSaveConfig(FXObject*, FXSelector, void*);
147 
149  long onCmdClose(FXObject*, FXSelector, void*);
150 
154  long onCmdQuit(FXObject*, FXSelector, void*);
155 
157  long onCmdEditChosen(FXObject*, FXSelector, void*);
158 
160  long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
161 
163  long onCmdEditViewScheme(FXObject*, FXSelector, void*);
164 
166  long onCmdEditViewport(FXObject*, FXSelector, void*);
167 
169  long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
170 
172  long onCmdNetedit(FXObject*, FXSelector, void*);
173 
175  long onCmdAppSettings(FXObject*, FXSelector, void*);
176 
178  long onCmdGaming(FXObject*, FXSelector, void*);
179 
181  long onCmdFullScreen(FXObject*, FXSelector, void*);
182 
184  long onCmdListInternal(FXObject*, FXSelector, void*);
185 
187  long onCmdListParking(FXObject*, FXSelector, void*);
188 
190  long onCmdListTeleporting(FXObject*, FXSelector, void*);
191 
193  long onCmdAbout(FXObject*, FXSelector, void*);
194 
196  long onCmdHallOfFame(FXObject*, FXSelector, void*);
197 
199  long onCmdStart(FXObject*, FXSelector, void*);
200 
202  long onCmdStop(FXObject*, FXSelector, void*);
203 
205  long onCmdStep(FXObject*, FXSelector, void*);
206 
208  long onCmdSaveState(FXObject*, FXSelector, void*);
209 
211  long onCmdTimeToggle(FXObject*, FXSelector, void*);
212 
214  long onCmdDelayToggle(FXObject*, FXSelector, void*);
215 
217  long onCmdDemandScale(FXObject*, FXSelector, void*);
218 
220  long onCmdNewView(FXObject*, FXSelector, void*);
221 
222 #ifdef HAVE_OSG
224  long onCmdNewOSG(FXObject*, FXSelector, void*);
225 #endif
226 
228  long onUpdOpen(FXObject*, FXSelector, void*);
229 
231  long onUpdReload(FXObject*, FXSelector, void*);
232 
234  long onUpdOpenRecent(FXObject*, FXSelector, void*);
235 
237  long onUpdAddView(FXObject*, FXSelector, void*);
238 
240  long onUpdStart(FXObject* sender, FXSelector, void* ptr);
241 
243  long onUpdStop(FXObject*, FXSelector, void*);
244 
246  long onUpdStep(FXObject*, FXSelector, void*);
247 
249  long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
250 
252  long onUpdTraCIStatus(FXObject*, FXSelector, void*);
253 
255  long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
256 
258  long onCmdLocate(FXObject*, FXSelector, void*);
259 
261  long onCmdShowStats(FXObject*, FXSelector, void*);
262 
264  long onLoadThreadEvent(FXObject*, FXSelector, void*);
265 
267  long onRunThreadEvent(FXObject*, FXSelector, void*);
268 
270  long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
271 
273  long onKeyPress(FXObject* o, FXSelector sel, void* data);
274  long onKeyRelease(FXObject* o, FXSelector sel, void* data);
276 
277 
281  virtual double getDelay() const {
282  return mySimDelay;
283  }
284 
288  virtual void setDelay(double delay) {
289  mySimDelay = delay;
290  }
291 
294  virtual void setBreakpoints(const std::vector<SUMOTime>& breakpoints);
295 
299  virtual void sendBlockingEvent(GUIEvent* event);
300 
301  const std::vector<SUMOTime> retrieveBreakpoints() const;
302 
303 protected:
304  virtual void addToWindowsMenu(FXMenuPane*) { }
305 
306 private:
308  void loadConfigOrNet(const std::string& file);
309 
311  void closeAllWindows();
312 
314  void updateTimeLCD(SUMOTime time);
315 
318 
320  void checkGamingEvents();
321  void checkGamingEventsDRT();
322 
323 protected:
324  FOX_CONSTRUCTOR(GUIApplicationWindow)
325 
326 protected:
328  virtual void fillMenuBar();
329 
331  virtual void buildToolBars();
332 
333 protected:
335  std::string myName;
336 
339 
342 
344  bool myWasStarted = false;
345 
348 
351 
353  FXMenuPane* myFileMenu = nullptr, *myEditMenu = nullptr, *mySelectByPermissions = nullptr, *mySettingsMenu = nullptr,
355  *myWindowsMenu, *myHelpMenu = nullptr;
356 
358  FXMenuCascade* mySelectLanesMenuCascade = nullptr;
359 
361  std::vector<FXButton*> myStatButtons;
362 
365 
367  FXSplitter* myMainSplitter = nullptr;
368 
370  FXToolBarShell* myToolBarDrag1 = nullptr, *myToolBarDrag2 = nullptr, *myToolBarDrag3 = nullptr,
371  *myToolBarDrag4 = nullptr, *myToolBarDrag5 = nullptr, *myMenuBarDrag = nullptr,
372  *myToolBarDrag8 = nullptr;
373 
375  double mySimDelay = 0.;
376  FXDataTarget* mySimDelayTarget = nullptr;
377  FXRealSpinner* mySimDelaySpinner = nullptr;
378  FXSlider* mySimDelaySlider = nullptr;
379 
381  FXRealSpinner* myDemandScaleSpinner = nullptr;
382 
385 
388 
390  FXMDIMenu* myMDIMenu = nullptr;
391 
393  FXMenuBar* myMenuBar = nullptr;
394 
396  FXToolBar* myToolBar1 = nullptr, *myToolBar2 = nullptr, *myToolBar3 = nullptr, *myToolBar4 = nullptr, *myToolBar5 = nullptr, *myToolBar8 = nullptr;
397 
400 
403 
406 
409 
411  std::string myConfigPattern;
412 
414 
417 
420 
422  FXMutex myEventMutex;
423 
425  FXCondition myEventCondition;
426 
428  FXMenuCheck* myGamingModeCheckbox;
429 
437  static std::mt19937 myGamingRNG;
440  bool myTLSGame;
441 
451  FXToolBar* myToolBar6 = nullptr, *myToolBar7 = nullptr, *myToolBar9 = nullptr, *myToolBar10 = nullptr;
452  FXToolBarShell* myToolBarDrag6 = nullptr, *myToolBarDrag7 = nullptr, *myToolBarDrag9 = nullptr, *myToolBarDrag10 = nullptr;
454 
457 
458 };
long long int SUMOTime
Definition: SUMOTime.h:32
FXRecentNetworks.
The main window of the SUMO-gui.
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.
void handleEvent_Message(GUIEvent *e)
GUILoadThread * myLoadThread
the thread that loads simulations
FXEX::FXLCDLabel * myTimeLossLabel
void handleEvent_SimulationEnded(GUIEvent *e)
FXMenuCheck * myGamingModeCheckbox
menu checkbox to activate game mode
int myViewNumber
The current view number.
FXEX::FXLCDLabel * myTotalDistanceLabel
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
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
FXEX::FXLCDLabel * myWaitingTimeLabel
performance indicators
FXRealSpinner * myDemandScaleSpinner
the demand scale
FXSynchQue< GUIEvent * > myEvents
List of got requests.
FXRecentNetworks myRecentNetworksAndConfigs
List of recent networks and configs.
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.
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.
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.
FXEX::FXLCDLabel * myEmergencyVehicleLabel
long onCmdListParking(FXObject *, FXSelector, void *)
Toggle listing of parking vehicles.
long onCmdListInternal(FXObject *, FXSelector, void *)
Toggle listing of internal structures.
bool myTLSGame
current game mode
long onCmdFullScreen(FXObject *, FXSelector, void *)
Toggle full screen mode.
GUIApplicationWindow(FXApp *a, const std::string &configPattern)
Constructor.
GUISUMOAbstractView * openNewView(GUISUMOViewParent::ViewType vt=GUISUMOViewParent::VIEW_2D_OPENGL)
FXEX::FXLCDLabel * myLCDLabel
the simulation step display
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.
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 onCmdNetedit(FXObject *, FXSelector, void *)
Called on menu Edit->Netedit.
virtual void create()
Creates the main window (required by FOX)
FXEX::FXThreadEvent myRunThreadEvent
io-event with the run-thread
FXEX::FXThreadEvent myLoadThreadEvent
io-event with the load-thread
FXToolBarShell * myToolBarDrag5
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 onCmdEditChosen(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Chosen.
virtual void detach()
Detaches the tool/menu bar.
long onCmdOpenRecent(FXObject *, FXSelector, void *)
Called on opening a recent file.
long onUpdOpenRecent(FXObject *, FXSelector, void *)
Determines whether opening a recent file is enabled.
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".
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 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.
FXMenuBar * myMenuBar
The application menu bar.
static std::mt19937 myGamingRNG
A random number generator used to choose a gaming sound.
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
virtual void fillMenuBar()
Builds the menu bar.
std::vector< FXButton * > myStatButtons
Buttons showing and running values and triggering statistic windows.
void checkGamingEvents()
handles additional game-related events
long onCmdGaming(FXObject *, FXSelector, void *)
Toggle gaming mode.
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 (