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);
121 
122 
123 
126 
128  long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
129 
131  long onCmdOpenNetwork(FXObject*, FXSelector, void*);
132 
134  long onCmdOpenShapes(FXObject*, FXSelector, void*);
135 
137  long onCmdReload(FXObject*, FXSelector, void*);
138 
140  long onCmdOpenRecent(FXObject*, FXSelector, void*);
141 
143  long onCmdClose(FXObject*, FXSelector, void*);
144 
148  long onCmdQuit(FXObject*, FXSelector, void*);
149 
151  long onCmdEditChosen(FXObject*, FXSelector, void*);
152 
154  long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
155 
157  long onCmdEditViewScheme(FXObject*, FXSelector, void*);
158 
160  long onCmdEditViewport(FXObject*, FXSelector, void*);
161 
163  long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
164 
166  long onCmdNetedit(FXObject*, FXSelector, void*);
167 
169  long onCmdAppSettings(FXObject*, FXSelector, void*);
170 
172  long onCmdGaming(FXObject*, FXSelector, void*);
173 
175  long onCmdFullScreen(FXObject*, FXSelector, void*);
176 
178  long onCmdListInternal(FXObject*, FXSelector, void*);
179 
181  long onCmdListParking(FXObject*, FXSelector, void*);
182 
184  long onCmdListTeleporting(FXObject*, FXSelector, void*);
185 
187  long onCmdAbout(FXObject*, FXSelector, void*);
188 
190  long onCmdStart(FXObject*, FXSelector, void*);
191 
193  long onCmdStop(FXObject*, FXSelector, void*);
194 
196  long onCmdStep(FXObject*, FXSelector, void*);
197 
199  long onCmdSaveState(FXObject*, FXSelector, void*);
200 
202  long onCmdTimeToggle(FXObject*, FXSelector, void*);
203 
205  long onCmdDelayToggle(FXObject*, FXSelector, void*);
206 
208  long onCmdDemandScale(FXObject*, FXSelector, void*);
209 
211  long onCmdNewView(FXObject*, FXSelector, void*);
212 
213 #ifdef HAVE_OSG
214  long onCmdNewOSG(FXObject*, FXSelector, void*);
216 #endif
217 
219  long onUpdOpen(FXObject*, FXSelector, void*);
220 
222  long onUpdReload(FXObject*, FXSelector, void*);
223 
225  long onUpdOpenRecent(FXObject*, FXSelector, void*);
226 
228  long onUpdAddView(FXObject*, FXSelector, void*);
229 
231  long onUpdStart(FXObject* sender, FXSelector, void* ptr);
232 
234  long onUpdStop(FXObject*, FXSelector, void*);
235 
237  long onUpdStep(FXObject*, FXSelector, void*);
238 
240  long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
241 
243  long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
244 
246  long onCmdLocate(FXObject*, FXSelector, void*);
247 
249  long onCmdShowStats(FXObject*, FXSelector, void*);
250 
252  long onLoadThreadEvent(FXObject*, FXSelector, void*);
253 
255  long onRunThreadEvent(FXObject*, FXSelector, void*);
256 
258  long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
259 
261  long onKeyPress(FXObject* o, FXSelector sel, void* data);
262  long onKeyRelease(FXObject* o, FXSelector sel, void* data);
264 
265 
269  virtual double getDelay() const {
270  return mySimDelay;
271  }
272 
276  virtual void setDelay(double delay) {
277  mySimDelay = delay;
278  }
279 
283  virtual void sendBlockingEvent(GUIEvent* event);
284 
285  const std::vector<SUMOTime> retrieveBreakpoints() const;
286 
287 protected:
288  virtual void addToWindowsMenu(FXMenuPane*) { }
289 
290 private:
292  void loadConfigOrNet(const std::string& file, bool isNet);
293 
295  void closeAllWindows();
296 
298  void updateTimeLCD(SUMOTime time);
299 
302 
304  void checkGamingEvents();
305 
306 protected:
309 
310 protected:
312  virtual void fillMenuBar();
313 
315  virtual void buildToolBars();
316 
317 protected:
319  std::string myName;
320 
323 
326 
329 
332 
335 
340 
342  FXMenuCascade* mySelectLanesMenuCascade;
343 
345  std::vector<FXButton*> myStatButtons;
346 
349 
351  FXSplitter* myMainSplitter;
352 
357 
359  double mySimDelay;
360  FXDataTarget* mySimDelayTarget;
361  FXRealSpinner* mySimDelaySpinner;
362  FXSlider* mySimDelaySlider;
363 
365  FXRealSpinner* myDemandScaleSpinner;
366 
369 
372 
374  FXMDIMenu* myMDIMenu;
375 
377  FXMenuBar* myMenuBar;
378 
381 
384 
387 
390 
392  FXRecentFiles myRecentConfigs;
393 
395  FXRecentFiles myRecentNets;
396 
398  std::string myConfigPattern;
399 
401 
404 
407 
409  FXMutex myEventMutex;
410 
412  FXCondition myEventCondition;
413 
421  static std::mt19937 myGamingRNG;
423 
429  FXToolBar* myToolBar6, *myToolBar7;
430  FXToolBarShell* myToolBarDrag6, *myToolBarDrag7;
432 
433 };
434 
435 
436 #endif
437 
438 /****************************************************************************/
439 
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 handleEvent_Screenshot(GUIEvent *e)
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.