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-2017 German Aerospace Center (DLR) and others.
4 /****************************************************************************/
5 //
6 // This program and the accompanying materials
7 // are made available under the terms of the Eclipse Public License v2.0
8 // which accompanies this distribution, and is available at
9 // http://www.eclipse.org/legal/epl-v20.html
10 //
11 /****************************************************************************/
20 // The main window of the SUMO-gui.
21 /****************************************************************************/
22 #ifndef GUIApplicationWindow_h
23 #define GUIApplicationWindow_h
24 
25 
26 // ===========================================================================
27 // included modules
28 // ===========================================================================
29 #ifdef _MSC_VER
30 #include <windows_config.h>
31 #else
32 #include <config.h>
33 #endif
34 
35 #include <string>
36 #include <vector>
37 #include <iostream>
38 #include <fx.h>
48 #include "GUISUMOViewParent.h"
49 
50 
51 // ===========================================================================
52 // class declarations
53 // ===========================================================================
54 class GUILoadThread;
55 class GUIRunThread;
56 class GUIMessageWindow;
57 class GUIEvent;
60 
61 
62 // ===========================================================================
63 // class definition
64 // ===========================================================================
75  // FOX-declarations
76  FXDECLARE(GUIApplicationWindow)
77 public:
78 
83  GUIApplicationWindow(FXApp* a, const std::string& configPattern);
84 
85 
87  virtual ~GUIApplicationWindow();
88 
89 
92 
94  virtual void create();
95 
97  virtual void detach();
99 
100  void loadOnStartup();
101 
102 
103  void dependentBuild();
104 
105  void setStatusBarText(const std::string& text);
106 
107  void addRecentFile(const FX::FXString& f, const bool isNet);
108 
109  FXGLCanvas* getBuildGLCanvas() const;
110  SUMOTime getCurrentSimTime() const;
111  double getTrackerInterval() const;
112 
113  FXCursor* getDefaultCursor();
114 
115 
116 
117 
120 
121  virtual void eventOccured();
124  void handleEvent_Message(GUIEvent* e);
128 
129 
130 
133 
135  long onCmdOpenConfiguration(FXObject*, FXSelector, void*);
136 
138  long onCmdOpenNetwork(FXObject*, FXSelector, void*);
139 
141  long onCmdOpenShapes(FXObject*, FXSelector, void*);
142 
144  long onCmdReload(FXObject*, FXSelector, void*);
145 
147  long onCmdOpenRecent(FXObject*, FXSelector, void*);
148 
150  long onCmdClose(FXObject*, FXSelector, void*);
151 
155  long onCmdQuit(FXObject*, FXSelector, void*);
156 
158  long onCmdEditChosen(FXObject*, FXSelector, void*);
159 
161  long onCmdEditBreakpoints(FXObject*, FXSelector, void*);
162 
164  long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);
165 
167  long onCmdNetedit(FXObject*, FXSelector, void*);
168 
170  long onCmdAppSettings(FXObject*, FXSelector, void*);
171 
173  long onCmdGaming(FXObject*, FXSelector, void*);
174 
176  long onCmdFullScreen(FXObject*, FXSelector, void*);
177 
179  long onCmdListInternal(FXObject*, FXSelector, void*);
180 
182  long onCmdListParking(FXObject*, FXSelector, void*);
183 
185  long onCmdListTeleporting(FXObject*, FXSelector, void*);
186 
188  long onCmdAbout(FXObject*, FXSelector, void*);
189 
191  long onCmdStart(FXObject*, FXSelector, void*);
192 
194  long onCmdStop(FXObject*, FXSelector, void*);
195 
197  long onCmdStep(FXObject*, FXSelector, void*);
198 
200  long onCmdTimeToggle(FXObject*, FXSelector, void*);
201 
203  long onCmdDelayToggle(FXObject*, FXSelector, void*);
204 
206  long onCmdNewView(FXObject*, FXSelector, void*);
207 
208 #ifdef HAVE_OSG
209  long onCmdNewOSG(FXObject*, FXSelector, void*);
211 #endif
212 
214  long onUpdOpen(FXObject*, FXSelector, void*);
215 
217  long onUpdReload(FXObject*, FXSelector, void*);
218 
220  long onUpdOpenRecent(FXObject*, FXSelector, void*);
221 
223  long onUpdAddView(FXObject*, FXSelector, void*);
224 
226  long onUpdStart(FXObject* sender, FXSelector, void* ptr);
227 
229  long onUpdStop(FXObject*, FXSelector, void*);
230 
232  long onUpdStep(FXObject*, FXSelector, void*);
233 
235  long onUpdNeedsSimulation(FXObject*, FXSelector, void*);
236 
238  long onCmdClearMsgWindow(FXObject*, FXSelector, void*);
239 
241  long onCmdLocate(FXObject*, FXSelector, void*);
242 
244  long onCmdShowStats(FXObject*, FXSelector, void*);
245 
247  long onLoadThreadEvent(FXObject*, FXSelector, void*);
248 
250  long onRunThreadEvent(FXObject*, FXSelector, void*);
251 
253  long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);
254 
256  long onKeyPress(FXObject* o, FXSelector sel, void* data);
257  long onKeyRelease(FXObject* o, FXSelector sel, void* data);
259 
260 
264  virtual double getDelay() const {
265  return mySimDelayTarget->getValue();
266  }
267 
270  virtual void setDelay(double delay) {
271  mySimDelayTarget->setValue(delay);
272  }
273 
277  virtual void sendBlockingEvent(GUIEvent* event);
278 
279 protected:
280  virtual void addToWindowsMenu(FXMenuPane*) { }
281 
282 private:
284  void loadConfigOrNet(const std::string& file, bool isNet);
285 
287  void closeAllWindows();
288 
290  void updateTimeLCD(SUMOTime time);
291 
294 
296  void checkGamingEvents();
297 
298 protected:
301 
302 protected:
304  virtual void fillMenuBar();
305 
307  virtual void buildToolBars();
308 
309 protected:
311  std::string myName;
312 
315 
318 
321 
324 
327 
332 
334  std::vector<FXButton*> myStatButtons;
335 
338 
340  FXSplitter* myMainSplitter;
341 
345 
348 
351 
354 
356  FXMDIMenu* myMDIMenu;
357 
359  FXMenuBar* myMenuBar;
360 
363 
366 
369 
372 
374  FXRecentFiles myRecentConfigs;
375 
377  FXRecentFiles myRecentNets;
378 
380  std::string myConfigPattern;
381 
383 
386 
389 
392 
394  FXMutex myEventMutex;
395 
397  FXCondition myEventCondition;
398 
406  static std::mt19937 myGamingRNG;
408 
414  FXToolBar* myToolBar6, *myToolBar7;
415  FXToolBarShell* myToolBarDrag6, *myToolBarDrag7;
417 
418 };
419 
420 
421 #endif
422 
423 /****************************************************************************/
424 
RandomDistributor< std::string > myJamSounds
long onCmdShowStats(FXObject *, FXSelector, void *)
Called on commands from the statistic buttons.
virtual ~GUIApplicationWindow()
Destructor.
GUILoadThread * myLoadThread
long onCmdStep(FXObject *, FXSelector, void *)
Called on "step".
void handleEvent_SimulationLoaded(GUIEvent *e)
long onCmdReload(FXObject *, FXSelector, void *)
Called on reload.
virtual void setDelay(double delay)
Sets the delay of the parent application.
SUMOTime myAlternateSimDelay
The alternate simulation delay for toggling.
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.
void addRecentFile(const FX::FXString &f, const bool isNet)
FXToolBarShell * myToolBarDrag4
long onUpdStop(FXObject *, FXSelector, void *)
Determines whether "stop" is enabled.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
Somebody wants our clipped text.
virtual void setValue(FXdouble value)
Change current value.
int myViewNumber
The current view number.
virtual void detach()
Detaches the tool/menu bar.
GUISUMOAbstractView * openNewView(GUISUMOViewParent::ViewType vt=GUISUMOViewParent::VIEW_2D_OPENGL)
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)
long onCmdNewView(FXObject *, FXSelector, void *)
Called if a new view shall be opened (2D view)
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.
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 * myToolBarDrag3
FXGLCanvas * getBuildGLCanvas() const
bool myAmFullScreen
whether to show the window in full screen mode
long onCmdAbout(FXObject *, FXSelector, void *)
Shows the about dialog.
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.
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
FXRealSpinDial * mySimDelayTarget
void setStatusBarText(const std::string &text)
FXRecentFiles myRecentConfigs
List of recent config files.
SUMOTime getCurrentSimTime() const
FXdouble getValue() const
Return current value.
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
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 long int SUMOTime
Definition: TraCIDefs.h:51
long onLoadThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the loading thread.
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)
Spinner control.
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.
The main window of the SUMO-gui.