/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEApplicationWindow.h14/// @author Jakob Erdmann15/// @date Feb 201116///17// The main window of Netedit (adapted from GUIApplicationWindow)18/****************************************************************************/19#pragma once20#include <config.h>2122#include "GNEApplicationWindowHelper.h"2324// ===========================================================================25// class declarations26// ===========================================================================2728class GUIEvent;29class GNEUndoListDialog;30class GNEUndoList;31class GNETagPropertiesDatabase;32class GNELoadThread;33class GNEInternalTest;34class GNEExternalRunner;3536// ===========================================================================37// class definition38// ===========================================================================39/**40* @class GNEApplicationWindow41* @brief The main window of Netedit.42*43* Contains the file opening support and a canvas to display the network in.44*45* Beside views on the simulation, shown within a MDI-window, the main window46* may also have some further views (children) assigned which are stored47* within a separate list.48*/49class GNEApplicationWindow : public GUIMainWindow, public MFXInterThreadEventClient {50/// @brief FOX-declaration51FXDECLARE(GNEApplicationWindow)5253public:5455/**@brief Constructor56* @param[in] app The FOX application57* @param[in] tagPropertiesDatabase pointer to tag properties database58* @param[in] configPattern The pattern used for loading configurations59*/60GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern);6162/// @brief Destructor63~GNEApplicationWindow();6465/// @brief Creates the main window (required by FOX)66void create();6768/// @brief load net on startup69void loadOptionOnStartup();7071/// @brief create new network72void createNewNetwork();7374/// @brief load network75void loadNetwork(const std::string& networkFile);7677/// @brief starts to load a configuration78void loadConfiguration(const std::string& configurationFile);7980/// @brief starts to load a OSM File81void loadOSM(const std::string& OSMFile);8283/// @brief build dependent84void dependentBuild();8586/// @brief set text of the statusBar87void setStatusBarText(const std::string& statusBarText);8889/// @brief called if the user selects Processing->compute junctions with volatile options90long computeJunctionWithVolatileOptions();9192/// @brief check if console options was already loaded93bool consoleOptionsLoaded();9495/// @name functions related with external runner96/// @{9798/// @brief get external runner99GNEExternalRunner* getExternalRunner() const;100101/// @brief set external runner102void setExternalRunner(GNEExternalRunner* externalRunner);103104/// @}105106/// @name Inter-thread event handling107/// @{108/// @brief called when an event occurred109void eventOccurred();110111/// @brief handle event of type Network loaded112void handleEvent_NetworkLoaded(GUIEvent* e);113114/// @brief handle event of type message115void handleEvent_Message(GUIEvent* e);116/// @}117118/// @name FOX-callbacks119/// @{120/// @brief called when the command/FXCall new window is executed121long onCmdNewWindow(FXObject*, FXSelector, void*);122123/// @brief called when the command/FXCall new network is executed124long onCmdNewNetwork(FXObject*, FXSelector, void*);125126/// @brief called when the command/FXCall open netconvertconfiguration is executed127long onCmdOpenNetconvertConfig(FXObject*, FXSelector, void*);128129/// @brief called when the command/FXCall open network is executed130long onCmdOpenNetwork(FXObject*, FXSelector, void*);131132/// @brief called when the command/FXCall open foreign is executed133long onCmdOpenForeign(FXObject*, FXSelector, void*);134135/// @brief called when the command/FXCall open netedit config is executed136long onCmdOpenNeteditConfig(FXObject*, FXSelector, void*);137138/// @brief called when the command/FXCall open SumoConfig is executed139long onCmdOpenSumoConfig(FXObject*, FXSelector, void*);140141/// @brief called when the command/FXCall reload netedit config is executed142long onCmdReloadNeteditConfig(FXObject*, FXSelector, void*);143144/// @brief called when the command/FXCall reload SumoConfig is executed145long onCmdReloadSumoConfig(FXObject*, FXSelector, void*);146147/// @brief called when the command/FXCall reload netedit config is updated148long onUpdReloadNeteditConfig(FXObject*, FXSelector, void*);149150/// @brief called when the command/FXCall reload SumoConfig is updated151long onUpdReloadSumoConfig(FXObject*, FXSelector, void*);152153/// @brief called when the command/FXCall open TLS programs is executed154long onCmdOpenTLSPrograms(FXObject*, FXSelector, void*);155156/// @brief called when the command/FXCall reload TLS programs is executed157long onCmdReloadTLSPrograms(FXObject*, FXSelector, void*);158159/// @brief called when the command/FXCall reload TLS programs is updated160long onUpdReloadTLSPrograms(FXObject*, FXSelector, void*);161162/// @brief called when the command/FXCall open edgeType is executed163long onCmdOpenEdgeTypes(FXObject*, FXSelector, void*);164165/// @brief called when the command/FXCall reload edge types is executed166long onCmdReloadEdgeTypes(FXObject*, FXSelector, void*);167168/// @brief called when the command/FXCall reload edge types is updated169long onUpdReloadEdgeTypes(FXObject*, FXSelector, void*);170171/// @brief called when the command/FXCall smart reload is executed172long onCmdSmartReload(FXObject*, FXSelector, void*);173174/// @brief called when the update/FXCall smart reload is executed175long onUpdSmartReload(FXObject*, FXSelector, void*);176177/// @brief called when the command/FXCall network reload is executed178long onCmdReloadNetwork(FXObject*, FXSelector, void*);179180/// @brief called when the update/FXCall network reload is executed181long onUpdReloadNetwork(FXObject*, FXSelector, void*);182183/// @brief called when the command/FXCall open recent is executed184long onCmdOpenRecent(FXObject*, FXSelector, void*);185186/// @brief called when the command/FXCall close is executed187long onCmdClose(FXObject*, FXSelector, void*);188189/// @brief Called on menu Edit->Visualization190long onCmdEditViewScheme(FXObject*, FXSelector, void*);191192/// @brief Called on menu Edit->Viewport193long onCmdEditViewport(FXObject*, FXSelector, void*);194195/// @brief called when the command/FXCall locate is executed196long onCmdLocate(FXObject*, FXSelector, void*);197198/// @brief called when user press over a tool dialog button199long onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*);200201/// @brief called when user run a tool202long onCmdRunPythonTool(FXObject* obj, FXSelector, void*);203204/// @brief post processing after run tool205long onCmdPostProcessingPythonTool(FXObject* obj, FXSelector, void*);206207/// @brief called when the command/FXCall python tool is updated208long onUpdPythonTool(FXObject*, FXSelector, void*);209210/// @brief called when the command/FXCall save network is executed211long onCmdSaveNetwork(FXObject*, FXSelector, void*);212213/// @brief called when the command/FXCall save network as is executed214long onCmdSaveNetworkAs(FXObject*, FXSelector, void*);215216/// @brief called when the command/FXCall save as plain xml is executed217long onCmdSavePlainXMLAs(FXObject*, FXSelector, void*);218219/// @brief called when the command/FXCall save joined is executed220long onCmdSaveJoinedJunctionsAs(FXObject*, FXSelector, void*);221222/// @brief called when the command/FXCall save netedit config is executed223long onCmdSaveNeteditConfig(FXObject*, FXSelector, void*);224225/// @brief called when the command/FXCall save netedit config as is executed226long onCmdSaveNeteditConfigAs(FXObject*, FXSelector, void*);227228/// @brief called when the command/FXCall save netedit config is updated229long onUpdSaveNeteditConfig(FXObject*, FXSelector, void*);230231/// @brief called when the command/FXCall save SumoConfig is executed232long onCmdSaveSumoConfig(FXObject*, FXSelector, void*);233234/// @brief called when the command/FXCall save SumoConfig as is executed235long onCmdSaveSumoConfigAs(FXObject*, FXSelector, void*);236237/// @brief called when the command/FXCall save SumoConfig is updated238long onUpdSaveSumoConfig(FXObject*, FXSelector, void*);239240/// @brief called when the command/FXCall save TLSPrograms is executed241long onCmdSaveTLSPrograms(FXObject*, FXSelector, void*);242243/// @brief called when the command/FXCall save TLSPrograms is updated244long onUpdSaveTLSPrograms(FXObject*, FXSelector, void*);245246/// @brief called when the command/FXCall save edge types is executed247long onCmdSaveEdgeTypes(FXObject*, FXSelector, void*);248249/// @brief called when the command/FXCall save edge types is updated250long onUpdSaveEdgeTypes(FXObject*, FXSelector, void*);251252/// @brief called when the command/FXCall save TLSPrograms as is executed253long onCmdSaveTLSProgramsAs(FXObject*, FXSelector, void*);254255/// @brief called when the command/FXCall save edgeTypes as is executed256long onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*);257258/// @brief called when the command/FXCall open additionals is executed259long onCmdOpenAdditionalElements(FXObject*, FXSelector, void*);260261/// @brief called when the command/FXCall reload additionals is executed262long onCmdReloadAdditionalElements(FXObject*, FXSelector, void*);263264/// @brief called when the command/FXCall reload additionals is updated265long onUpdReloadAdditionalElements(FXObject*, FXSelector, void*);266267/// @brief called when the command/FXCall save additionals is executed268long onCmdSaveAdditionalElements(FXObject*, FXSelector, void*);269270/// @brief called when the command/FXCall save additionals unified is executed271long onCmdSaveAdditionalElementsUnified(FXObject*, FXSelector, void*);272273/// @brief called when the command/FXCall save JuPedSim elements as is executed274long onCmdSaveJuPedSimElementsAs(FXObject*, FXSelector, void*);275276/// @brief called when the command/FXCall open demand is executed277long onCmdOpenDemandElements(FXObject*, FXSelector, void*);278279/// @brief called when the command/FXCall reload demand elements is executed280long onCmdReloadDemandElements(FXObject*, FXSelector, void*);281282/// @brief called when the command/FXCall reload demand elements is updated283long onUpdReloadDemandElements(FXObject*, FXSelector, void*);284285/// @brief called when the command/FXCall save demand elements is executed286long onCmdSaveDemandElements(FXObject*, FXSelector, void*);287288/// @brief called when the command/FXCall open data is executed289long onCmdOpenDataElements(FXObject*, FXSelector, void*);290291/// @brief called when the command/FXCall reload data elements is executed292long onCmdReloadDataElements(FXObject*, FXSelector, void*);293294/// @brief called when the command/FXCall reload data elements is updated295long onUpdReloadDataElements(FXObject*, FXSelector, void*);296297/// @brief called when the command/FXCall save demand elements unified is executed298long onCmdSaveDemandElementsUnified(FXObject*, FXSelector, void*);299300/// @brief called when the command/FXCall save data elements is executed301long onCmdSaveDataElements(FXObject*, FXSelector, void*);302303/// @brief called when the command/FXCall save data elements unified is executed304long onCmdSaveDataElementsUnified(FXObject*, FXSelector, void*);305306/// @brief called when the command/FXCall open meanDatas is executed307long onCmdOpenMeanDataElements(FXObject*, FXSelector, void*);308309/// @brief called when the command/FXCall reload meanDatas is executed310long onCmdReloadMeanDataElements(FXObject*, FXSelector, void*);311312/// @brief called when the command/FXCall reload meanDatas is updated313long onUpdReloadMeanDataElements(FXObject*, FXSelector, void*);314315/// @brief called when the command/FXCall save meanDatas is executed316long onCmdSaveMeanDataElements(FXObject*, FXSelector, void*);317318/// @brief called when the command/FXCall save meanDatas unified is executed319long onCmdSaveMeanDataElementsUnified(FXObject*, FXSelector, void*);320321/// @brief called when the update/FXCall needs network is executed322long onUpdNeedsNetwork(FXObject*, FXSelector, void*);323324/// @brief called when the update/FXCall needs at least one network element is executed325long onUpdNeedsNetworkElement(FXObject*, FXSelector, void*);326327/// @brief called when the update/FXCall needs front element is executed328long onUpdNeedsFrontElement(FXObject*, FXSelector, void*);329330/// @brief called when the update/FXCall save network is executed331long onUpdSaveNetwork(FXObject*, FXSelector, void*);332333/// @brief called when the update/FXCall save additionals is executed334long onUpdSaveAdditionalElements(FXObject*, FXSelector, void*);335336/// @brief called when the update/FXCall save additionals unified is executed337long onUpdSaveAdditionalElementsUnified(FXObject*, FXSelector, void*);338339/// @brief called when the update/FXCall save juPedSim as is executed340long onUpdSaveJuPedSimElementsAs(FXObject*, FXSelector, void*);341342/// @brief called when the update/FXCall save demand elements is executed343long onUpdSaveDemandElements(FXObject*, FXSelector, void*);344345/// @brief called when the update/FXCall save demand elements unified is executed346long onUpdSaveDemandElementsUnified(FXObject*, FXSelector, void*);347348/// @brief called when the update/FXCall save data elements is executed349long onUpdSaveDataElements(FXObject*, FXSelector, void*);350351/// @brief called when the update/FXCall save data elements unified is executed352long onUpdSaveDataElementsUnified(FXObject*, FXSelector, void*);353354/// @brief called when the update/FXCall save meanDatas is executed355long onUpdSaveMeanDataElements(FXObject*, FXSelector, void*);356357/// @brief called when the update/FXCall save meanDatas unified is executed358long onUpdSaveMeanDataElementsUnified(FXObject*, FXSelector, void*);359360/// @brief called when the update/FXCall undo is executed361long onUpdUndo(FXObject* obj, FXSelector sel, void* ptr);362363/// @brief called when the update/FXCall redo is executed364long onUpdRedo(FXObject* obj, FXSelector sel, void* ptr);365366/// @brief called when the update/FXCall compute path manager is executed367long onUpdComputePathManager(FXObject* obj, FXSelector sel, void* ptr);368369/// @brief toggle viewOption370long onCmdToggleViewOption(FXObject*, FXSelector, void*);371372/// @brief update viewOption373long onUpdToggleViewOption(FXObject*, FXSelector, void*);374375/// @brief called when a key is pressed376long onKeyPress(FXObject* o, FXSelector sel, void* data);377378/// @brief called when a key is released379long onKeyRelease(FXObject* o, FXSelector sel, void* data);380381/// @brief Called by FOX if the application shall be closed382long onCmdQuit(FXObject*, FXSelector, void*);383384/// @brief called when the command/FXCall edit chosen is executed385long onCmdEditChosen(FXObject*, FXSelector, void*);386387/// @brief called when the command/FXCall show about dialog is executed388long onCmdAbout(FXObject*, FXSelector, void*);389390/// @brief called when the command/FXCall on update open executed391long onUpdOpen(FXObject*, FXSelector, void*);392393/// @brief called when the command/FXCall clear message windows is executed394long onCmdClearMsgWindow(FXObject*, FXSelector, void*);395396/// @brief called when user toggle windows checkbox "load additionals"397long onCmdLoadAdditionalsInSUMOGUI(FXObject*, FXSelector, void*);398399/// @brief called when user toggle windows checkbox "load demand"400long onCmdLoadDemandInSUMOGUI(FXObject*, FXSelector, void*);401402/// @brief called when the command/FXCall load thread is executed403long onLoadThreadEvent(FXObject*, FXSelector, void*);404405/// @brief called when the command/FXCall clipboard request is executed406long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);407408/// @brief called if the user hits an edit-supermode hotkey409long onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr);410411/// @brief called if the user hits an edit-mode hotkey412long onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr);413414/// @brief called when user press a lock menu check415long onCmdLockElements(FXObject*, FXSelector sel, void*);416417/// @brief called when user press lock all elements button418long onCmdLockAllElements(FXObject*, FXSelector sel, void*);419420/// @brief called when user press unlock all elements button421long onCmdUnlockAllElements(FXObject*, FXSelector sel, void*);422423/// @brief called when user press lock select elements button424long onCmdLockSelectElements(FXObject*, FXSelector sel, void*);425426/// @brief enable or disable lock menu title427long onUpdLockMenuTitle(FXObject*, FXSelector sel, void*);428429/// @brief called when user press a process button (or a shortcut)430long onCmdProcessButton(FXObject* sender, FXSelector sel, void*);431432/// @brief called if the user hints ctrl + T433long onCmdOpenSUMOGUI(FXObject* sender, FXSelector sel, void* ptr);434435/// @brief called if the user hits esc436long onCmdAbort(FXObject* sender, FXSelector sel, void* ptr);437438/// @brief called if the user hits del439long onCmdDel(FXObject* sender, FXSelector sel, void* ptr);440441/// @brief called if the user hits enter442long onCmdEnter(FXObject* sender, FXSelector sel, void* ptr);443444/// @brief called if the user hits backspace445long onCmdBackspace(FXObject* sender, FXSelector sel, void* ptr);446447/// @brief called if the user hits key combination for clear selection448long onCmdClearSelectionShortcut(FXObject* sender, FXSelector sel, void* ptr);449450/// @brief called if the user hits key combination for focus on frame451long onCmdFocusFrame(FXObject* sender, FXSelector sel, void* ptr);452453/// @brief called if the user press the toggle time format button454long onCmdToggleTimeFormat(FXObject* sender, FXSelector sel, void* ptr);455456/// @brief update toggle time format button457long onUpdToggleTimeFormat(FXObject* sender, FXSelector sel, void* ptr);458459/// @brief run tests460long onCmdRunTests(FXObject*, FXSelector, void*);461462/// @brief enable or disable sender object depending if viewNet exist463long onUpdRequireViewNet(FXObject* sender, FXSelector sel, void* ptr);464465/// @brief update label for require recomputing466long onUpdRequireRecomputing(FXObject* sender, FXSelector sel, void* ptr);467468/// @brief called when run netgenerate is called469long onCmdRunNetgenerate(FXObject* sender, FXSelector sel, void* ptr);470471/// @brief postprocessing netgenerate472long onCmdPostprocessingNetgenerate(FXObject* sender, FXSelector sel, void* ptr);473474/// @brief called if the user press key combination Ctrl + G to toggle grid475long onCmdToggleGrid(FXObject*, FXSelector, void*);476477/// @brief called if the user press key combination Ctrl + J to toggle draw junction shape478long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);479480/// @brief called if the user call set front element481long onCmdSetFrontElement(FXObject*, FXSelector, void*);482483/// @brief called if the user press key combination Alt + <0-9>484long onCmdToggleEditOptions(FXObject*, FXSelector, void*);485486/// @brief called if the user selects help->Documentation487long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);488489/// @brief called if the user selects help->Changelog490long onCmdChangelog(FXObject* sender, FXSelector sel, void* ptr);491492/// @brief called if the user selects help->Hotkeys493long onCmdHotkeys(FXObject* sender, FXSelector sel, void* ptr);494495/// @brief called if the user selects help->Tutorial496long onCmdTutorial(FXObject* sender, FXSelector sel, void* ptr);497498/// @brief called if the user selects help->feedback499long onCmdFeedback(FXObject* sender, FXSelector sel, void* ptr);500501/// @brief called when toggle checkbox compute network when switching between supermodes502long onCmdToggleComputeNetworkData(FXObject*, FXSelector, void*);503504/// @brief called when toggle checkbox disable undo redo (processing)505long onCmdToggleUndoRedo(FXObject*, FXSelector, void*);506507/// @brief called when toggle checkbox disable undo redo during loading (file)508long onCmdToggleUndoRedoLoading(FXObject*, FXSelector, void*);509510/// @brief called when user press "options" button511long onCmdOpenOptionsDialog(FXObject*, FXSelector, void*);512513/// @brief called when user press "sumo options" button514long onCmdOpenSumoOptionsDialog(FXObject*, FXSelector, void*);515516/// @brief called when user press "netgenerate" button517long onCmdOpenNetgenerateDialog(FXObject*, FXSelector, void*);518519/// @brief called when user press "netgenerate options" button520long onCmdOpenNetgenerateOptionsDialog(FXObject*, FXSelector, void*);521522/// @brief called when user press Ctrl+Z523long onCmdUndo(FXObject* sender, FXSelector, void*);524525// @brief called when user press Ctrl+Y526long onCmdRedo(FXObject* sender, FXSelector, void*);527528// @brief called when user press open undoList dialog529long onCmdOpenUndoListDialog(FXObject*, FXSelector, void*);530531// @brief called when openUndoList is updated532long onUpdOpenUndoListDialog(FXObject*, FXSelector, void*);533534// @brief called when user press compute path manager535long onCmdComputePathManager(FXObject*, FXSelector, void*);536537/// @brief called when user press Ctrl+Z538long onCmdCut(FXObject*, FXSelector, void*);539540// @brief called when user press Ctrl+Y541long onCmdCopy(FXObject*, FXSelector, void*);542543// @brief called when user press Ctrl+Y544long onCmdPaste(FXObject*, FXSelector, void*);545546// @brief called when user press Ctrl+F1547long onCmdSetTemplate(FXObject*, FXSelector, void*);548549// @brief called when user press Ctrl+F2550long onCmdCopyTemplate(FXObject*, FXSelector, void*);551552// @brief called when user press Ctrl+F3553long onCmdClearTemplate(FXObject*, FXSelector, void*);554555/// @}556557/// @name inherited from GUIMainWindow558/// @{559/// @brief get build OpenGL Canvas (due netedit only uses a single View, it always return nullptr)560FXGLCanvas* getBuildGLCanvas() const;561562/// @brief get current simulation time (pure virtual but we don't need it)563SUMOTime getCurrentSimTime() const;564565/// @brief get current tracker interval (pure virtual but we don't need it)566double getTrackerInterval() const;567/// @}568569/// @brief get default cursor570FXCursor* getDefaultCursor();571572/// @brief get tag properties database573const GNETagPropertiesDatabase* getTagPropertiesDatabase() const;574575/// @brief get pointer to undoList576GNEUndoList* getUndoList();577578/// @brief get pointer to viewNet579GNEViewNet* getViewNet();580581/// @brief get ToolbarsGrip582GNEApplicationWindowHelper::ToolbarsGrip& getToolbarsGrip();583584/// @brief update recomputing label585void updateRecomputingLabel();586587/// @brief update control contents after undo/redo or recompute588void updateControls();589590/// @brief update FXMenuCommands depending of supermode591void updateSuperModeMenuCommands(const Supermode supermode);592593/// @name functions related with undo-redo594/// @{595/// @brief check if undo-redo is allow (processing/checkbox)596bool isUndoRedoAllowed() const;597598/// @brief enable undo-redo temporally (for example, after creating an edge)599void enableUndoRedoTemporally();600601/// @brief disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)602void disableUndoRedoTemporally(const std::string& reason);603604/// @brief check if undo-redo is enabled temporally605const std::string& isUndoRedoEnabledTemporally() const;606607/// @brief clear undo list608void clearUndoList();609610/// @}611612/// @brief get file Menu Commands (needed for show/hide menu commands)613GNEApplicationWindowHelper::FileMenuCommands& getFileMenuCommands();614615/// @brief get modes Menu Commands (needed for show/hide menu commands)616GNEApplicationWindowHelper::ModesMenuCommands& getModesMenuCommands();617618/// @brief get Edit Menu Commands (needed for show/hide menu commands)619GNEApplicationWindowHelper::EditMenuCommands& getEditMenuCommands();620621/// @brief get processing Menu Commands622const GNEApplicationWindowHelper::ProcessingMenuCommands& getProcessingMenuCommands() const;623624/// @brief get lock Menu Commands625GNEApplicationWindowHelper::LockMenuCommands& getLockMenuCommands();626627/// @brief get SUMO options container628OptionsCont& getSumoOptions();629630/// @brief get netgenerate options container631OptionsCont& getNetgenerateOptions();632633/// @brief load additional elements634void loadAdditionalElements();635636/// @brief load demand elements637void loadDemandElements();638639/// @brief load data elements640void loadDataElements();641642/// @brief load meanData elements643void loadMeanDataElements();644645/// @brief load traffic lights646void loadTrafficLights(const bool reloading);647648/// @brief load meanData elements649void loadEdgeTypes(const bool reloading);650651/// @name functions related with test system652/// @{653654/// @brief get netedit test system655GNEInternalTest* getInternalTest() const;656657/// @brief check if ignore input signal (using during netedit tests)658bool allowInputSignals(FXObject* obj) const;659660/// @}661662protected:663/// @brief FOX needs this for static members664GNEApplicationWindow();665666/// @brief external runner for running external tools667GNEExternalRunner* myExternalRunner = nullptr;668669/// @brief the thread that loads the network670GNELoadThread* myLoadThread = nullptr;671672/// @brief internal test system673public:674GNEInternalTest* myInternalTest = nullptr;675private:676/// @brief information whether the gui is currently loading and the load-options shall be greyed out677bool myAmLoading = false;678679/// @brief the submenus680FXMenuPane* myFileMenu = nullptr;681FXMenuPane* myFileMenuNeteditConfig = nullptr;682FXMenuPane* myFileMenuSumoConfig = nullptr;683FXMenuPane* myFileMenuTLS = nullptr;684FXMenuPane* myFileMenuEdgeTypes = nullptr;685FXMenuPane* myFileMenuAdditionals = nullptr;686FXMenuPane* myFileMenuDemandElements = nullptr;687FXMenuPane* myFileMenuDataElements = nullptr;688FXMenuPane* myFileMenuMeanDataElements = nullptr;689FXMenuPane* myFileMenuRecentNetworks = nullptr;690FXMenuPane* myFileMenuRecentConfigs = nullptr;691FXMenuPane* myModesMenu = nullptr;692FXMenuPane* myEditMenu = nullptr;693FXMenuPane* myLockMenu = nullptr;694FXMenuPane* myProcessingMenu = nullptr;695FXMenuPane* myLocatorMenu = nullptr;696FXMenuPane* myToolsMenu = nullptr;697FXMenuPane* myToolsAssignMenu = nullptr;698FXMenuPane* myToolsDetectorMenu = nullptr;699FXMenuPane* myToolsDistrictMenu = nullptr;700FXMenuPane* myToolsDRTMenu = nullptr;701FXMenuPane* myToolsEmissionsMenu = nullptr;702FXMenuPane* myToolsImportMenu = nullptr;703FXMenuPane* myToolsImportCityBrainMenu = nullptr;704FXMenuPane* myToolsImportGTFSMenu = nullptr;705FXMenuPane* myToolsImportVissim = nullptr;706FXMenuPane* myToolsImportVisum = nullptr;707FXMenuPane* myToolsNetMenu = nullptr;708FXMenuPane* myToolsRouteMenu = nullptr;709FXMenuPane* myToolsOutputMenu = nullptr;710FXMenuPane* myToolsShapes = nullptr;711FXMenuPane* myToolsTLS = nullptr;712FXMenuPane* myToolsTriggerMenu = nullptr;713FXMenuPane* myToolsTurnDefs = nullptr;714FXMenuPane* myToolsVisualizationMenu = nullptr;715FXMenuPane* myToolsXML = nullptr;716FXMenuPane* myWindowMenu = nullptr;717FXMenuPane* myHelpMenu = nullptr;718719/// @brief map with menu pane tools and strings720std::map<std::string, FXMenuPane*> myMenuPaneToolMaps;721722/// @brief menu title for modes723FXMenuTitle* myModesMenuTitle = nullptr;724725/// @brief menu title for lock726FXMenuTitle* myLockMenuTitle = nullptr;727728/// @brief A window to display messages, warnings and error in729GUIMessageWindow* myMessageWindow = nullptr;730731/// @brief The splitter that divides the main window into view and the log window732FXSplitter* myMainSplitter = nullptr;733734/// @brief Button used for show if recomputing is needed735MFXButtonTooltip* myRequireRecomputingButton = nullptr;736737/// @brief List of load requests738MFXSynchQue<GUIEvent*> myThreadEvents;739740/// @brief io-event with the load-thread741FXEX::MFXThreadEvent myLoadThreadEvent;742743/// @brief check if had dependent build744bool myHadDependentBuild = false;745746/// @brief tagProperties database747const GNETagPropertiesDatabase* myTagPropertiesDatabase = nullptr;748749/// @brief we are responsible for the net750GNENet* myNet = nullptr;751752/// @brief the one and only undo list753GNEUndoList* myUndoList = nullptr;754755/// @brief Input file pattern756std::string myConfigPattern;757758/// @brief string to check if undo/redo list is enabled (a String is used to keep the disabling reason)759std::string myUndoRedoListEnabled;760761/// @brief original netedit options container762OptionsCont myOriginalNeteditOptions;763764/// @brief sumo options container765OptionsCont mySumoOptions;766767/// @brief original sumo options container768OptionsCont myOriginalSumoOptions;769770/// @brief netgenerate options container771OptionsCont myNetgenerateOptions;772773/// @brief original netgenerate options container774OptionsCont myOriginalNetgenerateOptions;775776/// @brief flag for check if console options was already loaded777bool myConsoleOptionsLoaded = true;778779private:780/// @brief Toolbars Grip781GNEApplicationWindowHelper::ToolbarsGrip myToolbarsGrip;782783/// @brief MenuBarFile784GNEApplicationWindowHelper::MenuBarFile myMenuBarFile;785786/// @brief File Menu Commands787GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands;788789/// @brief Modes Menu Commands790GNEApplicationWindowHelper::ModesMenuCommands myModesMenuCommands;791792/// @brief Edit Menu Commands793GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands;794795/// @brief Lock Menu Commands796GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands;797798/// @brief Processing Menu Commands799GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands;800801/// @brief Locate Menu Commands802GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands;803804/// @brief Tools Menu Commands805GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands;806807/// @brief Windows Menu Commands808GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands;809810/// @brief Help Menu Commands811GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands;812813/// @brief Supermode Commands814GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands;815816/// @brief pointer to current view net817GNEViewNet* myViewNet = nullptr;818819/// @brief the prefix for the window title820const FXString myTitlePrefix;821822/// @brief allow undo-redo (read from registry)823bool myAllowUndoRedo = true;824825/// @brief allow undo-redo loading (read from registry)826bool myAllowUndoRedoLoading = true;827828/// @brief The menu used for the MDI-windows829FXMDIMenu* myMDIMenu = nullptr;830831/// @brief Builds the menu bar832void fillMenuBar();833834/// @brief this method closes all windows and deletes the current simulation */835void closeAllWindows();836837/// @brief warns about unsaved changes and gives the user the option to abort838bool askSaveElements();839840/// @brief set input files in sumo options841void setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes);842843/// @brief extract folder844FXString getFolder(const std::string& folder) const;845846/// @brief Invalidated copy constructor.847GNEApplicationWindow(const GNEApplicationWindow&) = delete;848849/// @brief Invalidated assignment operator.850GNEApplicationWindow& operator=(const GNEApplicationWindow&) = delete;851};852853854