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-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
18 // The main window of the SUMO-gui.
19 /****************************************************************************/
20 #ifndef GUIApplicationWindow_h
21 #define GUIApplicationWindow_h
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #include <config.h>
28 
29 #include <string>
30 #include <vector>
31 #include <iostream>
32 #include <fx.h>
41 #include "GUISUMOViewParent.h"
42 
43 
44 // ===========================================================================
45 // class declarations
46 // ===========================================================================
47 class GUILoadThread;
48 class GUIRunThread;
49 class GUIMessageWindow;
50 class GUIEvent;
53 
54 
55 // ===========================================================================
56 // class definition
57 // ===========================================================================
68  // FOX-declarations
69  FXDECLARE(GUIApplicationWindow)
70 public:
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();
94 
95 
96  void dependentBuild();
97 
98  void setStatusBarText(const std::string& text);
99 
100  void addRecentFile(const FX::FXString& f, const bool isNet);
101 
102  FXGLCanvas* getBuildGLCanvas() const;
103  SUMOTime getCurrentSimTime() const;
104  double getTrackerInterval() const;
105 
106  FXCursor* getDefaultCursor();
107 
108 
109 
110 
113 
114  virtual void eventOccurred();
117  void handleEvent_Message(GUIEvent* e);
120 
121 
122 
125 
127  long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
128 
130  long onCmdOpenNetwork(FXObject*, FXSelector, void*);
131 
133  long onCmdOpenShapes(FXObject*, FXSelector, void*);
134 
136  long onCmdOpenEdgeData(FXObject*, FXSelector, void*);
137 
139  long onCmdReload(FXObject*, FXSelector, void*);
140 
142  long onCmdOpenRecent(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 onCmdStart(FXObject*, FXSelector, void*);
193 
195  long onCmdStop(FXObject*, FXSelector, void*);
196 
198  long onCmdStep(FXObject*, FXSelector, void*);
199 
201  long onCmdSaveState(FXObject*, FXSelector, void*);
202 
204  long onCmdTimeToggle(FXObject*, FXSelector, void*);
205 
207  long onCmdDelayToggle(FXObject*, FXSelector, void*);
208 
210  long onCmdDemandScale(FXObject*, FXSelector, void*);
211 
213  long onCmdNewView(FXObject*, FXSelector, void*);
214 
215 #ifdef HAVE_OSG
216  long onCmdNewOSG(FXObject*, FXSelector, void*);
218 #endif
219 
221  long onUpdOpen(FXObject*, FXSelector, void*);
222 
224  long onUpdReload(FXObject*, FXSelector, void*);
225 
227  long onUpdOpenRecent(FXObject*, FXSelector, void*);
228 
230  long onUpdAddView(FXObject*, FXSelector, void*);
231 
233  long onUpdStart(FXObject* sender, FXSelector, void* ptr);
234 
236  long onUpdStop(FXObject*, FXSelector, void*);
237 
239  long onUpdStep(FXObject*, FXSelector, void*);
240 
242  long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
243 
245  long onUpdTraCIStatus(FXObject*, FXSelector, void*);
246 
248  long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
249 
251  long onCmdLocate(FXObject*, FXSelector, void*);
252 
254  long onCmdShowStats(FXObject*, FXSelector, void*);
255 
257  long onLoadThreadEvent(FXObject*, FXSelector, void*);
258 
260  long onRunThreadEvent(FXObject*, FXSelector, void*);
261 
263  long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
264 
266  long onKeyPress(FXObject* o, FXSelector sel, void* data);
267  long onKeyRelease(FXObject* o, FXSelector sel, void* data);
269 
270 
274  virtual double getDelay() const {
275  return mySimDelay;
276  }
277 
281  virtual void setDelay(double delay) {
282  mySimDelay = delay;
283  }
284 
287  virtual void setBreakpoints(const std::vector<SUMOTime>& breakpoints);
288 
292  virtual void sendBlockingEvent(GUIEvent* event);
293 
294  const std::vector<SUMOTime> retrieveBreakpoints() const;
295 
296 protected:
297  virtual void addToWindowsMenu(FXMenuPane*) { }
298 
299 private:
301  void loadConfigOrNet(const std::string& file, bool isNet);
302 
304  void closeAllWindows();
305 
307  void updateTimeLCD(SUMOTime time);
308 
311 
313  void checkGamingEvents();
314  void checkGamingEventsDRT();
315 
316 protected:
319 
320 protected:
322  virtual void fillMenuBar();
323 
325  virtual void buildToolBars();
326 
327 protected:
329  std::string myName;
330 
333 
336 
339 
342 
345 
350 
352  FXMenuCascade* mySelectLanesMenuCascade;
353 
355  std::vector<FXButton*> myStatButtons;
356 
359 
361  FXSplitter* myMainSplitter;
362 
367 
369  double mySimDelay;
370  FXDataTarget* mySimDelayTarget;
371  FXRealSpinner* mySimDelaySpinner;
372  FXSlider* mySimDelaySlider;
373 
375  FXRealSpinner* myDemandScaleSpinner;
376 
379 
382 
384  FXMDIMenu* myMDIMenu;
385 
387  FXMenuBar* myMenuBar;
388 
391 
394 
397 
400 
402  FXRecentFiles myRecentConfigs;
403 
405  FXRecentFiles myRecentNets;
406 
408  std::string myConfigPattern;
409 
411 
414 
417 
419  FXMutex myEventMutex;
420 
422  FXCondition myEventCondition;
423 
431  static std::mt19937 myGamingRNG;
434  bool myTLSGame;
435 
448 
449 };
450 
451 
452 #endif
453 
454 /****************************************************************************/
455 
RandomDistributor< std::string > myJamSounds
long onCmdShowStats(FXObject *, FXSelector, void *)
Called on commands from the statistic buttons.
virtual ~GUIApplicationWindow()
Destructor.
GUILoadThread * myLoadThread
the thread that loads simulations
FXToolBarShell * myToolBarDrag9
long onCmdStep(FXObject *, FXSelector, void *)
Called on "step".
void handleEvent_SimulationLoaded(GUIEvent *e)
long long int SUMOTime
Definition: SUMOTime.h:35
FXRealSpinner * myDemandScaleSpinner
the demand scale
long onCmdReload(FXObject *, FXSelector, void *)
Called on reload.
virtual void setDelay(double delay)
Sets the delay of the parent application.
FXSplitter * myMainSplitter
The splitter that divides the main window into vies and the log window.
long onUpdOpenRecent(FXObject *, FXSelector, void *)
Determines whether opening a recent file is enabled.
long onCmdEditChosen(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Chosen.
long onCmdListParking(FXObject *, FXSelector, void *)
Toggle listing of parking vehicles.
virtual void setBreakpoints(const std::vector< SUMOTime > &breakpoints)
Sets the breakpoints of the parent application.
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
void addRecentFile(const FX::FXString &f, const bool isNet)
FXToolBarShell * myToolBarDrag4
long onUpdTraCIStatus(FXObject *, FXSelector, void *)
Determines whether traci is active.
long onUpdStop(FXObject *, FXSelector, void *)
Determines whether "stop" is enabled.
long onCmdSaveState(FXObject *, FXSelector, void *)
Called on "save state".
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
Somebody wants our clipped text.
int myViewNumber
The current view number.
virtual void detach()
Detaches the tool/menu bar.
GUISUMOAbstractView * openNewView(GUISUMOViewParent::ViewType vt=GUISUMOViewParent::VIEW_2D_OPENGL)
bool myWasStarted
the information whether the simulation was started before
long onCmdStop(FXObject *, FXSelector, void *)
Called on "stop".
FXMutex myEventMutex
the mutex for the waiting semaphore
long onCmdNetedit(FXObject *, FXSelector, void *)
Called on menu Edit->Netedit.
void loadConfigOrNet(const std::string &file, bool isNet)
const std::vector< SUMOTime > retrieveBreakpoints() const
retrieve breakpoints if provided by the application
long onCmdNewView(FXObject *, FXSelector, void *)
Called if a new view shall be opened (2D view)
FXMenuCascade * mySelectLanesMenuCascade
the menu cascades
double myAlternateSimDelay
The alternate simulation delay in milliseconds for toggling.
long onUpdOpen(FXObject *, FXSelector, void *)
Determines whether opening is enabled.
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
FXToolBarShell * myToolBarDrag2
void checkGamingEvents()
handles additional game-related events
FXMenuPane * myFileMenu
the submenus
virtual void create()
Creates the main window (required by FOX)
long onCmdOpenEdgeData(FXObject *, FXSelector, void *)
Called on menu File->Load EdgeData.
FXRecentFiles myRecentNets
List of recent nets.
A window which displays the time line of one (or more) value(s)
bool myShowTimeAsHMS
whether to show time as hour:minute:second
void handleEvent_Message(GUIEvent *e)
long onCmdOpenRecent(FXObject *, FXSelector, void *)
Called on opening a recent file.
FXEX::FXLCDLabel * myTotalDistanceLabel
void updateTimeLCD(SUMOTime time)
updates the simulation time display
FXCondition myEventCondition
the semaphore when waiting for event completion
void handleEvent_SimulationEnded(GUIEvent *e)
bool myHaveNotifiedAboutSimEnd
whether the simulation end was already announced
std::string myConfigPattern
Input file pattern.
long onCmdEditBreakpoints(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Breakpoints.
std::vector< FXButton * > myStatButtons
Buttons showing and running values and triggering statistic windows.
long onCmdStart(FXObject *, FXSelector, void *)
Called on "play".
long onCmdAppSettings(FXObject *, FXSelector, void *)
Opens the application settings menu (Settings->Application Settings...)
virtual void buildToolBars()
Builds the tool bar.
FXEX::FXLCDLabel * myEmergencyVehicleLabel
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
FXToolBarShell * myMenuBarDrag
ViewType
Available view types.
GUIRunThread * myRunThread
the thread that runs simulations
long onCmdListInternal(FXObject *, FXSelector, void *)
Toggle listing of internal structures.
long onUpdReload(FXObject *, FXSelector, void *)
Determines whether reloading is enabled.
long onCmdDelayToggle(FXObject *, FXSelector, void *)
Called on "delay toggle".
FXToolBarShell * myToolBarDrag8
FXToolBarShell * myToolBarDrag3
FXGLCanvas * getBuildGLCanvas() const
long onCmdAbout(FXObject *, FXSelector, void *)
Shows the about dialog.
double mySimDelay
the simulation delay in milliseconds
long onCmdClose(FXObject *, FXSelector, void *)
Called on menu File->Close.
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
virtual double getDelay() const
Returns the simulation delay.
long onCmdOpenShapes(FXObject *, FXSelector, void *)
Called on menu File->Load Shapes.
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
Called if the message window shall be cleared.
FXMenuPane * mySelectByPermissions
virtual void fillMenuBar()
Builds the menu bar.
GUIApplicationWindow()
FOX needs this for static members.
FXEX::FXLCDLabel * myWaitingTimeLabel
performance indicators
long onCmdGaming(FXObject *, FXSelector, void *)
Toggle gaming mode.
FXToolBarShell * myToolBarDrag10
FXMenuBar * myMenuBar
The application menu bar.
std::string myName
the name of the simulation
FXToolBarShell * myToolBarDrag5
FXToolBarShell * myToolBarDrag7
long onCmdFullScreen(FXObject *, FXSelector, void *)
Toggle full screen mode.
FXToolBarShell * myToolBarDrag6
RandomDistributor< std::string > myCollisionSounds
long onCmdOpenConfiguration(FXObject *, FXSelector, void *)
Called on menu File->Open Configuration.
long onRunThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the simulation thread.
virtual void sendBlockingEvent(GUIEvent *event)
Sends an event from the application thread to the GUI and waits until it is handled.
long onUpdAddView(FXObject *, FXSelector, void *)
Determines whether adding a view is enabled.
long onCmdLocate(FXObject *, FXSelector, void *)
Called on menu commands from the Locator menu.
FXEX::FXLCDLabel * myTimeLossLabel
void setStatusBarText(const std::string &text)
FXRecentFiles myRecentConfigs
List of recent config files.
SUMOTime getCurrentSimTime() const
FXToolBarShell * myToolBarDrag1
for some menu detaching fun
FXEX::FXThreadEvent myLoadThreadEvent
io-event with the load-thread
FXEX::FXThreadEvent myRunThreadEvent
io-event with the run-thread
FXRealSpinner * mySimDelaySpinner
FXToolBar * myToolBar1
The application tool bar.
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
Called on menu File->Open Network.
double myJamSoundTime
waiting time after which vehicles trigger jam sounds
FXSynchQue< GUIEvent * > myEvents
List of got requests.
long onUpdNeedsSimulation(FXObject *, FXSelector, void *)
Determines whether some buttons which require an active simulation may be shown.
long onLoadThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the loading thread.
long onCmdDemandScale(FXObject *, FXSelector, void *)
Called on "demand scale".
long onCmdEditViewScheme(FXObject *, FXSelector, void *)
Called on menu Edit->Visualization.
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out ...
long onCmdTimeToggle(FXObject *, FXSelector, void *)
Called on "time toggle".
long onCmdListTeleporting(FXObject *, FXSelector, void *)
Toggle listing of teleporting vehicles.
long onKeyPress(FXObject *o, FXSelector sel, void *data)
handle keys
void handleEvent_SimulationStep(GUIEvent *e)
FXEX::FXLCDLabel * myLCDLabel
the simulation step display
static std::mt19937 myGamingRNG
A random number generator used to choose a gaming sound.
A logging window for the gui.
A window containing a gl-object&#39;s parameter.
long onUpdStep(FXObject *, FXSelector, void *)
Determines whether "step" is enabled.
bool myTLSGame
current game mode
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
virtual void addToWindowsMenu(FXMenuPane *)
long onUpdStart(FXObject *sender, FXSelector, void *ptr)
Determines whether "play" is enabled.
FXDataTarget * mySimDelayTarget
The main window of the SUMO-gui.