84 #ifdef CHECK_MEMORY_LEAKS
111 FXMAPFUNC(SEL_COMMAND,
MID_NEW_OSGVIEW, GUIApplicationWindow::onCmdNewOSG),
165 const std::
string& configPattern)
167 myLoadThread(0), myRunThread(0),
169 myAlternateSimDelay(0),
170 myRecentNets(a, "nets"), myConfigPattern(configPattern),
171 hadDependentBuild(false),
172 myShowTimeAsHMS(false) {
191 LAYOUT_SIDE_TOP | LAYOUT_FILL_X | FRAME_RAISED);
202 myStatusbar =
new FXStatusBar(
this, LAYOUT_SIDE_BOTTOM | LAYOUT_FILL_X | FRAME_RAISED);
206 0, 0, 20, 0, 0, 0, 0, 0, 0, 0);
210 0, 0, 20, 0, 0, 0, 0, 0, 0, 0);
216 SPLITTER_REVERSED | SPLITTER_VERTICAL | LAYOUT_FILL_X | LAYOUT_FILL_Y | SPLITTER_TRACKING | FRAME_RAISED | FRAME_THICK);
218 LAYOUT_FILL_X | LAYOUT_FILL_Y | FRAME_SUNKEN | FRAME_THICK);
221 FXMDIClient::ID_MDI_MENUWINDOW, LAYOUT_LEFT);
223 FXMDIClient::ID_MDI_MENUCLOSE, FRAME_RAISED | LAYOUT_RIGHT);
225 FXMDIClient::ID_MDI_MENURESTORE, FRAME_RAISED | LAYOUT_RIGHT);
227 FXMDIClient::ID_MDI_MENUMINIMIZE, FRAME_RAISED | LAYOUT_RIGHT);
259 if (getApp()->reg().readIntEntry(
"SETTINGS",
"maximized", 0) == 0) {
260 setX(getApp()->reg().readIntEntry(
"SETTINGS",
"x", 150));
261 setY(getApp()->reg().readIntEntry(
"SETTINGS",
"y", 150));
262 setWidth(getApp()->reg().readIntEntry(
"SETTINGS",
"width", 600));
263 setHeight(getApp()->reg().readIntEntry(
"SETTINGS",
"height", 400));
265 gCurrentFolder = getApp()->reg().readStringEntry(
"SETTINGS",
"basedir",
"");
266 FXMainWindow::create();
279 FXint width = getApp()->getNormalFont()->getTextWidth(
"8", 1) * 24;
283 show(PLACEMENT_SCREEN);
284 if (getApp()->reg().readIntEntry(
"SETTINGS",
"maximized", 0) == 1) {
287 myShowTimeAsHMS = (getApp()->reg().readIntEntry(
"gui",
"timeasHMS", 0) == 1);
325 FXMainWindow::detach();
337 "&Open Simulation...\tCtl-O\tOpen a simulation (Configuration file).",
340 "Open &Network...\tCtl-N\tOpen a network.",
343 "&Reload\tCtl-R\tReloads the simulation / the network.",
347 "&Close\tCtl-W\tClose the simulation.",
350 FXMenuSeparator* sep1 =
new FXMenuSeparator(
myFileMenu);
352 sep1->setSelector(FXRecentFiles::ID_ANYFILES);
366 FXMenuSeparator* sep2 =
new FXMenuSeparator(
myFileMenu);
368 sep2->setSelector(FXRecentFiles::ID_ANYFILES);
384 "&Quit\tCtl-Q\tQuit the Application.",
390 for (std::vector<std::string>::iterator it = vehicleClasses.begin(); it != vehicleClasses.end(); ++it) {
398 "Edit Selected...\tCtl-E\tOpens a Dialog for editing the List of Selected Items.",
401 "Select lanes which allow...\t\tOpens a menu for selecting a vehicle class by which to selected lanes.",
405 "Edit Breakpoints...\tCtl-B\tOpens a Dialog for editing breakpoints.",
412 "Application Settings...\t\tOpen a Dialog for Application Settings editing.",
415 "Gaming Mode\t\tToggle gaming mode on/off.",
421 "Locate &Junctions\t\tOpen a Dialog for Locating a Junction.",
424 "Locate &Edges\t\tOpen a Dialog for Locating an Edge.",
428 "Locate &Vehicles\t\tOpen a Dialog for Locating a Vehicle.",
432 "Locate &TLS\t\tOpen a Dialog for Locating a Traffic Light.",
435 "Locate &Additional\t\tOpen a Dialog for Locating an Additional Structure.",
438 "Locate &PoI\t\tOpen a Dialog for Locating a Point of Intereset.",
441 "Locate P&olygon\t\tOpen a Dialog for Locating a Polygon.",
445 "Show Internal Structures\t\tShow internal junctions and streets in locator Dialog.",
451 "Run\tCtl-A\tStart running the simulation.",
454 "Stop\tCtl-S\tStop running the simulation.",
457 "Step\tCtl-D\tPerform one simulation step.",
464 "Show Status Line\t\tToggle the Status Bar on/off.",
467 "Show Message Window\t\tToggle the Message Window on/off.",
470 "Show Simulation Time\t\tToggle the Simulation Time on/off.",
473 "Show Simulation Delay\t\tToggle the Simulation Delay Entry on/off.",
490 sep1->setSelector(FXMDIClient::ID_MDI_ANY);
498 "Clear Message Window\t\tClear the message window.",
516 LAYOUT_DOCK_NEXT | LAYOUT_SIDE_TOP | FRAME_RAISED);
522 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
525 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
528 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
534 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED);
539 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
542 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
545 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
551 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED);
555 BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
567 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED | LAYOUT_FILL_Y);
571 BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
574 LAYOUT_TOP | FRAME_SUNKEN | FRAME_THICK | LAYOUT_FILL_Y);
584 LAYOUT_DOCK_SAME | LAYOUT_SIDE_TOP | FRAME_RAISED);
590 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
594 ICON_ABOVE_TEXT | BUTTON_TOOLBAR | FRAME_RAISED | LAYOUT_TOP | LAYOUT_LEFT);
602 getApp()->reg().writeIntEntry(
"SETTINGS",
"x", getX());
603 getApp()->reg().writeIntEntry(
"SETTINGS",
"y", getY());
604 getApp()->reg().writeIntEntry(
"SETTINGS",
"width", getWidth());
605 getApp()->reg().writeIntEntry(
"SETTINGS",
"height", getHeight());
606 getApp()->reg().writeStringEntry(
"SETTINGS",
"basedir",
gCurrentFolder.text());
607 getApp()->reg().writeIntEntry(
"SETTINGS",
"maximized", isMaximized() ? 1 : 0);
608 getApp()->reg().writeIntEntry(
"gui",
"timeasHMS",
myShowTimeAsHMS ? 1 : 0);
618 if (mc->getText() ==
"Edit Selected...") {
628 for (std::vector<MSLane*>::const_iterator it = lanes.begin(); it != lanes.end(); ++it) {
662 FXFileDialog opendialog(
this,
"Open Simulation Configuration");
664 opendialog.setSelectMode(SELECTFILE_EXISTING);
669 if (opendialog.execute()) {
671 std::string file = opendialog.getFilename().text();
682 FXFileDialog opendialog(
this,
"Open Network");
684 opendialog.setSelectMode(SELECTFILE_EXISTING);
685 opendialog.setPatternList(
"SUMO nets (*.net.xml)\nAll files (*)");
689 if (opendialog.execute()) {
691 std::string file = opendialog.getFilename().text();
701 load(
"",
false,
true);
709 myStatusbar->getStatusLine()->setText(
"Already loading!");
712 std::string file((
const char*)data);
728 myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
738 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
747 myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
757 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
767 myStatusbar->getStatusLine()->setText(
"No simulation loaded!");
791 myStatusbar->getStatusLine()->setText(
"No simulation loaded!");
834 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
844 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
854 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
864 ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE),
885 d->show(PLACEMENT_OWNER);
916 GUIApplicationWindow::onCmdNewOSG(
FXObject*, FXSelector,
void*) {
928 about->show(PLACEMENT_OWNER);
934 FXEvent*
event = (FXEvent*)ptr;
936 setDNDData(FROM_CLIPBOARD, event->target,
string);
993 if (ec->
myNet != 0) {
995 std::map<int, TraCIServer::CmdExecutor> execs;
1010 if (ec->
myNet == 0) {
1046 std::string settingsName = settings.
addSettings(view);
1062 setTitle(
"SUMO Traffic Light Game");
1072 getApp()->endWaitCursor();
1107 FXMessageBox::warning(
this, MBOX_OK,
"Simulation ended",
"%s", text.c_str());
1115 getApp()->beginWaitCursor();
1133 myStatusbar->getStatusLine()->setText(
"No simulation loaded!");
1137 FXuint opts = MDI_TRACKING;
1203 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1221 myStatusbar->getStatusLine()->setText(text.c_str());
1222 myStatusbar->getStatusLine()->setNormalText(text.c_str());
1229 const bool hideFraction =
myAmGaming || fmod(
TS, 1.) == 0.;
1230 const int BuffSize = 100;
1231 char buffer[BuffSize];
1233 const int hours = (
int)fracSeconds / 3600;
1234 const int minutes = ((
int)fracSeconds % 3600) / 60;
1235 fracSeconds = fracSeconds - 3600 * hours - 60 * minutes;
1236 const std::string format = (hideFraction ?
1237 "%02d-%02d-%02.0f" :
"%02d-%02d-%06.3f");
1238 snprintf(buffer, BuffSize, format.c_str(), hours, minutes, fracSeconds);
1240 const std::string format = (hideFraction ?
1241 "%13.0f" :
"%13.3f");
1242 snprintf(buffer, BuffSize, format.c_str(), fracSeconds);
std::vector< FXMainWindow * > myTrackerWindows
Event sent when the the simulation is over.
FXLabel * myGeoCoordinate
GUISUMOAbstractView * getView() const
virtual ~GUIApplicationWindow()
Destructor.
GUILoadThread * myLoadThread
GUICompleteSchemeStorage gSchemeStorage
long onCmdStep(FXObject *, FXSelector, void *)
Called on "step".
static std::string clipped
void handleEvent_SimulationLoaded(GUIEvent *e)
long onCmdReload(FXObject *, FXSelector, void *)
Called on reload.
virtual bool simulationIsStepable() const
std::string addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
MSNet::SimulationState getReason() const
Returns the reason the simulation has ended due.
The Simulation execution thread.
SUMOTime myAlternateSimDelay
The alternate simulation delay for toggling.
GUIVisualizationSettings * getVisualisationSettings()
send when a message occured
FXSplitter * myMainSplitter
The splitter that divides the main window into vies and the log window.
virtual bool init(GUINet *net, SUMOTime start, SUMOTime end)
initialises the thread with the new simulation
SUMOVehicleClass
Definition of vehicle classes to differ between different lane usage and authority types...
long onUpdOpenRecent(FXObject *, FXSelector, void *)
Determines whether opening a recent file is enabled.
const std::string & getViewType() const
Returns the parsed view type.
long onCmdEditChosen(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Chosen.
MFXEventQue myEvents
List of got requests.
const bool myOsgView
whether to load the OpenSceneGraph view
const std::string & getMsg() const
Returns the message.
GUIColorer laneColorer
The lane colorer.
void load(const std::string &file, bool isNet)
begins the loading of the given file
void select(GUIGlID id, bool update=true)
Adds the object with the given id.
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.
void setNumberFormat(FXint prec, FXbool bExp=FALSE)
virtual bool simulationIsStartable() const
static bool gRunAfterLoad
the simulation shall start direct after loading
std::string time2string(SUMOTime t)
Edit simulation breakpoints.
virtual void detach()
Detaches the tool/menu bar.
Editor for the list of chosen objects.
void setThickness(const FXint width)
set/get segment width - must be less than half the segment length
FXMenuPane * myLocatorMenu
Reload the previously loaded simulation.
FXGLVisual * myGLVisual
The gl-visual used.
GUISUMOAbstractView * openNewView(GUISUMOViewParent::ViewType vt=GUISUMOViewParent::VIEW_2D_OPENGL)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onCmdStop(FXObject *, FXSelector, void *)
Called on "stop".
const std::vector< SUMOTime > & getBreakpoints() const
Returns the parsed breakpoints.
static bool dictionary(const std::string &id, MSEdge *edge)
Inserts edge into the static dictionary Returns true if the key id isn't already in the dictionary...
FXString gCurrentFolder
The folder used as last.
#define CMD_SET_GUI_VARIABLE
Loads a file previously loaded.
SUMOTime getCurrentTimeStep() const
Returns the current simulation step.
bool isGaming() const
return whether the gui is in gaming mode
const SUMOTime myBegin
the time the simulation shall start with
long onCmdNewView(FXObject *, FXSelector, void *)
Called if a new view shall be opened (2D view)
Locate junction - button.
GUIGlID getGlID() const
Returns the numerical id of the object.
long onUpdOpen(FXObject *, FXSelector, void *)
Determines whether opening is enabled.
virtual FXGLCanvas * getBuildGLCanvas() const
static bool processSet(TraCIServer &server, tcpip::Storage &inputStorage, tcpip::Storage &outputStorage)
Processes a set value command (Command 0xcc: Change GUI State)
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
void addDecals(const std::vector< Decal > &decals)
FXToolBarShell * myToolBarDrag2
void setViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
FXMenuPane * myFileMenu
the submenus
void addSeparator()
Adds a a separator to this log window.
static std::vector< SUMOTime > gBreakpoints
List of breakpoints.
Application settings - menu entry.
virtual void create()
Creates the main window (required by FOX)
Representation of a lane in the micro simulation (gui-version)
FXHorizontalFrame * myCartesianFrame
SUMOReal getDelay() const
Returns the parsed delay.
FXRecentFiles myRecentNets
List of recent nets.
const std::vector< std::string > mySettingsFiles
the name of the settings file to load
Editor for simulation breakpoints.
bool myAmGaming
information whether the gui is currently in gaming mode
bool myShowTimeAsHMS
whether to show time as hour:minute:second
void handleEvent_Message(GUIEvent *e)
std::vector< FXMDIChild * > mySubWindows
static void clearTextures()
clears loaded textures
GUIEventType getOwnType() const
returns the event type
long onCmdOpenRecent(FXObject *, FXSelector, void *)
Called on opening a recent file.
void setActive(size_t scheme)
An error occured during the simulation step.
StringBijection< SUMOVehicleClass > SumoVehicleClassStrings(sumoVehicleClassStringInitializer, SVC_CUSTOM2)
void setRange(FXdouble lo, FXdouble hi)
Change the spinner's range.
Locator configuration - menu entry.
void handleEvent_SimulationEnded(GUIEvent *e)
FXdouble getValue() const
Return current value.
Locate polygons - button.
std::string myConfigPattern
Input file pattern.
long onCmdEditBreakpoints(FXObject *, FXSelector, void *)
Called on menu Edit->Edit Breakpoints.
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.
void setHorizontal(const FXint len)
set/get segment horizontal length - must be more than twice the segment width
FXMenuPane * mySettingsMenu
static void init(FXApp *a)
size_t myViewNumber
The current view number.
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
void load(const std::string &file, bool isNet, bool isReload=false)
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
void setVertical(const FXint len)
set/get segment vertical length - must be more than twice the segment width
FXToolBarShell * myMenuBarDrag
SUMOTime getCurrentSimTime() const
ViewType
Available view types.
virtual void eventOccured()
GUIRunThread * myRunThread
long onCmdListInternal(FXObject *, FXSelector, void *)
Toggle listing of internal structures.
Gaming mode - menu entry.
Perform a single simulation step.
long onUpdReload(FXObject *, FXSelector, void *)
Determines whether reloading is enabled.
long onCmdDelayToggle(FXObject *, FXSelector, void *)
Called on "delay toggle".
const std::string myFile
the name of the loaded file
FXToolBarShell * myToolBarDrag3
The application's "About" - dialog.
void setStatusBarText(const std::string &)
The Simulation delay control.
long onCmdAbout(FXObject *, FXSelector, void *)
Shows the about dialog.
#define CMD_GET_GUI_VARIABLE
FXCursor * getDefaultCursor()
long onCmdClose(FXObject *, FXSelector, void *)
Called on menu File->Close.
void saveViewport(const SUMOReal x, const SUMOReal y, const SUMOReal zoom)
Makes the given viewport the default.
send when a error occured
SVCPermissions getPermissions() const
Returns the vehicle class permissions for this lane.
void dependentBuild(bool game)
void setTarget(FXObject *tgt)
set the target
bool myListInternal
information whether the locator should list internal structures
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
virtual bool simulationIsStopable() const
The dialog to change the application (gui) settings.
Send when the simulation is over; The reason and the time step are stored within the event...
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
Called if the message window shall be cleared.
FXMenuPane * mySelectByPermissions
virtual void fillMenuBar()
Builds the menu bar.
Open a new microscopic 3D view.
A single child window which contains a view of the simulation area.
static bool gQuitOnEnd
the window shall be closed when the simulation has ended
long onCmdGaming(FXObject *, FXSelector, void *)
Toggle gaming mode.
FXStatusBar * myStatusbar
The status bar.
void appendText(GUIEventType eType, const std::string &msg)
Adds new text to the window.
void unlock()
release mutex lock
FXMenuBar * myMenuBar
The application menu bar.
FXMenuPane * myWindowsMenu
FXToolBarShell * myToolBarDrag5
FXGLCanvas * getBuildGLCanvas() const
static void openSocket(const std::map< int, CmdExecutor > &execs)
Initialises the server.
Locate addtional structure - button.
long onCmdOpenConfiguration(FXObject *, FXSelector, void *)
Called on menu File->Open Configuration.
long onRunThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the simulation thread.
void setGroove(const FXint width)
set/get groove width - must be less than segment width
FXLabel * myCartesianCoordinate
Labels for the current cartesian and geo-coordinate.
void prepareDestruction()
FXDEFMAP(GUIApplicationWindow) GUIApplicationWindowMap[]
MFXMutex myTrackerLock
A lock to make the removal and addition of trackers secure.
void setSelector(FXSelector sel)
set the selector
void updateTimeLCD(const SUMOTime time)
updates the simulation time display
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.
FXRealSpinDial * mySimDelayTarget
FXHorizontalFrame * myGeoFrame
static size_t dictSize()
Returns the number of edges.
FXRecentFiles myRecentConfigs
List of recent config files.
void create()
Creates the widget (and the icons)
void clear()
Clears the list of selected objects.
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
toogle delay between alternative value
FXMDIClient * myMDIClient
The multi view panel.
send when a simulation has been loaded
bool simulationAvailable() const
send when a warning occured
FXToolBar * myToolBar1
The application tool bar.
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
Called on menu File->Open Network.
long onUpdNeedsSimulation(FXObject *, FXSelector, void *)
Determines whether some buttons which require an active simulation may be shown.
SUMOTime getTimeStep() const
Returns the time step the simulation has ended at.
void setIncrements(FXdouble fine, FXdouble norm, FXdouble coarse)
Change all spinner increment.
static const bool gUseMesoSim
An XML-handler for visualisation schemes.
static std::string getStateMessage(SimulationState state)
Returns the message to show if a certain state occurs.
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependance to an optional file name.
long onLoadThreadEvent(FXObject *, FXSelector, void *)
Called on an event from the loading thread.
virtual GUISUMOAbstractView * init(FXGLCanvas *share, GUINet &net, ViewType type)
"Initialises" this window by building the contents
void setText(FXString lbl)
manipulate text in LCD label
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
const SUMOTime myEnd
the time the simulation shall end with
void clear()
Clears the window.
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".
void handleEvent_SimulationStep(GUIEvent *e)
FXEX::FXLCDLabel * myLCDLabel
the simulation step display
FXMenuPane * myControlMenu
GUISelectedStorage gSelected
A global holder of selected objects.
A logging window for the gui.
static bool processGet(TraCIServer &server, tcpip::Storage &inputStorage, tcpip::Storage &outputStorage)
Processes a get value command (Command 0xac: Get GUI Variable)
send when a simulation step has been performed
long onUpdStep(FXObject *, FXSelector, void *)
Determines whether "step" is enabled.
Open a new microscopic view.
static FXIcon * getIcon(GUIIcon which)
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
GUINet * myNet
the loaded net
virtual void addToWindowsMenu(FXMenuPane *)
long onUpdStart(FXObject *sender, FXSelector, void *ptr)
Determines whether "play" is enabled.
The main window of the SUMO-gui.