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