Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/guisim_main.cpp
169649 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 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
main(int argc, char** argv) {
54
// make the output aware of threading
55
MsgHandler::setFactory(&MsgHandlerSynchronized::create);
56
OptionsCont& oc = OptionsCont::getOptions();
57
oc.setApplicationDescription(TL("GUI version of the microscopic, multi-modal traffic simulation SUMO."));
58
oc.setApplicationName("sumo-gui", "Eclipse SUMO GUI " VERSION_STRING);
59
gSimulation = true;
60
// preload registry from sumo to decide on language
61
FXRegistry reg("SUMO GUI", "sumo-gui");
62
reg.read();
63
gLanguage = reg.readStringEntry("gui", "language", gLanguage.c_str());
64
int ret = 0;
65
try {
66
// initialise subsystems
67
XMLSubSys::init();
68
MSFrame::fillOptions();
69
OptionsIO::setArgs(argc, argv);
70
OptionsIO::getOptions(true);
71
if (oc.processMetaOptions(false)) {
72
SystemFrame::close();
73
return 0;
74
}
75
// Make application
76
FXApp application("SUMO GUI", "sumo-gui");
77
// Open display
78
application.init(argc, argv);
79
int minor, major;
80
if (!FXGLVisual::supported(&application, major, minor)) {
81
throw ProcessError(TL("This system has no OpenGL support. Exiting."));
82
}
83
84
// build the main window
85
GUIApplicationWindow* window = new GUIApplicationWindow(&application);
86
gLanguage = oc.getString("language");
87
gSchemeStorage.init(&application);
88
window->dependentBuild(false);
89
// Create app
90
application.addSignal(SIGINT, window, MID_HOTKEY_CTRL_Q_CLOSE);
91
application.create();
92
// Load configuration given on command line
93
if (argc > 1) {
94
window->loadOnStartup();
95
}
96
// Run
97
window->setFocus();
98
ret = application.run();
99
} catch (const ProcessError& e) {
100
if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
101
WRITE_ERROR(e.what());
102
}
103
MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
104
ret = 1;
105
#ifndef _DEBUG
106
} catch (const std::exception& e) {
107
if (std::string(e.what()) != std::string("")) {
108
WRITE_ERROR(e.what());
109
}
110
MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
111
ret = 1;
112
} catch (...) {
113
MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false);
114
ret = 1;
115
#endif
116
}
117
TraCIServer::close();
118
SystemFrame::close();
119
return ret;
120
}
121
122
123
/****************************************************************************/
124
125