LCOV - code coverage report
Current view: top level - src/utils/gui/windows - GUIGlChildWindow.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 65.3 % 118 77
Test Date: 2025-11-13 15:38:19 Functions: 48.0 % 25 12

            Line data    Source code
       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      9873005 : FXIMPLEMENT(GUIGlChildWindow, FXMDIChild, GUIGlChildWindowMap, ARRAYNUMBER(GUIGlChildWindowMap))
      53              : 
      54              : // ===========================================================================
      55              : // member method definitions
      56              : // ===========================================================================
      57              : 
      58         7547 : GUIGlChildWindow::GUIGlChildWindow(FXMDIClient* p, GUIMainWindow* GUIMainWindowParent, FXMDIMenu* mdimenu,
      59         7547 :                                    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         7547 :     myGUIMainWindowParent(GUIMainWindowParent),
      62         7547 :     myGripNavigationToolbar(gripNavigationToolbar),
      63         7547 :     myStaticNavigationToolBar(nullptr),
      64         7547 :     myView(nullptr) {
      65              :     // Make MDI Window Menu
      66         7547 :     setTracking();
      67              :     // create a vertical frame to add elements
      68         7547 :     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         7547 :     if (myGripNavigationToolbar == nullptr) {
      71         7547 :         myStaticNavigationToolBar = new FXToolBar(myChildWindowContentFrame, GUIDesignToolbarMenuBar);
      72              :     }
      73              :     // build the tool bars
      74         7547 :     buildNavigationToolBar(); // always there (recenter)
      75         7547 :     buildColoringToolBar(); // always there (coloring)
      76         7547 :     buildScreenshotToolBar(); // always there (screenshot)
      77         7547 : }
      78              : 
      79              : 
      80         7531 : GUIGlChildWindow::~GUIGlChildWindow() {
      81         7531 :     delete myLocatorPopup;
      82              :     // only delete static navigation bar if it was created
      83         7531 :     if (myStaticNavigationToolBar) {
      84         7531 :         delete myStaticNavigationToolBar;
      85              :     }
      86         7531 : }
      87              : 
      88              : 
      89              : void
      90         7547 : GUIGlChildWindow::create() {
      91         7547 :     FXMDIChild::create();
      92              :     // only create static navigation bar if it was created
      93         7546 :     if (myStaticNavigationToolBar) {
      94         7546 :         myStaticNavigationToolBar->create();
      95              :     } else {
      96            0 :         myGripNavigationToolbar->create();
      97              :     }
      98         7546 :     myLocatorPopup->create();
      99         7546 :     myView->create();
     100         7546 : }
     101              : 
     102              : 
     103              : GUISUMOAbstractView*
     104      6475027 : GUIGlChildWindow::getView() const {
     105      6475027 :     return myView;
     106              : }
     107              : 
     108              : 
     109              : GUIMainWindow*
     110      1293540 : GUIGlChildWindow::getGUIMainWindowParent() {
     111      1293540 :     return myGUIMainWindowParent;
     112              : }
     113              : 
     114              : 
     115              : void
     116         7547 : GUIGlChildWindow::buildNavigationToolBar() {
     117              :     // build the view settings
     118              :     // recenter view
     119         7547 :     new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     120        22641 :                          myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Recenter View") + std::string("\t") + TL("Recenter view to the simulated area.")).c_str(),
     121        15094 :                          GUIIconSubSys::getIcon(GUIIcon::RECENTERVIEW), this, MID_RECENTERVIEW, GUIDesignButtonToolbar);
     122              :     // add viewport button
     123         7547 :     new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     124        30188 :                          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        15094 :                          GUIIconSubSys::getIcon(GUIIcon::EDITVIEWPORT), this, MID_HOTKEY_CTRL_I_EDITVIEWPORT, GUIDesignButtonToolbar);
     126              :     // toggle button for zooming style
     127         7547 :     myZoomStyle = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     128        22641 :                                          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        15094 :                                          GUIIconSubSys::getIcon(GUIIcon::ZOOMSTYLE), this, MID_ZOOM_STYLE, GUIDesignMFXCheckableButtonSquare);
     130         7547 :     myZoomStyle->setChecked(getApp()->reg().readIntEntry("gui", "zoomAtCenter", 0) != 1);
     131              :     // build the locator popup
     132         7547 :     myLocatorPopup = new FXPopup(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, POPUP_VERTICAL);
     133              :     // build locator button
     134         7547 :     myLocatorButton = new MFXMenuButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     135        22641 :             myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Locate Structures") + std::string("\t") + TL("Locate structures within the network.")).c_str(),
     136        15094 :             GUIIconSubSys::getIcon(GUIIcon::LOCATE), myLocatorPopup, nullptr, GUIDesignButtonToolbarLocator);
     137              :     // add toggle button for tooltips in view on/off (by default unchecked)
     138         7547 :     myShowToolTipsView = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     139        22641 :             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        15094 :             GUIIconSubSys::getIcon(GUIIcon::SHOWTOOLTIPS_VIEW), this, MID_SHOWTOOLTIPS_VIEW, GUIDesignMFXCheckableButtonSquare);
     141         7547 :     myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(false);
     142         7547 :     myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(false);
     143              :     // add toggle button for tooltips in menu on/off (by default checked)
     144         7547 :     myShowToolTipsMenu = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     145        22641 :             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        15094 :             GUIIconSubSys::getIcon(GUIIcon::SHOWTOOLTIPS_MENU), this, MID_SHOWTOOLTIPS_MENU, GUIDesignMFXCheckableButtonSquare);
     147         7547 :     myShowToolTipsMenu->setChecked(getApp()->reg().readIntEntry("gui", "menuToolTips", 0) != 1);
     148         7547 :     myGUIMainWindowParent->getStaticTooltipMenu()->enableStaticToolTip(myShowToolTipsMenu->amChecked());
     149         7547 : }
     150              : 
     151              : 
     152              : void
     153         7547 : GUIGlChildWindow::buildColoringToolBar() {
     154              :     // Create Vertical separator
     155         7547 :     new FXVerticalSeparator(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, GUIDesignVerticalSeparator);
     156              :     // build coloring tools
     157        15094 :     myColoringSchemes = new MFXComboBoxIcon(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, nullptr,
     158         7547 :                                             false, GUIDesignComboBoxVisibleItems, this, MID_COLORSCHEMECHANGE, GUIDesignComboBoxStatic);
     159              :     // editor
     160         7547 :     new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     161        22641 :                          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        15094 :                          GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), this, MID_HOTKEY_F9_EDIT_VIEWSCHEME, GUIDesignButtonToolbar);
     163         7547 : }
     164              : 
     165              : 
     166              : void
     167         7547 : GUIGlChildWindow::buildScreenshotToolBar() {
     168              :     // Create Vertical separator
     169         7547 :     new FXVerticalSeparator(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, GUIDesignVerticalSeparator);
     170              :     // snapshot
     171         7547 :     new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     172        22641 :                            myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Make Snapshot") + std::string("\t") + TL("Makes a snapshot of the view.")).c_str(),
     173        15094 :                            GUIIconSubSys::getIcon(GUIIcon::CAMERA), this, MID_MAKESNAPSHOT, GUIDesignButtonToolbar);
     174         7547 : }
     175              : 
     176              : 
     177              : FXGLCanvas*
     178         7547 : GUIGlChildWindow::getBuildGLCanvas() const {
     179         7547 :     return myView;
     180              : }
     181              : 
     182              : 
     183              : FXToolBar*
     184            0 : GUIGlChildWindow::getNavigationToolBar(GUISUMOAbstractView&) {
     185            0 :     return myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar;
     186              : }
     187              : 
     188              : 
     189              : FXPopup*
     190        67923 : GUIGlChildWindow::getLocatorPopup() {
     191        67923 :     return myLocatorPopup;
     192              : }
     193              : 
     194              : 
     195              : MFXComboBoxIcon*
     196        52903 : GUIGlChildWindow::getColoringSchemesCombo() {
     197        52903 :     return myColoringSchemes;
     198              : }
     199              : 
     200              : 
     201              : MFXCheckableButton*
     202            0 : GUIGlChildWindow::getShowToolTipsMenu() const {
     203            0 :     return myShowToolTipsMenu;
     204              : }
     205              : 
     206              : 
     207              : long
     208            0 : GUIGlChildWindow::onCmdRecenterView(FXObject*, FXSelector, void*) {
     209            0 :     myView->recenterView();
     210            0 :     myView->update();
     211            0 :     return 1;
     212              : }
     213              : 
     214              : 
     215              : long
     216            0 : GUIGlChildWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
     217            0 :     myView->showViewportEditor();
     218            0 :     return 1;
     219              : }
     220              : 
     221              : 
     222              : long
     223            0 : GUIGlChildWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
     224            0 :     myView->showViewschemeEditor();
     225            0 :     return 1;
     226              : }
     227              : 
     228              : 
     229              : long
     230            0 : GUIGlChildWindow::onCmdShowToolTipsView(FXObject*, FXSelector, void*) {
     231              :     // toggle check
     232            0 :     myShowToolTipsView->setChecked(!myShowToolTipsView->amChecked());
     233              :     // enable/disable static tooltip
     234            0 :     myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(myShowToolTipsView->amChecked());
     235            0 :     update();
     236            0 :     return 1;
     237              : }
     238              : 
     239              : 
     240              : long
     241            0 : GUIGlChildWindow::onCmdShowToolTipsMenu(FXObject*, FXSelector, void*) {
     242              :     // toggle check
     243            0 :     myShowToolTipsMenu->setChecked(!myShowToolTipsMenu->amChecked());
     244              :     // enable/disable static tooltip
     245            0 :     myGUIMainWindowParent->getStaticTooltipMenu()->enableStaticToolTip(myShowToolTipsMenu->amChecked());
     246              :     // save in registry
     247            0 :     getApp()->reg().writeIntEntry("gui", "menuToolTips", myShowToolTipsMenu->amChecked() ? 0 : 1);
     248            0 :     update();
     249            0 :     return 1;
     250              : }
     251              : 
     252              : 
     253              : long
     254            0 : GUIGlChildWindow::onCmdZoomStyle(FXObject*, FXSelector, void*) {
     255            0 :     myZoomStyle->setChecked(!myZoomStyle->amChecked());
     256            0 :     getApp()->reg().writeIntEntry("gui", "zoomAtCenter", myZoomStyle->amChecked() ? 0 : 1);
     257            0 :     update();
     258            0 :     myView->update();
     259            0 :     return 1;
     260              : }
     261              : 
     262              : 
     263              : long
     264            0 : GUIGlChildWindow::onCmdChangeColorScheme(FXObject*, FXSelector, void* ptr) {
     265            0 :     myView->setColorScheme((char*) ptr);
     266            0 :     return 1;
     267              : }
     268              : 
     269              : 
     270              : void
     271            0 : GUIGlChildWindow::setView(GUIGlID id) {
     272              :     // this is used by the locator widget. zooming to bounding box
     273            0 :     myView->centerTo(id, true, -1);
     274            0 :     myView->update();
     275            0 : }
     276              : 
     277              : 
     278              : bool
     279            0 : GUIGlChildWindow::isSelected(GUIGlObject* o) const {
     280            0 :     return gSelected.isSelected(o->getType(), o->getGlID());
     281              : }
     282              : 
     283              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1