Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/utils/gui/windows/GUIGlChildWindow.cpp
169685 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 GUIGlChildWindow.cpp
15
/// @author Daniel Krajzewicz
16
/// @author Jakob Erdmann
17
/// @author Michael Behrisch
18
/// @date Tue, 29.05.2005
19
///
20
//
21
/****************************************************************************/
22
#include <config.h>
23
24
#include <utils/common/MsgHandler.h>
25
#include <utils/foxtools/MFXButtonTooltip.h>
26
#include <utils/foxtools/MFXCheckableButton.h>
27
#include <utils/foxtools/MFXMenuButtonTooltip.h>
28
#include <utils/foxtools/MFXStaticToolTip.h>
29
#include <utils/gui/div/GUIDesigns.h>
30
#include <utils/gui/div/GUIGlobalSelection.h>
31
#include <utils/gui/images/GUIIconSubSys.h>
32
#include <utils/gui/windows/GUIAppEnum.h>
33
#include <utils/gui/windows/GUIMainWindow.h>
34
35
#include "GUIGlChildWindow.h"
36
37
38
// ===========================================================================
39
// FOX callback mapping
40
// ===========================================================================
41
42
FXDEFMAP(GUIGlChildWindow) GUIGlChildWindowMap[] = {
43
FXMAPFUNC(SEL_COMMAND, MID_RECENTERVIEW, GUIGlChildWindow::onCmdRecenterView),
44
FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_I_EDITVIEWPORT, GUIGlChildWindow::onCmdEditViewport),
45
FXMAPFUNC(SEL_COMMAND, MID_SHOWTOOLTIPS_VIEW, GUIGlChildWindow::onCmdShowToolTipsView),
46
FXMAPFUNC(SEL_COMMAND, MID_SHOWTOOLTIPS_MENU, GUIGlChildWindow::onCmdShowToolTipsMenu),
47
FXMAPFUNC(SEL_COMMAND, MID_ZOOM_STYLE, GUIGlChildWindow::onCmdZoomStyle),
48
FXMAPFUNC(SEL_COMMAND, MID_COLORSCHEMECHANGE, GUIGlChildWindow::onCmdChangeColorScheme),
49
FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_F9_EDIT_VIEWSCHEME, GUIGlChildWindow::onCmdEditViewScheme),
50
};
51
52
FXIMPLEMENT(GUIGlChildWindow, FXMDIChild, GUIGlChildWindowMap, ARRAYNUMBER(GUIGlChildWindowMap))
53
54
// ===========================================================================
55
// member method definitions
56
// ===========================================================================
57
58
GUIGlChildWindow::GUIGlChildWindow(FXMDIClient* p, GUIMainWindow* GUIMainWindowParent, FXMDIMenu* mdimenu,
59
const FXString& name, FXMenuBar* gripNavigationToolbar, FXIcon* ic, FXuint opts, FXint x, FXint y, FXint w, FXint h) :
60
FXMDIChild(p, name, ic, mdimenu, opts, x, y, w, h),
61
myGUIMainWindowParent(GUIMainWindowParent),
62
myGripNavigationToolbar(gripNavigationToolbar),
63
myStaticNavigationToolBar(nullptr),
64
myView(nullptr) {
65
// Make MDI Window Menu
66
setTracking();
67
// create a vertical frame to add elements
68
myChildWindowContentFrame = new FXVerticalFrame(this, GUIDesignChildWindowContentFrame);
69
// if menuBarGripElements isn't NULL, use it to create a grip navigation elements. In other cas, create a static FXToolbar
70
if (myGripNavigationToolbar == nullptr) {
71
myStaticNavigationToolBar = new FXToolBar(myChildWindowContentFrame, GUIDesignToolbarMenuBar);
72
}
73
// build the tool bars
74
buildNavigationToolBar(); // always there (recenter)
75
buildColoringToolBar(); // always there (coloring)
76
buildScreenshotToolBar(); // always there (screenshot)
77
}
78
79
80
GUIGlChildWindow::~GUIGlChildWindow() {
81
delete myLocatorPopup;
82
// only delete static navigation bar if it was created
83
if (myStaticNavigationToolBar) {
84
delete myStaticNavigationToolBar;
85
}
86
}
87
88
89
void
90
GUIGlChildWindow::create() {
91
FXMDIChild::create();
92
// only create static navigation bar if it was created
93
if (myStaticNavigationToolBar) {
94
myStaticNavigationToolBar->create();
95
} else {
96
myGripNavigationToolbar->create();
97
}
98
myLocatorPopup->create();
99
myView->create();
100
}
101
102
103
GUISUMOAbstractView*
104
GUIGlChildWindow::getView() const {
105
return myView;
106
}
107
108
109
GUIMainWindow*
110
GUIGlChildWindow::getGUIMainWindowParent() {
111
return myGUIMainWindowParent;
112
}
113
114
115
void
116
GUIGlChildWindow::buildNavigationToolBar() {
117
// build the view settings
118
// recenter view
119
new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
120
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Recenter View") + std::string("\t") + TL("Recenter view to the simulated area.")).c_str(),
121
GUIIconSubSys::getIcon(GUIIcon::RECENTERVIEW), this, MID_RECENTERVIEW, GUIDesignButtonToolbar);
122
// add viewport button
123
new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
124
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TLC("Labels", "Edit Viewport") + std::string("\t") + TL("Opens a menu which lets you edit the viewport. (Ctrl+I)")).c_str(),
125
GUIIconSubSys::getIcon(GUIIcon::EDITVIEWPORT), this, MID_HOTKEY_CTRL_I_EDITVIEWPORT, GUIDesignButtonToolbar);
126
// toggle button for zooming style
127
myZoomStyle = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
128
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Toggle Zooming Style") + std::string("\t") + TL("Toggles whether zooming is based at cursor position or at the center of the view.")).c_str(),
129
GUIIconSubSys::getIcon(GUIIcon::ZOOMSTYLE), this, MID_ZOOM_STYLE, GUIDesignMFXCheckableButtonSquare);
130
myZoomStyle->setChecked(getApp()->reg().readIntEntry("gui", "zoomAtCenter", 0) != 1);
131
// build the locator popup
132
myLocatorPopup = new FXPopup(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, POPUP_VERTICAL);
133
// build locator button
134
myLocatorButton = new MFXMenuButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
135
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Locate Structures") + std::string("\t") + TL("Locate structures within the network.")).c_str(),
136
GUIIconSubSys::getIcon(GUIIcon::LOCATE), myLocatorPopup, nullptr, GUIDesignButtonToolbarLocator);
137
// add toggle button for tooltips in view on/off (by default unchecked)
138
myShowToolTipsView = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
139
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Toggle View Tooltips") + std::string("\t") + TL("Toggles whether tooltips in the view shall be shown.")).c_str(),
140
GUIIconSubSys::getIcon(GUIIcon::SHOWTOOLTIPS_VIEW), this, MID_SHOWTOOLTIPS_VIEW, GUIDesignMFXCheckableButtonSquare);
141
myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(false);
142
myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(false);
143
// add toggle button for tooltips in menu on/off (by default checked)
144
myShowToolTipsMenu = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
145
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Toggle Menu Tooltips") + std::string("\t") + TL("Toggles whether tooltips in the menu shall be shown.")).c_str(),
146
GUIIconSubSys::getIcon(GUIIcon::SHOWTOOLTIPS_MENU), this, MID_SHOWTOOLTIPS_MENU, GUIDesignMFXCheckableButtonSquare);
147
myShowToolTipsMenu->setChecked(getApp()->reg().readIntEntry("gui", "menuToolTips", 0) != 1);
148
myGUIMainWindowParent->getStaticTooltipMenu()->enableStaticToolTip(myShowToolTipsMenu->amChecked());
149
}
150
151
152
void
153
GUIGlChildWindow::buildColoringToolBar() {
154
// Create Vertical separator
155
new FXVerticalSeparator(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, GUIDesignVerticalSeparator);
156
// build coloring tools
157
myColoringSchemes = new MFXComboBoxIcon(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, nullptr,
158
false, GUIDesignComboBoxVisibleItems, this, MID_COLORSCHEMECHANGE, GUIDesignComboBoxStatic);
159
// editor
160
new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
161
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Edit Coloring Schemes") + std::string("\t") + TL("Opens a menu which lets you edit the coloring schemes. (F9)")).c_str(),
162
GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), this, MID_HOTKEY_F9_EDIT_VIEWSCHEME, GUIDesignButtonToolbar);
163
}
164
165
166
void
167
GUIGlChildWindow::buildScreenshotToolBar() {
168
// Create Vertical separator
169
new FXVerticalSeparator(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, GUIDesignVerticalSeparator);
170
// snapshot
171
new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
172
myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Make Snapshot") + std::string("\t") + TL("Makes a snapshot of the view.")).c_str(),
173
GUIIconSubSys::getIcon(GUIIcon::CAMERA), this, MID_MAKESNAPSHOT, GUIDesignButtonToolbar);
174
}
175
176
177
FXGLCanvas*
178
GUIGlChildWindow::getBuildGLCanvas() const {
179
return myView;
180
}
181
182
183
FXToolBar*
184
GUIGlChildWindow::getNavigationToolBar(GUISUMOAbstractView&) {
185
return myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar;
186
}
187
188
189
FXPopup*
190
GUIGlChildWindow::getLocatorPopup() {
191
return myLocatorPopup;
192
}
193
194
195
MFXComboBoxIcon*
196
GUIGlChildWindow::getColoringSchemesCombo() {
197
return myColoringSchemes;
198
}
199
200
201
MFXCheckableButton*
202
GUIGlChildWindow::getShowToolTipsMenu() const {
203
return myShowToolTipsMenu;
204
}
205
206
207
long
208
GUIGlChildWindow::onCmdRecenterView(FXObject*, FXSelector, void*) {
209
myView->recenterView();
210
myView->update();
211
return 1;
212
}
213
214
215
long
216
GUIGlChildWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
217
myView->showViewportEditor();
218
return 1;
219
}
220
221
222
long
223
GUIGlChildWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
224
myView->showViewschemeEditor();
225
return 1;
226
}
227
228
229
long
230
GUIGlChildWindow::onCmdShowToolTipsView(FXObject*, FXSelector, void*) {
231
// toggle check
232
myShowToolTipsView->setChecked(!myShowToolTipsView->amChecked());
233
// enable/disable static tooltip
234
myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(myShowToolTipsView->amChecked());
235
update();
236
return 1;
237
}
238
239
240
long
241
GUIGlChildWindow::onCmdShowToolTipsMenu(FXObject*, FXSelector, void*) {
242
// toggle check
243
myShowToolTipsMenu->setChecked(!myShowToolTipsMenu->amChecked());
244
// enable/disable static tooltip
245
myGUIMainWindowParent->getStaticTooltipMenu()->enableStaticToolTip(myShowToolTipsMenu->amChecked());
246
// save in registry
247
getApp()->reg().writeIntEntry("gui", "menuToolTips", myShowToolTipsMenu->amChecked() ? 0 : 1);
248
update();
249
return 1;
250
}
251
252
253
long
254
GUIGlChildWindow::onCmdZoomStyle(FXObject*, FXSelector, void*) {
255
myZoomStyle->setChecked(!myZoomStyle->amChecked());
256
getApp()->reg().writeIntEntry("gui", "zoomAtCenter", myZoomStyle->amChecked() ? 0 : 1);
257
update();
258
myView->update();
259
return 1;
260
}
261
262
263
long
264
GUIGlChildWindow::onCmdChangeColorScheme(FXObject*, FXSelector, void* ptr) {
265
myView->setColorScheme((char*) ptr);
266
return 1;
267
}
268
269
270
void
271
GUIGlChildWindow::setView(GUIGlID id) {
272
// this is used by the locator widget. zooming to bounding box
273
myView->centerTo(id, true, -1);
274
myView->update();
275
}
276
277
278
bool
279
GUIGlChildWindow::isSelected(GUIGlObject* o) const {
280
return gSelected.isSelected(o->getType(), o->getGlID());
281
}
282
283
/****************************************************************************/
284
285