Path: blob/main/src/netedit/GNEApplicationWindowHelper.cpp
193692 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 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>2223#include <netedit/dialogs/file/GNEFileDialog.h>24#include <netedit/dialogs/tools/GNEPythonToolDialog.h>25#include <netedit/dialogs/tools/GNERunPythonToolDialog.h>26#include <netedit/elements/GNEAttributeCarrier.h>27#include <netedit/GNETagProperties.h>28#include <netedit/templates.h>29#include <netedit/tools/GNENetDiffTool.h>30#include <utils/common/FileHelpers.h>31#include <utils/foxtools/MFXMenuCheckIcon.h>32#include <utils/gui/div/GUIDesigns.h>33#include <utils/handlers/TemplateHandler.h>34#include <utils/options/OptionsLoader.h>35#include <xercesc/parsers/SAXParser.hpp>36#include <xercesc/sax/AttributeList.hpp>37#include <xercesc/sax/HandlerBase.hpp>38#include <xercesc/sax/SAXException.hpp>39#include <xercesc/sax/SAXParseException.hpp>4041#include "GNEApplicationWindow.h"42#include "GNEViewNet.h"43#include "GNENet.h"4445// ===========================================================================46// GNEApplicationWindowHelper::ToolbarsGrip method definitions47// ===========================================================================4849GNEApplicationWindowHelper::ToolbarsGrip::ToolbarsGrip(GNEApplicationWindow* applicationWindow) :50myApplicationWindow(applicationWindow) {51}525354void55GNEApplicationWindowHelper::ToolbarsGrip::buildMenuToolbarsGrip() {56// build menu bar (for File, edit, processing...) using specify design57myPythonToolBarShellMenu = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);58menu = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellMenu, GUIDesignToolbarMenuBarNetedit);59// declare toolbar grip for menu bar60new FXToolBarGrip(menu, menu, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);61}626364void65GNEApplicationWindowHelper::ToolbarsGrip::buildViewParentToolbarsGrips() {66// build toolbar shells67myPythonToolBarShellSuperModes = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);68myPythonToolBarShellSaveElements = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);69myPythonToolBarShellTimeFormat = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);70myPythonToolBarShellNavigation = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);71myPythonToolBarShellModes = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);72myPythonToolBarShellIntervalBar = new FXToolBarShell(myApplicationWindow, GUIDesignToolBar);73// build menu bars74superModes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellSuperModes, GUIDesignToolBarRaisedSupermodes);75saveElements = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellSaveElements, GUIDesignToolBarRaisedNext);76timeSwitch = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellTimeFormat, GUIDesignToolBarRaisedSame);77navigation = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellNavigation, GUIDesignToolBarRaisedSame);78if (OptionsCont::getOptions().getBool("gui-testing")) {79modes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellModes, GUIDesignToolBarRaisedNext);80} else {81modes = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellModes, GUIDesignToolBarRaisedSame);82}83intervalBar = new FXMenuBar(myApplicationWindow->getTopDock(), myPythonToolBarShellIntervalBar, GUIDesignToolBarRaisedNext);84// build FXToolBarGrip85new FXToolBarGrip(superModes, superModes, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);86new FXToolBarGrip(saveElements, saveElements, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);87new FXToolBarGrip(timeSwitch, timeSwitch, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);88new FXToolBarGrip(navigation, navigation, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);89new FXToolBarGrip(modes, modes, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);90new FXToolBarGrip(intervalBar, intervalBar, FXMenuBar::ID_TOOLBARGRIP, GUIDesignToolBarGrip);91// create menu bars92superModes->create();93saveElements->create();94timeSwitch->create();95navigation->create();96modes->create();97intervalBar->create();98// create toolbar shells99myPythonToolBarShellSuperModes->create();100myPythonToolBarShellSaveElements->create();101myPythonToolBarShellTimeFormat->create();102myPythonToolBarShellNavigation->create();103myPythonToolBarShellModes->create();104myPythonToolBarShellIntervalBar->create();105// recalc top dop after creating elements106myApplicationWindow->getTopDock()->recalc();107}108109110void111GNEApplicationWindowHelper::ToolbarsGrip::destroyParentToolbarsGrips() {112// delete Menu bars113delete superModes;114delete saveElements;115delete timeSwitch;116delete navigation;117delete modes;118delete intervalBar;119// also delete toolbar shells to avoid floating windows120delete myPythonToolBarShellSuperModes;121delete myPythonToolBarShellSaveElements;122delete myPythonToolBarShellTimeFormat;123delete myPythonToolBarShellNavigation;124delete myPythonToolBarShellModes;125delete myPythonToolBarShellIntervalBar;126// recalc top dop after deleting elements127myApplicationWindow->getTopDock()->recalc();128}129130// ===========================================================================131// GNEApplicationWindowHelper::MenuBarFile method definitions132// ===========================================================================133134GNEApplicationWindowHelper::MenuBarFile::MenuBarFile(GNEApplicationWindow* applicationWindow) :135myRecentNetworks(applicationWindow->getApp(), TL("nets")),136myRecentConfigs(applicationWindow->getApp(), TL("configs")),137myApplicationWindow(applicationWindow) {138}139140141void142GNEApplicationWindowHelper::MenuBarFile::buildRecentNetworkFiles(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentNetworkFiles) {143// for whatever reason, sonar complains in the next line that sep1 may leak, but fox does the cleanup144GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_1);145GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_2);146GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_3);147GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_4);148GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_5);149GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_6);150GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_7);151GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_8);152GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_9);153GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentNetworkFiles, "", &myRecentNetworks, FXRecentFiles::ID_FILE_10);154new FXMenuSeparator(fileMenuRecentNetworkFiles); // NOSONAR, Fox does the cleanup155GUIDesigns::buildFXMenuCommand(fileMenuRecentNetworkFiles, TL("Cl&ear Recent Networks"), nullptr, &myRecentNetworks, FXRecentFiles::ID_CLEAR);156GUIDesigns::buildFXMenuCommand(fileMenuRecentNetworkFiles, TL("No Recent Networks"), nullptr, &myRecentNetworks, MFXRecentNetworks::ID_NOFILES);157// set target158myRecentNetworks.setTarget(myApplicationWindow);159myRecentNetworks.setSelector(MID_RECENTFILE);160new FXMenuCascade(fileMenu, TL("Recent Networks"), nullptr, fileMenuRecentNetworkFiles);161}162163164void165GNEApplicationWindowHelper::MenuBarFile::buildRecentConfigFiles(FXMenuPane* fileMenu, FXMenuPane* fileMenuRecentConfigFiles) {166// for whatever reason, sonar complains in the next line that sep1 may leak, but fox does the cleanup167GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_1);168GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_2);169GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_3);170GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_4);171GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_5);172GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_6);173GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_7);174GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_8);175GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_9);176GUIDesigns::buildFXMenuCommandRecentFile(fileMenuRecentConfigFiles, "", &myRecentConfigs, FXRecentFiles::ID_FILE_10);177new FXMenuSeparator(fileMenuRecentConfigFiles); // NOSONAR, Fox does the cleanup178GUIDesigns::buildFXMenuCommand(fileMenuRecentConfigFiles, TL("Cl&ear Recent Configs"), nullptr, &myRecentConfigs, FXRecentFiles::ID_CLEAR);179GUIDesigns::buildFXMenuCommand(fileMenuRecentConfigFiles, TL("No Recent Configs"), nullptr, &myRecentConfigs, MFXRecentNetworks::ID_NOFILES);180// set target181myRecentConfigs.setTarget(myApplicationWindow);182myRecentConfigs.setSelector(MID_RECENTFILE);183new FXMenuCascade(fileMenu, TL("Recent Configs"), nullptr, fileMenuRecentConfigFiles);184}185186// ---------------------------------------------------------------------------187// GNEApplicationWindowHelper::FileMenuCommands - methods188// ---------------------------------------------------------------------------189190GNEApplicationWindowHelper::FileMenuCommands::FileMenuCommands(GNEApplicationWindow* applicationWindow) :191myApplicationWindow(applicationWindow) {192}193194195void196GNEApplicationWindowHelper::FileMenuCommands::buildFileMenuCommands(FXMenuPane* fileMenu, FXMenuPane* fileMenuNeteditConfig,197FXMenuPane* fileMenuSumoConfig, FXMenuPane* fileMenuTLS, FXMenuPane* fileMenuEdgeTypes, FXMenuPane* fileMenuAdditionals,198FXMenuPane* fileMenuDemandElements, FXMenuPane* fileMenuDataElements, FXMenuPane* fileMenuMeanDataElements) {199200GUIDesigns::buildFXMenuCommandShortcut(fileMenu,201TL("New Network"), "Ctrl+N", TL("Create a new network."),202GUIIconSubSys::getIcon(GUIIcon::NEW_NET), myApplicationWindow, MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK);203204GUIDesigns::buildFXMenuCommandShortcut(fileMenu,205TL("New Window"), "Ctrl+Shift+N", TL("Open a new netedit window."),206nullptr, myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW);207208GUIDesigns::buildFXMenuCommandShortcut(fileMenu,209TL("Generate Network"), "", TL("Create network using netgenerate."),210GUIIconSubSys::getIcon(GUIIcon::NETGENERATE), myApplicationWindow, MID_GNE_NETGENERATE);211212// load sumo/netedit configs213new FXMenuSeparator(fileMenu);214215GUIDesigns::buildFXMenuCommandShortcut(fileMenu,216TL("Load Netedit config..."), "Ctrl+E", TL("Load a netedit configuration file."),217GUIIconSubSys::getIcon(GUIIcon::OPEN_NETEDITCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG);218219GUIDesigns::buildFXMenuCommandShortcut(fileMenu,220TL("Load Sumo config..."), "Ctrl+M", TL("Load a SUMO configuration file."),221GUIIconSubSys::getIcon(GUIIcon::OPEN_SUMOCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_M_OPENSUMOCONFIG);222223// load networks224new FXMenuSeparator(fileMenu);225226GUIDesigns::buildFXMenuCommandShortcut(fileMenu,227TL("Open Network..."), "Ctrl+O", TL("Open a SUMO network."),228GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), myApplicationWindow, MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK);229230GUIDesigns::buildFXMenuCommandShortcut(fileMenu,231TL("Open Netconvert Configuration..."), "Ctrl+Shift+O", TL("Open a configuration file with NETCONVERT options."),232GUIIconSubSys::getIcon(GUIIcon::OPEN), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE);233234GUIDesigns::buildFXMenuCommandShortcut(fileMenu,235TL("Import Foreign Network..."), "", TL("Import a foreign network such as OSM."),236GUIIconSubSys::getIcon(GUIIcon::OPEN_NET), myApplicationWindow, MID_GNE_TOOLBARFILE_OPENFOREIGN);237238// save networks239new FXMenuSeparator(fileMenu);240241GUIDesigns::buildFXMenuCommandShortcut(fileMenu,242TL("Save Network"), "Ctrl+S", TL("Save the network."),243GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK);244245GUIDesigns::buildFXMenuCommandShortcut(fileMenu,246TL("Save Network As..."), "", TL("Save the network to another file."),247GUIIconSubSys::getIcon(GUIIcon::SAVE_NETWORKELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVENETWORK_AS);248249GUIDesigns::buildFXMenuCommandShortcut(fileMenu,250TL("Save Plain XML..."), "Ctrl+L", TL("Save a plain XML representation of the network."),251GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_L_SAVEASPLAINXML);252253GUIDesigns::buildFXMenuCommandShortcut(fileMenu,254TL("Save Joined Junctions..."), "", TL("Save log of joined junctions (allows reproduction of joins)."),255GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_SAVEJOINEDJUNCTIONS);256257// reload258new FXMenuSeparator(fileMenu);259260GUIDesigns::buildFXMenuCommandShortcut(fileMenu,261TL("Reload"), "Ctrl+R", TL("Reload the network."),262GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_HOTKEY_CTRL_R_RELOAD);263264GUIDesigns::buildFXMenuCommandShortcut(fileMenu,265TL("Reload Network"), "", TL("Reload the network."),266GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOADNETWORK);267268new FXMenuSeparator(fileMenu);269270// create netedit config menu options271buildNeteditConfigSection(fileMenuNeteditConfig);272myNeteditConfigMenuCascade = new FXMenuCascade(fileMenu, TL("Netedit Config"), GUIIconSubSys::getIcon(GUIIcon::NETEDIT_MINI), fileMenuNeteditConfig);273274// create SumoConfig menu options275buildSumoConfigSection(fileMenuSumoConfig);276mySumoConfigMenuCascade = new FXMenuCascade(fileMenu, TL("Sumo Config"), GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), fileMenuSumoConfig);277278// create TLS menu options279buildTrafficLightSection(fileMenuTLS);280myTLSMenuCascade = new FXMenuCascade(fileMenu, TL("Traffic Lights"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), fileMenuTLS);281282// create edgeTypes menu options283buildEdgeTypeSection(fileMenuEdgeTypes);284myEdgeTypesMenuCascade = new FXMenuCascade(fileMenu, TL("Edge Types"), GUIIconSubSys::getIcon(GUIIcon::MODECREATEEDGE), fileMenuEdgeTypes);285286// create Additionals menu options287buildAdditionalSection(fileMenuAdditionals);288myAdditionalMenuCascade = new FXMenuCascade(fileMenu, TL("Additionals and Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODEADDITIONAL), fileMenuAdditionals);289290// create DemandElements menu options291buildDemandSection(fileMenuDemandElements);292myDemandMenuCascade = new FXMenuCascade(fileMenu, TL("Demand Elements"), GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDEMAND), fileMenuDemandElements);293294// create DataElements menu options295buildDataSection(fileMenuDataElements);296myDataMenuCascade = new FXMenuCascade(fileMenu, TL("Data Elements"), GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), fileMenuDataElements);297298// create MeanDatas menu options299buildMeanDataSection(fileMenuMeanDataElements);300myMeanDataMenuCascade = new FXMenuCascade(fileMenu, TL("MeanData Elements"), GUIIconSubSys::getIcon(GUIIcon::MODEMEANDATA), fileMenuMeanDataElements);301302// add checkBox for quick load303new FXMenuSeparator(fileMenu);304menuCheckAllowUndoRedoLoading = GUIDesigns::buildFXMenuCheckbox(fileMenu,305TL("Allow undoing element loading"), TL("Allow to undo loading of elements (Slow if a lot of elements are loaded)"),306myApplicationWindow, MID_GNE_TOGGLE_UNDOREDO_LOADING);307// set default value308menuCheckAllowUndoRedoLoading->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true));309310// close network311new FXMenuSeparator(fileMenu);312GUIDesigns::buildFXMenuCommandShortcut(fileMenu,313TL("Close"), "Ctrl+W", TL("Close the network."),314GUIIconSubSys::getIcon(GUIIcon::CLOSE), myApplicationWindow, MID_HOTKEY_CTRL_W_CLOSESIMULATION);315}316317318void319GNEApplicationWindowHelper::FileMenuCommands::enableMenuCascades() {320mySumoConfigMenuCascade->enable();321myNeteditConfigMenuCascade->enable();322myTLSMenuCascade->enable();323myEdgeTypesMenuCascade->enable();324myAdditionalMenuCascade->enable();325myDemandMenuCascade->enable();326myDataMenuCascade->enable();327myMeanDataMenuCascade->enable();328}329330331void332GNEApplicationWindowHelper::FileMenuCommands::disableMenuCascades() {333mySumoConfigMenuCascade->disable();334myNeteditConfigMenuCascade->disable();335myTLSMenuCascade->disable();336myEdgeTypesMenuCascade->disable();337myAdditionalMenuCascade->disable();338myDemandMenuCascade->disable();339myDataMenuCascade->disable();340myMeanDataMenuCascade->disable();341}342343344void345GNEApplicationWindowHelper::FileMenuCommands::setDefaultView() {346myTLSMenuCascade->show();347myDataMenuCascade->show();348myMeanDataMenuCascade->show();349}350351352void353GNEApplicationWindowHelper::FileMenuCommands::setJuPedSimView() {354myTLSMenuCascade->hide();355myDataMenuCascade->hide();356myMeanDataMenuCascade->hide();357}358359360void361GNEApplicationWindowHelper::FileMenuCommands::buildNeteditConfigSection(FXMenuPane* menuPane) {362GUIDesigns::buildFXMenuCommandShortcut(menuPane,363TL("Save Netedit Config"), "Ctrl+Shift+E", TL("Save netedit configuration file."),364GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG);365366GUIDesigns::buildFXMenuCommandShortcut(menuPane,367TL("Save Netedit Config As..."), "", TL("Save netedit configuration in a new file."),368GUIIconSubSys::getIcon(GUIIcon::SAVE_NETEDITCONFIG), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS);369370new FXMenuSeparator(menuPane);371372GUIDesigns::buildFXMenuCommandShortcut(menuPane,373TL("Reload Netedit Config"), "", TL("Reload netedit configuration."),374GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG);375}376377378void379GNEApplicationWindowHelper::FileMenuCommands::buildSumoConfigSection(FXMenuPane* menuPane) {380GUIDesigns::buildFXMenuCommandShortcut(menuPane,381TL("Save Sumo Config"), "Ctrl+Shift+S", TL("Save sumo configuration file."),382GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG);383384GUIDesigns::buildFXMenuCommandShortcut(menuPane,385TL("Save Sumo Config As..."), "", TL("Save sumo configuration in a new file."),386GUIIconSubSys::getIcon(GUIIcon::SAVE_SUMOCONFIG), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS);387388new FXMenuSeparator(menuPane);389390GUIDesigns::buildFXMenuCommandShortcut(menuPane,391TL("Reload Sumo Config"), "", TL("Reload sumo configuration."),392GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG);393}394395396void397GNEApplicationWindowHelper::FileMenuCommands::buildTrafficLightSection(FXMenuPane* menuPane) {398GUIDesigns::buildFXMenuCommandShortcut(menuPane,399TL("Load TLS Programs..."), "Ctrl+K", TL("Load programs for traffic lights in the current net."),400GUIIconSubSys::getIcon(GUIIcon::OPEN_TLSPROGRAMS), myApplicationWindow, MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS);401402new FXMenuSeparator(menuPane);403404GUIDesigns::buildFXMenuCommandShortcut(menuPane,405TL("Save TLS Programs"), "Ctrl+Shift+K", TL("Save all traffic light programs of the current network."),406GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_K_SAVETLS);407408GUIDesigns::buildFXMenuCommandShortcut(menuPane,409TL("Save TLS Programs As..."), "", TL("Save all traffic light programs of the current network to another file."),410GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS);411412new FXMenuSeparator(menuPane);413414GUIDesigns::buildFXMenuCommandShortcut(menuPane,415TL("Reload TLS Programs"), "", TL("Reload TLS Programs."),416GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS);417}418419420void421GNEApplicationWindowHelper::FileMenuCommands::buildEdgeTypeSection(FXMenuPane* menuPane) {422GUIDesigns::buildFXMenuCommandShortcut(menuPane,423TL("Load Edge Types..."), "Ctrl+H", TL("Load edge types in the current net."),424GUIIconSubSys::getIcon(GUIIcon::OPEN_TLSPROGRAMS), myApplicationWindow, MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES);425426new FXMenuSeparator(menuPane);427428GUIDesigns::buildFXMenuCommandShortcut(menuPane,429TL("Save Edge Types"), "Ctrl+Shift+H", TL("Save edge types of the current net."),430GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES);431432GUIDesigns::buildFXMenuCommandShortcut(menuPane,433TL("Save Edge Types As..."), "", TL("Save edge types of the current net to another file."),434GUIIconSubSys::getIcon(GUIIcon::SAVE), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS);435436new FXMenuSeparator(menuPane);437438GUIDesigns::buildFXMenuCommandShortcut(menuPane,439TL("Reload edge types"), "", TL("Reload edge types."),440GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES);441}442443444void445GNEApplicationWindowHelper::FileMenuCommands::buildAdditionalSection(FXMenuPane* menuPane) {446GUIDesigns::buildFXMenuCommandShortcut(menuPane,447TL("Load Additionals..."), "Ctrl+A", TL("Load additionals and shapes."),448GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALELEMENTS);449450new FXMenuSeparator(menuPane);451452GUIDesigns::buildFXMenuCommandShortcut(menuPane,453TL("Save Additionals"), "Ctrl+Shift+A", TL("Save additionals and shapes."),454GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS);455456GUIDesigns::buildFXMenuCommandShortcut(menuPane,457TL("Save Additionals unified as..."), "", TL("Save all additional elements to the chosen file."),458GUIIconSubSys::getIcon(GUIIcon::SAVE_ADDITIONALELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED);459460GUIDesigns::buildFXMenuCommandShortcut(menuPane,461TL("Save JuPedSim Elements as..."), "", TL("Save JuPedSim elements in a separated file."),462GUIIconSubSys::getIcon(GUIIcon::SAVE_JUPEDSIMELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS);463464new FXMenuSeparator(menuPane);465466GUIDesigns::buildFXMenuCommandShortcut(menuPane,467TL("Reload Additionals"), "", TL("Reload additionals."),468GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS);469}470471472void473GNEApplicationWindowHelper::FileMenuCommands::buildDemandSection(FXMenuPane* menuPane) {474GUIDesigns::buildFXMenuCommandShortcut(menuPane,475TL("Load Demand Elements..."), "Ctrl+D", TL("Load demand elements."),476GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS);477478new FXMenuSeparator(menuPane);479480GUIDesigns::buildFXMenuCommandShortcut(menuPane,481TL("Save Demand Elements"), "Ctrl+Shift+D", TL("Save demand elements."),482GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS);483484GUIDesigns::buildFXMenuCommandShortcut(menuPane,485TL("Save Demand Elements unified as..."), "", TL("Save all demand elements to the chosen file"),486GUIIconSubSys::getIcon(GUIIcon::SAVE_DEMANDELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_UNIFIED);487488new FXMenuSeparator(menuPane);489490GUIDesigns::buildFXMenuCommandShortcut(menuPane,491TL("Reload Demand Elements"), "", TL("Reload demand elements."),492GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS);493}494495496void497GNEApplicationWindowHelper::FileMenuCommands::buildDataSection(FXMenuPane* menuPane) {498GUIDesigns::buildFXMenuCommandShortcut(menuPane,499TL("Load Data Elements..."), "Ctrl+B", TL("Load data elements."),500GUIIconSubSys::getIcon(GUIIcon::OPEN_ADDITIONALS), myApplicationWindow, MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS);501502new FXMenuSeparator(menuPane);503504GUIDesigns::buildFXMenuCommandShortcut(menuPane,505TL("Save Data Elements"), "Ctrl+Shift+B", TL("Save data elements."),506GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS);507508GUIDesigns::buildFXMenuCommandShortcut(menuPane,509TL("Save Data Elements unified as..."), "", TL("Save all data elements to the chosen file."),510GUIIconSubSys::getIcon(GUIIcon::SAVE_DATAELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED);511512new FXMenuSeparator(menuPane);513514GUIDesigns::buildFXMenuCommandShortcut(menuPane,515TL("Reload Data Elements"), "", TL("Reload data elements."),516GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS);517}518519520void521GNEApplicationWindowHelper::FileMenuCommands::buildMeanDataSection(FXMenuPane* menuPane) {522GUIDesigns::buildFXMenuCommandShortcut(menuPane,523TL("Load MeanDatas..."), "", TL("Load meanDatas and shapes."),524GUIIconSubSys::getIcon(GUIIcon::OPEN_MEANDATAS), myApplicationWindow, MID_GNE_TOOLBARFILE_OPENMEANDATAELEMENTS);525526new FXMenuSeparator(menuPane);527528GUIDesigns::buildFXMenuCommandShortcut(menuPane,529TL("Save MeanDatas"), "", TL("Save meanDatas and shapes."),530GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS), myApplicationWindow, MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS);531532GUIDesigns::buildFXMenuCommandShortcut(menuPane,533TL("Save MeanDatas unified as..."), "Ctrl+Shift+M", TL("Save all meanData elements to the chosen file."),534GUIIconSubSys::getIcon(GUIIcon::SAVE_MEANDATAELEMENTS), myApplicationWindow, MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED);535536new FXMenuSeparator(menuPane);537538GUIDesigns::buildFXMenuCommandShortcut(menuPane,539TL("Reload MeanDatas"), "", TL("Reload meanDatas."),540GUIIconSubSys::getIcon(GUIIcon::RELOAD), myApplicationWindow, MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS);541}542543// ---------------------------------------------------------------------------544// GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands - methods545// ---------------------------------------------------------------------------546547GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands::CommonMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :548myModesMenuCommandsParent(modesMenuCommandsParent) {549}550551552void553GNEApplicationWindowHelper::ModesMenuCommands::CommonMenuCommands::buildCommonMenuCommands(FXMenuPane* modesMenu) {554// build every FXMenuCommand giving it a shortcut555inspectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,556TL("&Inspect"), "I", TL("Inspect elements and change their attributes."),557GUIIconSubSys::getIcon(GUIIcon::MODEINSPECT), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_I_MODE_INSPECT);558deleteMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,559TL("&Delete"), "D", TL("Delete elements."),560GUIIconSubSys::getIcon(GUIIcon::MODEDELETE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE);561selectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,562TL("&Select"), "S", TL("Select elements."),563GUIIconSubSys::getIcon(GUIIcon::MODESELECT), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT);564}565566// ---------------------------------------------------------------------------567// GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands - methods568// ---------------------------------------------------------------------------569570GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::NetworkMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :571myModesMenuCommandsParent(modesMenuCommandsParent) {572}573574575void576GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::showNetworkMenuCommands() {577createEdgeMode->show();578moveMode->show();579connectMode->show();580prohibitionMode->show();581TLSMode->show();582additionalMode->show();583crossingMode->show();584TAZMode->show();585shapeMode->show();586wireMode->show();587decalMode->show();588}589590591void592GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::hideNetworkMenuCommands() {593createEdgeMode->hide();594moveMode->hide();595connectMode->hide();596prohibitionMode->hide();597TLSMode->hide();598additionalMode->hide();599crossingMode->hide();600TAZMode->hide();601shapeMode->hide();602wireMode->hide();603decalMode->hide();604}605606607void608GNEApplicationWindowHelper::ModesMenuCommands::NetworkMenuCommands::buildNetworkMenuCommands(FXMenuPane* modesMenu) {609// build every FXMenuCommand giving it a shortcut610moveMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,611TL("&Move"), "M", TL("Move elements."),612GUIIconSubSys::getIcon(GUIIcon::MODEMOVE), myModesMenuCommandsParent->myApplicationWindow,613MID_HOTKEY_M_MODE_MOVE_MEANDATA);614createEdgeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,615TL("&Edge"), "E", TL("Create junction and edges."),616GUIIconSubSys::getIcon(GUIIcon::MODECREATEEDGE), myModesMenuCommandsParent->myApplicationWindow,617MID_HOTKEY_E_MODE_EDGE_EDGEDATA);618TLSMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,619TL("&Traffic light"), "T", TL("Modes traffic lights over junctions."),620GUIIconSubSys::getIcon(GUIIcon::MODETLS), myModesMenuCommandsParent->myApplicationWindow,621MID_HOTKEY_T_MODE_TLS_TYPE);622connectMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,623TL("&Connection"), "C", TL("Modes connections between lanes."),624GUIIconSubSys::getIcon(GUIIcon::MODECONNECTION), myModesMenuCommandsParent->myApplicationWindow,625MID_HOTKEY_C_MODE_CONNECT_CONTAINER);626prohibitionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,627TL("Pro&hibition"), "H", TL("Modes connection prohibitions."),628GUIIconSubSys::getIcon(GUIIcon::MODEPROHIBITION), myModesMenuCommandsParent->myApplicationWindow,629MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN);630crossingMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,631TL("C&rossing"), "R", TL("Create crossings between edges."),632GUIIconSubSys::getIcon(GUIIcon::MODECROSSING), myModesMenuCommandsParent->myApplicationWindow,633MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);634additionalMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,635TL("&Additional"), "A", TL("Create additional elements."),636GUIIconSubSys::getIcon(GUIIcon::MODEADDITIONAL), myModesMenuCommandsParent->myApplicationWindow,637MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS);638wireMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,639TL("&Wire"), "W", TL("Create wires."),640GUIIconSubSys::getIcon(GUIIcon::MODEWIRE), myModesMenuCommandsParent->myApplicationWindow,641MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION);642TAZMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,643TL("TA&Z"), "Z", TL("Create Traffic Assignment Zones."),644GUIIconSubSys::getIcon(GUIIcon::MODETAZ), myModesMenuCommandsParent->myApplicationWindow,645MID_HOTKEY_Z_MODE_TAZ_TAZREL);646shapeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,647TL("&POI-Poly"), "P", TL("Create Points-Of-Interest and polygons."),648GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myModesMenuCommandsParent->myApplicationWindow,649MID_HOTKEY_P_MODE_POLYGON_PERSON);650decalMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,651TL("Deca&ls"), "U", TL("Create decals."),652GUIIconSubSys::getIcon(GUIIcon::MODEDECAL), myModesMenuCommandsParent->myApplicationWindow,653MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION);654}655656// ---------------------------------------------------------------------------657// GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands - methods658// ---------------------------------------------------------------------------659660GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::DemandMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :661myModesMenuCommandsParent(modesMenuCommandsParent) {662}663664665void666GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::showDemandMenuCommands() {667moveMode->show();668routeMode->show();669routeDistributionMode->show();670vehicleMode->show();671typeMode->show();672typeDistributionMode->show();673stopMode->show();674personMode->show();675personPlanMode->show();676containerMode->show();677containerPlanMode->show();678}679680681void682GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::hideDemandMenuCommands() {683moveMode->hide();684routeMode->hide();685routeDistributionMode->hide();686vehicleMode->hide();687typeMode->hide();688typeDistributionMode->hide();689stopMode->hide();690personMode->hide();691personPlanMode->hide();692containerMode->hide();693containerPlanMode->hide();694}695696697void698GNEApplicationWindowHelper::ModesMenuCommands::DemandMenuCommands::buildDemandMenuCommands(FXMenuPane* modesMenu) {699// build every FXMenuCommand giving it a shortcut700moveMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,701TL("&Move"), "M", TL("Move elements."),702GUIIconSubSys::getIcon(GUIIcon::MODEMOVE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_M_MODE_MOVE_MEANDATA);703routeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,704TL("Route"), "R", TL("Create Routes."),705GUIIconSubSys::getIcon(GUIIcon::MODEROUTE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);706routeDistributionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,707TL("Route distribution"), "W", TL("Create and edit route distributions."),708GUIIconSubSys::getIcon(GUIIcon::MODEROUTEDISTRIBUTION), myModesMenuCommandsParent->myApplicationWindow,709MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION);710vehicleMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,711TL("Vehicle"), "V", TL("Create vehicles."),712GUIIconSubSys::getIcon(GUIIcon::MODEVEHICLE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_V_MODE_VEHICLE);713typeMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,714TL("Type"), "T", TL("Create types (vehicles, person and containers)."),715GUIIconSubSys::getIcon(GUIIcon::MODETYPE), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_T_MODE_TLS_TYPE);716typeDistributionMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,717TL("TypeDistribution"), "U", TL("Create and edit type distributions."),718GUIIconSubSys::getIcon(GUIIcon::MODETYPEDISTRIBUTION), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION);719stopMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,720TL("Stop"), "A", TL("Create stops."),721GUIIconSubSys::getIcon(GUIIcon::MODESTOP), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS);722personMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,723TL("Person"), "P", TL("Create persons."),724GUIIconSubSys::getIcon(GUIIcon::MODEPERSON), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_P_MODE_POLYGON_PERSON);725personPlanMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,726TL("Person plan"), "L", TL("Create person plans."),727GUIIconSubSys::getIcon(GUIIcon::MODEPERSONPLAN), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_L_MODE_PERSONPLAN);728containerMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,729TL("Container"), "C", TL("Create containers."),730GUIIconSubSys::getIcon(GUIIcon::MODECONTAINER), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_C_MODE_CONNECT_CONTAINER);731containerPlanMode = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,732TL("Container plan"), "H", TL("Create container plans."),733GUIIconSubSys::getIcon(GUIIcon::MODECONTAINERPLAN), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN);734}735736// ---------------------------------------------------------------------------737// GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands - methods738// ---------------------------------------------------------------------------739740GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::DataMenuCommands(const ModesMenuCommands* modesMenuCommandsParent) :741myModesMenuCommandsParent(modesMenuCommandsParent) {742}743744745void746GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::showDataMenuCommands() {747edgeData->show();748edgeRelData->show();749TAZRelData->show();750meanData->show();751}752753754void755GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::hideDataMenuCommands() {756edgeData->hide();757edgeRelData->hide();758TAZRelData->hide();759meanData->hide();760}761762763void764GNEApplicationWindowHelper::ModesMenuCommands::DataMenuCommands::buildDataMenuCommands(FXMenuPane* modesMenu) {765// build every FXMenuCommand giving it a shortcut766edgeData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,767TL("&EdgeData"), "E", TL("Create edgeData elements."),768GUIIconSubSys::getIcon(GUIIcon::MODEEDGEDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_E_MODE_EDGE_EDGEDATA);769edgeRelData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,770TL("Edge&Relation"), "R", TL("Create edgeRelation elements."),771GUIIconSubSys::getIcon(GUIIcon::MODEEDGERELDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA);772TAZRelData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,773TL("TA&ZRelation"), "Z", TL("Create TAZRelation elements."),774GUIIconSubSys::getIcon(GUIIcon::MODETAZRELDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_Z_MODE_TAZ_TAZREL);775meanData = GUIDesigns::buildFXMenuCommandShortcut(modesMenu,776TL("&MeanData"), "M", TL("Create MeanData edge/lanes."),777GUIIconSubSys::getIcon(GUIIcon::MODEMEANDATA), myModesMenuCommandsParent->myApplicationWindow, MID_HOTKEY_M_MODE_MOVE_MEANDATA);778}779780781// ---------------------------------------------------------------------------782// GNEApplicationWindowHelper::ModesMenuCommands - methods783// ---------------------------------------------------------------------------784#ifdef _MSC_VER785#pragma warning(push)786#pragma warning(disable: 4355) // mask warning about "this" in initializers787#endif788GNEApplicationWindowHelper::ModesMenuCommands::ModesMenuCommands(GNEApplicationWindow* applicationWindow) :789commonMenuCommands(this),790networkMenuCommands(this),791demandMenuCommands(this),792dataMenuCommands(this),793myApplicationWindow(applicationWindow) {794}795#ifdef _MSC_VER796#pragma warning(pop)797#endif798799800void801GNEApplicationWindowHelper::ModesMenuCommands::buildModesMenuCommands(FXMenuPane* modesMenu) {802commonMenuCommands.buildCommonMenuCommands(modesMenu);803// build Network modes commands and hide it804networkMenuCommands.buildNetworkMenuCommands(modesMenu);805networkMenuCommands.hideNetworkMenuCommands();806// build Demand Modes commands807demandMenuCommands.buildDemandMenuCommands(modesMenu);808demandMenuCommands.hideDemandMenuCommands();809// build Data Modes commands810dataMenuCommands.buildDataMenuCommands(modesMenu);811dataMenuCommands.hideDataMenuCommands();812}813814815void816GNEApplicationWindowHelper::ModesMenuCommands::setDefaultView(Supermode supermode) {817if (supermode == Supermode::NETWORK) {818networkMenuCommands.showNetworkMenuCommands();819} else if (supermode == Supermode::DEMAND) {820demandMenuCommands.showDemandMenuCommands();821} else if (supermode == Supermode::DATA) {822dataMenuCommands.showDataMenuCommands();823}824}825826827void828GNEApplicationWindowHelper::ModesMenuCommands::setJuPedSimView(Supermode supermode) {829if (supermode == Supermode::NETWORK) {830networkMenuCommands.connectMode->hide();831networkMenuCommands.TLSMode->hide();832networkMenuCommands.prohibitionMode->hide();833networkMenuCommands.wireMode->hide();834networkMenuCommands.decalMode->hide();835} else if (supermode == Supermode::DEMAND) {836demandMenuCommands.moveMode->hide();837demandMenuCommands.vehicleMode->hide();838demandMenuCommands.stopMode->hide();839demandMenuCommands.containerMode->hide();840demandMenuCommands.containerPlanMode->hide();841} else if (supermode == Supermode::DATA) {842dataMenuCommands.hideDataMenuCommands();843}844}845846// ---------------------------------------------------------------------------847// GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions - methods848// ---------------------------------------------------------------------------849850GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::NetworkViewOptions(GNEApplicationWindow* applicationWindow) :851myApplicationWindow(applicationWindow) {852}853854855void856GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::buildNetworkViewOptionsMenuChecks(FXMenuPane* editMenu) {857// create menu checks858menuCheckToggleGrid = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,859TL("Show grid"), "Ctrl+G or Alt+1", "",860GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEGRID),861myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID);862863menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,864TL("Hide junction shape"), "Ctrl+J or Alt+2", "",865GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),866myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);867868menuCheckDrawSpreadVehicles = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,869TL("Draw vehicles spread in lane or in depart position"), "Alt+3", "",870GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SPREADVEHICLE),871myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES);872873menuCheckShowDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,874TL("Show demand elements"), "Alt+4", "",875GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS),876myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS);877878menuCheckSelectEdges = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,879TL("Clicking should target lanes"), "Alt+5", "",880GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SELECTEDGES),881myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES);882883menuCheckShowConnections = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,884TL("Show connections over junctions"), "Alt+6", "",885GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWCONNECTIONS),886myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS);887888menuCheckHideConnections = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,889TL("Hide connections"), "Alt+7", "",890GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_HIDECONNECTIONS),891myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS);892893menuCheckShowAdditionalSubElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,894TL("Show sub-additional elements"), "Alt+8", "",895GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWSUBADDITIONALS),896myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS);897898menuCheckShowTAZElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,899TL("Show TAZ elements"), "Alt+9", "",900GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_SHOWTAZELEMENTS),901myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS);902903menuCheckExtendSelection = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,904TL("Selecting multiple edges automatically select their junctions"), "Alt+10", "",905GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_AUTOSELECTJUNCTIONS),906myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION);907908menuCheckChangeAllPhases = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,909TL("Clicking should apply state changes to all phases of TLS plan"), "Alt+5", "",910GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_APPLYTOALLPHASES),911myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES);912913menuCheckMergeAutomatically = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,914TL("Don't ask for confirmation before merging junction"), "Alt+5", "",915GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_MERGEAUTOMATICALLY),916myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY);917918menuCheckChainEdges = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,919TL("Create consecutive edges"), "Alt+5", "",920GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_CHAIN),921myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES);922923menuCheckAutoOppositeEdge = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,924TL("Create an edge in the opposite direction"), "Alt+6", "",925GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_TWOWAY),926myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES);927928menuCheckMoveElevation = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,929TL("Apply mouse movement to elevation"), "Alt+7", "",930GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_ELEVATION),931myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION);932933menuCheckShowJunctionBubble = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,934TL("Show bubbles over junctions shapes"), "Alt+8", "",935GUIIconSubSys::getIcon(GUIIcon::NETWORKMODE_CHECKBOX_BUBBLES),936myApplicationWindow, MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES);937938// build separator939separator = new FXMenuSeparator(editMenu);940}941942943void944GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::hideNetworkViewOptionsMenuChecks() {945menuCheckToggleGrid->hide();946menuCheckToggleDrawJunctionShape->hide();947menuCheckDrawSpreadVehicles->hide();948menuCheckShowDemandElements->hide();949menuCheckSelectEdges->hide();950menuCheckShowConnections->hide();951menuCheckHideConnections->hide();952menuCheckShowAdditionalSubElements->hide();953menuCheckShowTAZElements->hide();954menuCheckExtendSelection->hide();955menuCheckChangeAllPhases->hide();956menuCheckMergeAutomatically->hide();957menuCheckShowJunctionBubble->hide();958menuCheckMoveElevation->hide();959menuCheckChainEdges->hide();960menuCheckAutoOppositeEdge->hide();961separator->hide();962}963964965void966GNEApplicationWindowHelper::EditMenuCommands::NetworkViewOptions::updateShortcuts() {967int index = 2;968// update all accel text969if (menuCheckDrawSpreadVehicles->shown()) {970menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());971index++;972}973if (menuCheckDrawSpreadVehicles->shown()) {974menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());975index++;976}977if (menuCheckShowDemandElements->shown()) {978menuCheckShowDemandElements->setAccelText(("Alt+" + toString(index)).c_str());979index++;980}981if (menuCheckSelectEdges->shown()) {982menuCheckSelectEdges->setAccelText(("Alt+" + toString(index)).c_str());983index++;984}985if (menuCheckShowConnections->shown()) {986menuCheckShowConnections->setAccelText(("Alt+" + toString(index)).c_str());987index++;988}989if (menuCheckHideConnections->shown()) {990menuCheckHideConnections->setAccelText(("Alt+" + toString(index)).c_str());991index++;992}993if (menuCheckShowAdditionalSubElements->shown()) {994menuCheckShowAdditionalSubElements->setAccelText(("Alt+" + toString(index)).c_str());995index++;996}997if (menuCheckShowTAZElements->shown()) {998menuCheckShowTAZElements->setAccelText(("Alt+" + toString(index)).c_str());999index++;1000}1001if (menuCheckExtendSelection->shown()) {1002menuCheckExtendSelection->setAccelText(("Alt+" + toString(index)).c_str());1003index++;1004}1005if (menuCheckChangeAllPhases->shown()) {1006menuCheckChangeAllPhases->setAccelText(("Alt+" + toString(index)).c_str());1007index++;1008}1009if (menuCheckMergeAutomatically->shown()) {1010menuCheckMergeAutomatically->setAccelText(("Alt+" + toString(index)).c_str());1011index++;1012}1013if (menuCheckChainEdges->shown()) {1014menuCheckChainEdges->setAccelText(("Alt+" + toString(index)).c_str());1015index++;1016}1017if (menuCheckAutoOppositeEdge->shown()) {1018menuCheckAutoOppositeEdge->setAccelText(("Alt+" + toString(index)).c_str());1019index++;1020}1021if (menuCheckMoveElevation->shown()) {1022menuCheckMoveElevation->setAccelText(("Alt+" + toString(index)).c_str());1023index++;1024}1025if (menuCheckShowJunctionBubble->shown()) {1026menuCheckShowJunctionBubble->setAccelText(("Alt+" + toString(index)).c_str());1027index++;1028}1029}10301031// ---------------------------------------------------------------------------1032// GNEApplicationWindowHelper::DemandViewOptions - methods1033// ---------------------------------------------------------------------------10341035GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::DemandViewOptions(GNEApplicationWindow* applicationWindow) :1036myApplicationWindow(applicationWindow) {1037}103810391040void1041GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::buildDemandViewOptionsMenuChecks(FXMenuPane* editMenu) {1042// create menu checks1043menuCheckToggleGrid = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1044TL("Show grid"), "Ctrl+G or Alt+1", "",1045GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEGRID),1046myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID);10471048menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1049TL("Hide junction shape"), "Ctrl+J or Alt+2", "",1050GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),1051myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);10521053menuCheckDrawSpreadVehicles = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1054TL("Draw vehicles spread/depart position"), "Alt+3", "",1055GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SPREADVEHICLE),1056myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES);10571058menuCheckHideShapes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1059TL("Show shapes"), "Alt+4", "",1060GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_HIDESHAPES),1061myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES);10621063menuCheckShowAllTrips = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1064TL("Show all trips"), "Alt+5", "",1065GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWTRIPS),1066myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS);10671068menuCheckShowAllPersonPlans = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1069TL("Show all person plans"), "Alt+6", "",1070GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWPERSONPLANS),1071myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS);10721073menuCheckLockPerson = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1074TL("Lock selected person"), "Alt+7", "",1075GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_LOCKPERSON),1076myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON);10771078menuCheckShowAllContainerPlans = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1079TL("Show all container plans"), "Alt+6", "",1080GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWCONTAINERPLANS),1081myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS);10821083menuCheckLockContainer = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1084TL("Lock selected container"), "Alt+7", "",1085GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_LOCKCONTAINER),1086myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER);10871088menuCheckHideNonInspectedDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1089TL("Show non-inspected demand elements"), "Alt+8", "",1090GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_HIDENONINSPECTEDDEMANDELEMENTS),1091myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED);10921093menuCheckShowOverlappedRoutes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1094TL("Show number of overlapped routes"), "Alt+9", "",1095GUIIconSubSys::getIcon(GUIIcon::DEMANDMODE_CHECKBOX_SHOWOVERLAPPEDROUTES),1096myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES);10971098// build separator1099separator = new FXMenuSeparator(editMenu);1100}110111021103void1104GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::hideDemandViewOptionsMenuChecks() {1105menuCheckToggleGrid->hide();1106menuCheckToggleDrawJunctionShape->hide();1107menuCheckDrawSpreadVehicles->hide();1108menuCheckHideShapes->hide();1109menuCheckShowAllTrips->hide();1110menuCheckHideNonInspectedDemandElements->hide();1111menuCheckShowOverlappedRoutes->hide();1112menuCheckShowAllPersonPlans->hide();1113menuCheckLockPerson->hide();1114menuCheckShowAllContainerPlans->hide();1115menuCheckLockContainer->hide();1116separator->hide();1117}111811191120void1121GNEApplicationWindowHelper::EditMenuCommands::DemandViewOptions::updateShortcuts() {1122int index = 2;1123// update all accel text1124if (menuCheckDrawSpreadVehicles->shown()) {1125menuCheckDrawSpreadVehicles->setAccelText(("Alt+" + toString(index)).c_str());1126index++;1127}1128if (menuCheckHideShapes->shown()) {1129menuCheckHideShapes->setAccelText(("Alt+" + toString(index)).c_str());1130index++;1131}1132if (menuCheckShowAllTrips->shown()) {1133menuCheckShowAllTrips->setAccelText(("Alt+" + toString(index)).c_str());1134index++;1135}1136if (menuCheckHideNonInspectedDemandElements->shown()) {1137menuCheckHideNonInspectedDemandElements->setAccelText(("Alt+" + toString(index)).c_str());1138index++;1139}1140if (menuCheckShowOverlappedRoutes->shown()) {1141menuCheckShowOverlappedRoutes->setAccelText(("Alt+" + toString(index)).c_str());1142index++;1143}1144if (menuCheckShowAllPersonPlans->shown()) {1145menuCheckShowAllPersonPlans->setAccelText(("Alt+" + toString(index)).c_str());1146index++;1147}1148if (menuCheckLockPerson->shown()) {1149menuCheckLockPerson->setAccelText(("Alt+" + toString(index)).c_str());1150index++;1151}1152if (menuCheckShowAllContainerPlans->shown()) {1153menuCheckShowAllContainerPlans->setAccelText(("Alt+" + toString(index)).c_str());1154index++;1155}1156if (menuCheckLockContainer->shown()) {1157menuCheckLockContainer->setAccelText(("Alt+" + toString(index)).c_str());1158index++;1159}1160}11611162// ---------------------------------------------------------------------------1163// GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions - methods1164// ---------------------------------------------------------------------------11651166GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::DataViewOptions(GNEApplicationWindow* applicationWindow) :1167myApplicationWindow(applicationWindow) {1168}116911701171void1172GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::buildDataViewOptionsMenuChecks(FXMenuPane* editMenu) {1173// create menu checks1174menuCheckToggleDrawJunctionShape = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1175TL("Hide junction shape"), "Ctrl+J or Alt+1", "",1176GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_TOGGLEDRAWJUNCTIONSHAPE),1177myApplicationWindow, MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE);11781179menuCheckShowAdditionals = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1180TL("Show additionals"), "Alt+2", "",1181GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_SHOWADDITIONALS),1182myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS);11831184menuCheckShowShapes = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1185TL("Show shapes"), "Alt+3", "",1186GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_SHOWSHAPES),1187myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES);11881189menuCheckShowDemandElements = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1190TL("Show demand elements"), "Alt+4", "",1191GUIIconSubSys::getIcon(GUIIcon::COMMONMODE_CHECKBOX_SHOWDEMANDELEMENTS),1192myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS);11931194menuCheckToggleTAZRelDrawing = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1195TL("Draw TAZRel from center"), "Alt+5", "",1196GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELDRAWING),1197myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING);11981199menuCheckToggleTAZDrawFill = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1200TL("Draw TAZ fill"), "Alt+6", "",1201GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZDRAWFILL),1202myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL);12031204menuCheckToggleTAZRelOnlyFrom = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1205TL("Only draw TAZRel from"), "Alt+6", "",1206GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELONLYFROM),1207myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM);12081209menuCheckToggleTAZRelOnlyTo = GUIDesigns::buildFXMenuCheckboxIcon(editMenu,1210TL("Only draw TAZRel to"), "Alt+7", "",1211GUIIconSubSys::getIcon(GUIIcon::DATAMODE_CHECKBOX_TAZRELONLYTO),1212myApplicationWindow, MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO);1213// build separator1214separator = new FXMenuSeparator(editMenu);1215}121612171218void1219GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::hideDataViewOptionsMenuChecks() {1220menuCheckToggleDrawJunctionShape->hide();1221menuCheckShowAdditionals->hide();1222menuCheckShowShapes->hide();1223menuCheckShowDemandElements->hide();1224menuCheckToggleTAZRelDrawing->hide();1225menuCheckToggleTAZDrawFill->hide();1226menuCheckToggleTAZRelOnlyFrom->hide();1227menuCheckToggleTAZRelOnlyTo->hide();1228separator->hide();1229}123012311232void1233GNEApplicationWindowHelper::EditMenuCommands::DataViewOptions::updateShortcuts() {1234int index = 2;1235// update all accel text1236if (menuCheckShowAdditionals->shown()) {1237menuCheckShowAdditionals->setAccelText(("Alt+" + toString(index)).c_str());1238index++;1239}1240if (menuCheckShowShapes->shown()) {1241menuCheckShowShapes->setAccelText(("Alt+" + toString(index)).c_str());1242index++;1243}1244if (menuCheckShowDemandElements->shown()) {1245menuCheckShowDemandElements->setAccelText(("Alt+" + toString(index)).c_str());1246index++;1247}1248if (menuCheckToggleTAZRelDrawing->shown()) {1249menuCheckToggleTAZRelDrawing->setAccelText(("Alt+" + toString(index)).c_str());1250index++;1251}1252if (menuCheckToggleTAZDrawFill->shown()) {1253menuCheckToggleTAZDrawFill->setAccelText(("Alt+" + toString(index)).c_str());1254index++;1255}1256if (menuCheckToggleTAZRelOnlyFrom->shown()) {1257menuCheckToggleTAZRelOnlyFrom->setAccelText(("Alt+" + toString(index)).c_str());1258index++;1259}1260if (menuCheckToggleTAZRelOnlyTo->shown()) {1261menuCheckToggleTAZRelOnlyTo->setAccelText(("Alt+" + toString(index)).c_str());1262index++;1263}1264}12651266// ---------------------------------------------------------------------------1267// GNEApplicationWindowHelper::EditMenuCommands - methods1268// ---------------------------------------------------------------------------12691270GNEApplicationWindowHelper::EditMenuCommands::EditMenuCommands(GNEApplicationWindow* applicationWindow) :1271networkViewOptions(applicationWindow),1272demandViewOptions(applicationWindow),1273dataViewOptions(applicationWindow),1274myApplicationWindow(applicationWindow) {1275}127612771278void1279GNEApplicationWindowHelper::EditMenuCommands::buildUndoRedoMenuCommands(FXMenuPane* editMenu) {1280// build undo/redo command1281undoLastChange = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1282TL("Undo"), "Ctrl+Z", TL("Undo the last change."),1283GUIIconSubSys::getIcon(GUIIcon::UNDO), myApplicationWindow, MID_HOTKEY_CTRL_Z_UNDO);1284redoLastChange = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1285TL("Redo"), "Ctrl+Y", TL("Redo the last change."),1286GUIIconSubSys::getIcon(GUIIcon::REDO), myApplicationWindow, MID_HOTKEY_CTRL_Y_REDO);1287openUndolistDialog = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1288TL("Show undo/redo history"), "", TL("Open undo/redo history dialog."),1289GUIIconSubSys::getIcon(GUIIcon::UNDOLIST), myApplicationWindow, MID_GNE_UNDOLISTDIALOG);1290// add checkBox for recomputing in data mode1291menuCheckAllowUndoRedo = GUIDesigns::buildFXMenuCheckbox(editMenu,1292TL("Allow undo-redo"), "",1293myApplicationWindow, MID_GNE_TOGGLE_UNDOREDO);1294menuCheckAllowUndoRedo->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true));1295}129612971298void1299GNEApplicationWindowHelper::EditMenuCommands::buildViewMenuCommands(FXMenuPane* editMenu) {1300// build rest of menu commands1301editViewScheme = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1302TL("Edit Visualisation"), "F9", TL("Opens a dialog for editing visualization settings."),1303GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), myApplicationWindow, MID_HOTKEY_F9_EDIT_VIEWSCHEME);1304editViewPort = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1305TL("Edit Viewport"), "Ctrl+I", TL("Opens a dialog for editing viewing area, zoom and rotation."),1306GUIIconSubSys::getIcon(GUIIcon::EDITVIEWPORT), myApplicationWindow, MID_HOTKEY_CTRL_I_EDITVIEWPORT);1307}130813091310void1311GNEApplicationWindowHelper::EditMenuCommands::buildFrontElementMenuCommand(FXMenuPane* editMenu) {1312// build toggle front element1313toggleFrontElement = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1314TL("Front element"), "F11", TL("Mark current inspected element as front element"),1315GUIIconSubSys::getIcon(GUIIcon::FRONTELEMENT), myApplicationWindow, MID_HOTKEY_F11_FRONTELEMENT);1316}131713181319void1320GNEApplicationWindowHelper::EditMenuCommands::buildOpenSUMOMenuCommands(FXMenuPane* editMenu) {1321// add open in sumo options1322loadAdditionalsInSUMOGUI = GUIDesigns::buildFXMenuCheckbox(editMenu,1323TL("Load additionals in sumo-gui"), TL("Load additionals in sumo-gui."),1324myApplicationWindow, MID_TOOLBAREDIT_LOADADDITIONALS);1325loadAdditionalsInSUMOGUI->setCheck(TRUE);1326loadDemandInSUMOGUI = GUIDesigns::buildFXMenuCheckbox(editMenu,1327TL("Load demand in sumo-gui"), TL("Load demand in sumo-gui."),1328myApplicationWindow, MID_TOOLBAREDIT_LOADDEMAND);1329loadDemandInSUMOGUI->setCheck(TRUE);1330openInSUMOGUI = GUIDesigns::buildFXMenuCommandShortcut(editMenu,1331TL("Open in sumo-gui"), "Ctrl+T", TL("Opens the sumo-gui application with the current network."),1332GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), myApplicationWindow, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);1333}13341335// ---------------------------------------------------------------------------1336// GNEApplicationWindowHelper::LockMenuCommands - methods1337// ---------------------------------------------------------------------------13381339GNEApplicationWindowHelper::LockMenuCommands::LockMenuCommands(GNEApplicationWindow* applicationWindow) :1340myApplicationWindow(applicationWindow) {1341}134213431344void1345GNEApplicationWindowHelper::LockMenuCommands::buildLockMenuCommands(FXMenuPane* fileMenu) {1346// network1347menuCheckLockJunctions = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1348TL("&Junctions"), "", "",1349GUIIconSubSys::getIcon(GUIIcon::JUNCTION),1350myApplicationWindow, MID_GNE_LOCK_ELEMENT);13511352menuCheckLockEdges = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1353TL("&Edges"), "", "",1354GUIIconSubSys::getIcon(GUIIcon::EDGE),1355myApplicationWindow, MID_GNE_LOCK_ELEMENT);13561357menuCheckLockLanes = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1358TL("&Lanes"), "", "",1359GUIIconSubSys::getIcon(GUIIcon::LANE),1360myApplicationWindow, MID_GNE_LOCK_ELEMENT);13611362menuCheckLockConnections = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1363TL("&Connections"), "", "",1364GUIIconSubSys::getIcon(GUIIcon::CONNECTION),1365myApplicationWindow, MID_GNE_LOCK_ELEMENT);13661367menuCheckLockCrossings = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1368TL("C&rossings"), "", "",1369GUIIconSubSys::getIcon(GUIIcon::CROSSING),1370myApplicationWindow, MID_GNE_LOCK_ELEMENT);13711372menuCheckLockWalkingAreas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1373TL("Walkin&gAreas"), "", "",1374GUIIconSubSys::getIcon(GUIIcon::WALKINGAREA),1375myApplicationWindow, MID_GNE_LOCK_ELEMENT);13761377menuCheckLockAdditionals = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1378TL("&Additionals"), "", "",1379GUIIconSubSys::getIcon(GUIIcon::BUSSTOP),1380myApplicationWindow, MID_GNE_LOCK_ELEMENT);13811382menuCheckLockTAZs = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1383TL("&TAZs"), "", "",1384GUIIconSubSys::getIcon(GUIIcon::TAZ),1385myApplicationWindow, MID_GNE_LOCK_ELEMENT);13861387menuCheckLockWires = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1388TL("&Wires"), "", "",1389GUIIconSubSys::getIcon(GUIIcon::OVERHEADWIRE),1390myApplicationWindow, MID_GNE_LOCK_ELEMENT);13911392menuCheckLockPolygons = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1393TL("&Polygons"), "", "",1394GUIIconSubSys::getIcon(GUIIcon::POLY),1395myApplicationWindow, MID_GNE_LOCK_ELEMENT);13961397menuCheckLockPOIs = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1398TL("P&OIs"), "", "",1399GUIIconSubSys::getIcon(GUIIcon::POI),1400myApplicationWindow, MID_GNE_LOCK_ELEMENT);14011402menuCheckLockJpsWalkableAreas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1403TL("WalkableAreas"), "", "",1404GUIIconSubSys::getIcon(GUIIcon::JPS_WALKABLEAREA),1405myApplicationWindow, MID_GNE_LOCK_ELEMENT);14061407menuCheckLockJpsObstacles = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1408TL("Obstacles"), "", "",1409GUIIconSubSys::getIcon(GUIIcon::JPS_OBSTACLE),1410myApplicationWindow, MID_GNE_LOCK_ELEMENT);1411// demand1412menuCheckLockRoutes = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1413TL("&Routes"), "", "",1414GUIIconSubSys::getIcon(GUIIcon::ROUTE),1415myApplicationWindow, MID_GNE_LOCK_ELEMENT);14161417menuCheckLockVehicles = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1418TL("&Vehicles"), "", "",1419GUIIconSubSys::getIcon(GUIIcon::VEHICLE),1420myApplicationWindow, MID_GNE_LOCK_ELEMENT);14211422menuCheckLockPersons = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1423TL("&Persons"), "", "",1424GUIIconSubSys::getIcon(GUIIcon::PERSON),1425myApplicationWindow, MID_GNE_LOCK_ELEMENT);14261427menuCheckLockPersonTrips = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1428TL("Person&Trips"), "", "",1429GUIIconSubSys::getIcon(GUIIcon::PERSONTRIP_EDGE),1430myApplicationWindow, MID_GNE_LOCK_ELEMENT);14311432menuCheckLockWalks = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1433TL("&Walks"), "", "",1434GUIIconSubSys::getIcon(GUIIcon::WALK_EDGE),1435myApplicationWindow, MID_GNE_LOCK_ELEMENT);14361437menuCheckLockRides = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1438TL("Ri&des"), "", "",1439GUIIconSubSys::getIcon(GUIIcon::RIDE_EDGE),1440myApplicationWindow, MID_GNE_LOCK_ELEMENT);14411442menuCheckLockContainers = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1443TL("&Containers"), "", "",1444GUIIconSubSys::getIcon(GUIIcon::CONTAINER),1445myApplicationWindow, MID_GNE_LOCK_ELEMENT);14461447menuCheckLockTransports = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1448TL("Tra&nsports"), "", "",1449GUIIconSubSys::getIcon(GUIIcon::TRANSPORT_EDGE),1450myApplicationWindow, MID_GNE_LOCK_ELEMENT);14511452menuCheckLockTranships = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1453TL("Trans&hips"), "", "",1454GUIIconSubSys::getIcon(GUIIcon::TRANSHIP_EDGE),1455myApplicationWindow, MID_GNE_LOCK_ELEMENT);14561457menuCheckLockStops = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1458TL("Stop&s"), "", "",1459GUIIconSubSys::getIcon(GUIIcon::STOPELEMENT),1460myApplicationWindow, MID_GNE_LOCK_ELEMENT);1461// data1462menuCheckLockEdgeDatas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1463TL("&EdgeDatas"), "", "",1464GUIIconSubSys::getIcon(GUIIcon::EDGEDATA),1465myApplicationWindow, MID_GNE_LOCK_ELEMENT);14661467menuCheckLockEdgeRelDatas = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1468TL("E&dgeRelDatas"), "", "",1469GUIIconSubSys::getIcon(GUIIcon::EDGERELDATA),1470myApplicationWindow, MID_GNE_LOCK_ELEMENT);14711472menuCheckLockEdgeTAZRels = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1473TL("Edge&TAZRel"), "", "",1474GUIIconSubSys::getIcon(GUIIcon::TAZRELDATA),1475myApplicationWindow, MID_GNE_LOCK_ELEMENT);14761477// separator1478new FXMenuSeparator(fileMenu);14791480menuCheckLockSelectedElements = GUIDesigns::buildFXMenuCheckboxIcon(fileMenu,1481TL("Lock selected elements"), "", TL("selected elements"),1482GUIIconSubSys::getIcon(GUIIcon::LOCK_SELECTED), myApplicationWindow, MID_GNE_LOCK_SELECTEDELEMENTS);14831484// separator1485new FXMenuSeparator(fileMenu);14861487GUIDesigns::buildFXMenuCommandShortcut(fileMenu,1488TL("Lock all elements"), "", TL("all elements"),1489GUIIconSubSys::getIcon(GUIIcon::LOCK), myApplicationWindow, MID_GNE_LOCK_ALLELEMENTS);14901491GUIDesigns::buildFXMenuCommandShortcut(fileMenu,1492TL("Unlock all elements"), "", TL("Unlock all elements"),1493GUIIconSubSys::getIcon(GUIIcon::UNLOCK), myApplicationWindow, MID_GNE_UNLOCK_ALLELEMENTS);1494}149514961497void1498GNEApplicationWindowHelper::LockMenuCommands::removeHotkeys() {1499// network1500menuCheckLockJunctions->remHotKey(parseHotKey('j'));1501menuCheckLockEdges->remHotKey(parseHotKey('e'));1502menuCheckLockLanes->remHotKey(parseHotKey('l'));1503menuCheckLockConnections->remHotKey(parseHotKey('c'));1504menuCheckLockCrossings->remHotKey(parseHotKey('r'));1505menuCheckLockWalkingAreas->remHotKey(parseHotKey('g'));1506menuCheckLockAdditionals->remHotKey(parseHotKey('a'));1507menuCheckLockTAZs->remHotKey(parseHotKey('t'));1508menuCheckLockWires->remHotKey(parseHotKey('w'));1509menuCheckLockPolygons->remHotKey(parseHotKey('p'));1510menuCheckLockPOIs->remHotKey(parseHotKey('o'));1511menuCheckLockJpsWalkableAreas->remHotKey(parseHotKey('n'));1512menuCheckLockJpsObstacles->remHotKey(parseHotKey('b'));1513// demand1514menuCheckLockRoutes->remHotKey(parseHotKey('r'));1515menuCheckLockVehicles->remHotKey(parseHotKey('v'));1516menuCheckLockPersons->remHotKey(parseHotKey('p'));1517menuCheckLockPersonTrips->remHotKey(parseHotKey('t'));1518menuCheckLockWalks->remHotKey(parseHotKey('w'));1519menuCheckLockRides->remHotKey(parseHotKey('d'));1520menuCheckLockContainers->remHotKey(parseHotKey('c'));1521menuCheckLockTransports->remHotKey(parseHotKey('n'));1522menuCheckLockTranships->remHotKey(parseHotKey('h'));1523menuCheckLockStops->remHotKey(parseHotKey('s'));1524// data1525menuCheckLockEdgeDatas->remHotKey(parseHotKey('e'));1526menuCheckLockEdgeRelDatas->remHotKey(parseHotKey('d'));1527menuCheckLockEdgeTAZRels->remHotKey(parseHotKey('t'));1528}15291530void1531GNEApplicationWindowHelper::LockMenuCommands::showNetworkLockMenuCommands() {1532// first enable menu commands1533menuCheckLockJunctions->enable();1534menuCheckLockEdges->enable();1535menuCheckLockLanes->enable();1536menuCheckLockConnections->enable();1537menuCheckLockCrossings->enable();1538menuCheckLockWalkingAreas->enable();1539menuCheckLockAdditionals->enable();1540menuCheckLockTAZs->enable();1541menuCheckLockWires->enable();1542menuCheckLockPolygons->enable();1543menuCheckLockPOIs->enable();1544menuCheckLockJpsWalkableAreas->enable();1545menuCheckLockJpsObstacles->enable();1546// set accels1547menuCheckLockJunctions->addHotKey(parseHotKey('j'));1548menuCheckLockEdges->addHotKey(parseHotKey('e'));1549menuCheckLockLanes->addHotKey(parseHotKey('l'));1550menuCheckLockConnections->addHotKey(parseHotKey('c'));1551menuCheckLockCrossings->addHotKey(parseHotKey('r'));1552menuCheckLockWalkingAreas->addHotKey(parseHotKey('g'));1553menuCheckLockAdditionals->addHotKey(parseHotKey('a'));1554menuCheckLockTAZs->addHotKey(parseHotKey('t'));1555menuCheckLockWires->addHotKey(parseHotKey('w'));1556menuCheckLockPolygons->addHotKey(parseHotKey('p'));1557menuCheckLockPOIs->addHotKey(parseHotKey('o'));1558menuCheckLockJpsWalkableAreas->addHotKey(parseHotKey('n'));1559menuCheckLockJpsObstacles->addHotKey(parseHotKey('b'));1560// now show it1561menuCheckLockJunctions->show();1562menuCheckLockEdges->show();1563menuCheckLockLanes->show();1564menuCheckLockConnections->show();1565menuCheckLockCrossings->show();1566menuCheckLockWalkingAreas->show();1567menuCheckLockAdditionals->show();1568menuCheckLockTAZs->show();1569menuCheckLockWires->show();1570menuCheckLockPolygons->show();1571menuCheckLockPOIs->show();1572menuCheckLockJpsWalkableAreas->show();1573menuCheckLockJpsObstacles->show();1574}157515761577void1578GNEApplicationWindowHelper::LockMenuCommands::hideNetworkLockMenuCommands() {1579// first disable menu commands1580menuCheckLockJunctions->disable();1581menuCheckLockEdges->disable();1582menuCheckLockLanes->disable();1583menuCheckLockConnections->disable();1584menuCheckLockCrossings->disable();1585menuCheckLockWalkingAreas->disable();1586menuCheckLockAdditionals->disable();1587menuCheckLockTAZs->disable();1588menuCheckLockPolygons->disable();1589menuCheckLockPOIs->disable();1590menuCheckLockJpsWalkableAreas->disable();1591menuCheckLockJpsObstacles->disable();1592// now hide it1593menuCheckLockJunctions->hide();1594menuCheckLockEdges->hide();1595menuCheckLockLanes->hide();1596menuCheckLockConnections->hide();1597menuCheckLockCrossings->hide();1598menuCheckLockWalkingAreas->hide();1599menuCheckLockAdditionals->hide();1600menuCheckLockTAZs->hide();1601menuCheckLockWires->hide();1602menuCheckLockPolygons->hide();1603menuCheckLockPOIs->hide();1604menuCheckLockJpsWalkableAreas->hide();1605menuCheckLockJpsObstacles->hide();1606}160716081609void1610GNEApplicationWindowHelper::LockMenuCommands::showDemandLockMenuCommands() {1611// first enable menu commands1612menuCheckLockRoutes->enable();1613menuCheckLockVehicles->enable();1614menuCheckLockPersons->enable();1615menuCheckLockPersonTrips->enable();1616menuCheckLockWalks->enable();1617menuCheckLockRides->enable();1618menuCheckLockContainers->enable();1619menuCheckLockTransports->enable();1620menuCheckLockTranships->enable();1621menuCheckLockStops->enable();1622// set accels1623menuCheckLockRoutes->addHotKey(parseHotKey('r'));1624menuCheckLockVehicles->addHotKey(parseHotKey('v'));1625menuCheckLockPersons->addHotKey(parseHotKey('p'));1626menuCheckLockPersonTrips->addHotKey(parseHotKey('t'));1627menuCheckLockWalks->addHotKey(parseHotKey('w'));1628menuCheckLockRides->addHotKey(parseHotKey('d'));1629menuCheckLockContainers->addHotKey(parseHotKey('c'));1630menuCheckLockTransports->addHotKey(parseHotKey('n'));1631menuCheckLockTranships->addHotKey(parseHotKey('h'));1632menuCheckLockStops->addHotKey(parseHotKey('s'));1633// now show it1634menuCheckLockRoutes->show();1635menuCheckLockVehicles->show();1636menuCheckLockPersons->show();1637menuCheckLockPersonTrips->show();1638menuCheckLockWalks->show();1639menuCheckLockRides->show();1640menuCheckLockContainers->show();1641menuCheckLockTransports->show();1642menuCheckLockTranships->show();1643menuCheckLockStops->show();1644}164516461647void1648GNEApplicationWindowHelper::LockMenuCommands::hideDemandLockMenuCommands() {1649// first disable menu commands1650menuCheckLockRoutes->disable();1651menuCheckLockVehicles->disable();1652menuCheckLockPersons->disable();1653menuCheckLockPersonTrips->disable();1654menuCheckLockWalks->disable();1655menuCheckLockRides->disable();1656menuCheckLockContainers->disable();1657menuCheckLockTransports->disable();1658menuCheckLockTranships->disable();1659menuCheckLockStops->disable();1660// now hide it1661menuCheckLockRoutes->hide();1662menuCheckLockVehicles->hide();1663menuCheckLockPersons->hide();1664menuCheckLockPersonTrips->hide();1665menuCheckLockWalks->hide();1666menuCheckLockRides->hide();1667menuCheckLockContainers->hide();1668menuCheckLockTransports->hide();1669menuCheckLockTranships->hide();1670menuCheckLockStops->hide();1671}167216731674void1675GNEApplicationWindowHelper::LockMenuCommands::showDataLockMenuCommands() {1676// first enable menu commands1677menuCheckLockEdgeDatas->enable();1678menuCheckLockEdgeRelDatas->enable();1679menuCheckLockEdgeTAZRels->enable();1680// set accels1681menuCheckLockEdgeDatas->addHotKey(parseHotKey('e'));1682menuCheckLockEdgeRelDatas->addHotKey(parseHotKey('d'));1683menuCheckLockEdgeTAZRels->addHotKey(parseHotKey('t'));1684// now show it1685menuCheckLockEdgeDatas->show();1686menuCheckLockEdgeRelDatas->show();1687menuCheckLockEdgeTAZRels->show();1688}168916901691void1692GNEApplicationWindowHelper::LockMenuCommands::hideDataLockMenuCommands() {1693// first disable menu commands1694menuCheckLockEdgeDatas->disable();1695menuCheckLockEdgeRelDatas->disable();1696menuCheckLockEdgeTAZRels->disable();1697// now hide it1698menuCheckLockEdgeDatas->hide();1699menuCheckLockEdgeRelDatas->hide();1700menuCheckLockEdgeTAZRels->hide();1701}170217031704void1705GNEApplicationWindowHelper::LockMenuCommands::lockAll() {1706menuCheckLockJunctions->setCheck(TRUE);1707menuCheckLockEdges->setCheck(TRUE);1708menuCheckLockLanes->setCheck(TRUE);1709menuCheckLockConnections->setCheck(TRUE);1710menuCheckLockCrossings->setCheck(TRUE);1711menuCheckLockWalkingAreas->setCheck(TRUE);1712menuCheckLockAdditionals->setCheck(TRUE);1713menuCheckLockTAZs->setCheck(TRUE);1714menuCheckLockWires->setCheck(TRUE);1715menuCheckLockPolygons->setCheck(TRUE);1716menuCheckLockPOIs->setCheck(TRUE);1717menuCheckLockJpsWalkableAreas->setCheck(TRUE);1718menuCheckLockJpsObstacles->setCheck(TRUE);1719menuCheckLockRoutes->setCheck(TRUE);1720menuCheckLockVehicles->setCheck(TRUE);1721menuCheckLockPersons->setCheck(TRUE);1722menuCheckLockPersonTrips->setCheck(TRUE);1723menuCheckLockWalks->setCheck(TRUE);1724menuCheckLockRides->setCheck(TRUE);1725menuCheckLockContainers->setCheck(TRUE);1726menuCheckLockTransports->setCheck(TRUE);1727menuCheckLockTranships->setCheck(TRUE);1728menuCheckLockStops->setCheck(TRUE);1729menuCheckLockEdgeDatas->setCheck(TRUE);1730menuCheckLockEdgeRelDatas->setCheck(TRUE);1731menuCheckLockEdgeTAZRels->setCheck(TRUE);1732}173317341735void1736GNEApplicationWindowHelper::LockMenuCommands::unlockAll() {1737menuCheckLockJunctions->setCheck(FALSE);1738menuCheckLockEdges->setCheck(FALSE);1739menuCheckLockLanes->setCheck(FALSE);1740menuCheckLockConnections->setCheck(FALSE);1741menuCheckLockCrossings->setCheck(FALSE);1742menuCheckLockWalkingAreas->setCheck(FALSE);1743menuCheckLockAdditionals->setCheck(FALSE);1744menuCheckLockTAZs->setCheck(FALSE);1745menuCheckLockWires->setCheck(FALSE);1746menuCheckLockPolygons->setCheck(FALSE);1747menuCheckLockPOIs->setCheck(FALSE);1748menuCheckLockJpsWalkableAreas->setCheck(FALSE);1749menuCheckLockJpsObstacles->setCheck(FALSE);1750menuCheckLockRoutes->setCheck(FALSE);1751menuCheckLockVehicles->setCheck(FALSE);1752menuCheckLockPersons->setCheck(FALSE);1753menuCheckLockPersonTrips->setCheck(FALSE);1754menuCheckLockWalks->setCheck(FALSE);1755menuCheckLockRides->setCheck(FALSE);1756menuCheckLockContainers->setCheck(FALSE);1757menuCheckLockTransports->setCheck(FALSE);1758menuCheckLockTranships->setCheck(FALSE);1759menuCheckLockStops->setCheck(FALSE);1760menuCheckLockEdgeDatas->setCheck(FALSE);1761menuCheckLockEdgeRelDatas->setCheck(FALSE);1762menuCheckLockEdgeTAZRels->setCheck(FALSE);1763}176417651766void1767GNEApplicationWindowHelper::LockMenuCommands::editLocking(const GNEAttributeCarrier* AC, const FXbool value) {1768// check elements1769if (AC->getTagProperty()->getTag() == SUMO_TAG_JUNCTION) {1770menuCheckLockJunctions->setCheck(value);1771} else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGE) {1772menuCheckLockEdges->setCheck(value);1773} else if (AC->getTagProperty()->getTag() == SUMO_TAG_LANE) {1774menuCheckLockLanes->setCheck(value);1775} else if (AC->getTagProperty()->getTag() == SUMO_TAG_CONNECTION) {1776menuCheckLockConnections->setCheck(value);1777} else if (AC->getTagProperty()->getTag() == SUMO_TAG_CROSSING) {1778menuCheckLockCrossings->setCheck(value);1779} else if (AC->getTagProperty()->getTag() == SUMO_TAG_WALKINGAREA) {1780menuCheckLockWalkingAreas->setCheck(value);1781} else if (AC->getTagProperty()->isAdditionalElement()) {1782menuCheckLockAdditionals->setCheck(value);1783} else if (AC->getTagProperty()->isTAZElement()) {1784menuCheckLockTAZs->setCheck(value);1785} else if (AC->getTagProperty()->isWireElement()) {1786menuCheckLockWires->setCheck(value);1787} else if (AC->getTagProperty()->getTag() == SUMO_TAG_POLY) {1788menuCheckLockPolygons->setCheck(value);1789} else if (AC->getTagProperty()->getTag() == GNE_TAG_JPS_WALKABLEAREA) {1790menuCheckLockJpsWalkableAreas->setCheck(value);1791} else if (AC->getTagProperty()->getTag() == GNE_TAG_JPS_OBSTACLE) {1792menuCheckLockJpsObstacles->setCheck(value);1793} else if ((AC->getTagProperty()->getTag() == SUMO_TAG_POI) ||1794(AC->getTagProperty()->getTag() == GNE_TAG_POILANE) ||1795(AC->getTagProperty()->getTag() == GNE_TAG_POIGEO)) {1796menuCheckLockPOIs->setCheck(value);1797} else if (AC->getTagProperty()->isRoute()) {1798menuCheckLockRoutes->setCheck(value);1799} else if (AC->getTagProperty()->isVehicle()) {1800menuCheckLockVehicles->setCheck(value);1801} else if (AC->getTagProperty()->isPerson()) {1802menuCheckLockPersons->setCheck(value);1803} else if (AC->getTagProperty()->isPlanPersonTrip()) {1804menuCheckLockPersonTrips->setCheck(value);1805} else if (AC->getTagProperty()->isPlanWalk()) {1806menuCheckLockWalks->setCheck(value);1807} else if (AC->getTagProperty()->isPlanRide()) {1808menuCheckLockRides->setCheck(value);1809} else if (AC->getTagProperty()->isContainer()) {1810menuCheckLockContainers->setCheck(value);1811} else if (AC->getTagProperty()->isPlanTransport()) {1812menuCheckLockTransports->setCheck(value);1813} else if (AC->getTagProperty()->isPlanTranship()) {1814menuCheckLockTranships->setCheck(value);1815} else if (AC->getTagProperty()->isVehicleStop() ||1816AC->getTagProperty()->isPlanStopPerson() ||1817AC->getTagProperty()->isPlanStopContainer()) {1818menuCheckLockStops->setCheck(value);1819} else if (AC->getTagProperty()->getTag() == GNE_TAG_EDGEREL_SINGLE) {1820menuCheckLockEdgeDatas->setCheck(value);1821} else if (AC->getTagProperty()->getTag() == SUMO_TAG_EDGEREL) {1822menuCheckLockEdgeRelDatas->setCheck(value);1823} else if (AC->getTagProperty()->getTag() == SUMO_TAG_TAZREL) {1824menuCheckLockEdgeTAZRels->setCheck(value);1825}1826}182718281829FXHotKey1830GNEApplicationWindowHelper::LockMenuCommands::parseHotKey(const FXwchar character) {1831FXuint code = 0, mods = 0;1832if (Unicode::isAlphaNumeric(character)) {1833mods = ALTMASK;1834code = fxucs2keysym(Unicode::toLower(character));1835}1836return MKUINT(code, mods);1837}18381839// ---------------------------------------------------------------------------1840// GNEApplicationWindowHelper::ProcessingMenuCommands - methods1841// ---------------------------------------------------------------------------18421843GNEApplicationWindowHelper::ProcessingMenuCommands::ProcessingMenuCommands(GNEApplicationWindow* applicationWindow) :1844myApplicationWindow(applicationWindow) {1845}184618471848void1849GNEApplicationWindowHelper::ProcessingMenuCommands::buildProcessingMenuCommands(FXMenuPane* processingMenu) {1850// build network processing menu commands1851computeNetwork = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1852TL("Compute Junctions"), "F5", TL("Compute junction shape and logic."),1853GUIIconSubSys::getIcon(GUIIcon::COMPUTEJUNCTIONS), myApplicationWindow, MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND);1854computeNetworkVolatile = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1855TL("Compute Junctions with volatile options"), "Shift+F5", TL("Compute junction shape and logic using volatile junctions."),1856GUIIconSubSys::getIcon(GUIIcon::COMPUTEJUNCTIONS), myApplicationWindow, MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE);1857cleanJunctions = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1858TL("Clean Junctions"), "F6", TL("Remove solitary junctions."),1859GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES);1860joinJunctions = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1861TL("Join Selected Junctions"), "F7", TL("Join selected junctions into a single junction."),1862GUIIconSubSys::getIcon(GUIIcon::JOINJUNCTIONS), myApplicationWindow, MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES);1863clearInvalidCrossings = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1864TL("Clean invalid crossings"), "F8", TL("Clear invalid crossings."),1865GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS);1866// add separator for checkBox1867mySeparatorCheckBox = new FXMenuSeparator(processingMenu);1868// add checkBox for recomputing in data mode1869menuCheckRecomputeDataMode = GUIDesigns::buildFXMenuCheckboxIcon(processingMenu,1870TL("Recompute Network in Data Mode"), "", "",1871GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), myApplicationWindow, MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA);1872// set default value1873menuCheckRecomputeDataMode->setCheck(myApplicationWindow->getApp()->reg().readBoolEntry("NETEDIT", "RecomputeData", true));1874// build demand processing menu commands1875computeDemand = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1876TL("Compute demand"), "F5", TL("Computes demand elements."),1877GUIIconSubSys::getIcon(GUIIcon::COMPUTEDEMAND), myApplicationWindow, MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND);1878cleanRoutes = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1879TL("Clean routes"), "F6", TL("Removes routes without vehicles."),1880GUIIconSubSys::getIcon(GUIIcon::CLEANROUTES), myApplicationWindow, MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES);1881joinRoutes = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1882TL("Join routes"), "F7", TL("Joins routes with the same edges."),1883GUIIconSubSys::getIcon(GUIIcon::JOINROUTES), myApplicationWindow, MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES);1884adjustPersonPlans = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1885TL("Adjust person plans"), "Shift+F7", TL("Adjust person plans (start/end positions, arrival positions, etc.)"),1886GUIIconSubSys::getIcon(GUIIcon::ADJUSTPERSONPLANS), myApplicationWindow, MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS);1887clearInvalidDemandElements = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1888TL("Clean invalid route elements"), "F8", TL("Clear elements with an invalid path (routes, Trips, Flows...)."),1889GUIIconSubSys::getIcon(GUIIcon::CLEANJUNCTIONS), myApplicationWindow, MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS);1890// add separator1891myOptionsSeparator = new FXMenuSeparator(processingMenu);1892// create optionmenus1893optionMenus = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1894TL("Sumo options"), "Shift+F10", TL("Configure sumo Options."),1895GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI), myApplicationWindow, MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU);1896// add separator1897myOptionsSeparator = new FXMenuSeparator(processingMenu);1898// create optionmenus1899optionMenus = GUIDesigns::buildFXMenuCommandShortcut(processingMenu,1900TL("Options"), "F10", TL("Configure netedit Options."),1901GUIIconSubSys::getIcon(GUIIcon::OPTIONS), myApplicationWindow, MID_HOTKEY_F10_OPTIONSMENU);1902}190319041905void1906GNEApplicationWindowHelper::ProcessingMenuCommands::showNetworkProcessingMenuCommands() {1907// first enable menu commands1908computeNetwork->enable();1909computeNetworkVolatile->enable();1910cleanJunctions->enable();1911joinJunctions->enable();1912clearInvalidCrossings->enable();1913mySeparatorCheckBox->enable();1914menuCheckRecomputeDataMode->enable();1915// now show it1916computeNetwork->show();1917computeNetworkVolatile->show();1918cleanJunctions->show();1919joinJunctions->show();1920clearInvalidCrossings->show();1921mySeparatorCheckBox->show();1922menuCheckRecomputeDataMode->show();1923}192419251926void1927GNEApplicationWindowHelper::ProcessingMenuCommands::hideNetworkProcessingMenuCommands() {1928// first disable menu commands1929computeNetwork->disable();1930computeNetworkVolatile->disable();1931cleanJunctions->disable();1932joinJunctions->disable();1933clearInvalidCrossings->disable();1934// now hide it1935computeNetwork->hide();1936computeNetworkVolatile->hide();1937cleanJunctions->hide();1938joinJunctions->hide();1939clearInvalidCrossings->hide();1940}194119421943void1944GNEApplicationWindowHelper::ProcessingMenuCommands::showDemandProcessingMenuCommands() {1945// first enable menu commands1946computeDemand->enable();1947cleanRoutes->enable();1948joinRoutes->enable();1949adjustPersonPlans->enable();1950clearInvalidDemandElements->enable();1951// now show it1952computeDemand->show();1953cleanRoutes->show();1954joinRoutes->show();1955adjustPersonPlans->show();1956clearInvalidDemandElements->show();1957}195819591960void1961GNEApplicationWindowHelper::ProcessingMenuCommands::hideDemandProcessingMenuCommands() {1962// first disable menu commands1963computeDemand->disable();1964cleanRoutes->disable();1965joinRoutes->disable();1966adjustPersonPlans->disable();1967clearInvalidDemandElements->disable();1968// now hide it1969computeDemand->hide();1970cleanRoutes->hide();1971joinRoutes->hide();1972adjustPersonPlans->hide();1973clearInvalidDemandElements->hide();1974}197519761977void1978GNEApplicationWindowHelper::ProcessingMenuCommands::showDataProcessingMenuCommands() {1979// currently nothing to show1980}198119821983void1984GNEApplicationWindowHelper::ProcessingMenuCommands::hideDataProcessingMenuCommands() {1985// currently nothing to hide1986}198719881989void1990GNEApplicationWindowHelper::ProcessingMenuCommands::showSeparator() {1991myOptionsSeparator->show();1992}199319941995void1996GNEApplicationWindowHelper::ProcessingMenuCommands::hideSeparator() {1997myOptionsSeparator->hide();1998}19992000// ---------------------------------------------------------------------------2001// GNEApplicationWindowHelper::LocateMenuCommands - methods2002// ---------------------------------------------------------------------------20032004GNEApplicationWindowHelper::LocateMenuCommands::LocateMenuCommands(GNEApplicationWindow* applicationWindow) :2005myApplicationWindow(applicationWindow) {2006}200720082009void2010GNEApplicationWindowHelper::LocateMenuCommands::buildLocateMenuCommands(FXMenuPane* locateMenu) {2011// build locate menu commands2012GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2013TL("&Junctions"), "Shift+J", TL("Open a dialog for locating a Junction."),2014GUIIconSubSys::getIcon(GUIIcon::LOCATEJUNCTION), myApplicationWindow, MID_HOTKEY_SHIFT_J_LOCATEJUNCTION);2015GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2016TL("&Edges"), "Shift+E", TL("Open a dialog for locating an Edge."),2017GUIIconSubSys::getIcon(GUIIcon::LOCATEEDGE), myApplicationWindow, MID_HOTKEY_SHIFT_E_LOCATEEDGE);2018GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2019TL("&WalkingAreas"), "Shift+W", TL("Open a dialog for locating a Walking Area."),2020GUIIconSubSys::getIcon(GUIIcon::LOCATEWALKINGAREA), myApplicationWindow, MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA);2021GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2022TL("&Vehicles"), "Shift+V", TL("Open a dialog for locating a Vehicle."),2023GUIIconSubSys::getIcon(GUIIcon::LOCATEVEHICLE), myApplicationWindow, MID_HOTKEY_SHIFT_V_LOCATEVEHICLE);2024GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2025TL("&Persons"), "Shift+P", TL("Open a dialog for locating a Person."),2026GUIIconSubSys::getIcon(GUIIcon::LOCATEPERSON), myApplicationWindow, MID_HOTKEY_SHIFT_P_LOCATEPERSON);2027GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2028TL("&Containers"), "Shift+C", TL("Open a dialog for locating a Container."),2029GUIIconSubSys::getIcon(GUIIcon::LOCATECONTAINER), myApplicationWindow, MID_HOTKEY_SHIFT_C_LOCATECONTAINER);2030GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2031TL("&Route"), "Shift+R", TL("Open a dialog for locating a Route."),2032GUIIconSubSys::getIcon(GUIIcon::LOCATEROUTE), myApplicationWindow, MID_HOTKEY_SHIFT_R_LOCATEROUTE);2033GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2034TL("&Stops"), "Shift+S", TL("Open a dialog for locating a Stop."),2035GUIIconSubSys::getIcon(GUIIcon::LOCATESTOP), myApplicationWindow, MID_HOTKEY_SHIFT_S_LOCATESTOP);2036GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2037TL("&TLS"), "Shift+T", TL("Open a dialog for locating a Traffic Light."),2038GUIIconSubSys::getIcon(GUIIcon::LOCATETLS), myApplicationWindow, MID_HOTKEY_SHIFT_T_LOCATETLS);2039GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2040TL("&Additional"), "Shift+A", TL("Open a dialog for locating an Additional Structure."),2041GUIIconSubSys::getIcon(GUIIcon::LOCATEADD), myApplicationWindow, MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL);2042GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2043TL("P&oI"), "Shift+O", TL("Open a dialog for locating a Point of Interest."),2044GUIIconSubSys::getIcon(GUIIcon::LOCATEPOI), myApplicationWindow, MID_HOTKEY_SHIFT_O_LOCATEPOI);2045GUIDesigns::buildFXMenuCommandShortcut(locateMenu,2046TL("Po&lygon"), "Shift+L", TL("Open a dialog for locating a Polygon."),2047GUIIconSubSys::getIcon(GUIIcon::LOCATEPOLY), myApplicationWindow, MID_HOTKEY_SHIFT_L_LOCATEPOLY);2048}20492050// ---------------------------------------------------------------------------2051// GNEApplicationWindowHelper::ToolsMenuCommands - methods2052// ---------------------------------------------------------------------------20532054GNEApplicationWindowHelper::ToolsMenuCommands::ToolsMenuCommands(GNEApplicationWindow* applicationWindow) :2055myApplicationWindow(applicationWindow) {2056}205720582059GNEApplicationWindowHelper::ToolsMenuCommands::~ToolsMenuCommands() {2060// delete all tools2061for (const auto& tool : myPythonTools) {2062delete tool;2063}2064// delete dialogs2065if (myPythonToolDialog) {2066delete myPythonToolDialog;2067}2068}206920702071void2072GNEApplicationWindowHelper::ToolsMenuCommands::buildTools(FXMenuPane* toolsMenu,2073const std::map<std::string, FXMenuPane*>& menuPaneToolMaps) {2074// build tools from template2075// the templateTools vector is imported from templates.h (which only exists in the cmake-build folder)2076for (const auto& templateTool : templateTools) {2077if (templateTool.name == "netdiff") {2078myPythonTools.push_back(new GNENetDiffTool(myApplicationWindow, templateTool.pythonPath,2079menuPaneToolMaps.at(templateTool.subfolder)));2080} else if (menuPaneToolMaps.count(templateTool.subfolder) > 0) {2081myPythonTools.push_back(new GNEPythonTool(myApplicationWindow, templateTool.pythonPath,2082templateTool.templateStr, menuPaneToolMaps.at(templateTool.subfolder)));2083} else {2084myPythonTools.push_back(new GNEPythonTool(myApplicationWindow, templateTool.pythonPath,2085templateTool.templateStr, toolsMenu));2086}2087}2088}208920902091long2092GNEApplicationWindowHelper::ToolsMenuCommands::showTool(FXObject* menuCommand) {2093// iterate over all tools and find menu command2094for (const auto& tool : myPythonTools) {2095if (tool->getMenuCommand() == menuCommand) {2096if (myPythonToolDialog) {2097delete myPythonToolDialog;2098}2099myPythonToolDialog = new GNEPythonToolDialog(myApplicationWindow, tool);2100return 1;2101}2102}2103return 0;2104}210521062107long2108GNEApplicationWindowHelper::ToolsMenuCommands::runToolDialog(FXObject* menuCommand) const {2109// iterate over all tools and find menu command2110for (const auto& tool : myPythonTools) {2111if (tool->getMenuCommand() == menuCommand) {2112GNERunPythonToolDialog(myApplicationWindow, tool);2113return 1;2114}2115}2116return 0;2117}211821192120long2121GNEApplicationWindowHelper::ToolsMenuCommands::postProcessing(FXObject* menuCommand) const {2122// iterate over all tools and find menu command2123for (const auto& tool : myPythonTools) {2124if (tool->getMenuCommand() == menuCommand) {2125// execute postProcessing2126tool->postProcessing();2127return 1;2128}2129}2130return 0;2131}21322133// ---------------------------------------------------------------------------2134// GNEApplicationWindowHelper::WindowsMenuCommands - methods2135// ---------------------------------------------------------------------------21362137GNEApplicationWindowHelper::WindowsMenuCommands::WindowsMenuCommands(GNEApplicationWindow* applicationWindow) :2138myApplicationWindow(applicationWindow) {2139}214021412142void2143GNEApplicationWindowHelper::WindowsMenuCommands::buildWindowsMenuCommands(FXMenuPane* windowsMenu,2144FXStatusBar* statusbar, GUIMessageWindow* messageWindow) {2145// build windows menu commands2146GUIDesigns::buildFXMenuCheckbox(windowsMenu,2147TL("Show Status Line"), TL("Toggle this Status Bar on/off."),2148statusbar, FXWindow::ID_TOGGLESHOWN);2149GUIDesigns::buildFXMenuCheckbox(windowsMenu,2150TL("Show Message Window"), TL("Toggle the Message Window on/off."),2151messageWindow, FXWindow::ID_TOGGLESHOWN);2152new FXMenuSeparator(windowsMenu);2153GUIDesigns::buildFXMenuCommandShortcut(windowsMenu,2154TL("Clear Message Window"), "", TL("Clear the Message Window."),2155GUIIconSubSys::getIcon(GUIIcon::CLEARMESSAGEWINDOW), myApplicationWindow, MID_CLEARMESSAGEWINDOW);2156}21572158// ---------------------------------------------------------------------------2159// GNEApplicationWindowHelper::WindowsMenuCommands - methods2160// ---------------------------------------------------------------------------21612162GNEApplicationWindowHelper::HelpMenuCommands::HelpMenuCommands(GNEApplicationWindow* applicationWindow) :2163myApplicationWindow(applicationWindow) {2164}216521662167void2168GNEApplicationWindowHelper::HelpMenuCommands::buildHelpMenuCommands(FXMenuPane* helpMenu) {2169// build windows menu commands2170GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Online Documentation"), "F1", TL("Open Online documentation."),2171nullptr, myApplicationWindow, MID_HOTKEY_F1_ONLINEDOCUMENTATION);2172new FXMenuSeparator(helpMenu);2173GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Changelog"), "", TL("Open Changelog."),2174nullptr, myApplicationWindow, MID_CHANGELOG);2175GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Hotkeys"), "", TL("Open Hotkeys."),2176nullptr, myApplicationWindow, MID_HOTKEYS);2177GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Tutorial"), "", TL("Open Tutorial."),2178nullptr, myApplicationWindow, MID_TUTORIAL);2179GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("Feedback"), "", TL("Open feedback channels."),2180nullptr, myApplicationWindow, MID_FEEDBACK);2181new FXMenuSeparator(helpMenu);2182GUIDesigns::buildFXMenuCommandShortcut(helpMenu, TL("About"), "F12", TL("About netedit."),2183GUIIconSubSys::getIcon(GUIIcon::NETEDIT_MINI), myApplicationWindow, MID_HOTKEY_F12_ABOUT);2184}21852186// ---------------------------------------------------------------------------2187// GNEApplicationWindowHelper::NetworkCheckableButtons - methods2188// ---------------------------------------------------------------------------21892190GNEApplicationWindowHelper::SupermodeCommands::SupermodeCommands(GNEApplicationWindow* applicationWindow) :2191myApplicationWindow(applicationWindow) {2192}219321942195void2196GNEApplicationWindowHelper::SupermodeCommands::showSupermodeCommands() {2197networkMode->show();2198demandMode->show();2199dataMode->show();2200}220122022203void2204GNEApplicationWindowHelper::SupermodeCommands::setDefaultView() {2205showSupermodeCommands();2206}220722082209void2210GNEApplicationWindowHelper::SupermodeCommands::setJuPedSimView() {2211dataMode->hide();2212}221322142215void2216GNEApplicationWindowHelper::SupermodeCommands::buildSupermodeCommands(FXMenuPane* editMenu) {2217// build supermode menu commands2218networkMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,2219TL("&Network"), "F2", TL("Select network mode."),2220GUIIconSubSys::getIcon(GUIIcon::SUPERMODENETWORK), myApplicationWindow, MID_HOTKEY_F2_SUPERMODE_NETWORK);2221demandMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,2222TL("&Demand"), "F3", TL("Select demand mode."),2223GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDEMAND), myApplicationWindow, MID_HOTKEY_F3_SUPERMODE_DEMAND);2224dataMode = GUIDesigns::buildFXMenuCommandShortcut(editMenu,2225TL("&Data"), "F4", TL("Select data mode."),2226GUIIconSubSys::getIcon(GUIIcon::SUPERMODEDATA), myApplicationWindow, MID_HOTKEY_F4_SUPERMODE_DATA);2227}22282229// ---------------------------------------------------------------------------2230// GNESumoConfigHandler - methods2231// ---------------------------------------------------------------------------22322233GNEApplicationWindowHelper::GNESumoConfigHandler::GNESumoConfigHandler(GNEApplicationWindow* applicationWindow, const std::string& sumoConfigFile) :2234myApplicationWindow(applicationWindow),2235mySumoConfigFile(sumoConfigFile) {2236}223722382239bool2240GNEApplicationWindowHelper::GNESumoConfigHandler::loadSumoConfig() {2241// get options2242auto& neteditOptions = OptionsCont::getOptions();2243auto& sumoOptions = myApplicationWindow->getSumoOptions();2244// reset options2245sumoOptions.resetDefault();2246neteditOptions.resetDefault();2247// make all options writables2248sumoOptions.resetWritable();2249neteditOptions.resetWritable();2250// build parser2251XERCES_CPP_NAMESPACE::SAXParser parser;2252parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);2253parser.setDisableDefaultEntityResolution(true);2254// start the parsing2255OptionsLoader handler(sumoOptions);2256try {2257parser.setDocumentHandler(&handler);2258parser.setErrorHandler(&handler);2259parser.parse(StringUtils::transcodeToLocal(mySumoConfigFile).c_str());2260// allow to load with invalid options2261if (handler.errorOccurred()) {2262WRITE_WARNING(TLF("There are invalid options in sumo configuration '%'.", mySumoConfigFile));2263}2264} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {2265WRITE_ERROR(TLF("Could not load sumo configuration '%':\n %", mySumoConfigFile, StringUtils::transcode(e.getMessage())));2266return false;2267}2268// relocate files2269sumoOptions.relocateFiles(mySumoConfigFile);2270// configure files in bucket2271myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::SUMO_CONFIG, mySumoConfigFile);2272// set load options in netedit2273neteditOptions.resetWritable();2274if (sumoOptions.getString("net-file").size() > 0) {2275myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::NETWORK, sumoOptions.getString("net-file"));2276} else {2277WRITE_ERROR(TLF("No network defined in sumo configuration '%'.", mySumoConfigFile));2278return false;2279}2280neteditOptions.set("additional-files", sumoOptions.getString("additional-files"));2281neteditOptions.set("route-files", sumoOptions.getString("route-files"));2282// relocate files2283neteditOptions.relocateFiles(mySumoConfigFile);2284return true;2285}22862287// ---------------------------------------------------------------------------2288// GNENetconvertConfigHandler - methods2289// ---------------------------------------------------------------------------22902291GNEApplicationWindowHelper::GNENetconvertConfigHandler::GNENetconvertConfigHandler(const std::string& sumoConfigFile) :2292myNetconvertConfigFile(sumoConfigFile) {2293}229422952296bool2297GNEApplicationWindowHelper::GNENetconvertConfigHandler::loadNetconvertConfig() {2298// get options2299auto& neteditOptions = OptionsCont::getOptions();2300// reset options and mark all options as writables2301neteditOptions.resetDefault();2302neteditOptions.resetWritable();2303// build parser2304XERCES_CPP_NAMESPACE::SAXParser parser;2305parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);2306parser.setDisableDefaultEntityResolution(true);2307// start the parsing2308OptionsLoader handler(neteditOptions);2309try {2310parser.setDocumentHandler(&handler);2311parser.setErrorHandler(&handler);2312parser.parse(StringUtils::transcodeToLocal(myNetconvertConfigFile).c_str());2313// allow to load with invalid options2314if (handler.errorOccurred()) {2315WRITE_WARNING(TLF("There are invalid options in netconvert configuration '%'.", myNetconvertConfigFile));2316}2317} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {2318WRITE_ERROR(TLF("Could not load netconvert configuration '%':\n %", myNetconvertConfigFile, StringUtils::transcode(e.getMessage())));2319return false;2320}2321// relocate files2322neteditOptions.relocateFiles(myNetconvertConfigFile);2323// set load options in netdit2324neteditOptions.resetWritable();2325return true;2326}232723282329// ---------------------------------------------------------------------------2330// GNENeteditConfigHandler - methods2331// ---------------------------------------------------------------------------23322333GNEApplicationWindowHelper::GNENeteditConfigHandler::GNENeteditConfigHandler(GNEApplicationWindow* applicationWindow, const std::string& neteditConfigFile) :2334myApplicationWindow(applicationWindow),2335myNeteditConfigFile(neteditConfigFile) {2336}233723382339bool2340GNEApplicationWindowHelper::GNENeteditConfigHandler::loadNeteditConfig() {2341// get options2342auto& neteditOptions = OptionsCont::getOptions();2343// before reset defaults, save ignore route and demand elements (because usually are loaded trought console)2344const bool ignoreAdditionalElements = neteditOptions.getBool("ignore.additionalelements");2345const bool ignoreRouteElements = neteditOptions.getBool("ignore.routeelements");2346// reset options2347neteditOptions.resetDefault();2348// make all options writables2349neteditOptions.resetWritable();2350// build parser2351XERCES_CPP_NAMESPACE::SAXParser parser;2352parser.setValidationScheme(XERCES_CPP_NAMESPACE::SAXParser::Val_Never);2353parser.setDisableDefaultEntityResolution(true);2354// start the parsing2355OptionsLoader handler(neteditOptions);2356try {2357parser.setDocumentHandler(&handler);2358parser.setErrorHandler(&handler);2359parser.parse(StringUtils::transcodeToLocal(myNeteditConfigFile).c_str());2360// allow to load with invalid options2361if (handler.errorOccurred()) {2362WRITE_WARNING(TLF("There are invalid options in netedit configuration '%'.", myNeteditConfigFile));2363}2364} catch (const XERCES_CPP_NAMESPACE::XMLException& e) {2365WRITE_ERROR(TLF("Could not load netedit configuration '%':\n %", myNeteditConfigFile, StringUtils::transcode(e.getMessage())));2366return false;2367}2368// relocate files2369neteditOptions.relocateFiles(myNeteditConfigFile);2370// configure files in bucket2371myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::NETEDIT_CONFIG, myNeteditConfigFile);2372myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::SUMO_CONFIG, neteditOptions.getString("sumocfg-file"));2373myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::NETWORK, neteditOptions.getString("sumo-net-file"));2374myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::TLS, neteditOptions.getString("tls-file"));2375myApplicationWindow->getFileBucketHandler()->setDefaultFilenameFile(FileBucket::Type::EDGETYPE, neteditOptions.getString("edgetypes-file"));2376// restore ignores2377neteditOptions.resetWritable();2378// check if ignore additional or route files2379if (ignoreAdditionalElements) {2380neteditOptions.resetDefault("additional-files");2381}2382if (ignoreRouteElements) {2383neteditOptions.resetDefault("route-files");2384}2385return true;2386}238723882389// ---------------------------------------------------------------------------2390// GNEApplicationWindowHelper::FileBucketHandler - methods2391// ---------------------------------------------------------------------------23922393GNEApplicationWindowHelper::FileBucketHandler::FileBucketHandler(GNEApplicationWindow* applicationWindow,2394OptionsCont& neteditOptions, OptionsCont& sumoOptions) :2395myApplicationWindow(applicationWindow),2396myNeteditOptions(neteditOptions),2397mySumoOptions(sumoOptions) {2398// create default buckets2399for (const auto& type : FileBucket::types) {2400myBuckets[type].push_back(new FileBucket(type));2401}2402for (const auto& type : FileBucket::prefixes) {2403myBuckets[type].push_back(new FileBucket(type));2404}2405}240624072408GNEApplicationWindowHelper::FileBucketHandler::~FileBucketHandler() {2409// delete buckets2410for (auto& bucketMap : myBuckets) {2411for (auto& bucket : bucketMap.second) {2412delete bucket;2413}2414}2415}241624172418void2419GNEApplicationWindowHelper::FileBucketHandler::registerAC(const GNEAttributeCarrier* AC) {2420// insert element2421if (AC->getTagProperty()->saveInParentFile() == false) {2422// add element in bucket2423AC->getFileBucket()->addElement(false);2424}2425}242624272428void2429GNEApplicationWindowHelper::FileBucketHandler::unregisterAC(const GNEAttributeCarrier* AC) {2430if (AC->getTagProperty()->saveInParentFile() == false) {2431// remove element from bucket2432AC->getFileBucket()->removeElement(false);2433}2434}243524362437FileBucket*2438GNEApplicationWindowHelper::FileBucketHandler::updateAC(const GNEAttributeCarrier* AC, const std::string& filename) {2439// check file properties2440if (AC->getTagProperty()->saveInParentFile()) {2441// elements with parent aren't saved in buckets2442return nullptr;2443} else if (AC->getTagProperty()->isNetworkElement()) {2444// network elements are saved in a single file2445return myBuckets.at(FileBucket::Type::NETWORK).front();2446} else {2447// remove element from bucket2448AC->getFileBucket()->removeElement(AC->isTemplate());2449// iterate over all buckets to check if the given filename already exist2450for (const auto& type : FileBucket::types) {2451// get default bucket (secure because first bucket always exist)2452auto defaultBucket = getDefaultBucket(type);2453// check if this bucket type is compatible2454if (AC->getTagProperty()->isFileCompatible(defaultBucket->getType())) {2455// search bucket with this filename2456for (auto& bucket : myBuckets.at(type)) {2457if (bucket->getFilename() == filename) {2458// add element in bucket2459bucket->addElement(AC->isTemplate());2460// return the new bucket2461return bucket;2462}2463}2464}2465}2466// if we didn't found a bucket whit the given filename, create new2467for (const auto& type : FileBucket::types) {2468// this front() call is secure because every bucket group have always at least one default bucket)2469const auto bucketType = getDefaultBucket(type)->getType();2470// check compatibility2471if (AC->getTagProperty()->isFileCompatible(bucketType)) {2472// create new bucket with the given filename2473auto bucket = new FileBucket(bucketType, filename);2474myBuckets.at(bucketType).push_back(bucket);2475// add element in bucket2476bucket->addElement(AC->isTemplate());2477// update options (because we added a new bucket)2478updateOptions();2479// return the new bucket2480return bucket;2481}2482}2483// the AC was not updated, throw error2484throw ProcessError(TLF("Element '% cannot be updateAC in bucket '%'", AC->getID(), filename));2485}2486}248724882489bool2490GNEApplicationWindowHelper::FileBucketHandler::checkFilename(const GNEAttributeCarrier* AC, const std::string& filename) const {2491// check file properties2492if (AC->getTagProperty()->saveInParentFile()) {2493// elements with parent aren't saved in buckets2494return false;2495} else {2496// iterate over all buckets to check if exist a bucket with this filename2497for (const auto& type : FileBucket::types) {2498for (auto& bucket : myBuckets.at(type)) {2499if (bucket->getFilename() == filename) {2500// check if the bucket is compatible with this file2501return AC->getTagProperty()->isFileCompatible(bucket->getType());2502}2503}2504}2505// the file will be saved in a new bucket2506return true;2507}2508}250925102511std::string2512GNEApplicationWindowHelper::FileBucketHandler::getConfigDirectory() const {2513for (const auto& type : FileBucket::prefixes) {2514if (isFilenameDefined(type)) {2515return getDefaultFolder(type);2516}2517}2518return "";2519}252025212522std::string2523GNEApplicationWindowHelper::FileBucketHandler::getConfigFilePrefix(const std::string& sufix) const {2524for (const auto& type : FileBucket::prefixes) {2525if (isFilenameDefined(type)) {2526return getDefaultFilename(type) + sufix;2527}2528}2529return "";2530}253125322533FileBucket*2534GNEApplicationWindowHelper::FileBucketHandler::getDefaultBucket(const FileBucket::Type type) const {2535return myBuckets.at(type).front();2536}253725382539FileBucket*2540GNEApplicationWindowHelper::FileBucketHandler::getBucket(const FileBucket::Type type, const std::string& filename, const bool create) {2541// iterate over all buckets to check if the given filename already exist2542for (auto& bucketMap : myBuckets) {2543for (auto& bucket : bucketMap.second) {2544if ((bucket->getFilename() == filename) && (bucket->getType() == type)) {2545return bucket;2546}2547}2548}2549// on this point, we need to check if create a new bucket2550if (create) {2551// if the default bucket is empty, but not the filename, update the default bucket2552if (getDefaultFilename(type).empty() && (filename.size() > 0)) {2553setDefaultFilenameFile(type, filename);2554return getDefaultBucket(type);2555} else {2556// create new bucket2557auto bucket = new FileBucket(type, filename);2558myBuckets.at(type).push_back(bucket);2559return bucket;2560}2561} else {2562return nullptr;2563}2564}256525662567const std::vector<FileBucket*>&2568GNEApplicationWindowHelper::FileBucketHandler::getFileBuckets(const FileBucket::Type type) const {2569return myBuckets.at(type);2570}257125722573std::string2574GNEApplicationWindowHelper::FileBucketHandler::getDefaultFilename(const FileBucket::Type type) const {2575return myBuckets.at(type).front()->getFilename();2576}257725782579std::string2580GNEApplicationWindowHelper::FileBucketHandler::getDefaultFolder(const FileBucket::Type type) const {2581std::string prefix = getDefaultFilename(type);2582// remove until empty or trailing slash2583while (true) {2584if (prefix.empty()) {2585return prefix;2586} else if ((prefix.back() == '\'') ||2587(prefix.back() == '\\') ||2588(prefix.back() == '/')) {2589// remove last trailing slash2590prefix.pop_back();2591return prefix;2592} else {2593prefix.pop_back();2594}2595}2596}259725982599void2600GNEApplicationWindowHelper::FileBucketHandler::setDefaultFilenameFile(const FileBucket::Type type, const std::string& filename) {2601myBuckets.at(type).front()->setFilename(filename);2602// update filename in options2603updateOptions();2604}260526062607bool2608GNEApplicationWindowHelper::FileBucketHandler::isFilenameDefined(const FileBucket::Type type) const {2609return (myBuckets.at(type).front()->getFilename().size() > 0);2610}261126122613void2614GNEApplicationWindowHelper::FileBucketHandler::resetDefaultFilenames() {2615for (const auto& bucketPair : myBuckets) {2616bucketPair.second.front()->setFilename("");2617}2618// update filename in options2619updateOptions();2620}262126222623void2624GNEApplicationWindowHelper::FileBucketHandler::updateOptions() {2625// get filenames2626const auto sumoconfig = parseFilenames({FileBucket::Type::SUMO_CONFIG});2627const auto neteditconfig = parseFilenames({FileBucket::Type::NETEDIT_CONFIG});2628const auto networkFile = parseFilenames({FileBucket::Type::NETWORK});2629const auto additional = parseFilenames({FileBucket::Type::ADDITIONAL});2630const auto demandFile = parseFilenames({FileBucket::Type::DEMAND});2631const auto data = parseFilenames({FileBucket::Type::DATA});2632const auto meanData = parseFilenames({FileBucket::Type::MEANDATA});2633const auto additionalMeanData = parseFilenames({FileBucket::Type::ADDITIONAL, FileBucket::Type::MEANDATA});2634const auto edgeType = parseFilenames({FileBucket::Type::EDGETYPE});2635const auto tls = parseFilenames({FileBucket::Type::TLS});2636// set default filename depending of type2637myNeteditOptions.resetWritable();2638mySumoOptions.resetWritable();2639// check if save sumo additionals2640const bool sumoAdditionals = (myApplicationWindow->getEditMenuCommands().loadAdditionalsInSUMOGUI->getCheck() == TRUE);2641const bool sumoDemandElements = (myApplicationWindow->getEditMenuCommands().loadDemandInSUMOGUI->getCheck() == TRUE);2642// sumo config (only netedit)2643if (sumoconfig.size() > 0) {2644myNeteditOptions.set("sumocfg-file", sumoconfig);2645} else {2646myNeteditOptions.resetDefault("sumocfg-file");2647}2648// netedit config (only netedit)2649if (neteditconfig.size() > 0) {2650myNeteditOptions.set("configuration-file", neteditconfig);2651} else {2652myNeteditOptions.resetDefault("configuration-file");2653}2654// network file (common)2655if (networkFile.size() > 0) {2656myNeteditOptions.set("sumo-net-file", networkFile);2657mySumoOptions.set("net-file", networkFile);2658} else {2659myNeteditOptions.resetDefault("sumo-net-file");2660mySumoOptions.resetDefault("net-file");2661}2662// additional file (only netedit)2663if (additional.size() > 0) {2664myNeteditOptions.set("additional-files", additional);2665} else {2666myNeteditOptions.resetDefault("additional-files");2667}2668// demand file (netedit)2669if (demandFile.size() > 0) {2670myNeteditOptions.set("route-files", demandFile);2671} else {2672myNeteditOptions.resetDefault("route-files");2673}2674// demand file (sumo)2675if (sumoDemandElements && (demandFile.size() > 0)) {2676mySumoOptions.set("route-files", demandFile);2677} else {2678mySumoOptions.resetDefault("route-files");2679}2680// data file (only netedit)2681if (data.size() > 0) {2682myNeteditOptions.set("data-files", data);2683} else {2684myNeteditOptions.resetDefault("data-files");2685}2686// meanData file (only netedit)2687if (meanData.size() > 0) {2688myNeteditOptions.set("meandata-files", meanData);2689} else {2690myNeteditOptions.resetDefault("meandata-files");2691}2692// additional + meanData files (only sumo)2693if (sumoAdditionals && (additionalMeanData.size() > 0)) {2694mySumoOptions.set("additional-files", additionalMeanData);2695} else {2696mySumoOptions.resetDefault("additional-files");2697}2698// edgeType (only netedit)2699if (edgeType.size() > 0) {2700myNeteditOptions.set("edgetypes-file", edgeType);2701} else {2702myNeteditOptions.resetDefault("edgetypes-file");2703}2704// TLS (only netedit)2705if (tls.size() > 0) {2706myNeteditOptions.set("tls-file", tls);2707} else {2708myNeteditOptions.resetDefault("tls-file");2709}2710// update prefixes2711myBuckets.at(FileBucket::Type::SUMO_PREFIX).front()->setFilename(getPrefix(FileBucket::Type::SUMO_CONFIG, {".sumocfg", ".xml"}));2712myBuckets.at(FileBucket::Type::NETEDIT_PREFIX).front()->setFilename(getPrefix(FileBucket::Type::NETEDIT_CONFIG, {".netecfg", ".xml"}));2713myBuckets.at(FileBucket::Type::NETCONVERT_PREFIX).front()->setFilename(getPrefix(FileBucket::Type::NETCONVERT_CONFIG, {".netccfg", ".edg.xml", ".nod.xml", ".con.xml", ".typ.xml", ".tll.xml", ".xml"}));2714}271527162717std::string2718GNEApplicationWindowHelper::FileBucketHandler::parseFilenames(const std::vector<FileBucket::Type> types) const {2719std::string result;2720// group all saving files in a single string separated with comma2721for (const auto& type : types) {2722for (const auto& bucket : myBuckets.at(type)) {2723if ((bucket->getFilename().size() > 0) && (bucket->isDefaultBucket() || (bucket->getNumElements() > 0))) {2724result.append(bucket->getFilename() + ",");2725}2726}2727}2728// remove last ','2729if (result.size() > 0) {2730result.pop_back();2731}2732return result;2733}273427352736void2737GNEApplicationWindowHelper::FileBucketHandler::removeEmptyBuckets() {2738// iterate over all buckets and remove empty buckets (except default buckets)2739for (auto type : FileBucket::types) {2740size_t bucketIndex = 0;2741while (bucketIndex < myBuckets.at(type).size()) {2742auto bucket = myBuckets.at(type).at(bucketIndex);2743if (bucket->isEmpty() && (bucket->isDefaultBucket() == false)) {2744delete bucket;2745myBuckets.at(type).erase(myBuckets.at(type).begin() + bucketIndex);2746} else {2747bucketIndex++;2748}2749}2750}2751}275227532754std::string2755GNEApplicationWindowHelper::FileBucketHandler::getPrefix(FileBucket::Type type, const std::vector<std::string> invalidExtensions) const {2756std::string filename = getDefaultFilename(type);2757if (filename.size() > 0) {2758if (filename.back() == '.') {2759filename.pop_back();2760} else {2761for (const auto& invalidExtension : invalidExtensions) {2762filename = StringUtils::replace(filename, invalidExtension, "");2763}2764}2765}2766return filename;2767}27682769// ---------------------------------------------------------------------------2770// GNEApplicationWindowHelper - methods2771// ---------------------------------------------------------------------------27722773bool2774GNEApplicationWindowHelper::toggleEditOptionsNetwork(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {2775// finally function correspond to visibleMenuCommands[numericalKeyPressed]2776if (menuCheck == viewNet->getNetworkViewOptions().menuCheckToggleGrid) {2777// Call manually onCmdToggleShowGrid2778viewNet->onCmdToggleShowGrid(obj, sel, nullptr);2779} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckToggleDrawJunctionShape) {2780// Call manually onCmdToggleDrawJunctionShape2781viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);2782} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckDrawSpreadVehicles) {2783// Call manually onCmdToggleDrawSpreadVehicles2784viewNet->onCmdToggleDrawSpreadVehicles(obj, sel, nullptr);2785} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowDemandElements) {2786// Call manually onCmdToggleShowDemandElementsNetwork2787viewNet->onCmdToggleShowDemandElementsNetwork(obj, sel, nullptr);2788} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckSelectEdges) {2789// Call manually onCmdToggleSelectEdges2790viewNet->onCmdToggleSelectEdges(obj, sel, nullptr);2791} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowConnections) {2792// Call manually onCmdToggleShowConnections2793viewNet->onCmdToggleShowConnections(obj, sel, nullptr);2794} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckHideConnections) {2795// Call manually onCmdToggleHideConnections2796viewNet->onCmdToggleHideConnections(obj, sel, nullptr);2797} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowAdditionalSubElements) {2798// Call manually onCmdToggleShowAdditionalSubElements2799viewNet->onCmdToggleShowAdditionalSubElements(obj, sel, nullptr);2800} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowTAZElements) {2801// Call manually onCmdToggleShowTAZElements2802viewNet->onCmdToggleShowTAZElements(obj, sel, nullptr);2803} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckExtendSelection) {2804// Call manually onCmdToggleExtendSelection2805viewNet->onCmdToggleExtendSelection(obj, sel, nullptr);2806} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckChangeAllPhases) {2807// Call manually onCmdToggleChangeAllPhases2808viewNet->onCmdToggleChangeAllPhases(obj, sel, nullptr);2809} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckMergeAutomatically) {2810// Call manually onCmdToggleMergeAutomatically2811viewNet->onCmdToggleMergeAutomatically(obj, sel, nullptr);2812} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckMoveElevation) {2813// Call manually onCmdToggleMoveElevation2814viewNet->onCmdToggleMoveElevation(obj, sel, nullptr);2815} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckChainEdges) {2816// Call manually onCmdToggleChainEdges2817viewNet->onCmdToggleChainEdges(obj, sel, nullptr);2818} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckAutoOppositeEdge) {2819// Call manually onCmdToggleAutoOppositeEdge2820viewNet->onCmdToggleAutoOppositeEdge(obj, sel, nullptr);2821} else if (menuCheck == viewNet->getNetworkViewOptions().menuCheckShowJunctionBubble) {2822// Call manually onCmdToggleShowJunctionBubble2823viewNet->onCmdToggleShowJunctionBubbles(obj, sel, nullptr);2824} else {2825return false;2826}2827return true;2828}282928302831bool2832GNEApplicationWindowHelper::toggleEditOptionsDemand(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {2833if (menuCheck == viewNet->getDemandViewOptions().menuCheckToggleGrid) {2834// Call manually onCmdToggleShowGrid2835viewNet->onCmdToggleShowGrid(obj, sel, nullptr);2836} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckToggleDrawJunctionShape) {2837// Call manually onCmdToggleDrawJunctionShape2838viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);2839} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckDrawSpreadVehicles) {2840// Call manually onCmdToggleDrawSpreadVehicles2841viewNet->onCmdToggleDrawSpreadVehicles(obj, sel, nullptr);2842} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckHideShapes) {2843// Call manually onCmdToggleHideShapes2844viewNet->onCmdToggleHideShapes(obj, sel, nullptr);2845} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllTrips) {2846// Call manually onCmdToggleShowTrips2847viewNet->onCmdToggleShowTrips(obj, sel, nullptr);2848} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllPersonPlans) {2849// Call manually onCmdToggleShowAllPersonPlans2850viewNet->onCmdToggleShowAllPersonPlans(obj, sel, nullptr);2851} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckLockPerson) {2852// Call manually onCmdToggleLockPerson2853viewNet->onCmdToggleLockPerson(obj, sel, nullptr);2854} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowAllContainerPlans) {2855// Call manually onCmdToggleShowAllContainerPlans2856viewNet->onCmdToggleShowAllContainerPlans(obj, sel, nullptr);2857} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckLockContainer) {2858// Call manually onCmdToggleLockContainer2859viewNet->onCmdToggleLockContainer(obj, sel, nullptr);2860} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckHideNonInspectedDemandElements) {2861// Call manually onCmdToggleHideNonInspecteDemandElements2862viewNet->onCmdToggleHideNonInspecteDemandElements(obj, sel, nullptr);2863} else if (menuCheck == viewNet->getDemandViewOptions().menuCheckShowOverlappedRoutes) {2864// Call manually onCmdToggleHideNonInspecteDemandElements2865viewNet->onCmdToggleShowOverlappedRoutes(obj, sel, nullptr);2866} else {2867return false;2868}2869return true;2870}287128722873bool2874GNEApplicationWindowHelper::toggleEditOptionsData(GNEViewNet* viewNet, const MFXCheckableButton* menuCheck, FXObject* obj, FXSelector sel) {2875if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleDrawJunctionShape) {2876// Call manually onCmdToggleDrawJunctionShape2877viewNet->onCmdToggleDrawJunctionShape(obj, sel, nullptr);2878} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowAdditionals) {2879// Call manually onCmdToggleShowAdditionals2880viewNet->onCmdToggleShowAdditionals(obj, sel, nullptr);2881} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowShapes) {2882// Call manually onCmdToggleShowShapes2883viewNet->onCmdToggleShowShapes(obj, sel, nullptr);2884} else if (menuCheck == viewNet->getDataViewOptions().menuCheckShowDemandElements) {2885// Call manually onCmdToggleShowDemandElementsData2886viewNet->onCmdToggleShowDemandElementsData(obj, sel, nullptr);2887} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelDrawing) {2888// Call manually onCmdToggleTAZRelDrawing2889viewNet->onCmdToggleTAZRelDrawing(obj, sel, nullptr);2890} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZDrawFill) {2891// Call manually onCmdToggleTAZDrawFill2892viewNet->onCmdToggleTAZDrawFill(obj, sel, nullptr);2893} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelOnlyFrom) {2894// Call manually onCmdToggleTAZRelOnlyFrom2895viewNet->onCmdToggleTAZRelOnlyFrom(obj, sel, nullptr);2896} else if (menuCheck == viewNet->getDataViewOptions().menuCheckToggleTAZRelOnlyTo) {2897// Call manually onCmdToggleTAZRelOnlyTo2898viewNet->onCmdToggleTAZRelOnlyTo(obj, sel, nullptr);2899} else {2900return false;2901}2902return true;2903}290429052906bool2907GNEApplicationWindowHelper::stringEndsWith(const std::string& str, const std::string& suffix) {2908if (str.length() < suffix.length()) {2909return false;2910} else {2911return str.compare(str.length() - suffix.length(), suffix.length(), suffix) == 0;2912}2913}29142915/****************************************************************************/291629172918