-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathguisim_main.cpp
119 lines (112 loc) · 4.39 KB
/
guisim_main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/****************************************************************************/
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
// Copyright (C) 2001-2023 German Aerospace Center (DLR) and others.
// This program and the accompanying materials are made available under the
// terms of the Eclipse Public License 2.0 which is available at
// https://www.eclipse.org/legal/epl-2.0/
// This Source Code may also be made available under the following Secondary
// Licenses when the conditions for such availability set forth in the Eclipse
// Public License 2.0 are satisfied: GNU General Public License, version 2
// or later which is available at
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
/****************************************************************************/
/// @file guisim_main.cpp
/// @author Daniel Krajzewicz
/// @author Jakob Erdmann
/// @author Michael Behrisch
/// @author Felix Brack
/// @date Tue, 20 Nov 2001
///
// Main for GUISIM
/****************************************************************************/
#include <config.h>
#ifdef HAVE_VERSION_H
#include <version.h>
#endif
#include <ctime>
#include <signal.h>
#include <iostream>
#include <microsim/MSFrame.h>
#include <microsim/MSNet.h>
#include <utils/options/Option.h>
#include <utils/options/OptionsCont.h>
#include <utils/options/OptionsIO.h>
#include <utils/common/UtilExceptions.h>
#include <utils/common/FileHelpers.h>
#include <utils/common/MsgHandler.h>
#include <utils/common/SystemFrame.h>
#include <utils/foxtools/MsgHandlerSynchronized.h>
#include <utils/xml/XMLSubSys.h>
#include <gui/GUIApplicationWindow.h>
#include <utils/gui/windows/GUIAppEnum.h>
#include <utils/gui/settings/GUICompleteSchemeStorage.h>
#include <traci-server/TraCIServer.h>
// ===========================================================================
// main function
// ===========================================================================
int
main(int argc, char** argv) {
// make the output aware of threading
MsgHandler::setFactory(&MsgHandlerSynchronized::create);
OptionsCont& oc = OptionsCont::getOptions();
oc.setApplicationDescription(TL("GUI version of the microscopic, multi-modal traffic simulation SUMO."));
oc.setApplicationName("sumo-gui", "Eclipse SUMO GUI Version " VERSION_STRING);
gSimulation = true;
int ret = 0;
try {
// initialise subsystems
XMLSubSys::init();
MSFrame::fillOptions();
OptionsIO::setArgs(argc, argv);
OptionsIO::getOptions(true);
if (oc.processMetaOptions(false)) {
SystemFrame::close();
return 0;
}
// Make application
FXApp application("SUMO GUI", "sumo-gui");
// Open display
application.init(argc, argv);
int minor, major;
if (!FXGLVisual::supported(&application, major, minor)) {
throw ProcessError(TL("This system has no OpenGL support. Exiting."));
}
// build the main window
GUIApplicationWindow* window = new GUIApplicationWindow(&application, "*.sumo.cfg,*.sumocfg");
gLanguage = oc.getString("language");
gSchemeStorage.init(&application);
window->dependentBuild(false);
// Create app
application.addSignal(SIGINT, window, MID_HOTKEY_CTRL_Q_CLOSE);
application.create();
// Load configuration given on command line
if (argc > 1) {
window->loadOnStartup();
}
// Run
window->setFocus();
ret = application.run();
} catch (const ProcessError& e) {
if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
WRITE_ERROR(e.what());
}
MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
ret = 1;
#ifndef _DEBUG
} catch (const std::exception& e) {
if (std::string(e.what()) != std::string("")) {
WRITE_ERROR(e.what());
}
MsgHandler::getErrorInstance()->inform("Quitting (on error).", false);
ret = 1;
} catch (...) {
MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false);
ret = 1;
#endif
}
TraCIServer::close();
SystemFrame::close();
return ret;
}
/****************************************************************************/