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-2018 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 onCmdReload(FXObject*, FXSelector, void*);
137 
139  long onCmdOpenRecent(FXObject*, FXSelector, void*);
140 
142  long onCmdClose(FXObject*, FXSelector, void*);
143 
147  long onCmdQuit(FXObject*, FXSelector, void*);
148 
150  long onCmdEditChosen(FXObject*, FXSelector, void*);
151 
153  long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
154 
156  long onCmdEditViewScheme(FXObject*, FXSelector, void*);
157 
159  long onCmdEditViewport(FXObject*, FXSelector, void*);
160 
162  long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
163 
165  long onCmdNetedit(FXObject*, FXSelector, void*);
166 
168  long onCmdAppSettings(FXObject*, FXSelector, void*);
169 
171  long onCmdGaming(FXObject*, FXSelector, void*);
172 
174  long onCmdFullScreen(FXObject*, FXSelector, void*);
175 
177  long onCmdListInternal(FXObject*, FXSelector, void*);
178 
180  long onCmdListParking(FXObject*, FXSelector, void*);
181 
183  long onCmdListTeleporting(FXObject*, FXSelector, void*);
184 
186  long onCmdAbout(FXObject*, FXSelector, void*);
187 
189  long onCmdStart(FXObject*, FXSelector, void*);
190 
192  long onCmdStop(FXObject*, FXSelector, void*);
193 
195  long onCmdStep(FXObject*, FXSelector, void*);
196 
198  long onCmdSaveState(FXObject*, FXSelector, void*);
199 
201  long onCmdTimeToggle(FXObject*, FXSelector, void*);
202 
204  long onCmdDelayToggle(FXObject*, FXSelector, void*);
205 
207  long onCmdDemandScale(FXObject*, FXSelector, void*);
208 
210  long onCmdNewView(FXObject*, FXSelector, void*);
211 
212 #ifdef HAVE_OSG
213  long onCmdNewOSG(FXObject*, FXSelector, void*);
215 #endif
216 
218  long onUpdOpen(FXObject*, FXSelector, void*);
219 
221  long onUpdReload(FXObject*, FXSelector, void*);
222 
224  long onUpdOpenRecent(FXObject*, FXSelector, void*);
225 
227  long onUpdAddView(FXObject*, FXSelector, void*);
228 
230  long onUpdStart(FXObject* sender, FXSelector, void* ptr);
231 
233  long onUpdStop(FXObject*, FXSelector, void*);
234 
236  long onUpdStep(FXObject*, FXSelector, void*);
237 
239  long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
240 
242  long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
243 
245  long onCmdLocate(FXObject*, FXSelector, void*);
246 
248  long onCmdShowStats(FXObject*, FXSelector, void*);
249 
251  long onLoadThreadEvent(FXObject*, FXSelector, void*);
252 
254  long onRunThreadEvent(FXObject*, FXSelector, void*);
255 
257  long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
258 
260  long onKeyPress(FXObject* o, FXSelector sel, void* data);
261  long onKeyRelease(FXObject* o, FXSelector sel, void* data);
263 
264 
268  virtual double getDelay() const {
269  return mySimDelay;
270  }
271 
275  virtual void setDelay(double delay) {
276  mySimDelay = delay;
277  }
278 
282  virtual void sendBlockingEvent(GUIEvent* event);
283 
284  const std::vector<SUMOTime> retrieveBreakpoints() const;
285 
286 protected:
287  virtual void addToWindowsMenu(FXMenuPane*) { }
288 
289 private:
291  void loadConfigOrNet(const std::string& file, bool isNet);
292 
294  void closeAllWindows();
295 
297  void updateTimeLCD(SUMOTime time);
298 
301 
303  void checkGamingEvents();
304 
305 protected:
308 
309 protected:
311  virtual void fillMenuBar();
312 
314  virtual void buildToolBars();
315 
316 protected:
318  std::string myName;
319 
322 
325 
328 
331 
334 
339 
341  FXMenuCascade* mySelectLanesMenuCascade;
342 
344  std::vector<FXButton*> myStatButtons;
345 
348 
350  FXSplitter* myMainSplitter;
351 
356 
358  double mySimDelay;
359  FXDataTarget* mySimDelayTarget;
360  FXRealSpinner* mySimDelaySpinner;
361  FXSlider* mySimDelaySlider;
362 
364  FXRealSpinner* myDemandScaleSpinner;
365 
368 
371 
373  FXMDIMenu* myMDIMenu;
374 
376  FXMenuBar* myMenuBar;
377 
380 
383 
386 
389 
391  FXRecentFiles myRecentConfigs;
392 
394  FXRecentFiles myRecentNets;
395 
397  std::string myConfigPattern;
398 
400 
403 
406 
408  FXMutex myEventMutex;
409 
411  FXCondition myEventCondition;
412 
420  static std::mt19937 myGamingRNG;
422 
428  FXToolBar* myToolBar6, *myToolBar7;
429  FXToolBarShell* myToolBarDrag6, *myToolBarDrag7;
431 
432 };
433 
434 
435 #endif
436 
437 /****************************************************************************/
438 
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
long onCmdStep(FXObject *, FXSelector, void *)
Called on "step".
void handleEvent_SimulationLoaded(GUIEvent *e)
long long int SUMOTime
Definition: SUMOTime.h:36
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.
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
void addRecentFile(const FX::FXString &f, const bool isNet)
FXToolBarShell * myToolBarDrag4
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)
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.
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.
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.
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.
MFXEventQue< GUIEvent * > myEvents
List of got requests.
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
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.
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.