Line data Source code
1 : /****************************************************************************/ 2 : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo 3 : // Copyright (C) 2001-2024 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 : /****************************************************************************/ 14 : /// @file guisim_main.cpp 15 : /// @author Daniel Krajzewicz 16 : /// @author Jakob Erdmann 17 : /// @author Michael Behrisch 18 : /// @author Felix Brack 19 : /// @date Tue, 20 Nov 2001 20 : /// 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> 35 : #include <utils/options/OptionsCont.h> 36 : #include <utils/options/OptionsIO.h> 37 : #include <utils/common/UtilExceptions.h> 38 : #include <utils/common/FileHelpers.h> 39 : #include <utils/common/MsgHandler.h> 40 : #include <utils/common/SystemFrame.h> 41 : #include <utils/foxtools/MsgHandlerSynchronized.h> 42 : #include <utils/xml/XMLSubSys.h> 43 : #include <gui/GUIApplicationWindow.h> 44 : #include <utils/gui/windows/GUIAppEnum.h> 45 : #include <utils/gui/settings/GUICompleteSchemeStorage.h> 46 : #include <traci-server/TraCIServer.h> 47 : 48 : 49 : // =========================================================================== 50 : // main function 51 : // =========================================================================== 52 : int 53 6802 : main(int argc, char** argv) { 54 : // make the output aware of threading 55 : MsgHandler::setFactory(&MsgHandlerSynchronized::create); 56 6802 : OptionsCont& oc = OptionsCont::getOptions(); 57 6802 : oc.setApplicationDescription(TL("GUI version of the microscopic, multi-modal traffic simulation SUMO.")); 58 13604 : oc.setApplicationName("sumo-gui", "Eclipse SUMO GUI Version " VERSION_STRING); 59 6802 : gSimulation = true; 60 : // preload registry from sumo to decide on language 61 13604 : FXRegistry reg("SUMO GUI", "sumo-gui"); 62 6802 : reg.read(); 63 6802 : gLanguage = reg.readStringEntry("gui", "language", gLanguage.c_str()); 64 : int ret = 0; 65 : try { 66 : // initialise subsystems 67 6802 : XMLSubSys::init(); 68 6802 : MSFrame::fillOptions(); 69 6802 : OptionsIO::setArgs(argc, argv); 70 6802 : OptionsIO::getOptions(true); 71 6790 : if (oc.processMetaOptions(false)) { 72 0 : SystemFrame::close(); 73 0 : return 0; 74 : } 75 : // Make application 76 13580 : FXApp application("SUMO GUI", "sumo-gui"); 77 : // Open display 78 6790 : application.init(argc, argv); 79 : int minor, major; 80 6790 : if (!FXGLVisual::supported(&application, major, minor)) { 81 0 : throw ProcessError(TL("This system has no OpenGL support. Exiting.")); 82 : } 83 : 84 : // build the main window 85 6790 : GUIApplicationWindow* window = new GUIApplicationWindow(&application, "*.sumo.cfg,*.sumocfg"); 86 13580 : gLanguage = oc.getString("language"); 87 6790 : gSchemeStorage.init(&application); 88 6790 : window->dependentBuild(false); 89 : // Create app 90 6790 : application.addSignal(SIGINT, window, MID_HOTKEY_CTRL_Q_CLOSE); 91 6790 : application.create(); 92 : // Load configuration given on command line 93 6790 : if (argc > 1) { 94 6790 : window->loadOnStartup(); 95 : } 96 : // Run 97 6790 : window->setFocus(); 98 6790 : ret = application.run(); 99 6802 : } catch (const ProcessError& e) { 100 48 : if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) { 101 24 : WRITE_ERROR(e.what()); 102 : } 103 12 : MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); 104 : ret = 1; 105 : #ifndef _DEBUG 106 12 : } catch (const std::exception& e) { 107 0 : if (std::string(e.what()) != std::string("")) { 108 0 : WRITE_ERROR(e.what()); 109 : } 110 0 : MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); 111 : ret = 1; 112 0 : } catch (...) { 113 0 : MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false); 114 : ret = 1; 115 : #endif 116 0 : } 117 6802 : TraCIServer::close(); 118 6802 : SystemFrame::close(); 119 : return ret; 120 6802 : } 121 : 122 : 123 : /****************************************************************************/