LCOV - code coverage report
Current view: top level - src/utils/gui/windows - GUIGlChildWindow.cpp (source / functions) Hit Total Coverage
Test: lcov.info Lines: 77 118 65.3 %
Date: 2024-05-03 15:29:52 Functions: 12 25 48.0 %

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