Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/gui/windows/GUIMainWindow.h
169684 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 GUIMainWindow.h
15
/// @author Daniel Krajzewicz
16
/// @author Jakob Erdmann
17
/// @author Michael Behrisch
18
/// @date Fri, 29.04.2005
19
///
20
//
21
/****************************************************************************/
22
#pragma once
23
#include <config.h>
24
25
#include <utils/foxtools/fxheader.h>
26
#include <vector>
27
#include <string>
28
#include <map>
29
#include <utils/common/StdDefs.h>
30
#include <utils/common/SUMOTime.h>
31
#include "GUIAppEnum.h"
32
33
34
// ===========================================================================
35
// class declarations
36
// ===========================================================================
37
class GUIEvent;
38
class GUIGlChildWindow;
39
class GUISUMOAbstractView;
40
class MFXStaticToolTip;
41
42
43
// ===========================================================================
44
// class definitions
45
// ===========================================================================
46
class GUIMainWindow : public FXMainWindow {
47
48
public:
49
/// @brief constructor
50
GUIMainWindow(FXApp* app);
51
52
/// @brief destructor
53
virtual ~GUIMainWindow();
54
55
/// @brief Adds a further child window to the list (GUIGlChildWindow)
56
void addGLChild(GUIGlChildWindow* child);
57
58
/// @brief Adds a further child window to the list (FXMainWindow)
59
void addChild(FXMainWindow* child);
60
61
/// @brief removes the given child window from the list (GUIGlChildWindow)
62
void removeGLChild(GUIGlChildWindow* child);
63
64
/// @brief removes the given child window from the list (FXMainWindow)
65
void removeChild(FXMainWindow* child);
66
67
/// @brief get top dock
68
FXDockSite* getTopDock();
69
70
/// @brief get view IDs
71
std::vector<std::string> getViewIDs() const;
72
73
/// @brief get specific view by ID
74
GUIGlChildWindow* getViewByID(const std::string& id) const;
75
76
void removeViewByID(const std::string& id);
77
78
/// @brief get views
79
const std::vector<GUIGlChildWindow*>& getViews() const;
80
81
/// @brief update childrens
82
void updateChildren(int msg = MID_SIMSTEP);
83
84
/// @brief get bold front
85
FXFont* getBoldFont();
86
87
/// @brief get fallback front
88
FXFont* getFallbackFont();
89
90
/// @brief get GL Visual
91
FXGLVisual* getGLVisual() const;
92
93
/// @brief get static toolTip for menus
94
MFXStaticToolTip* getStaticTooltipMenu() const;
95
96
/// @brief get static toolTip for view
97
MFXStaticToolTip* getStaticTooltipView() const;
98
99
/// @brief get build GL Canvas (must be implemented in all children)
100
virtual FXGLCanvas* getBuildGLCanvas() const = 0;
101
102
/// @brief get current sim time (must be implemented in all children)
103
virtual SUMOTime getCurrentSimTime() const = 0;
104
105
/// @brief get tracker interval (must be implemented in all children)
106
virtual double getTrackerInterval() const = 0;
107
108
/// @brief get status bar text (can be implemented in children)
109
virtual void setStatusBarText(const std::string&) { }
110
111
/// @brief get cartesian label
112
FXLabel* getCartesianLabel();
113
114
/// @brief get geo label
115
FXLabel* getGeoLabel();
116
117
/// @brief get test label
118
FXLabel* getTestLabel();
119
120
/// @brief get test frame
121
FXHorizontalFrame* getTestFrame();
122
123
/// @brief return whether the gui is in gaming mode
124
bool isGaming() const;
125
126
/// @brief return whether to list internal structures
127
bool listInternal() const;
128
129
/// @brief return whether to list parking vehicles
130
bool listParking() const;
131
132
/// @brief return whether to list teleporting vehicles
133
bool listTeleporting() const;
134
135
/// @brief get instance
136
static GUIMainWindow* getInstance();
137
138
/** @brief Returns the delay (should be overwritten by subclasses if applicable)
139
* @return parsed delay in milliseconds
140
*/
141
virtual double getDelay() const {
142
return 0.;
143
}
144
145
/// @brief Sets the delay of the parent application
146
virtual void setDelay(double) {}
147
148
/// @brief Sets the breakpoints of the parent application
149
virtual void setBreakpoints(const std::vector<SUMOTime>&) {}
150
151
/** @brief Sends an event from the application thread to the GUI and waits until it is handled
152
* @param event the event to send
153
*/
154
virtual void sendBlockingEvent(GUIEvent* event) {
155
UNUSED_PARAMETER(event);
156
}
157
158
/// @brief get the active view or 0
159
GUISUMOAbstractView* getActiveView() const;
160
161
/// @brief Toggle full screen mode
162
virtual long onCmdFullScreen(FXObject*, FXSelector, void*) {
163
return 1;
164
}
165
166
bool isFullScreen() {
167
return myAmFullScreen;
168
}
169
170
const std::map<std::string, std::string>& getOnlineMaps() const {
171
return myOnlineMaps;
172
}
173
174
void addOnlineMap(const std::string& name, const std::string& url) {
175
myOnlineMaps[name] = url;
176
}
177
178
/// @brief add breakpoint to the application
179
virtual void addBreakpoint(SUMOTime /* time */) {}
180
181
/// @brief retrieve breakpoints if provided by the application
182
virtual const std::vector<SUMOTime> retrieveBreakpoints() const {
183
return std::vector<SUMOTime>();
184
}
185
186
// @brief called when changes language
187
long onCmdChangeLanguage(FXObject*, FXSelector, void*);
188
189
// @brief called when language is updated
190
long onUpdChangeLanguage(FXObject*, FXSelector, void*);
191
192
protected:
193
/// @brief FOX need this
194
FOX_CONSTRUCTOR(GUIMainWindow)
195
196
/// @brief whether to show the window in full screen mode
197
bool myAmFullScreen;
198
199
/// @brief list of GLWindows
200
std::vector<GUIGlChildWindow*> myGLWindows;
201
202
/// @brief list of tracker windows
203
std::vector<FXMainWindow*> myTrackerWindows;
204
205
/// @brief A lock to make the removal and addition of trackers secure
206
FXMutex myTrackerLock;
207
208
/// @brief Font used for popup-menu titles
209
FXFont* myBoldFont = nullptr;
210
211
/// @brief Fallback font for extended characters support
212
FXFont* myFallbackFont = nullptr;
213
214
/// @brief The multi view panel
215
FXMDIClient* myMDIClient = nullptr;
216
217
/// @brief The status bar
218
FXStatusBar* myStatusbar = nullptr;
219
220
/// @brief Labels for the current cartesian, geo-coordinate and test coordinates
221
FXLabel* myCartesianCoordinate = nullptr;
222
FXLabel* myGeoCoordinate = nullptr;
223
FXLabel* myTestCoordinate = nullptr;
224
225
/// @brief frames for coordinates
226
FXHorizontalFrame* myTraCiFrame = nullptr;
227
FXHorizontalFrame* myCartesianFrame = nullptr;
228
FXHorizontalFrame* myGeoFrame = nullptr;
229
FXHorizontalFrame* myTestFrame = nullptr;
230
231
/// @brief The gl-visual used
232
FXGLVisual* myGLVisual = nullptr;
233
234
/// @brief dock sites
235
FXDockSite* myTopDock = nullptr;
236
FXDockSite* myBottomDock = nullptr;
237
FXDockSite* myLeftDock = nullptr;
238
FXDockSite* myRightDock = nullptr;
239
240
/// @brief Language menu common to all applications
241
FXMenuPane* myLanguageMenu = nullptr;
242
243
/// @brief static toolTip used in menus
244
MFXStaticToolTip* myStaticTooltipMenu = nullptr;
245
246
/// @brief static toolTip used in view
247
MFXStaticToolTip* myStaticTooltipView = nullptr;
248
249
/// @brief information whether the gui is currently in gaming mode
250
bool myAmGaming;
251
252
/// @brief information whether the locator should list internal structures
253
bool myListInternal;
254
255
/// @brief information whether the locator should list parking vehicles
256
bool myListParking;
257
258
/// @brief information whether the locator should list teleporting vehicles
259
bool myListTeleporting;
260
261
/// @brief online mapping services for the context menu
262
std::map<std::string, std::string> myOnlineMaps;
263
264
/// @brief the singleton window instance
265
static GUIMainWindow* myInstance;
266
267
/// @brief perform initial window positioning and sizing according to user options / previous call
268
void setWindowSizeAndPos();
269
270
/// @brief record window position and size in registry
271
void storeWindowSizeAndPos();
272
273
void buildLanguageMenu(FXMenuBar* menuBar);
274
275
};
276
277