Path: blob/main/src/netedit/GNEApplicationWindowHelper.cpp
169665 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEApplicationWindowHelper.cpp14/// @author Jakob Erdmann15/// @date Feb 201116///17// The main window of Netedit (adapted from GUIApplicationWindow)18/****************************************************************************/19#include <config.h>2021#include <regex>22#include <netedit/dialogs/file/GNEFileDialog.h>23#include <netedit/dialogs/tools/GNEPythonToolDialog.h>24#include <netedit/dialogs/tools/GNERunPythonToolDialog.h>25#include <netedit/elements/GNEAttributeCarrier.h>26#include <netedit/GNETagProperties.h>27#include <netedit/templates.h>28#include <netedit/tools/GNENetDiffTool.h>29#include <utils/common/FileHelpers.h>30#include <utils/foxtools/MFXMenuCheckIcon.h>31#include <utils/gui/div/GUIDesigns.h>32#include <utils/handlers/TemplateHandler.h>33#include <utils/options/OptionsLoader.h>34#include <xercesc/parsers/SAXParser.hpp>35#include <xercesc/sax/AttributeList.hpp>36#include <xercesc/sax/HandlerBase.hpp>37#include <xercesc/sax/SAXException.hpp>38#include <xercesc/sax/SAXParseException.hpp>3940#include "GNEApplicationWindow.h"41#include "GNEViewNet.h"42#include "GNENet.h"4344// ===========================================================================45// GNEApplicationWindowHelper::ToolbarsGrip method definitions46// ===========================================================================4748GNEApplicationWindowHelper::ToolbarsGrip::ToolbarsGrip(GNEApplicationWindow* applicationWindow) :49myApplicationWindow(applicationWindow) {50}515253void54GNEApplicationWindowHelper::ToolbarsGrip::buildMenuToolbarsGrip() {55// build menu bar (for File, edit, processing...) using specify design56myPythonToolBarShellMenu = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);57menu = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellMenu, GUIDesignToolbarMenuBarNetedit);58// declare toolbar grip for menu bar59new FXToolBarGrip(menu, menu, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);60}616263void64GNEApplicationWindowHelper::ToolbarsGrip::buildViewParentToolbarsGrips() {65// build toolbar shells66myPythonToolBarShellSuperModes = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);67myPythonToolBarShellSaveElements = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);68myPythonToolBarShellTimeFormat = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);69myPythonToolBarShellNavigation = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);70myPythonToolBarShellModes = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);71myPythonToolBarShellIntervalBar = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);72// build menu bars73superModes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellSuperModes, GUIDesignToolBarRaisedSupermodes);74saveElements = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellSaveElements, GUIDesignToolBarRaisedNext);75timeSwitch = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellTimeFormat, GUIDesignToolBarRaisedSame);76navigation = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellNavigation, GUIDesignToolBarRaisedSame);77if (OptionsCont::getOptions().getBool("gui-testing")) {78modes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellModes, GUIDesignToolBarRaisedNext);79} else {80modes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellModes, GUIDesignToolBarRaisedSame);81}82intervalBar = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellIntervalBar, GUIDesignToolBarRaisedNext);83// build FXToolBarGrip84new FXToolBarGrip(superModes, superModes, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);85new FXToolBarGrip(saveElements, saveElements, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);86new FXToolBarGrip(timeSwitch, timeSwitch, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);87new FXToolBarGrip(navigation, navigation, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);88new FXToolBarGrip(modes, modes, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);89new FXToolBarGrip(intervalBar, intervalBar, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);90// create menu bars91superModes->create();92saveElements->create();93timeSwitch->create();94navigation->create();95modes->create();96intervalBar->create();97// create toolbar shells98myPythonToolBarShellSuperModes->create();99myPythonToolBarShellSaveElements->create();100myPythonToolBarShellTimeFormat->create();101myPythonToolBarShellNavigation->create();102myPythonToolBarShellModes->create();103myPythonToolBarShellIntervalBar->create();104// recalc top dop after creating elements105myApplicationWindow->getTopDock()->recalc();106}107108109void110GNEApplicationWindowHelper::ToolbarsGrip::destroyParentToolbarsGrips() {111// delete Menu bars112delete superModes;113delete saveElements;114delete timeSwitch;115delete navigation;116delete modes;117delete intervalBar;118// also delete toolbar shells to avoid floating windows119delete myPythonToolBarShellSuperModes;120delete myPythonToolBarShellSaveElements;121delete myPythonToolBarShellTimeFormat;122delete myPythonToolBarShellNavigation;123delete myPythonToolBarShellModes;124delete myPythonToolBarShellIntervalBar;125// recalc top dop after deleting elements126myApplicationWindow->getTopDock()->recalc();127}128129// ===========================================================================130// GNEApplicationWindowHelper::MenuBarFile method definitions131// ===========================================================================132133GNEApplicationWindowHelper::MenuBarFile::MenuBarFile(GNEApplicationWindow* applicationWindow) :134myRecentNetworks(applicationWindow->getApp(), TL("nets")),135myRecentConfigs(applicationWindow->getApp(), TL("configs")),136myApplicationWindow(applicationWindow) {137}138139140void141GNEApplicationWindowHelper::MenuBarFile::buildRecentNetworkFiles(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentNetworkFiles) {142// for whatever reason, sonar complains in the next line that sep1 may leak, but fox does the cleanup143GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_1);144GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_2);145GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_3);146GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_4);147GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_5);148GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_6);149GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_7);150GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_8);151GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_9);152GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_10);153new FXMenuSeparator(fileMenuRecentNetworkFiles); // NOSONAR, Fox does the cleanup154GUIDesigns::buildFXMenuCommand(fileMenuRecentNetworkFiles, TL("Cl&ear Recent Networks"), nullptr, &myRecentNetworks, FXRecentFiles::ID_CLEAR);155GUIDesigns::buildFXMenuCommand(fileMenuRecentNetworkFiles, TL("No Recent Networks"), nullptr, &myRecentNetworks, MFXRecentNetworks::ID_NOFILES);156// set target157myRecentNetworks.setTarget(myApplicationWindow);158myRecentNetworks.setSelector(MID_RECENTFILE);159new FXMenuCascade(fileMenu, TL("Recent Networks"), nullptr, fileMenuRecentNetworkFiles);160}161162163void164GNEApplicationWindowHelper::MenuBarFile::buildRecentConfigFiles(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentConfigFiles) {165// for whatever reason, sonar complains in the next line that sep1 may leak, but fox does the cleanup166GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_1);167GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_2);168GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_3);169GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_4);170GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_5);171GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_6);172GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_7);173GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_8);174GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_9);175GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_10);176new FXMenuSeparator(fileMenuRecentConfigFiles); // NOSONAR, Fox does the cleanup177GUIDesigns::buildFXMenuCommand(fileMenuRecentConfigFiles, TL("Cl&ear Recent Configs"), nullptr, &myRecentConfigs, FXRecentFiles::ID_CLEAR);178GUIDesigns::buildFXMenuCommand(fileMenuRecentConfigFiles, TL("No Recent Configs"), nullptr, &myRecentConfigs, MFXRecentNetworks::ID_NOFILES);179// set target180myRecentConfigs.setTarget(myApplicationWindow);181myRecentConfigs.setSelector(MID_RECENTFILE);182new FXMenuCascade(fileMenu, TL("Recent Configs"), nullptr, fileMenuRecentConfigFiles);183}184185// ---------------------------------------------------------------------------186// GNEApplicationWindowHelper::FileMenuCommands - methods187// ---------------------------------------------------------------------------188189GNEApplicationWindowHelper::FileMenuCommands::FileMenuCommands(GNEApplicationWindow* applicationWindow) :190myApplicationWindow(applicationWindow) {191}192193194void195GNEApplicationWindowHelper::FileMenuCommands::buildFileMenuCommands(FXMenuPane* fileMenu, FXMenuPane* fileMenuNeteditConfig,196FXMenuPane* fileMenuSumoConfig, FXMenuPane* fileMenuTLS, FXMenuPane* fileMenuEdgeTypes, FXMenuPane* fileMenuAdditionals,197FXMenuPane* fileMenuDemandElements, FXMenuPane* fileMenuDataElements, FXMenuPane* fileMenuMeanDataElements) {198199GUIDesigns::buildFXMenuCommandShortcut(fileMenu,200TL("New Network"), "Ctrl+N", TL("Create a new network."),201GUIIconSubSys::getIcon(GUIIcon::NEW_NET), myApplicationWindow, MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK);202203GUIDesigns::buildFXMenuCommandShortcut(fileMenu,204TL("New Window"), "Ctrl+Shift+N", TL("Open a new netedit window."),205nullptr, myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW);206207GUIDesigns::buildFXMenuCommandShortcut(fileMenu,208TL("Generate Network"), "", TL("Create network using netgenerate."),209GUIIconSubSys::getIcon(GUIIcon::NETGENERATE), myApplicationWindow, MID_GNE_NETGENERATE);210211// load sumo/netedit configs212new FXMenuSeparator(fileMenu);213214GUIDesigns::buildFXMenuCommandShortcut(fileMenu,215TL("Load Netedit config..."), "Ctrl+E", TL("Load a netedit configuration file."),216GUIIconSubSys::getIcon(GUIIcon::OPEN_NETEDITCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG);217218GUIDesigns::buildFXMenuCommandShortcut(fileMenu,219TL("Load Sumo config..."), "Ctrl+M", TL("Load a SUMO configuration file."),220GUIIconSubSys::getIcon(GUIIcon::OPEN_SUMOCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_M_OPENSUMOCONFIG);221222// load networks223new FXMenuSeparator(fileMenu);224225GUIDesigns::buildFXMenuCommandShortcut(fileMenu,226TL("Open Network..."), "Ctrl+O", TL("Open a SUMO network."),227GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), myApplicationWindow, MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK);228229GUIDesigns::buildFXMenuCommandShortcut(fileMenu,230TL("Open Netconvert Configuration..."), "Ctrl+Shift+O", TL("Open a configuration file with NETCONVERT options."),231GUIIconSubSys::getIcon(GUIIcon::OPEN), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE);232233GUIDesigns::buildFXMenuCommandShortcut(fileMenu,234TL("Import Foreign Network..."), "", TL("Import a foreign network such as OSM."),235GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), myApplicationWindow, MID_GNE_TOOLBARFILE_OPENFOREIGN);236237// save networks238new FXMenuSeparator(fileMenu);239240GUIDesigns::buildFXMenuCommandShortcut(fileMenu,241TL("Save Network"), "Ctrl+S", TL("Save the network."),242GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK);243244GUIDesigns::buildFXMenuCommandShortcut(fileMenu,245TL("Save Network As..."), "", TL("Save the network to another file."),246GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVENETWORK_AS);247248GUIDesigns::buildFXMenuCommandShortcut(fileMenu,249TL("Save Plain XML..."), "Ctrl+L", TL("Save a plain XML representation of the network."),250GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_L_SAVEASPLAINXML);251252GUIDesigns::buildFXMenuCommandShortcut(fileMenu,253TL("Save Joined Junctions..."), "", TL("Save log of joined junctions (allows reproduction of joins)."),254GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_SAVEJOINEDJUNCTIONS);255256// reload257new FXMenuSeparator(fileMenu);258259GUIDesigns::buildFXMenuCommandShortcut(fileMenu,260TL("Reload"), "Ctrl+R", TL("Reload the network."),261GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_HOTKEY_CTRL_R_RELOAD);262263GUIDesigns::buildFXMenuCommandShortcut(fileMenu,264TL("Reload Network"), "", TL("Reload the network."),265GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOADNETWORK);266267new FXMenuSeparator(fileMenu);268269// create netedit config menu options270buildNeteditConfigSection(fileMenuNeteditConfig);271myNeteditConfigMenuCascade = new FXMenuCascade(fileMenu, TL("Netedit Config"), GUIIconSubSys::getIcon(GUIIcon::NETEDIT_MINI), fileMenuNeteditConfig);272273// create SumoConfig menu options274buildSumoConfigSection(fileMenuSumoConfig);275mySumoConfigMenuCascade = new FXMenuCascade(fileMenu, TL("Sumo Config"), GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), fileMenuSumoConfig);276277// create TLS menu options278buildTrafficLightSection(fileMenuTLS);279myTLSMenuCascade = new FXMenuCascade(fileMenu, TL("Traffic Lights"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), fileMenuTLS);280281// create edgeTypes menu options282buildEdgeTypeSection(fileMenuEdgeTypes);283myEdgeTypesMenuCascade = new FXMenuCascade(fileMenu, TL("Edge Types"), GUIIconSubSys::getIcon(GUIIcon::MODECREATEEDGE), fileMenuEdgeTypes);284285// create Additionals menu options286buildAdditionalSection(fileMenuAdditionals);287myAdditionalMenuCascade = new FXMenuCascade(fileMenu, TL("Additionals and Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODEADDITIONAL), fileMenuAdditionals);288289// create DemandElements menu options290buildDemandSection(fileMenuDemandElements);291myDemandMenuCascade = new FXMenuCascade(fileMenu, TL("Demand Elements"), GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDEMAND), fileMenuDemandElements);292293// create DataElements menu options294buildDataSection(fileMenuDataElements);295myDataMenuCascade = new FXMenuCascade(fileMenu, TL("Data Elements"), GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), fileMenuDataElements);296297// create MeanDatas menu options298buildMeanDataSection(fileMenuMeanDataElements);299myMeanDataMenuCascade = new FXMenuCascade(fileMenu, TL("MeanData Elements"), GUIIconSubSys::getIcon(GUIIcon::MODEMEANDATA), fileMenuMeanDataElements);300301// add checkBox for quick load302new FXMenuSeparator(fileMenu);303menuCheckAllowUndoRedoLoading = GUIDesigns::buildFXMenuCheckbox(fileMenu,304TL("Allow undoing element loading"), TL("Allow to undo loading of elements (Slow if a lot of elements are loaded)"),305myApplicationWindow, MID_GNE_TOGGLE_UNDOREDO_LOADING);306// set default value307menuCheckAllowUndoRedoLoading->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true));308309// close network310new FXMenuSeparator(fileMenu);311GUIDesigns::buildFXMenuCommandShortcut(fileMenu,312TL("Close"), "Ctrl+W", TL("Close the network."),313GUIIconSubSys::getIcon(GUIIcon::CLOSE), myApplicationWindow, MID_HOTKEY_CTRL_W_CLOSESIMULATION);314}315316317void318GNEApplicationWindowHelper::FileMenuCommands::enableMenuCascades() {319mySumoConfigMenuCascade->enable();320myNeteditConfigMenuCascade->enable();321myTLSMenuCascade->enable();322myEdgeTypesMenuCascade->enable();323myAdditionalMenuCascade->enable();324myDemandMenuCascade->enable();325myDataMenuCascade->enable();326myMeanDataMenuCascade->enable();327}328329330void331GNEApplicationWindowHelper::FileMenuCommands::disableMenuCascades() {332mySumoConfigMenuCascade->disable();333myNeteditConfigMenuCascade->disable();334myTLSMenuCascade->disable();335myEdgeTypesMenuCascade->disable();336myAdditionalMenuCascade->disable();337myDemandMenuCascade->disable();338myDataMenuCascade->disable();339myMeanDataMenuCascade->disable();340}341342343void344GNEApplicationWindowHelper::FileMenuCommands::setDefaultView() {345myTLSMenuCascade->show();346myDataMenuCascade->show();347myMeanDataMenuCascade->show();348}349350351void352GNEApplicationWindowHelper::FileMenuCommands::setJuPedSimView() {353myTLSMenuCascade->hide();354myDataMenuCascade->hide();355myMeanDataMenuCascade->hide();356}357358359void360GNEApplicationWindowHelper::FileMenuCommands::buildNeteditConfigSection(FXMenuPane* menuPane) {361GUIDesigns::buildFXMenuCommandShortcut(menuPane,362TL("Save Netedit Config"), "Ctrl+Shift+E", TL("Save netedit configuration file."),363GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG);364365GUIDesigns::buildFXMenuCommandShortcut(menuPane,366TL("Save Netedit Config As..."), "", TL("Save netedit configuration in a new file."),367GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS);368369new FXMenuSeparator(menuPane);370371GUIDesigns::buildFXMenuCommandShortcut(menuPane,372TL("Reload Netedit Config"), "", TL("Reload netedit configuration."),373GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG);374}375376377void378GNEApplicationWindowHelper::FileMenuCommands::buildSumoConfigSection(FXMenuPane* menuPane) {379GUIDesigns::buildFXMenuCommandShortcut(menuPane,380TL("Save Sumo Config"), "Ctrl+Shift+S", TL("Save sumo configuration file."),381GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG);382383GUIDesigns::buildFXMenuCommandShortcut(menuPane,384TL("Save Sumo Config As..."), "", TL("Save sumo configuration in a new file."),385GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS);386387new FXMenuSeparator(menuPane);388389GUIDesigns::buildFXMenuCommandShortcut(menuPane,390TL("Reload Sumo Config"), "", TL("Reload sumo configuration."),391GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG);392}393394395void396GNEApplicationWindowHelper::FileMenuCommands::buildTrafficLightSection(FXMenuPane* menuPane) {397GUIDesigns::buildFXMenuCommandShortcut(menuPane,398TL("Load TLS Programs..."), "Ctrl+K", TL("Load programs for traffic lights in the current net."),399GUIIconSubSys::getIcon(GUIIcon::OPEN_TLSPROGRAMS), myApplicationWindow, MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS);400401new FXMenuSeparator(menuPane);402403GUIDesigns::buildFXMenuCommandShortcut(menuPane,404TL("Save TLS Programs"), "Ctrl+Shift+K", TL("Save all traffic light programs of the current network."),405GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_K_SAVETLS);406407GUIDesigns::buildFXMenuCommandShortcut(menuPane,408TL("Save TLS Programs As..."), "", TL("Save all traffic light programs of the current network to another file."),409GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS);410411new FXMenuSeparator(menuPane);412413GUIDesigns::buildFXMenuCommandShortcut(menuPane,414TL("Reload TLS Programs"), "", TL("Reload TLS Programs."),415GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS);416}417418419void420GNEApplicationWindowHelper::FileMenuCommands::buildEdgeTypeSection(FXMenuPane* menuPane) {421GUIDesigns::buildFXMenuCommandShortcut(menuPane,422TL("Load Edge Types..."), "Ctrl+H", TL("Load edge types in the current net."),423GUIIconSubSys::getIcon(GUIIcon::OPEN_TLSPROGRAMS), myApplicationWindow, MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES);424425new FXMenuSeparator(menuPane);426427GUIDesigns::buildFXMenuCommandShortcut(menuPane,428TL("Save Edge Types"), "Ctrl+Shift+H", TL("Save edge types of the current net."),429GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES);430431GUIDesigns::buildFXMenuCommandShortcut(menuPane,432TL("Save Edge Types As..."), "", TL("Save edge types of the current net to another file."),433GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS);434435new FXMenuSeparator(menuPane);436437GUIDesigns::buildFXMenuCommandShortcut(menuPane,438TL("Reload edge types"), "", TL("Reload edge types."),439GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES);440}441442443void444GNEApplicationWindowHelper::FileMenuCommands::buildAdditionalSection(FXMenuPane* menuPane) {445GUIDesigns::buildFXMenuCommandShortcut(menuPane,446TL("Load Additionals..."), "Ctrl+A", TL("Load additionals and shapes."),447GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALELEMENTS);448449new FXMenuSeparator(menuPane);450451GUIDesigns::buildFXMenuCommandShortcut(menuPane,452TL("Save Additionals"), "Ctrl+Shift+A", TL("Save additionals and shapes."),453GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS);454455GUIDesigns::buildFXMenuCommandShortcut(menuPane,456TL("Save Additionals unified as..."), "", TL("Save all additional elements to the chosen file."),457GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED);458459GUIDesigns::buildFXMenuCommandShortcut(menuPane,460TL("Save JuPedSim Elements as..."), "", TL("Save JuPedSim elements in a separated file."),461GUIIconSubSys::getIcon(GUIIcon::SAVE_JUPEDSIMELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS);462463new FXMenuSeparator(menuPane);464465GUIDesigns::buildFXMenuCommandShortcut(menuPane,466TL("Reload Additionals"), "", TL("Reload additionals."),467GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS);468}469470471void472GNEApplicationWindowHelper::FileMenuCommands::buildDemandSection(FXMenuPane* menuPane) {473GUIDesigns::buildFXMenuCommandShortcut(menuPane,474TL("Load Demand Elements..."), "Ctrl+D", TL("Load demand elements."),475GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS);476477new FXMenuSeparator(menuPane);478479GUIDesigns::buildFXMenuCommandShortcut(menuPane,480TL("Save Demand Elements"), "Ctrl+Shift+D", TL("Save demand elements."),481GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS);482483GUIDesigns::buildFXMenuCommandShortcut(menuPane,484TL("Save Demand Elements unified as..."), "", TL("Save all demand elements to the chosen file"),485GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_UNIFIED);486487new FXMenuSeparator(menuPane);488489GUIDesigns::buildFXMenuCommandShortcut(menuPane,490TL("Reload Demand Elements"), "", TL("Reload demand elements."),491GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS);492}493494495void496GNEApplicationWindowHelper::FileMenuCommands::buildDataSection(FXMenuPane* menuPane) {497GUIDesigns::buildFXMenuCommandShortcut(menuPane,498TL("Load Data Elements..."), "Ctrl+B", TL("Load data elements."),499GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS);500501new FXMenuSeparator(menuPane);502503GUIDesigns::buildFXMenuCommandShortcut(menuPane,504TL("Save Data Elements"), "Ctrl+Shift+B", TL("Save data elements."),505GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS);506507GUIDesigns::buildFXMenuCommandShortcut(menuPane,508TL("Save Data Elements unified as..."), "", TL("Save all data elements to the chosen file."),509GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED);510511new FXMenuSeparator(menuPane);512513GUIDesigns::buildFXMenuCommandShortcut(menuPane,514TL("Reload Data Elements"), "", TL("Reload data elements."),515GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS);516}517518519void520GNEApplicationWindowHelper::FileMenuCommands::buildMeanDataSection(FXMenuPane* menuPane) {521GUIDesigns::buildFXMenuCommandShortcut(menuPane,522TL("Load MeanDatas..."), "", TL("Load meanDatas and shapes."),523GUIIconSubSys::getIcon(GUIIcon::OPEN_MEANDATAS), myApplicationWindow, MID_GNE_TOOLBARFILE_OPENMEANDATAELEMENTS);524525new FXMenuSeparator(menuPane);526527GUIDesigns::buildFXMenuCommandShortcut(menuPane,528TL("Save MeanDatas"), "", TL("Save meanDatas and shapes."),529GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS);530531GUIDesigns::buildFXMenuCommandShortcut(menuPane,532TL("Save MeanDatas unified as..."), "Ctrl+Shift+M", TL("Save all meanData elements to the chosen file."),533GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED);534535new FXMenuSeparator(menuPane);536537GUIDesigns::buildFXMenuCommandShortcut(menuPane,538TL("Reload MeanDatas"), "", TL("Reload meanDatas."),539GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS);540}541542// ---------------------------------------------------------------------------543// GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands - methods544// ---------------------------------------------------------------------------545546GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands::CommonMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :547myModesMenuCommandsParent(modesMenuCommandsParent) {548}549550551void552GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands::buildCommonMenuCommands(FXMenuPane* modesMenu) {553// build every FXMenuCommand giving it a shortcut554inspectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,555TL("&Inspect"), "I", TL("Inspect elements and change their attributes."),556GUIIconSubSys::getIcon(GUIIcon::MODEINSPECT), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_I_MODE_INSPECT);557deleteMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,558TL("&Delete"), "D", TL("Delete elements."),559GUIIconSubSys::getIcon(GUIIcon::MODEDELETE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE);560selectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,561TL("&Select"), "S", TL("Select elements."),562GUIIconSubSys::getIcon(GUIIcon::MODESELECT), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT);563}564565// ---------------------------------------------------------------------------566// GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands - methods567// ---------------------------------------------------------------------------568569GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::NetworkMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :570myModesMenuCommandsParent(modesMenuCommandsParent) {571}572573574void575GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::showNetworkMenuCommands() {576createEdgeMode->show();577moveMode->show();578connectMode->show();579prohibitionMode->show();580TLSMode->show();581additionalMode->show();582crossingMode->show();583TAZMode->show();584shapeMode->show();585wireMode->show();586decalMode->show();587}588589590void591GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::hideNetworkMenuCommands() {592createEdgeMode->hide();593moveMode->hide();594connectMode->hide();595prohibitionMode->hide();596TLSMode->hide();597additionalMode->hide();598crossingMode->hide();599TAZMode->hide();600shapeMode->hide();601wireMode->hide();602decalMode->hide();603}604605606void607GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::buildNetworkMenuCommands(FXMenuPane* modesMenu) {608// build every FXMenuCommand giving it a shortcut609moveMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,610TL("&Move"), "M", TL("Move elements."),611GUIIconSubSys::getIcon(GUIIcon::MODEMOVE), myModesMenuCommandsParent->myApplicationWindow,612MID_HOTKEY_M_MODE_MOVE_MEANDATA);613createEdgeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,614TL("&Edge"), "E", TL("Create junction and edges."),615GUIIconSubSys::getIcon(GUIIcon::MODECREATEEDGE), myModesMenuCommandsParent->myApplicationWindow,616MID_HOTKEY_E_MODE_EDGE_EDGEDATA);617TLSMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,618TL("&Traffic light"), "T", TL("Modes traffic lights over junctions."),619GUIIconSubSys::getIcon(GUIIcon::MODETLS), myModesMenuCommandsParent->myApplicationWindow,620MID_HOTKEY_T_MODE_TLS_TYPE);621connectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,622TL("&Connection"), "C", TL("Modes connections between lanes."),623GUIIconSubSys::getIcon(GUIIcon::MODECONNECTION), myModesMenuCommandsParent->myApplicationWindow,624MID_HOTKEY_C_MODE_CONNECT_CONTAINER);625prohibitionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,626TL("Pro&hibition"), "H", TL("Modes connection prohibitions."),627GUIIconSubSys::getIcon(GUIIcon::MODEPROHIBITION), myModesMenuCommandsParent->myApplicationWindow,628MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN);629crossingMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,630TL("C&rossing"), "R", TL("Create crossings between edges."),631GUIIconSubSys::getIcon(GUIIcon::MODECROSSING), myModesMenuCommandsParent->myApplicationWindow,632MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);633additionalMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,634TL("&Additional"), "A", TL("Create additional elements."),635GUIIconSubSys::getIcon(GUIIcon::MODEADDITIONAL), myModesMenuCommandsParent->myApplicationWindow,636MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS);637wireMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,638TL("&Wire"), "W", TL("Create wires."),639GUIIconSubSys::getIcon(GUIIcon::MODEWIRE), myModesMenuCommandsParent->myApplicationWindow,640MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION);641TAZMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,642TL("TA&Z"), "Z", TL("Create Traffic Assignment Zones."),643GUIIconSubSys::getIcon(GUIIcon::MODETAZ), myModesMenuCommandsParent->myApplicationWindow,644MID_HOTKEY_Z_MODE_TAZ_TAZREL);645shapeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,646TL("&POI-Poly"), "P", TL("Create Points-Of-Interest and polygons."),647GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myModesMenuCommandsParent->myApplicationWindow,648MID_HOTKEY_P_MODE_POLYGON_PERSON);649decalMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,650TL("Deca&ls"), "U", TL("Create decals."),651GUIIconSubSys::getIcon(GUIIcon::MODEDECAL), myModesMenuCommandsParent->myApplicationWindow,652MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION);653}654655// ---------------------------------------------------------------------------656// GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands - methods657// ---------------------------------------------------------------------------658659GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::DemandMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :660myModesMenuCommandsParent(modesMenuCommandsParent) {661}662663664void665GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::showDemandMenuCommands() {666moveMode->show();667routeMode->show();668routeDistributionMode->show();669vehicleMode->show();670typeMode->show();671typeDistributionMode->show();672stopMode->show();673personMode->show();674personPlanMode->show();675containerMode->show();676containerPlanMode->show();677}678679680void681GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::hideDemandMenuCommands() {682moveMode->hide();683routeMode->hide();684routeDistributionMode->hide();685vehicleMode->hide();686typeMode->hide();687typeDistributionMode->hide();688stopMode->hide();689personMode->hide();690personPlanMode->hide();691containerMode->hide();692containerPlanMode->hide();693}694695696void697GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::buildDemandMenuCommands(FXMenuPane* modesMenu) {698// build every FXMenuCommand giving it a shortcut699moveMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,700TL("&Move"), "M", TL("Move elements."),701GUIIconSubSys::getIcon(GUIIcon::MODEMOVE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_M_MODE_MOVE_MEANDATA);702routeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,703TL("Route"), "R", TL("Create Routes."),704GUIIconSubSys::getIcon(GUIIcon::MODEROUTE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);705routeDistributionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,706TL("Route distribution"), "W", TL("Create and edit route distributions."),707GUIIconSubSys::getIcon(GUIIcon::MODEROUTEDISTRIBUTION), myModesMenuCommandsParent->myApplicationWindow,708MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION);709vehicleMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,710TL("Vehicle"), "V", TL("Create vehicles."),711GUIIconSubSys::getIcon(GUIIcon::MODEVEHICLE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_V_MODE_VEHICLE);712typeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,713TL("Type"), "T", TL("Create types (vehicles, person and containers)."),714GUIIconSubSys::getIcon(GUIIcon::MODETYPE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_T_MODE_TLS_TYPE);715typeDistributionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,716TL("TypeDistribution"), "U", TL("Create and edit type distributions."),717GUIIconSubSys::getIcon(GUIIcon::MODETYPEDISTRIBUTION), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION);718stopMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,719TL("Stop"), "A", TL("Create stops."),720GUIIconSubSys::getIcon(GUIIcon::MODESTOP), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS);721personMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,722TL("Person"), "P", TL("Create persons."),723GUIIconSubSys::getIcon(GUIIcon::MODEPERSON), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_P_MODE_POLYGON_PERSON);724personPlanMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,725TL("Person plan"), "L", TL("Create person plans."),726GUIIconSubSys::getIcon(GUIIcon::MODEPERSONPLAN), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_L_MODE_PERSONPLAN);727containerMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,728TL("Container"), "C", TL("Create containers."),729GUIIconSubSys::getIcon(GUIIcon::MODECONTAINER), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_C_MODE_CONNECT_CONTAINER);730containerPlanMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,731TL("Container plan"), "H", TL("Create container plans."),732GUIIconSubSys::getIcon(GUIIcon::MODECONTAINERPLAN), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN);733}734735// ---------------------------------------------------------------------------736// GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands - methods737// ---------------------------------------------------------------------------738739GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::DataMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :740myModesMenuCommandsParent(modesMenuCommandsParent) {741}742743744void745GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::showDataMenuCommands() {746edgeData->show();747edgeRelData->show();748TAZRelData->show();749meanData->show();750}751752753void754GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::hideDataMenuCommands() {755edgeData->hide();756edgeRelData->hide();757TAZRelData->hide();758meanData->hide();759}760761762void763GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::buildDataMenuCommands(FXMenuPane* modesMenu) {764// build every FXMenuCommand giving it a shortcut765edgeData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,766TL("&EdgeData"), "E", TL("Create edgeData elements."),767GUIIconSubSys::getIcon(GUIIcon::MODEEDGEDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_E_MODE_EDGE_EDGEDATA);768edgeRelData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,769TL("Edge&Relation"), "R", TL("Create edgeRelation elements."),770GUIIconSubSys::getIcon(GUIIcon::MODEEDGERELDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);771TAZRelData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,772TL("TA&ZRelation"), "Z", TL("Create TAZRelation elements."),773GUIIconSubSys::getIcon(GUIIcon::MODETAZRELDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_Z_MODE_TAZ_TAZREL);774meanData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,775TL("&MeanData"), "M", TL("Create MeanData edge/lanes."),776GUIIconSubSys::getIcon(GUIIcon::MODEMEANDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_M_MODE_MOVE_MEANDATA);777}778779780// ---------------------------------------------------------------------------781// GNEApplicationWindowHelper::ModesMenuCommands - methods782// ---------------------------------------------------------------------------783#ifdef _MSC_VER784#pragma warning(push)785#pragma warning(disable: 4355) // mask warning about "this" in initializers786#endif787GNEApplicationWindowHelper::ModesMenuCommands::ModesMenuCommands(GNEApplicationWindow* applicationWindow) :788commonMenuCommands(this),789networkMenuCommands(this),790demandMenuCommands(this),791dataMenuCommands(this),792myApplicationWindow(applicationWindow) {793}794#ifdef _MSC_VER795#pragma warning(pop)796#endif797798799void800GNEApplicationWindowHelper::ModesMenuCommands::buildModesMenuCommands(FXMenuPane* modesMenu) {801commonMenuCommands.buildCommonMenuCommands(modesMenu);802// build Network modes commands and hide it803networkMenuCommands.buildNetworkMenuCommands(modesMenu);804networkMenuCommands.hideNetworkMenuCommands();805// build Demand Modes commands806demandMenuCommands.buildDemandMenuCommands(modesMenu);807demandMenuCommands.hideDemandMenuCommands();808// build Data Modes commands809dataMenuCommands.buildDataMenuCommands(modesMenu);810dataMenuCommands.hideDataMenuCommands();811}812813814void815GNEApplicationWindowHelper::ModesMenuCommands::setDefaultView(Supermode supermode) {816if (supermode == Supermode::NETWORK) {817networkMenuCommands.showNetworkMenuCommands();818} else if (supermode == Supermode::DEMAND) {819demandMenuCommands.showDemandMenuCommands();820} else if (supermode == Supermode::DATA) {821dataMenuCommands.showDataMenuCommands();822}823}824825826void827GNEApplicationWindowHelper::ModesMenuCommands::setJuPedSimView(Supermode supermode) {828if (supermode == Supermode::NETWORK) {829networkMenuCommands.connectMode->hide();830networkMenuCommands.TLSMode->hide();831networkMenuCommands.prohibitionMode->hide();832networkMenuCommands.wireMode->hide();833networkMenuCommands.decalMode->hide();834} else if (supermode == Supermode::DEMAND) {835demandMenuCommands.moveMode->hide();836demandMenuCommands.vehicleMode->hide();837demandMenuCommands.stopMode->hide();838demandMenuCommands.containerMode->hide();839demandMenuCommands.containerPlanMode->hide();840} else if (supermode == Supermode::DATA) {841dataMenuCommands.hideDataMenuCommands();842}843}844845// ---------------------------------------------------------------------------846// GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions - methods847// ---------------------------------------------------------------------------848849GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::NetworkViewOptions(GNEApplicationWindow* applicationWindow) :850myApplicationWindow(applicationWindow) {851}852853854void855GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::buildNetworkViewOptionsMenuChecks(FXMenuPane* editMenu) {856// create menu checks857menuCheckToggleGrid = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,858TL("Show grid"), "Ctrl+G or Alt+1", "",859GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEGRID),860myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID);861862menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,863TL("Hide junction shape"), "Ctrl+J or Alt+2", "",864GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),865myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);866867menuCheckDrawSpreadVehicles = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,868TL("Draw vehicles spread in lane or in depart position"), "Alt+3", "",869GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SPREADVEHICLE),870myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES);871872menuCheckShowDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,873TL("Show demand elements"), "Alt+4", "",874GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS),875myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS);876877menuCheckSelectEdges = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,878TL("Clicking should target lanes"), "Alt+5", "",879GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SELECTEDGES),880myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES);881882menuCheckShowConnections = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,883TL("Show connections over junctions"), "Alt+6", "",884GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWCONNECTIONS),885myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS);886887menuCheckHideConnections = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,888TL("Hide connections"), "Alt+7", "",889GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_HIDECONNECTIONS),890myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS);891892menuCheckShowAdditionalSubElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,893TL("Show sub-additional elements"), "Alt+8", "",894GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWSUBADDITIONALS),895myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS);896897menuCheckShowTAZElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,898TL("Show TAZ elements"), "Alt+9", "",899GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWTAZELEMENTS),900myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS);901902menuCheckExtendSelection = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,903TL("Selecting multiple edges automatically select their junctions"), "Alt+10", "",904GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_AUTOSELECTJUNCTIONS),905myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION);906907menuCheckChangeAllPhases = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,908TL("Clicking should apply state changes to all phases of TLS plan"), "Alt+5", "",909GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_APPLYTOALLPHASES),910myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES);911912menuCheckMergeAutomatically = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,913TL("Don't ask for confirmation before merging junction"), "Alt+5", "",914GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_MERGEAUTOMATICALLY),915myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY);916917menuCheckChainEdges = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,918TL("Create consecutive edges"), "Alt+5", "",919GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_CHAIN),920myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES);921922menuCheckAutoOppositeEdge = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,923TL("Create an edge in the opposite direction"), "Alt+6", "",924GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_TWOWAY),925myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES);926927menuCheckMoveElevation = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,928TL("Apply mouse movement to elevation"), "Alt+7", "",929GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_ELEVATION),930myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION);931932menuCheckShowJunctionBubble = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,933TL("Show bubbles over junctions shapes"), "Alt+8", "",934GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_BUBBLES),935myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES);936937// build separator938separator = new FXMenuSeparator(editMenu);939}940941942void943GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::hideNetworkViewOptionsMenuChecks() {944menuCheckToggleGrid->hide();945menuCheckToggleDrawJunctionShape->hide();946menuCheckDrawSpreadVehicles->hide();947menuCheckShowDemandElements->hide();948menuCheckSelectEdges->hide();949menuCheckShowConnections->hide();950menuCheckHideConnections->hide();951menuCheckShowAdditionalSubElements->hide();952menuCheckShowTAZElements->hide();953menuCheckExtendSelection->hide();954menuCheckChangeAllPhases->hide();955menuCheckMergeAutomatically->hide();956menuCheckShowJunctionBubble->hide();957menuCheckMoveElevation->hide();958menuCheckChainEdges->hide();959menuCheckAutoOppositeEdge->hide();960separator->hide();961}962963964void965GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::updateShortcuts() {966int index = 2;967// update all accel text968if (menuCheckDrawSpreadVehicles->shown()) {969menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());970index++;971}972if (menuCheckDrawSpreadVehicles->shown()) {973menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());974index++;975}976if (menuCheckShowDemandElements->shown()) {977menuCheckShowDemandElements->setAccelText(("Alt+" + toString(index)).c_str());978index++;979}980if (menuCheckSelectEdges->shown()) {981menuCheckSelectEdges->setAccelText(("Alt+" + toString(index)).c_str());982index++;983}984if (menuCheckShowConnections->shown()) {985menuCheckShowConnections->setAccelText(("Alt+" + toString(index)).c_str());986index++;987}988if (menuCheckHideConnections->shown()) {989menuCheckHideConnections->setAccelText(("Alt+" + toString(index)).c_str());990index++;991}992if (menuCheckShowAdditionalSubElements->shown()) {993menuCheckShowAdditionalSubElements->setAccelText(("Alt+" + toString(index)).c_str());994index++;995}996if (menuCheckShowTAZElements->shown()) {997menuCheckShowTAZElements->setAccelText(("Alt+" + toString(index)).c_str());998index++;999}1000if (menuCheckExtendSelection->shown()) {1001menuCheckExtendSelection->setAccelText(("Alt+" + toString(index)).c_str());1002index++;1003}1004if (menuCheckChangeAllPhases->shown()) {1005menuCheckChangeAllPhases->setAccelText(("Alt+" + toString(index)).c_str());1006index++;1007}1008if (menuCheckMergeAutomatically->shown()) {1009menuCheckMergeAutomatically->setAccelText(("Alt+" + toString(index)).c_str());1010index++;1011}1012if (menuCheckChainEdges->shown()) {1013menuCheckChainEdges->setAccelText(("Alt+" + toString(index)).c_str());1014index++;1015}1016if (menuCheckAutoOppositeEdge->shown()) {1017menuCheckAutoOppositeEdge->setAccelText(("Alt+" + toString(index)).c_str());1018index++;1019}1020if (menuCheckMoveElevation->shown()) {1021menuCheckMoveElevation->setAccelText(("Alt+" + toString(index)).c_str());1022index++;1023}1024if (menuCheckShowJunctionBubble->shown()) {1025menuCheckShowJunctionBubble->setAccelText(("Alt+" + toString(index)).c_str());1026index++;1027}1028}10291030// ---------------------------------------------------------------------------1031// GNEApplicationWindowHelper::DemandViewOptions - methods1032// ---------------------------------------------------------------------------10331034GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::DemandViewOptions(GNEApplicationWindow* applicationWindow) :1035myApplicationWindow(applicationWindow) {1036}103710381039void1040GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::buildDemandViewOptionsMenuChecks(FXMenuPane* editMenu) {1041// create menu checks1042menuCheckToggleGrid = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1043TL("Show grid"), "Ctrl+G or Alt+1", "",1044GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEGRID),1045myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID);10461047menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1048TL("Hide junction shape"), "Ctrl+J or Alt+2", "",1049GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),1050myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);10511052menuCheckDrawSpreadVehicles = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1053TL("Draw vehicles spread/depart position"), "Alt+3", "",1054GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SPREADVEHICLE),1055myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES);10561057menuCheckHideShapes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1058TL("Show shapes"), "Alt+4", "",1059GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_HIDESHAPES),1060myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES);10611062menuCheckShowAllTrips = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1063TL("Show all trips"), "Alt+5", "",1064GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWTRIPS),1065myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS);10661067menuCheckShowAllPersonPlans = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1068TL("Show all person plans"), "Alt+6", "",1069GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWPERSONPLANS),1070myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS);10711072menuCheckLockPerson = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1073TL("Lock selected person"), "Alt+7", "",1074GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_LOCKPERSON),1075myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON);10761077menuCheckShowAllContainerPlans = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1078TL("Show all container plans"), "Alt+6", "",1079GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWCONTAINERPLANS),1080myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS);10811082menuCheckLockContainer = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1083TL("Lock selected container"), "Alt+7", "",1084GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_LOCKCONTAINER),1085myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER);10861087menuCheckHideNonInspectedDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1088TL("Show non-inspected demand elements"), "Alt+8", "",1089GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_HIDENONINSPECTEDDEMANDELEMENTS),1090myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED);10911092menuCheckShowOverlappedRoutes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1093TL("Show number of overlapped routes"), "Alt+9", "",1094GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWOVERLAPPEDROUTES),1095myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES);10961097// build separator1098separator = new FXMenuSeparator(editMenu);1099}110011011102void1103GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::hideDemandViewOptionsMenuChecks() {1104menuCheckToggleGrid->hide();1105menuCheckToggleDrawJunctionShape->hide();1106menuCheckDrawSpreadVehicles->hide();1107menuCheckHideShapes->hide();1108menuCheckShowAllTrips->hide();1109menuCheckHideNonInspectedDemandElements->hide();1110menuCheckShowOverlappedRoutes->hide();1111menuCheckShowAllPersonPlans->hide();1112menuCheckLockPerson->hide();1113menuCheckShowAllContainerPlans->hide();1114menuCheckLockContainer->hide();1115separator->hide();1116}111711181119void1120GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::updateShortcuts() {1121int index = 2;1122// update all accel text1123if (menuCheckDrawSpreadVehicles->shown()) {1124menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());1125index++;1126}1127if (menuCheckHideShapes->shown()) {1128menuCheckHideShapes->setAccelText(("Alt+" + toString(index)).c_str());1129index++;1130}1131if (menuCheckShowAllTrips->shown()) {1132menuCheckShowAllTrips->setAccelText(("Alt+" + toString(index)).c_str());1133index++;1134}1135if (menuCheckHideNonInspectedDemandElements->shown()) {1136menuCheckHideNonInspectedDemandElements->setAccelText(("Alt+" + toString(index)).c_str());1137index++;1138}1139if (menuCheckShowOverlappedRoutes->shown()) {1140menuCheckShowOverlappedRoutes->setAccelText(("Alt+" + toString(index)).c_str());1141index++;1142}1143if (menuCheckShowAllPersonPlans->shown()) {1144menuCheckShowAllPersonPlans->setAccelText(("Alt+" + toString(index)).c_str());1145index++;1146}1147if (menuCheckLockPerson->shown()) {1148menuCheckLockPerson->setAccelText(("Alt+" + toString(index)).c_str());1149index++;1150}1151if (menuCheckShowAllContainerPlans->shown()) {1152menuCheckShowAllContainerPlans->setAccelText(("Alt+" + toString(index)).c_str());1153index++;1154}1155if (menuCheckLockContainer->shown()) {1156menuCheckLockContainer->setAccelText(("Alt+" + toString(index)).c_str());1157index++;1158}1159}11601161// ---------------------------------------------------------------------------1162// GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions - methods1163// ---------------------------------------------------------------------------11641165GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::DataViewOptions(GNEApplicationWindow* applicationWindow) :1166myApplicationWindow(applicationWindow) {1167}116811691170void1171GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::buildDataViewOptionsMenuChecks(FXMenuPane* editMenu) {1172// create menu checks1173menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1174TL("Hide junction shape"), "Ctrl+J or Alt+1", "",1175GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),1176myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);11771178menuCheckShowAdditionals = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1179TL("Show additionals"), "Alt+2", "",1180GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_SHOWADDITIONALS),1181myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS);11821183menuCheckShowShapes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1184TL("Show shapes"), "Alt+3", "",1185GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_SHOWSHAPES),1186myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES);11871188menuCheckShowDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1189TL("Show demand elements"), "Alt+4", "",1190GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS),1191myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS);11921193menuCheckToggleTAZRelDrawing = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1194TL("Draw TAZRel from center"), "Alt+5", "",1195GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELDRAWING),1196myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING);11971198menuCheckToggleTAZDrawFill = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1199TL("Draw TAZ fill"), "Alt+6", "",1200GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZDRAWFILL),1201myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL);12021203menuCheckToggleTAZRelOnlyFrom = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1204TL("Only draw TAZRel from"), "Alt+6", "",1205GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELONLYFROM),1206myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM);12071208menuCheckToggleTAZRelOnlyTo = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1209TL("Only draw TAZRel to"), "Alt+7", "",1210GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELONLYTO),1211myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO);1212// build separator1213separator = new FXMenuSeparator(editMenu);1214}121512161217void1218GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::hideDataViewOptionsMenuChecks() {1219menuCheckToggleDrawJunctionShape->hide();1220menuCheckShowAdditionals->hide();1221menuCheckShowShapes->hide();1222menuCheckShowDemandElements->hide();1223menuCheckToggleTAZRelDrawing->hide();1224menuCheckToggleTAZDrawFill->hide();1225menuCheckToggleTAZRelOnlyFrom->hide();1226menuCheckToggleTAZRelOnlyTo->hide();1227separator->hide();1228}122912301231void1232GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::updateShortcuts() {1233int index = 2;1234// update all accel text1235if (menuCheckShowAdditionals->shown()) {1236menuCheckShowAdditionals->setAccelText(("Alt+" + toString(index)).c_str());1237index++;1238}1239if (menuCheckShowShapes->shown()) {1240menuCheckShowShapes->setAccelText(("Alt+" + toString(index)).c_str());1241index++;1242}1243if (menuCheckShowDemandElements->shown()) {1244menuCheckShowDemandElements->setAccelText(("Alt+" + toString(index)).c_str());1245index++;1246}1247if (menuCheckToggleTAZRelDrawing->shown()) {1248menuCheckToggleTAZRelDrawing->setAccelText(("Alt+" + toString(index)).c_str());1249index++;1250}1251if (menuCheckToggleTAZDrawFill->shown()) {1252menuCheckToggleTAZDrawFill->setAccelText(("Alt+" + toString(index)).c_str());1253index++;1254}1255if (menuCheckToggleTAZRelOnlyFrom->shown()) {1256menuCheckToggleTAZRelOnlyFrom->setAccelText(("Alt+" + toString(index)).c_str());1257index++;1258}1259if (menuCheckToggleTAZRelOnlyTo->shown()) {1260menuCheckToggleTAZRelOnlyTo->setAccelText(("Alt+" + toString(index)).c_str());1261index++;1262}1263}12641265// ---------------------------------------------------------------------------1266// GNEApplicationWindowHelper::EditMenuCommands - methods1267// ---------------------------------------------------------------------------12681269GNEApplicationWindowHelper::EditMenuCommands::EditMenuCommands(GNEApplicationWindow* applicationWindow) :1270networkViewOptions(applicationWindow),1271demandViewOptions(applicationWindow),1272dataViewOptions(applicationWindow),1273myApplicationWindow(applicationWindow) {1274}127512761277void1278GNEApplicationWindowHelper::EditMenuCommands::buildUndoRedoMenuCommands(FXMenuPane* editMenu) {1279// build undo/redo command1280undoLastChange = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1281TL("Undo"), "Ctrl+Z", TL("Undo the last change."),1282GUIIconSubSys::getIcon(GUIIcon::UNDO), myApplicationWindow, MID_HOTKEY_CTRL_Z_UNDO);1283redoLastChange = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1284TL("Redo"), "Ctrl+Y", TL("Redo the last change."),1285GUIIconSubSys::getIcon(GUIIcon::REDO), myApplicationWindow, MID_HOTKEY_CTRL_Y_REDO);1286openUndolistDialog = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1287TL("Show undo/redo history"), "", TL("Open undo/redo history dialog."),1288GUIIconSubSys::getIcon(GUIIcon::UNDOLIST), myApplicationWindow, MID_GNE_UNDOLISTDIALOG);1289// add checkBox for recomputing in data mode1290menuCheckAllowUndoRedo = GUIDesigns::buildFXMenuCheckbox(editMenu,1291TL("Allow undo-redo"), "",1292myApplicationWindow, MID_GNE_TOGGLE_UNDOREDO);1293menuCheckAllowUndoRedo->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true));1294}129512961297void1298GNEApplicationWindowHelper::EditMenuCommands::buildViewMenuCommands(FXMenuPane* editMenu) {1299// build rest of menu commands1300editViewScheme = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1301TL("Edit Visualisation"), "F9", TL("Opens a dialog for editing visualization settings."),1302GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), myApplicationWindow, MID_HOTKEY_F9_EDIT_VIEWSCHEME);1303editViewPort = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1304TL("Edit Viewport"), "Ctrl+I", TL("Opens a dialog for editing viewing area, zoom and rotation."),1305GUIIconSubSys::getIcon(GUIIcon::EDITVIEWPORT), myApplicationWindow, MID_HOTKEY_CTRL_I_EDITVIEWPORT);1306}130713081309void1310GNEApplicationWindowHelper::EditMenuCommands::buildFrontElementMenuCommand(FXMenuPane* editMenu) {1311// add clear front element1312clearFrontElement = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1313TL("Clear front element"), "F11", TL("Clear current front element"),1314GUIIconSubSys::getIcon(GUIIcon::FRONTELEMENT), myApplicationWindow, MID_HOTKEY_F11_FRONTELEMENT);1315}131613171318void1319GNEApplicationWindowHelper::EditMenuCommands::buildOpenSUMOMenuCommands(FXMenuPane* editMenu) {1320// add open in sumo options1321loadAdditionalsInSUMOGUI = GUIDesigns::buildFXMenuCheckbox(editMenu,1322TL("Load additionals in sumo-gui"), TL("Load additionals in sumo-gui."),1323myApplicationWindow, MID_TOOLBAREDIT_LOADADDITIONALS);1324loadAdditionalsInSUMOGUI->setCheck(TRUE);1325loadDemandInSUMOGUI = GUIDesigns::buildFXMenuCheckbox(editMenu,1326TL("Load demand in sumo-gui"), TL("Load demand in sumo-gui."),1327myApplicationWindow, MID_TOOLBAREDIT_LOADDEMAND);1328loadDemandInSUMOGUI->setCheck(TRUE);1329openInSUMOGUI = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1330TL("Open in sumo-gui"), "Ctrl+T", TL("Opens the sumo-gui application with the current network."),1331GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), myApplicationWindow, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);1332}13331334// ---------------------------------------------------------------------------1335// GNEApplicationWindowHelper::LockMenuCommands - methods1336// ---------------------------------------------------------------------------13371338GNEApplicationWindowHelper::LockMenuCommands::LockMenuCommands(GNEApplicationWindow* applicationWindow) :1339myApplicationWindow(applicationWindow) {1340}134113421343void1344GNEApplicationWindowHelper::LockMenuCommands::buildLockMenuCommands(FXMenuPane* fileMenu) {1345// network1346menuCheckLockJunctions = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1347TL("&Junctions"), "", "",1348GUIIconSubSys::getIcon(GUIIcon::JUNCTION),1349myApplicationWindow, MID_GNE_LOCK_ELEMENT);13501351menuCheckLockEdges = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1352TL("&Edges"), "", "",1353GUIIconSubSys::getIcon(GUIIcon::EDGE),1354myApplicationWindow, MID_GNE_LOCK_ELEMENT);13551356menuCheckLockLanes = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1357TL("&Lanes"), "", "",1358GUIIconSubSys::getIcon(GUIIcon::LANE),1359myApplicationWindow, MID_GNE_LOCK_ELEMENT);13601361menuCheckLockConnections = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1362TL("&Connections"), "", "",1363GUIIconSubSys::getIcon(GUIIcon::CONNECTION),1364myApplicationWindow, MID_GNE_LOCK_ELEMENT);13651366menuCheckLockCrossings = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1367TL("C&rossings"), "", "",1368GUIIconSubSys::getIcon(GUIIcon::CROSSING),1369myApplicationWindow, MID_GNE_LOCK_ELEMENT);13701371menuCheckLockWalkingAreas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1372TL("Walkin&gAreas"), "", "",1373GUIIconSubSys::getIcon(GUIIcon::WALKINGAREA),1374myApplicationWindow, MID_GNE_LOCK_ELEMENT);13751376menuCheckLockAdditionals = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1377TL("&Additionals"), "", "",1378GUIIconSubSys::getIcon(GUIIcon::BUSSTOP),1379myApplicationWindow, MID_GNE_LOCK_ELEMENT);13801381menuCheckLockTAZs = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1382TL("&TAZs"), "", "",1383GUIIconSubSys::getIcon(GUIIcon::TAZ),1384myApplicationWindow, MID_GNE_LOCK_ELEMENT);13851386menuCheckLockWires = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1387TL("&Wires"), "", "",1388GUIIconSubSys::getIcon(GUIIcon::OVERHEADWIRE),1389myApplicationWindow, MID_GNE_LOCK_ELEMENT);13901391menuCheckLockPolygons = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1392TL("&Polygons"), "", "",1393GUIIconSubSys::getIcon(GUIIcon::POLY),1394myApplicationWindow, MID_GNE_LOCK_ELEMENT);13951396menuCheckLockPOIs = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1397TL("P&OIs"), "", "",1398GUIIconSubSys::getIcon(GUIIcon::POI),1399myApplicationWindow, MID_GNE_LOCK_ELEMENT);14001401menuCheckLockJpsWalkableAreas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1402TL("WalkableAreas"), "", "",1403GUIIconSubSys::getIcon(GUIIcon::JPS_WALKABLEAREA),1404myApplicationWindow, MID_GNE_LOCK_ELEMENT);14051406menuCheckLockJpsObstacles = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1407TL("Obstacles"), "", "",1408GUIIconSubSys::getIcon(GUIIcon::JPS_OBSTACLE),1409myApplicationWindow, MID_GNE_LOCK_ELEMENT);1410// demand1411menuCheckLockRoutes = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1412TL("&Routes"), "", "",1413GUIIconSubSys::getIcon(GUIIcon::ROUTE),1414myApplicationWindow, MID_GNE_LOCK_ELEMENT);14151416menuCheckLockVehicles = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1417TL("&Vehicles"), "", "",1418GUIIconSubSys::getIcon(GUIIcon::VEHICLE),1419myApplicationWindow, MID_GNE_LOCK_ELEMENT);14201421menuCheckLockPersons = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1422TL("&Persons"), "", "",1423GUIIconSubSys::getIcon(GUIIcon::PERSON),1424myApplicationWindow, MID_GNE_LOCK_ELEMENT);14251426menuCheckLockPersonTrips = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1427TL("Person&Trips"), "", "",1428GUIIconSubSys::getIcon(GUIIcon::PERSONTRIP_EDGE),1429myApplicationWindow, MID_GNE_LOCK_ELEMENT);14301431menuCheckLockWalks = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1432TL("&Walks"), "", "",1433GUIIconSubSys::getIcon(GUIIcon::WALK_EDGE),1434myApplicationWindow, MID_GNE_LOCK_ELEMENT);14351436menuCheckLockRides = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1437TL("Ri&des"), "", "",1438GUIIconSubSys::getIcon(GUIIcon::RIDE_EDGE),1439myApplicationWindow, MID_GNE_LOCK_ELEMENT);14401441menuCheckLockContainers = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1442TL("&Containers"), "", "",1443GUIIconSubSys::getIcon(GUIIcon::CONTAINER),1444myApplicationWindow, MID_GNE_LOCK_ELEMENT);14451446menuCheckLockTransports = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1447TL("Tra&nsports"), "", "",1448GUIIconSubSys::getIcon(GUIIcon::TRANSPORT_EDGE),1449myApplicationWindow, MID_GNE_LOCK_ELEMENT);14501451menuCheckLockTranships = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1452TL("Trans&hips"), "", "",1453GUIIconSubSys::getIcon(GUIIcon::TRANSHIP_EDGE),1454myApplicationWindow, MID_GNE_LOCK_ELEMENT);14551456menuCheckLockStops = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1457TL("Stop&s"), "", "",1458GUIIconSubSys::getIcon(GUIIcon::STOPELEMENT),1459myApplicationWindow, MID_GNE_LOCK_ELEMENT);1460// data1461menuCheckLockEdgeDatas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1462TL("&EdgeDatas"), "", "",1463GUIIconSubSys::getIcon(GUIIcon::EDGEDATA),1464myApplicationWindow, MID_GNE_LOCK_ELEMENT);14651466menuCheckLockEdgeRelDatas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1467TL("E&dgeRelDatas"), "", "",1468GUIIconSubSys::getIcon(GUIIcon::EDGERELDATA),1469myApplicationWindow, MID_GNE_LOCK_ELEMENT);14701471menuCheckLockEdgeTAZRels = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1472TL("Edge&TAZRel"), "", "",1473GUIIconSubSys::getIcon(GUIIcon::TAZRELDATA),1474myApplicationWindow, MID_GNE_LOCK_ELEMENT);14751476// separator1477new FXMenuSeparator(fileMenu);14781479menuCheckLockSelectedElements = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1480TL("Lock selected elements"), "", TL("selected elements"),1481GUIIconSubSys::getIcon(GUIIcon::LOCK_SELECTED), myApplicationWindow, MID_GNE_LOCK_SELECTEDELEMENTS);14821483// separator1484new FXMenuSeparator(fileMenu);14851486GUIDesigns::buildFXMenuCommandShortcut(fileMenu,1487TL("Lock all elements"), "", TL("all elements"),1488GUIIconSubSys::getIcon(GUIIcon::LOCK), myApplicationWindow, MID_GNE_LOCK_ALLELEMENTS);14891490GUIDesigns::buildFXMenuCommandShortcut(fileMenu,1491TL("Unlock all elements"), "", TL("Unlock all elements"),1492GUIIconSubSys::getIcon(GUIIcon::UNLOCK), myApplicationWindow, MID_GNE_UNLOCK_ALLELEMENTS);1493}149414951496void1497GNEApplicationWindowHelper::LockMenuCommands::removeHotkeys() {1498// network1499menuCheckLockJunctions->remHotKey(parseHotKey('j'));1500menuCheckLockEdges->remHotKey(parseHotKey('e'));1501menuCheckLockLanes->remHotKey(parseHotKey('l'));1502menuCheckLockConnections->remHotKey(parseHotKey('c'));1503menuCheckLockCrossings->remHotKey(parseHotKey('r'));1504menuCheckLockWalkingAreas->remHotKey(parseHotKey('g'));1505menuCheckLockAdditionals->remHotKey(parseHotKey('a'));1506menuCheckLockTAZs->remHotKey(parseHotKey('t'));1507menuCheckLockWires->remHotKey(parseHotKey('w'));1508menuCheckLockPolygons->remHotKey(parseHotKey('p'));1509menuCheckLockPOIs->remHotKey(parseHotKey('o'));1510menuCheckLockJpsWalkableAreas->remHotKey(parseHotKey('n'));1511menuCheckLockJpsObstacles->remHotKey(parseHotKey('b'));1512// demand1513menuCheckLockRoutes->remHotKey(parseHotKey('r'));1514menuCheckLockVehicles->remHotKey(parseHotKey('v'));1515menuCheckLockPersons->remHotKey(parseHotKey('p'));1516menuCheckLockPersonTrips->remHotKey(parseHotKey('t'));1517menuCheckLockWalks->remHotKey(parseHotKey('w'));1518menuCheckLockRides->remHotKey(parseHotKey('d'));1519menuCheckLockContainers->remHotKey(parseHotKey('c'));1520menuCheckLockTransports->remHotKey(parseHotKey('n'));1521menuCheckLockTranships->remHotKey(parseHotKey('h'));1522menuCheckLockStops->remHotKey(parseHotKey('s'));1523// data1524menuCheckLockEdgeDatas->remHotKey(parseHotKey('e'));1525menuCheckLockEdgeRelDatas->remHotKey(parseHotKey('d'));1526menuCheckLockEdgeTAZRels->remHotKey(parseHotKey('t'));1527}15281529void1530GNEApplicationWindowHelper::LockMenuCommands::showNetworkLockMenuCommands() {1531// first enable menu commands1532menuCheckLockJunctions->enable();1533menuCheckLockEdges->enable();1534menuCheckLockLanes->enable();1535menuCheckLockConnections->enable();1536menuCheckLockCrossings->enable();1537menuCheckLockWalkingAreas->enable();1538menuCheckLockAdditionals->enable();1539menuCheckLockTAZs->enable();1540menuCheckLockWires->enable();1541menuCheckLockPolygons->enable();1542menuCheckLockPOIs->enable();1543menuCheckLockJpsWalkableAreas->enable();1544menuCheckLockJpsObstacles->enable();1545// set accels1546menuCheckLockJunctions->addHotKey(parseHotKey('j'));1547menuCheckLockEdges->addHotKey(parseHotKey('e'));1548menuCheckLockLanes->addHotKey(parseHotKey('l'));1549menuCheckLockConnections->addHotKey(parseHotKey('c'));1550menuCheckLockCrossings->addHotKey(parseHotKey('r'));1551menuCheckLockWalkingAreas->addHotKey(parseHotKey('g'));1552menuCheckLockAdditionals->addHotKey(parseHotKey('a'));1553menuCheckLockTAZs->addHotKey(parseHotKey('t'));1554menuCheckLockWires->addHotKey(parseHotKey('w'));1555menuCheckLockPolygons->addHotKey(parseHotKey('p'));1556menuCheckLockPOIs->addHotKey(parseHotKey('o'));1557menuCheckLockJpsWalkableAreas->addHotKey(parseHotKey('n'));1558menuCheckLockJpsObstacles->addHotKey(parseHotKey('b'));1559// now show it1560menuCheckLockJunctions->show();1561menuCheckLockEdges->show();1562menuCheckLockLanes->show();1563menuCheckLockConnections->show();1564menuCheckLockCrossings->show();1565menuCheckLockWalkingAreas->show();1566menuCheckLockAdditionals->show();1567menuCheckLockTAZs->show();1568menuCheckLockWires->show();1569menuCheckLockPolygons->show();1570menuCheckLockPOIs->show();1571menuCheckLockJpsWalkableAreas->show();1572menuCheckLockJpsObstacles->show();1573}157415751576void1577GNEApplicationWindowHelper::LockMenuCommands::hideNetworkLockMenuCommands() {1578// first disable menu commands1579menuCheckLockJunctions->disable();1580menuCheckLockEdges->disable();1581menuCheckLockLanes->disable();1582menuCheckLockConnections->disable();1583menuCheckLockCrossings->disable();1584menuCheckLockWalkingAreas->disable();1585menuCheckLockAdditionals->disable();1586menuCheckLockTAZs->disable();1587menuCheckLockPolygons->disable();1588menuCheckLockPOIs->disable();1589menuCheckLockJpsWalkableAreas->disable();1590menuCheckLockJpsObstacles->disable();1591// now hide it1592menuCheckLockJunctions->hide();1593menuCheckLockEdges->hide();1594menuCheckLockLanes->hide();1595menuCheckLockConnections->hide();1596menuCheckLockCrossings->hide();1597menuCheckLockWalkingAreas->hide();1598menuCheckLockAdditionals->hide();1599menuCheckLockTAZs->hide();1600menuCheckLockWires->hide();1601menuCheckLockPolygons->hide();1602menuCheckLockPOIs->hide();1603menuCheckLockJpsWalkableAreas->hide();1604menuCheckLockJpsObstacles->hide();1605}160616071608void1609GNEApplicationWindowHelper::LockMenuCommands::showDemandLockMenuCommands() {1610// first enable menu commands1611menuCheckLockRoutes->enable();1612menuCheckLockVehicles->enable();1613menuCheckLockPersons->enable();1614menuCheckLockPersonTrips->enable();1615menuCheckLockWalks->enable();1616menuCheckLockRides->enable();1617menuCheckLockContainers->enable();1618menuCheckLockTransports->enable();1619menuCheckLockTranships->enable();1620menuCheckLockStops->enable();1621// set accels1622menuCheckLockRoutes->addHotKey(parseHotKey('r'));1623menuCheckLockVehicles->addHotKey(parseHotKey('v'));1624menuCheckLockPersons->addHotKey(parseHotKey('p'));1625menuCheckLockPersonTrips->addHotKey(parseHotKey('t'));1626menuCheckLockWalks->addHotKey(parseHotKey('w'));1627menuCheckLockRides->addHotKey(parseHotKey('d'));1628menuCheckLockContainers->addHotKey(parseHotKey('c'));1629menuCheckLockTransports->addHotKey(parseHotKey('n'));1630menuCheckLockTranships->addHotKey(parseHotKey('h'));1631menuCheckLockStops->addHotKey(parseHotKey('s'));1632// now show it1633menuCheckLockRoutes->show();1634menuCheckLockVehicles->show();1635menuCheckLockPersons->show();1636menuCheckLockPersonTrips->show();1637menuCheckLockWalks->show();1638menuCheckLockRides->show();1639menuCheckLockContainers->show();1640menuCheckLockTransports->show();1641menuCheckLockTranships->show();1642menuCheckLockStops->show();1643}164416451646void1647GNEApplicationWindowHelper::LockMenuCommands::hideDemandLockMenuCommands() {1648// first disable menu commands1649menuCheckLockRoutes->disable();1650menuCheckLockVehicles->disable();1651menuCheckLockPersons->disable();1652menuCheckLockPersonTrips->disable();1653menuCheckLockWalks->disable();1654menuCheckLockRides->disable();1655menuCheckLockContainers->disable();1656menuCheckLockTransports->disable();1657menuCheckLockTranships->disable();1658menuCheckLockStops->disable();1659// now hide it1660menuCheckLockRoutes->hide();1661menuCheckLockVehicles->hide();1662menuCheckLockPersons->hide();1663menuCheckLockPersonTrips->hide();1664menuCheckLockWalks->hide();1665menuCheckLockRides->hide();1666menuCheckLockContainers->hide();1667menuCheckLockTransports->hide();1668menuCheckLockTranships->hide();1669menuCheckLockStops->hide();1670}167116721673void1674GNEApplicationWindowHelper::LockMenuCommands::showDataLockMenuCommands() {1675// first enable menu commands1676menuCheckLockEdgeDatas->enable();1677menuCheckLockEdgeRelDatas->enable();1678menuCheckLockEdgeTAZRels->enable();1679// set accels1680menuCheckLockEdgeDatas->addHotKey(parseHotKey('e'));1681menuCheckLockEdgeRelDatas->addHotKey(parseHotKey('d'));1682menuCheckLockEdgeTAZRels->addHotKey(parseHotKey('t'));1683// now show it1684menuCheckLockEdgeDatas->show();1685menuCheckLockEdgeRelDatas->show();1686menuCheckLockEdgeTAZRels->show();1687}168816891690void1691GNEApplicationWindowHelper::LockMenuCommands::hideDataLockMenuCommands() {1692// first disable menu commands1693menuCheckLockEdgeDatas->disable();1694menuCheckLockEdgeRelDatas->disable();1695menuCheckLockEdgeTAZRels->disable();1696// now hide it1697menuCheckLockEdgeDatas->hide();1698menuCheckLockEdgeRelDatas->hide();1699menuCheckLockEdgeTAZRels->hide();1700}170117021703void1704GNEApplicationWindowHelper::LockMenuCommands::lockAll() {1705menuCheckLockJunctions->setCheck(TRUE);1706menuCheckLockEdges->setCheck(TRUE);1707menuCheckLockLanes->setCheck(TRUE);1708menuCheckLockConnections->setCheck(TRUE);1709menuCheckLockCrossings->setCheck(TRUE);1710menuCheckLockWalkingAreas->setCheck(TRUE);1711menuCheckLockAdditionals->setCheck(TRUE);1712menuCheckLockTAZs->setCheck(TRUE);1713menuCheckLockWires->setCheck(TRUE);1714menuCheckLockPolygons->setCheck(TRUE);1715menuCheckLockPOIs->setCheck(TRUE);1716menuCheckLockJpsWalkableAreas->setCheck(TRUE);1717menuCheckLockJpsObstacles->setCheck(TRUE);1718menuCheckLockRoutes->setCheck(TRUE);1719menuCheckLockVehicles->setCheck(TRUE);1720menuCheckLockPersons->setCheck(TRUE);1721menuCheckLockPersonTrips->setCheck(TRUE);1722menuCheckLockWalks->setCheck(TRUE);1723menuCheckLockRides->setCheck(TRUE);1724menuCheckLockContainers->setCheck(TRUE);1725menuCheckLockTransports->setCheck(TRUE);1726menuCheckLockTranships->setCheck(TRUE);1727menuCheckLockStops->setCheck(TRUE);1728menuCheckLockEdgeDatas->setCheck(TRUE);1729menuCheckLockEdgeRelDatas->setCheck(TRUE);1730menuCheckLockEdgeTAZRels->setCheck(TRUE);1731}173217331734void1735GNEApplicationWindowHelper::LockMenuCommands::unlockAll() {1736menuCheckLockJunctions->setCheck(FALSE);1737menuCheckLockEdges->setCheck(FALSE);1738menuCheckLockLanes->setCheck(FALSE);1739menuCheckLockConnections->setCheck(FALSE);1740menuCheckLockCrossings->setCheck(FALSE);1741menuCheckLockWalkingAreas->setCheck(FALSE);1742menuCheckLockAdditionals->setCheck(FALSE);1743menuCheckLockTAZs->setCheck(FALSE);1744menuCheckLockWires->setCheck(FALSE);1745menuCheckLockPolygons->setCheck(FALSE);1746menuCheckLockPOIs->setCheck(FALSE);1747menuCheckLockJpsWalkableAreas->setCheck(FALSE);1748menuCheckLockJpsObstacles->setCheck(FALSE);1749menuCheckLockRoutes->setCheck(FALSE);1750menuCheckLockVehicles->setCheck(FALSE);1751menuCheckLockPersons->setCheck(FALSE);1752menuCheckLockPersonTrips->setCheck(FALSE);1753menuCheckLockWalks->setCheck(FALSE);1754menuCheckLockRides->setCheck(FALSE);1755menuCheckLockContainers->setCheck(FALSE);1756menuCheckLockTransports->setCheck(FALSE);1757menuCheckLockTranships->setCheck(FALSE);1758menuCheckLockStops->setCheck(FALSE);1759menuCheckLockEdgeDatas->setCheck(FALSE);1760menuCheckLockEdgeRelDatas->setCheck(FALSE);1761menuCheckLockEdgeTAZRels->setCheck(FALSE);1762}176317641765void1766GNEApplicationWindowHelper::LockMenuCommands::editLocking(const GNEAttributeCarrier* AC, const FXbool value) {1767// check elements1768if (AC->getTagProperty()->getTag() == SUMO_TAG_JUNCTION) {1769menuCheckLockJunctions->setCheck(value);1770} else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) {1771menuCheckLockEdges->setCheck(value);1772} else if (AC->getTagProperty()->getTag() == SUMO_TAG_LANE) {1773menuCheckLockLanes->setCheck(value);1774} else if (AC->getTagProperty()->getTag() == SUMO_TAG_CONNECTION) {1775menuCheckLockConnections->setCheck(value);1776} else if (AC->getTagProperty()->getTag() == SUMO_TAG_CROSSING) {1777menuCheckLockCrossings->setCheck(value);1778} else if (AC->getTagProperty()->getTag() == SUMO_TAG_WALKINGAREA) {1779menuCheckLockWalkingAreas->setCheck(value);1780} else if (AC->getTagProperty()->isAdditionalElement()) {1781menuCheckLockAdditionals->setCheck(value);1782} else if (AC->getTagProperty()->isTAZElement()) {1783menuCheckLockTAZs->setCheck(value);1784} else if (AC->getTagProperty()->isWireElement()) {1785menuCheckLockWires->setCheck(value);1786} else if (AC->getTagProperty()->getTag() == SUMO_TAG_POLY) {1787menuCheckLockPolygons->setCheck(value);1788} else if (AC->getTagProperty()->getTag() == GNE_TAG_JPS_WALKABLEAREA) {1789menuCheckLockJpsWalkableAreas->setCheck(value);1790} else if (AC->getTagProperty()->getTag() == GNE_TAG_JPS_OBSTACLE) {1791menuCheckLockJpsObstacles->setCheck(value);1792} else if ((AC->getTagProperty()->getTag() == SUMO_TAG_POI) ||1793(AC->getTagProperty()->getTag() == GNE_TAG_POILANE) ||1794(AC->getTagProperty()->getTag() == GNE_TAG_POIGEO)) {1795menuCheckLockPOIs->setCheck(value);1796} else if (AC->getTagProperty()->isRoute()) {1797menuCheckLockRoutes->setCheck(value);1798} else if (AC->getTagProperty()->isVehicle()) {1799menuCheckLockVehicles->setCheck(value);1800} else if (AC->getTagProperty()->isPerson()) {1801menuCheckLockPersons->setCheck(value);1802} else if (AC->getTagProperty()->isPlanPersonTrip()) {1803menuCheckLockPersonTrips->setCheck(value);1804} else if (AC->getTagProperty()->isPlanWalk()) {1805menuCheckLockWalks->setCheck(value);1806} else if (AC->getTagProperty()->isPlanRide()) {1807menuCheckLockRides->setCheck(value);1808} else if (AC->getTagProperty()->isContainer()) {1809menuCheckLockContainers->setCheck(value);1810} else if (AC->getTagProperty()->isPlanTransport()) {1811menuCheckLockTransports->setCheck(value);1812} else if (AC->getTagProperty()->isPlanTranship()) {1813menuCheckLockTranships->setCheck(value);1814} else if (AC->getTagProperty()->isVehicleStop() ||1815AC->getTagProperty()->isPlanStopPerson() ||1816AC->getTagProperty()->isPlanStopContainer()) {1817menuCheckLockStops->setCheck(value);1818} else if (AC->getTagProperty()->getTag() == GNE_TAG_EDGEREL_SINGLE) {1819menuCheckLockEdgeDatas->setCheck(value);1820} else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGEREL) {1821menuCheckLockEdgeRelDatas->setCheck(value);1822} else if (AC->getTagProperty()->getTag() == SUMO_TAG_TAZREL) {1823menuCheckLockEdgeTAZRels->setCheck(value);1824}1825}182618271828FXHotKey1829GNEApplicationWindowHelper::LockMenuCommands::parseHotKey(const FXwchar character) {1830FXuint code = 0, mods = 0;1831if (Unicode::isAlphaNumeric(character)) {1832mods = ALTMASK;1833code = fxucs2keysym(Unicode::toLower(character));1834}1835return MKUINT(code, mods);1836}18371838// ---------------------------------------------------------------------------1839// GNEApplicationWindowHelper::ProcessingMenuCommands - methods1840// ---------------------------------------------------------------------------18411842GNEApplicationWindowHelper::ProcessingMenuCommands::ProcessingMenuCommands(GNEApplicationWindow* applicationWindow) :1843myApplicationWindow(applicationWindow) {1844}184518461847void1848GNEApplicationWindowHelper::ProcessingMenuCommands::buildProcessingMenuCommands(FXMenuPane* processingMenu) {1849// build network processing menu commands1850computeNetwork = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1851TL("Compute Junctions"), "F5", TL("Compute junction shape and logic."),1852GUIIconSubSys::getIcon(GUIIcon::COMPUTEJUNCTIONS), myApplicationWindow, MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND);1853computeNetworkVolatile = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1854TL("Compute Junctions with volatile options"), "Shift+F5", TL("Compute junction shape and logic using volatile junctions."),1855GUIIconSubSys::getIcon(GUIIcon::COMPUTEJUNCTIONS), myApplicationWindow, MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE);1856cleanJunctions = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1857TL("Clean Junctions"), "F6", TL("Remove solitary junctions."),1858GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES);1859joinJunctions = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1860TL("Join Selected Junctions"), "F7", TL("Join selected junctions into a single junction."),1861GUIIconSubSys::getIcon(GUIIcon::JOINJUNCTIONS), myApplicationWindow, MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES);1862clearInvalidCrossings = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1863TL("Clean invalid crossings"), "F8", TL("Clear invalid crossings."),1864GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS);1865// add separator for checkBox1866mySeparatorCheckBox = new FXMenuSeparator(processingMenu);1867// add checkBox for recomputing in data mode1868menuCheckRecomputeDataMode = GUIDesigns::buildFXMenuCheckboxIcon(processingMenu,1869TL("Recompute Network in Data Mode"), "", "",1870GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), myApplicationWindow, MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA);1871// set default value1872menuCheckRecomputeDataMode->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "RecomputeData", true));1873// build demand processing menu commands1874computeDemand = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1875TL("Compute demand"), "F5", TL("Computes demand elements."),1876GUIIconSubSys::getIcon(GUIIcon::COMPUTEDEMAND), myApplicationWindow, MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND);1877cleanRoutes = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1878TL("Clean routes"), "F6", TL("Removes routes without vehicles."),1879GUIIconSubSys::getIcon(GUIIcon::CLEANROUTES), myApplicationWindow, MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES);1880joinRoutes = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1881TL("Join routes"), "F7", TL("Joins routes with the same edges."),1882GUIIconSubSys::getIcon(GUIIcon::JOINROUTES), myApplicationWindow, MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES);1883adjustPersonPlans = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1884TL("Adjust person plans"), "Shift+F7", TL("Adjust person plans (start/end positions, arrival positions, etc.)"),1885GUIIconSubSys::getIcon(GUIIcon::ADJUSTPERSONPLANS), myApplicationWindow, MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS);1886clearInvalidDemandElements = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1887TL("Clean invalid route elements"), "F8", TL("Clear elements with an invalid path (routes, Trips, Flows...)."),1888GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS);1889// add separator1890myOptionsSeparator = new FXMenuSeparator(processingMenu);1891// create optionmenus1892optionMenus = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1893TL("Sumo options"), "Shift+F10", TL("Configure sumo Options."),1894GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), myApplicationWindow, MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU);1895// add separator1896myOptionsSeparator = new FXMenuSeparator(processingMenu);1897// create optionmenus1898optionMenus = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1899TL("Options"), "F10", TL("Configure netedit Options."),1900GUIIconSubSys::getIcon(GUIIcon::OPTIONS), myApplicationWindow, MID_HOTKEY_F10_OPTIONSMENU);1901}190219031904void1905GNEApplicationWindowHelper::ProcessingMenuCommands::showNetworkProcessingMenuCommands() {1906// first enable menu commands1907computeNetwork->enable();1908computeNetworkVolatile->enable();1909cleanJunctions->enable();1910joinJunctions->enable();1911clearInvalidCrossings->enable();1912mySeparatorCheckBox->enable();1913menuCheckRecomputeDataMode->enable();1914// now show it1915computeNetwork->show();1916computeNetworkVolatile->show();1917cleanJunctions->show();1918joinJunctions->show();1919clearInvalidCrossings->show();1920mySeparatorCheckBox->show();1921menuCheckRecomputeDataMode->show();1922}192319241925void1926GNEApplicationWindowHelper::ProcessingMenuCommands::hideNetworkProcessingMenuCommands() {1927// first disable menu commands1928computeNetwork->disable();1929computeNetworkVolatile->disable();1930cleanJunctions->disable();1931joinJunctions->disable();1932clearInvalidCrossings->disable();1933// now hide it1934computeNetwork->hide();1935computeNetworkVolatile->hide();1936cleanJunctions->hide();1937joinJunctions->hide();1938clearInvalidCrossings->hide();1939}194019411942void1943GNEApplicationWindowHelper::ProcessingMenuCommands::showDemandProcessingMenuCommands() {1944// first enable menu commands1945computeDemand->enable();1946cleanRoutes->enable();1947joinRoutes->enable();1948adjustPersonPlans->enable();1949clearInvalidDemandElements->enable();1950// now show it1951computeDemand->show();1952cleanRoutes->show();1953joinRoutes->show();1954adjustPersonPlans->show();1955clearInvalidDemandElements->show();1956}195719581959void1960GNEApplicationWindowHelper::ProcessingMenuCommands::hideDemandProcessingMenuCommands() {1961// first disable menu commands1962computeDemand->disable();1963cleanRoutes->disable();1964joinRoutes->disable();1965adjustPersonPlans->disable();1966clearInvalidDemandElements->disable();1967// now hide it1968computeDemand->hide();1969cleanRoutes->hide();1970joinRoutes->hide();1971adjustPersonPlans->hide();1972clearInvalidDemandElements->hide();1973}197419751976void1977GNEApplicationWindowHelper::ProcessingMenuCommands::showDataProcessingMenuCommands() {1978// currently nothing to show1979}198019811982void1983GNEApplicationWindowHelper::ProcessingMenuCommands::hideDataProcessingMenuCommands() {1984// currently nothing to hide1985}198619871988void1989GNEApplicationWindowHelper::ProcessingMenuCommands::showSeparator() {1990myOptionsSeparator->show();1991}199219931994void1995GNEApplicationWindowHelper::ProcessingMenuCommands::hideSeparator() {1996myOptionsSeparator->hide();1997}19981999// ---------------------------------------------------------------------------2000// GNEApplicationWindowHelper::LocateMenuCommands - methods2001// ---------------------------------------------------------------------------20022003GNEApplicationWindowHelper::LocateMenuCommands::LocateMenuCommands(GNEApplicationWindow* applicationWindow) :2004myApplicationWindow(applicationWindow) {2005}200620072008void2009GNEApplicationWindowHelper::LocateMenuCommands::buildLocateMenuCommands(FXMenuPane* locateMenu) {2010// build locate menu commands2011GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2012TL("&Junctions"), "Shift+J", TL("Open a dialog for locating a Junction."),2013GUIIconSubSys::getIcon(GUIIcon::LOCATEJUNCTION), myApplicationWindow, MID_HOTKEY_SHIFT_J_LOCATEJUNCTION);2014GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2015TL("&Edges"), "Shift+E", TL("Open a dialog for locating an Edge."),2016GUIIconSubSys::getIcon(GUIIcon::LOCATEEDGE), myApplicationWindow, MID_HOTKEY_SHIFT_E_LOCATEEDGE);2017GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2018TL("&WalkingAreas"), "Shift+W", TL("Open a dialog for locating a Walking Area."),2019GUIIconSubSys::getIcon(GUIIcon::LOCATEWALKINGAREA), myApplicationWindow, MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA);2020GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2021TL("&Vehicles"), "Shift+V", TL("Open a dialog for locating a Vehicle."),2022GUIIconSubSys::getIcon(GUIIcon::LOCATEVEHICLE), myApplicationWindow, MID_HOTKEY_SHIFT_V_LOCATEVEHICLE);2023GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2024TL("&Persons"), "Shift+P", TL("Open a dialog for locating a Person."),2025GUIIconSubSys::getIcon(GUIIcon::LOCATEPERSON), myApplicationWindow, MID_HOTKEY_SHIFT_P_LOCATEPERSON);2026GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2027TL("&Containers"), "Shift+C", TL("Open a dialog for locating a Container."),2028GUIIconSubSys::getIcon(GUIIcon::LOCATECONTAINER), myApplicationWindow, MID_HOTKEY_SHIFT_C_LOCATECONTAINER);2029GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2030TL("&Route"), "Shift+R", TL("Open a dialog for locating a Route."),2031GUIIconSubSys::getIcon(GUIIcon::LOCATEROUTE), myApplicationWindow, MID_HOTKEY_SHIFT_R_LOCATEROUTE);2032GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2033TL("&Stops"), "Shift+S", TL("Open a dialog for locating a Stop."),2034GUIIconSubSys::getIcon(GUIIcon::LOCATESTOP), myApplicationWindow, MID_HOTKEY_SHIFT_S_LOCATESTOP);2035GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2036TL("&TLS"), "Shift+T", TL("Open a dialog for locating a Traffic Light."),2037GUIIconSubSys::getIcon(GUIIcon::LOCATETLS), myApplicationWindow, MID_HOTKEY_SHIFT_T_LOCATETLS);2038GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2039TL("&Additional"), "Shift+A", TL("Open a dialog for locating an Additional Structure."),2040GUIIconSubSys::getIcon(GUIIcon::LOCATEADD), myApplicationWindow, MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL);2041GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2042TL("P&oI"), "Shift+O", TL("Open a dialog for locating a Point of Interest."),2043GUIIconSubSys::getIcon(GUIIcon::LOCATEPOI), myApplicationWindow, MID_HOTKEY_SHIFT_O_LOCATEPOI);2044GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2045TL("Po&lygon"), "Shift+L", TL("Open a dialog for locating a Polygon."),2046GUIIconSubSys::getIcon(GUIIcon::LOCATEPOLY), myApplicationWindow, MID_HOTKEY_SHIFT_L_LOCATEPOLY);2047}20482049// ---------------------------------------------------------------------------2050// GNEApplicationWindowHelper::ToolsMenuCommands - methods2051// ---------------------------------------------------------------------------20522053GNEApplicationWindowHelper::ToolsMenuCommands::ToolsMenuCommands(GNEApplicationWindow* applicationWindow) :2054myApplicationWindow(applicationWindow) {2055}205620572058GNEApplicationWindowHelper::ToolsMenuCommands::~ToolsMenuCommands() {2059// delete all tools2060for (const auto& tool : myPythonTools) {2061delete tool;2062}2063// delete dialogs2064if (myPythonToolDialog) {2065delete myPythonToolDialog;2066}2067}206820692070void2071GNEApplicationWindowHelper::ToolsMenuCommands::buildTools(FXMenuPane* toolsMenu,2072const std::map<std::string, FXMenuPane*>& menuPaneToolMaps) {2073// build tools from template2074// the templateTools vector is imported from templates.h (which only exists in the cmake-build folder)2075for (const auto& templateTool : templateTools) {2076if (templateTool.name == "netdiff") {2077myPythonTools.push_back(new GNENetDiffTool(myApplicationWindow, templateTool.pythonPath,2078menuPaneToolMaps.at(templateTool.subfolder)));2079} else if (menuPaneToolMaps.count(templateTool.subfolder) > 0) {2080myPythonTools.push_back(new GNEPythonTool(myApplicationWindow, templateTool.pythonPath,2081templateTool.templateStr, menuPaneToolMaps.at(templateTool.subfolder)));2082} else {2083myPythonTools.push_back(new GNEPythonTool(myApplicationWindow, templateTool.pythonPath,2084templateTool.templateStr, toolsMenu));2085}2086}2087}208820892090long2091GNEApplicationWindowHelper::ToolsMenuCommands::showTool(FXObject* menuCommand) {2092// iterate over all tools and find menu command2093for (const auto& tool : myPythonTools) {2094if (tool->getMenuCommand() == menuCommand) {2095if (myPythonToolDialog) {2096delete myPythonToolDialog;2097}2098myPythonToolDialog = new GNEPythonToolDialog(myApplicationWindow, tool);2099return 1;2100}2101}2102return 0;2103}210421052106long2107GNEApplicationWindowHelper::ToolsMenuCommands::runToolDialog(FXObject* menuCommand) const {2108// iterate over all tools and find menu command2109for (const auto& tool : myPythonTools) {2110if (tool->getMenuCommand() == menuCommand) {2111GNERunPythonToolDialog(myApplicationWindow, tool);2112return 1;2113}2114}2115return 0;2116}211721182119long2120GNEApplicationWindowHelper::ToolsMenuCommands::postProcessing(FXObject* menuCommand) const {2121// iterate over all tools and find menu command2122for (const auto& tool : myPythonTools) {2123if (tool->getMenuCommand() == menuCommand) {2124// execute postProcessing2125tool->postProcessing();2126return 1;2127}2128}2129return 0;2130}21312132// ---------------------------------------------------------------------------2133// GNEApplicationWindowHelper::WindowsMenuCommands - methods2134// ---------------------------------------------------------------------------21352136GNEApplicationWindowHelper::WindowsMenuCommands::WindowsMenuCommands(GNEApplicationWindow* applicationWindow) :2137myApplicationWindow(applicationWindow) {2138}213921402141void2142GNEApplicationWindowHelper::WindowsMenuCommands::buildWindowsMenuCommands(FXMenuPane* windowsMenu,2143FXStatusBar* statusbar, GUIMessageWindow* messageWindow) {2144// build windows menu commands2145GUIDesigns::buildFXMenuCheckbox(windowsMenu,2146TL("Show Status Line"), TL("Toggle this Status Bar on/off."),2147statusbar, FXWindow::ID_TOGGLESHOWN);2148GUIDesigns::buildFXMenuCheckbox(windowsMenu,2149TL("Show Message Window"), TL("Toggle the Message Window on/off."),2150messageWindow, FXWindow::ID_TOGGLESHOWN);2151new FXMenuSeparator(windowsMenu);2152GUIDesigns::buildFXMenuCommandShortcut(windowsMenu,2153TL("Clear Message Window"), "", TL("Clear the Message Window."),2154GUIIconSubSys::getIcon(GUIIcon::CLEARMESSAGEWINDOW), myApplicationWindow, MID_CLEARMESSAGEWINDOW);2155}21562157// ---------------------------------------------------------------------------2158// GNEApplicationWindowHelper::WindowsMenuCommands - methods2159// ---------------------------------------------------------------------------21602161GNEApplicationWindowHelper::HelpMenuCommands::HelpMenuCommands(GNEApplicationWindow* applicationWindow) :2162myApplicationWindow(applicationWindow) {2163}216421652166void2167GNEApplicationWindowHelper::HelpMenuCommands::buildHelpMenuCommands(FXMenuPane* helpMenu) {2168// build windows menu commands2169GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Online Documentation"), "F1", TL("Open Online documentation."),2170nullptr, myApplicationWindow, MID_HOTKEY_F1_ONLINEDOCUMENTATION);2171new FXMenuSeparator(helpMenu);2172GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Changelog"), "", TL("Open Changelog."),2173nullptr, myApplicationWindow, MID_CHANGELOG);2174GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Hotkeys"), "", TL("Open Hotkeys."),2175nullptr, myApplicationWindow, MID_HOTKEYS);2176GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Tutorial"), "", TL("Open Tutorial."),2177nullptr, myApplicationWindow, MID_TUTORIAL);2178GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Feedback"), "", TL("Open feedback channels."),2179nullptr, myApplicationWindow, MID_FEEDBACK);2180new FXMenuSeparator(helpMenu);2181GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("About"), "F12", TL("About netedit."),2182GUIIconSubSys::getIcon(GUIIcon::NETEDIT_MINI), myApplicationWindow, MID_HOTKEY_F12_ABOUT);2183}21842185// ---------------------------------------------------------------------------2186// GNEApplicationWindowHelper::NetworkCheckableButtons - methods2187// ---------------------------------------------------------------------------21882189GNEApplicationWindowHelper::SupermodeCommands::SupermodeCommands(GNEApplicationWindow* applicationWindow) :2190myApplicationWindow(applicationWindow) {2191}219221932194void2195GNEApplicationWindowHelper::SupermodeCommands::showSupermodeCommands() {2196networkMode->show();2197demandMode->show();2198dataMode->show();2199}220022012202void2203GNEApplicationWindowHelper::SupermodeCommands::setDefaultView() {2204showSupermodeCommands();2205}220622072208void2209GNEApplicationWindowHelper::SupermodeCommands::setJuPedSimView() {2210dataMode->hide();2211}221222132214void2215GNEApplicationWindowHelper::SupermodeCommands::buildSupermodeCommands(FXMenuPane* editMenu) {2216// build supermode menu commands2217networkMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,2218TL("&Network"), "F2", TL("Select network mode."),2219GUIIconSubSys::getIcon(GUIIcon::SUPERMODENETWORK), myApplicationWindow, MID_HOTKEY_F2_SUPERMODE_NETWORK);2220demandMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,2221TL("&Demand"), "F3", TL("Select demand mode."),2222GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDEMAND), myApplicationWindow, MID_HOTKEY_F3_SUPERMODE_DEMAND);2223dataMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,2224TL("&Data"), "F4", TL("Select data mode."),2225GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), myApplicationWindow, MID_HOTKEY_F4_SUPERMODE_DATA);2226}22272228// ---------------------------------------------------------------------------2229// GNESumoConfigHandler - methods2230// ---------------------------------------------------------------------------22312232GNEApplicationWindowHelper::GNESumoConfigHandler::GNESumoConfigHandler(OptionsCont& sumoOptions, const std::string& file) :2233mySumoOptions(sumoOptions),2234myFile(file) {2235}223622372238bool2239GNEApplicationWindowHelper::GNESumoConfigHandler::loadSumoConfig() {2240// get options2241auto& neteditOptions = OptionsCont::getOptions();2242// reset options2243mySumoOptions.resetDefault();2244neteditOptions.resetDefault();2245// make all options writables2246mySumoOptions.resetWritable();2247neteditOptions.resetWritable();2248// build parser2249XERCES_CPP_NAMESPACE::SAXParser parser;2250parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);2251parser.setDisableDefaultEntityResolution(true);2252// start the parsing2253OptionsLoader handler(mySumoOptions);2254try {2255parser.setDocumentHandler(&handler);2256parser.setErrorHandler(&handler);2257parser.parse(StringUtils::transcodeToLocal(myFile).c_str());2258if (handler.errorOccurred()) {2259WRITE_ERROR(TL("Could not load SUMO configuration '") + myFile + "'.");2260return false;2261}2262} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {2263WRITE_ERROR(TL("Could not load SUMO configuration '") + myFile + "':\n " + StringUtils::transcode(e.getMessage()));2264return false;2265}2266// relocate files2267mySumoOptions.relocateFiles(myFile);2268// set loaded files in netedit options2269neteditOptions.set("sumocfg-file", myFile);2270neteditOptions.set("net-file", mySumoOptions.getString("net-file"));2271// check if we need to define the configuration file2272if (neteditOptions.getString("configuration-file").empty()) {2273const auto newConfiguration = StringUtils::replace(neteditOptions.getString("configuration-file"), ".sumocfg", ".netecfg");2274neteditOptions.resetWritable();2275neteditOptions.set("configuration-file", newConfiguration);2276}2277return true;2278}22792280// ---------------------------------------------------------------------------2281// GNENeteditConfigHandler - methods2282// ---------------------------------------------------------------------------22832284GNEApplicationWindowHelper::GNENeteditConfigHandler::GNENeteditConfigHandler(const std::string& file) :2285myFile(file) {2286}228722882289bool2290GNEApplicationWindowHelper::GNENeteditConfigHandler::loadNeteditConfig() {2291// get options2292auto& neteditOptions = OptionsCont::getOptions();2293// before reset defaults, save ignore route and demand elements (because usually are loaded trought console)2294const bool ignoreAdditionalElements = neteditOptions.getBool("ignore.additionalelements");2295const bool ignoreRouteElements = neteditOptions.getBool("ignore.routeelements");2296// reset options2297neteditOptions.resetDefault();2298// make all options writables2299neteditOptions.resetWritable();2300// build parser2301XERCES_CPP_NAMESPACE::SAXParser parser;2302parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);2303parser.setDisableDefaultEntityResolution(true);2304// start the parsing2305OptionsLoader handler(neteditOptions);2306try {2307parser.setDocumentHandler(&handler);2308parser.setErrorHandler(&handler);2309parser.parse(StringUtils::transcodeToLocal(myFile).c_str());2310if (handler.errorOccurred()) {2311WRITE_ERROR(TL("Could not load netedit configuration '") + myFile + "'.");2312return false;2313}2314} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {2315WRITE_ERROR(TL("Could not load netedit configuration '") + myFile + "':\n " + StringUtils::transcode(e.getMessage()));2316return false;2317}2318// relocate files2319neteditOptions.relocateFiles(myFile);2320// check if we have loaded a netedit config or a netconvert config2321if (neteditOptions.getString("configuration-file").find(".netccfg") != std::string::npos) {2322const auto newConfiguration = StringUtils::replace(neteditOptions.getString("configuration-file"), ".netccfg", ".netecfg");2323neteditOptions.resetWritable();2324neteditOptions.set("configuration-file", newConfiguration);2325}2326// restore ignores2327neteditOptions.resetWritable();2328neteditOptions.set("ignore.additionalelements", toString(ignoreAdditionalElements));2329neteditOptions.set("ignore.routeelements", toString(ignoreRouteElements));2330return true;2331}23322333// ---------------------------------------------------------------------------2334// GNEApplicationWindowHelper - methods2335// ---------------------------------------------------------------------------23362337bool2338GNEApplicationWindowHelper::toggleEditOptionsNetwork(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {2339// finally function correspond to visibleMenuCommands[numericalKeyPressed]2340if (menuCheck == viewNet->getNetworkViewOptions().menuCheckToggleGrid) {2341// Call manually onCmdToggleShowGrid2342viewNet->onCmdToggleShowGrid(obj, sel, nullptr);2343} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckToggleDrawJunctionShape) {2344// Call manually onCmdToggleDrawJunctionShape2345viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);2346} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckDrawSpreadVehicles) {2347// Call manually onCmdToggleDrawSpreadVehicles2348viewNet->onCmdToggleDrawSpreadVehicles(obj, sel, nullptr);2349} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowDemandElements) {2350// Call manually onCmdToggleShowDemandElementsNetwork2351viewNet->onCmdToggleShowDemandElementsNetwork(obj, sel, nullptr);2352} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckSelectEdges) {2353// Call manually onCmdToggleSelectEdges2354viewNet->onCmdToggleSelectEdges(obj, sel, nullptr);2355} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowConnections) {2356// Call manually onCmdToggleShowConnections2357viewNet->onCmdToggleShowConnections(obj, sel, nullptr);2358} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckHideConnections) {2359// Call manually onCmdToggleHideConnections2360viewNet->onCmdToggleHideConnections(obj, sel, nullptr);2361} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowAdditionalSubElements) {2362// Call manually onCmdToggleShowAdditionalSubElements2363viewNet->onCmdToggleShowAdditionalSubElements(obj, sel, nullptr);2364} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowTAZElements) {2365// Call manually onCmdToggleShowTAZElements2366viewNet->onCmdToggleShowTAZElements(obj, sel, nullptr);2367} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckExtendSelection) {2368// Call manually onCmdToggleExtendSelection2369viewNet->onCmdToggleExtendSelection(obj, sel, nullptr);2370} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckChangeAllPhases) {2371// Call manually onCmdToggleChangeAllPhases2372viewNet->onCmdToggleChangeAllPhases(obj, sel, nullptr);2373} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckMergeAutomatically) {2374// Call manually onCmdToggleMergeAutomatically2375viewNet->onCmdToggleMergeAutomatically(obj, sel, nullptr);2376} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckMoveElevation) {2377// Call manually onCmdToggleMoveElevation2378viewNet->onCmdToggleMoveElevation(obj, sel, nullptr);2379} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckChainEdges) {2380// Call manually onCmdToggleChainEdges2381viewNet->onCmdToggleChainEdges(obj, sel, nullptr);2382} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckAutoOppositeEdge) {2383// Call manually onCmdToggleAutoOppositeEdge2384viewNet->onCmdToggleAutoOppositeEdge(obj, sel, nullptr);2385} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowJunctionBubble) {2386// Call manually onCmdToggleShowJunctionBubble2387viewNet->onCmdToggleShowJunctionBubbles(obj, sel, nullptr);2388} else {2389return false;2390}2391return true;2392}239323942395bool2396GNEApplicationWindowHelper::toggleEditOptionsDemand(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {2397if (menuCheck == viewNet->getDemandViewOptions().menuCheckToggleGrid) {2398// Call manually onCmdToggleShowGrid2399viewNet->onCmdToggleShowGrid(obj, sel, nullptr);2400} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckToggleDrawJunctionShape) {2401// Call manually onCmdToggleDrawJunctionShape2402viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);2403} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckDrawSpreadVehicles) {2404// Call manually onCmdToggleDrawSpreadVehicles2405viewNet->onCmdToggleDrawSpreadVehicles(obj, sel, nullptr);2406} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckHideShapes) {2407// Call manually onCmdToggleHideShapes2408viewNet->onCmdToggleHideShapes(obj, sel, nullptr);2409} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllTrips) {2410// Call manually onCmdToggleShowTrips2411viewNet->onCmdToggleShowTrips(obj, sel, nullptr);2412} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllPersonPlans) {2413// Call manually onCmdToggleShowAllPersonPlans2414viewNet->onCmdToggleShowAllPersonPlans(obj, sel, nullptr);2415} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckLockPerson) {2416// Call manually onCmdToggleLockPerson2417viewNet->onCmdToggleLockPerson(obj, sel, nullptr);2418} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllContainerPlans) {2419// Call manually onCmdToggleShowAllContainerPlans2420viewNet->onCmdToggleShowAllContainerPlans(obj, sel, nullptr);2421} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckLockContainer) {2422// Call manually onCmdToggleLockContainer2423viewNet->onCmdToggleLockContainer(obj, sel, nullptr);2424} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckHideNonInspectedDemandElements) {2425// Call manually onCmdToggleHideNonInspecteDemandElements2426viewNet->onCmdToggleHideNonInspecteDemandElements(obj, sel, nullptr);2427} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowOverlappedRoutes) {2428// Call manually onCmdToggleHideNonInspecteDemandElements2429viewNet->onCmdToggleShowOverlappedRoutes(obj, sel, nullptr);2430} else {2431return false;2432}2433return true;2434}243524362437bool2438GNEApplicationWindowHelper::toggleEditOptionsData(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {2439if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleDrawJunctionShape) {2440// Call manually onCmdToggleDrawJunctionShape2441viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);2442} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowAdditionals) {2443// Call manually onCmdToggleShowAdditionals2444viewNet->onCmdToggleShowAdditionals(obj, sel, nullptr);2445} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowShapes) {2446// Call manually onCmdToggleShowShapes2447viewNet->onCmdToggleShowShapes(obj, sel, nullptr);2448} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowDemandElements) {2449// Call manually onCmdToggleShowDemandElementsData2450viewNet->onCmdToggleShowDemandElementsData(obj, sel, nullptr);2451} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelDrawing) {2452// Call manually onCmdToggleTAZRelDrawing2453viewNet->onCmdToggleTAZRelDrawing(obj, sel, nullptr);2454} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZDrawFill) {2455// Call manually onCmdToggleTAZDrawFill2456viewNet->onCmdToggleTAZDrawFill(obj, sel, nullptr);2457} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelOnlyFrom) {2458// Call manually onCmdToggleTAZRelOnlyFrom2459viewNet->onCmdToggleTAZRelOnlyFrom(obj, sel, nullptr);2460} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelOnlyTo) {2461// Call manually onCmdToggleTAZRelOnlyTo2462viewNet->onCmdToggleTAZRelOnlyTo(obj, sel, nullptr);2463} else {2464return false;2465}2466return true;2467}246824692470bool2471GNEApplicationWindowHelper::stringEndsWith(const std::string& str, const std::string& suffix) {2472if (str.length() < suffix.length()) {2473return false;2474} else {2475return str.compare(str.length() - suffix.length(), suffix.length(), suffix) == 0;2476}2477}24782479/****************************************************************************/248024812482