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-2020 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>
29 #include <fx.h>
38 #include "GUISUMOViewParent.h"
39 
40 
41 // ===========================================================================
42 // class declarations
43 // ===========================================================================
44 class GUILoadThread;
45 class GUIRunThread;
46 class GUIMessageWindow;
47 class GUIEvent;
50 
51 
52 // ===========================================================================
53 // class definition
54 // ===========================================================================
65  // FOX-declarations
66  FXDECLARE(GUIApplicationWindow)
67 public:
68 
73  GUIApplicationWindow(FXApp* a, const std::string& configPattern);
74 
75 
77  virtual ~GUIApplicationWindow();
78 
79 
82 
84  virtual void create();
85 
87  virtual void detach();
89 
90  void loadOnStartup();
91 
92 
93  void dependentBuild();
94 
95  void setStatusBarText(const std::string& text);
96 
97  void addRecentFile(const FX::FXString& f);
98 
99  FXGLCanvas* getBuildGLCanvas() const;
100  SUMOTime getCurrentSimTime() const;
101  double getTrackerInterval() const;
102 
103  FXCursor* getDefaultCursor();
104 
105 
106 
107 
110 
111  virtual void eventOccurred();
114  void handleEvent_Message(GUIEvent* e);
117 
118 
119 
122 
124  long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
125 
127  long onCmdOpenNetwork(FXObject*, FXSelector, void*);
128 
130  long onCmdOpenShapes(FXObject*, FXSelector, void*);
131 
133  long onCmdOpenEdgeData(FXObject*, FXSelector, void*);
134 
136  long onCmdReload(FXObject*, FXSelector, void*);
137 
139  long onCmdOpenRecent(FXObject*, FXSelector, void*);
140 
142  long onCmdSaveConfig(FXObject*, FXSelector, void*);
143 
145  long onCmdClose(FXObject*, FXSelector, void*);
146 
150  long onCmdQuit(FXObject*, FXSelector, void*);
151 
153  long onCmdEditChosen(FXObject*, FXSelector, void*);
154 
156  long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
157 
159  long onCmdEditViewScheme(FXObject*, FXSelector, void*);
160 
162  long onCmdEditViewport(FXObject*, FXSelector, void*);
163 
165  long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
166 
168  long onCmdNetedit(FXObject*, FXSelector, void*);
169 
171  long onCmdAppSettings(FXObject*, FXSelector, void*);
172 
174  long onCmdGaming(FXObject*, FXSelector, void*);
175 
177  long onCmdFullScreen(FXObject*, FXSelector, void*);
178 
180  long onCmdListInternal(FXObject*, FXSelector, void*);
181 
183  long onCmdListParking(FXObject*, FXSelector, void*);
184 
186  long onCmdListTeleporting(FXObject*, FXSelector, void*);
187 
189  long onCmdAbout(FXObject*, FXSelector, void*);
190 
192  long onCmdHallOfFame(FXObject*, FXSelector, void*);
193 
195  long onCmdStart(FXObject*, FXSelector, void*);
196 
198  long onCmdStop(FXObject*, FXSelector, void*);
199 
201  long onCmdStep(FXObject*, FXSelector, void*);
202 
204  long onCmdSaveState(FXObject*, FXSelector, void*);
205 
207  long onCmdTimeToggle(FXObject*, FXSelector, void*);
208 
210  long onCmdDelayToggle(FXObject*, FXSelector, void*);
211 
213  long onCmdDemandScale(FXObject*, FXSelector, void*);
214 
216  long onCmdNewView(FXObject*, FXSelector, void*);
217 
218 #ifdef HAVE_OSG
220  long onCmdNewOSG(FXObject*, FXSelector, void*);
221 #endif
222 
224  long onUpdOpen(FXObject*, FXSelector, void*);
225 
227  long onUpdReload(FXObject*, FXSelector, void*);
228 
230  long onUpdOpenRecent(FXObject*, FXSelector, void*);
231 
233  long onUpdAddView(FXObject*, FXSelector, void*);
234 
236  long onUpdStart(FXObject* sender, FXSelector, void* ptr);
237 
239  long onUpdStop(FXObject*, FXSelector, void*);
240 
242  long onUpdStep(FXObject*, FXSelector, void*);
243 
245  long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
246 
248  long onUpdTraCIStatus(FXObject*, FXSelector, void*);
249 
251  long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
252 
254  long onCmdLocate(FXObject*, FXSelector, void*);
255 
257  long onCmdShowStats(FXObject*, FXSelector, void*);
258 
260  long onLoadThreadEvent(FXObject*, FXSelector, void*);
261 
263  long onRunThreadEvent(FXObject*, FXSelector, void*);
264 
266  long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
267 
269  long onKeyPress(FXObject* o, FXSelector sel, void* data);
270  long onKeyRelease(FXObject* o, FXSelector sel, void* data);
272 
273 
277  virtual double getDelay() const {
278  return mySimDelay;
279  }
280 
284  virtual void setDelay(double delay) {
285  mySimDelay = delay;
286  }
287 
290  virtual void setBreakpoints(const std::vector<SUMOTime>& breakpoints);
291 
295  virtual void sendBlockingEvent(GUIEvent* event);
296 
297  const std::vector<SUMOTime> retrieveBreakpoints() const;
298 
299 protected:
300  virtual void addToWindowsMenu(FXMenuPane*) { }
301 
302 private:
304  void loadConfigOrNet(const std::string& file);
305 
307  void closeAllWindows();
308 
310  void updateTimeLCD(SUMOTime time);
311 
314 
316  void checkGamingEvents();
317  void checkGamingEventsDRT();
318 
319 protected:
320  FOX_CONSTRUCTOR(GUIApplicationWindow)
321 
322 protected:
324  virtual void fillMenuBar();
325 
327  virtual void buildToolBars();
328 
329 protected:
331  std::string myName;
332 
335 
338 
340  bool myWasStarted = false;
341 
344 
347 
349  FXMenuPane* myFileMenu = nullptr, *myEditMenu = nullptr, *mySelectByPermissions = nullptr, *mySettingsMenu = nullptr,
351  *myWindowsMenu, *myHelpMenu = nullptr;
352 
354  FXMenuCascade* mySelectLanesMenuCascade = nullptr;
355 
357  std::vector<FXButton*> myStatButtons;
358 
361 
363  FXSplitter* myMainSplitter = nullptr;
364 
366  FXToolBarShell* myToolBarDrag1 = nullptr, *myToolBarDrag2 = nullptr, *myToolBarDrag3 = nullptr,
367  *myToolBarDrag4 = nullptr, *myToolBarDrag5 = nullptr, *myMenuBarDrag = nullptr,
368  *myToolBarDrag8 = nullptr;
369 
371  double mySimDelay = 0.;
372  FXDataTarget* mySimDelayTarget = nullptr;
373  FXRealSpinner* mySimDelaySpinner = nullptr;
374  FXSlider* mySimDelaySlider = nullptr;
375 
377  FXRealSpinner* myDemandScaleSpinner = nullptr;
378 
381 
384 
386  FXMDIMenu* myMDIMenu = nullptr;
387 
389  FXMenuBar* myMenuBar = nullptr;
390 
392  FXToolBar* myToolBar1 = nullptr, *myToolBar2 = nullptr, *myToolBar3 = nullptr, *myToolBar4 = nullptr, *myToolBar5 = nullptr, *myToolBar8 = nullptr;
393 
396 
399 
402 
404  FXRecentFiles myRecentFiles;
405 
407  std::string myConfigPattern;
408 
410 
413 
416 
418  FXMutex myEventMutex;
419 
421  FXCondition myEventCondition;
422 
430  static std::mt19937 myGamingRNG;
433  bool myTLSGame;
434 
444  FXToolBar* myToolBar6 = nullptr, *myToolBar7 = nullptr, *myToolBar9 = nullptr, *myToolBar10 = nullptr;
445  FXToolBarShell* myToolBarDrag6 = nullptr, *myToolBarDrag7 = nullptr, *myToolBarDrag9 = nullptr, *myToolBarDrag10 = nullptr;
447 
448 };
long long int SUMOTime
Definition: SUMOTime.h:31
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)
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.
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 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)
FXRecentFiles myRecentFiles
List of recent files.
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.
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 (