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: 2024-12-21 15:45:41 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-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     16493735 : FXIMPLEMENT(GUIGlChildWindow, FXMDIChild, GUIGlChildWindowMap, ARRAYNUMBER(GUIGlChildWindowMap))
      52              : 
      53              : // ===========================================================================
      54              : // member method definitions
      55              : // ===========================================================================
      56              : 
      57         7152 : GUIGlChildWindow::GUIGlChildWindow(FXMDIClient* p, GUIMainWindow* GUIMainWindowParent, FXMDIMenu* mdimenu,
      58         7152 :                                    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         7152 :     myGUIMainWindowParent(GUIMainWindowParent),
      61         7152 :     myGripNavigationToolbar(gripNavigationToolbar),
      62         7152 :     myStaticNavigationToolBar(nullptr),
      63         7152 :     myView(nullptr) {
      64              :     // Make MDI Window Menu
      65         7152 :     setTracking();
      66              :     // create a vertical frame to add elements
      67         7152 :     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         7152 :     if (myGripNavigationToolbar == nullptr) {
      70         7152 :         myStaticNavigationToolBar = new FXToolBar(myChildWindowContentFrame, GUIDesignToolbarMenuBar);
      71              :     }
      72              :     // build the tool bars
      73         7152 :     buildNavigationToolBar(); // always there (recenter)
      74         7152 :     buildColoringToolBar(); // always there (coloring)
      75         7152 :     buildScreenshotToolBar(); // always there (screenshot)
      76         7152 : }
      77              : 
      78              : 
      79         7134 : GUIGlChildWindow::~GUIGlChildWindow() {
      80         7134 :     delete myLocatorPopup;
      81              :     // only delete static navigation bar if it was created
      82         7134 :     if (myStaticNavigationToolBar) {
      83         7134 :         delete myStaticNavigationToolBar;
      84              :     }
      85         7134 : }
      86              : 
      87              : 
      88              : void
      89         7152 : GUIGlChildWindow::create() {
      90         7152 :     FXMDIChild::create();
      91              :     // only create static navigation bar if it was created
      92         7150 :     if (myStaticNavigationToolBar) {
      93         7150 :         myStaticNavigationToolBar->create();
      94              :     } else {
      95            0 :         myGripNavigationToolbar->create();
      96              :     }
      97         7150 :     myLocatorPopup->create();
      98         7150 :     myView->create();
      99         7150 : }
     100              : 
     101              : 
     102              : GUISUMOAbstractView*
     103      5867294 : GUIGlChildWindow::getView() const {
     104      5867294 :     return myView;
     105              : }
     106              : 
     107              : 
     108              : GUIMainWindow*
     109      1038534 : GUIGlChildWindow::getGUIMainWindowParent() {
     110      1038534 :     return myGUIMainWindowParent;
     111              : }
     112              : 
     113              : 
     114              : void
     115         7152 : GUIGlChildWindow::buildNavigationToolBar() {
     116              :     // build the view settings
     117              :     // recenter view
     118         7152 :     new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     119        21456 :                          myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Recenter View") + std::string("\t") + TL("Recenter view to the simulated area.")).c_str(),
     120        14304 :                          GUIIconSubSys::getIcon(GUIIcon::RECENTERVIEW), this, MID_RECENTERVIEW, GUIDesignButtonToolbar);
     121              :     // add viewport button
     122         7152 :     new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     123        28608 :                          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        14304 :                          GUIIconSubSys::getIcon(GUIIcon::EDITVIEWPORT), this, MID_HOTKEY_CTRL_I_EDITVIEWPORT, GUIDesignButtonToolbar);
     125              :     // toggle button for zooming style
     126         7152 :     myZoomStyle = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     127        21456 :                                          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        14304 :                                          GUIIconSubSys::getIcon(GUIIcon::ZOOMSTYLE), this, MID_ZOOM_STYLE, GUIDesignMFXCheckableButtonSquare);
     129         7152 :     myZoomStyle->setChecked(getApp()->reg().readIntEntry("gui", "zoomAtCenter", 0) != 1);
     130              :     // build the locator popup
     131         7152 :     myLocatorPopup = new FXPopup(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, POPUP_VERTICAL);
     132              :     // build locator button
     133         7152 :     myLocatorButton = new MFXMenuButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     134        21456 :             myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Locate Structures") + std::string("\t") + TL("Locate structures within the network.")).c_str(),
     135        14304 :             GUIIconSubSys::getIcon(GUIIcon::LOCATE), myLocatorPopup, nullptr, GUIDesignButtonToolbarLocator);
     136              :     // add toggle button for tooltips in view on/off (by default unchecked)
     137         7152 :     myShowToolTipsView = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     138        21456 :             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        14304 :             GUIIconSubSys::getIcon(GUIIcon::SHOWTOOLTIPS_VIEW), this, MID_SHOWTOOLTIPS_VIEW, GUIDesignMFXCheckableButtonSquare);
     140         7152 :     myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(false);
     141         7152 :     myGUIMainWindowParent->getStaticTooltipView()->enableStaticToolTip(false);
     142              :     // add toggle button for tooltips in menu on/off (by default checked)
     143         7152 :     myShowToolTipsMenu = new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     144        21456 :             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        14304 :             GUIIconSubSys::getIcon(GUIIcon::SHOWTOOLTIPS_MENU), this, MID_SHOWTOOLTIPS_MENU, GUIDesignMFXCheckableButtonSquare);
     146         7152 :     myShowToolTipsMenu->setChecked(getApp()->reg().readIntEntry("gui", "menuToolTips", 0) != 1);
     147         7152 :     myGUIMainWindowParent->getStaticTooltipMenu()->enableStaticToolTip(myShowToolTipsMenu->amChecked());
     148         7152 : }
     149              : 
     150              : 
     151              : void
     152         7152 : GUIGlChildWindow::buildColoringToolBar() {
     153              :     // Create Vertical separator
     154         7152 :     new FXVerticalSeparator(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, GUIDesignVerticalSeparator);
     155              :     // build coloring tools
     156        14304 :     myColoringSchemes = new MFXComboBoxIcon(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     157         7152 :                                             GUIDesignComboBoxNCol, false, GUIDesignComboBoxVisibleItems, this, MID_COLORSCHEMECHANGE, GUIDesignComboBoxStatic);
     158              :     // editor
     159         7152 :     new MFXButtonTooltip(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     160        21456 :                          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        14304 :                          GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), this, MID_HOTKEY_F9_EDIT_VIEWSCHEME, GUIDesignButtonToolbar);
     162         7152 : }
     163              : 
     164              : 
     165              : void
     166         7152 : GUIGlChildWindow::buildScreenshotToolBar() {
     167              :     // Create Vertical separator
     168         7152 :     new FXVerticalSeparator(myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar, GUIDesignVerticalSeparator);
     169              :     // snapshot
     170         7152 :     new MFXCheckableButton(false, myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar,
     171        21456 :                            myGUIMainWindowParent->getStaticTooltipMenu(), (std::string("\t") + TL("Make Snapshot") + std::string("\t") + TL("Makes a snapshot of the view.")).c_str(),
     172        14304 :                            GUIIconSubSys::getIcon(GUIIcon::CAMERA), this, MID_MAKESNAPSHOT, GUIDesignButtonToolbar);
     173         7152 : }
     174              : 
     175              : 
     176              : FXGLCanvas*
     177         7152 : GUIGlChildWindow::getBuildGLCanvas() const {
     178         7152 :     return myView;
     179              : }
     180              : 
     181              : 
     182              : FXToolBar*
     183            0 : GUIGlChildWindow::getNavigationToolBar(GUISUMOAbstractView&) {
     184            0 :     return myGripNavigationToolbar ? myGripNavigationToolbar : myStaticNavigationToolBar;
     185              : }
     186              : 
     187              : 
     188              : FXPopup*
     189        64368 : GUIGlChildWindow::getLocatorPopup() {
     190        64368 :     return myLocatorPopup;
     191              : }
     192              : 
     193              : 
     194              : MFXComboBoxIcon*
     195        50132 : GUIGlChildWindow::getColoringSchemesCombo() {
     196        50132 :     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              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1