Eclipse SUMO - Simulation of Urban MObility
guisim_main.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2001-2020 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
21 // Main for GUISIM
22 /****************************************************************************/
23 #include <config.h>
24 
25 #ifdef HAVE_VERSION_H
26 #include <version.h>
27 #endif
28 
29 #include <ctime>
30 #include <signal.h>
31 #include <iostream>
32 #include <microsim/MSFrame.h>
33 #include <microsim/MSNet.h>
34 #include <utils/options/Option.h>
42 #include <utils/xml/XMLSubSys.h>
47 
48 
49 // ===========================================================================
50 // main function
51 // ===========================================================================
52 int
53 main(int argc, char** argv) {
54  // make the output aware of threading
56  // get the options
58  // give some application descriptions
59  oc.setApplicationDescription("GUI version of the microscopic, multi-modal traffic simulation SUMO.");
60  oc.setApplicationName("sumo-gui", "Eclipse SUMO GUI Version " VERSION_STRING);
61  gSimulation = true;
62  int ret = 0;
63  try {
64  // initialise subsystems
67  OptionsIO::setArgs(argc, argv);
69  if (oc.processMetaOptions(false)) {
71  return 0;
72  }
73  // Make application
74  FXApp application("SUMO GUI", "Eclipse");
75  // Open display
76  application.init(argc, argv);
77  int minor, major;
78  if (!FXGLVisual::supported(&application, major, minor)) {
79  throw ProcessError("This system has no OpenGL support. Exiting.");
80  }
81 
82  // build the main window
83  GUIApplicationWindow* window =
84  new GUIApplicationWindow(&application, "*.sumo.cfg,*.sumocfg");
85  gSchemeStorage.init(&application);
86  window->dependentBuild();
87  // Create app
88  application.addSignal(SIGINT, window, MID_HOTKEY_CTRL_Q_CLOSE);
89  application.create();
90  // Load configuration given on command line
91  if (argc > 1) {
92  window->loadOnStartup();
93  }
94  // Run
95  ret = application.run();
96  } catch (const ProcessError& e) {
97  if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
98  WRITE_ERROR(e.what());
99  }
100  MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
101  ret = 1;
102 #ifndef _DEBUG
103  } catch (const std::exception& e) {
104  if (std::string(e.what()) != std::string("")) {
105  WRITE_ERROR(e.what());
106  }
107  MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
108  ret = 1;
109  } catch (...) {
110  MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false);
111  ret = 1;
112 #endif
113  }
116  return ret;
117 }
118 
119 
120 /****************************************************************************/
@ MID_HOTKEY_CTRL_Q_CLOSE
Main window closes.
Definition: GUIAppEnum.h:99
GUICompleteSchemeStorage gSchemeStorage
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:284
bool gSimulation
Definition: StdDefs.cpp:28
The main window of the SUMO-gui.
void init(FXApp *app, bool netedit=false)
Initialises the storage with some default settings.
static void fillOptions()
Inserts options used by the simulation into the OptionsCont-singleton.
Definition: MSFrame.cpp:59
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
Definition: MsgHandler.cpp:80
virtual void inform(std::string msg, bool addType=true)
adds a new error to the list
Definition: MsgHandler.cpp:117
static void setFactory(Factory func)
Sets the factory function to use for new MsgHandlers.
Definition: MsgHandler.h:61
static MsgHandler * create(MsgType type)
A storage for options typed value containers)
Definition: OptionsCont.h:89
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:58
bool processMetaOptions(bool missingOptions)
Checks for help and configuration output, returns whether we should exit.
static void setArgs(int argc, char **argv)
Stores the command line arguments for later parsing.
Definition: OptionsIO.cpp:58
static void getOptions(const bool commandLineOnly=false)
Parses the command line arguments and loads the configuration.
Definition: OptionsIO.cpp:79
static void close()
Closes all of an applications subsystems.
static void close()
request termination of connection
static void init()
Initialises the xml-subsystem.
Definition: XMLSubSys.cpp:54
int main(int argc, char **argv)
Definition: guisim_main.cpp:53