/****************************************************************************/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 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// ===========================================================================3940class GNEApplicationWindow : public GUIMainWindow, public MFXInterThreadEventClient {41/// @brief FOX-declaration42FXDECLARE(GNEApplicationWindow)4344public:45/**@brief Constructor46* @param[in] app The FOX application47* @param[in] tagPropertiesDatabase pointer to tag properties database48* @param[in] configPattern The pattern used for loading configurations49*/50GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern);5152/// @brief Destructor53~GNEApplicationWindow();5455/// @brief Creates the main window (required by FOX)56void create();5758/// @brief load net on startup59void loadOptionOnStartup();6061/// @brief create new network62void createNewNetwork();6364/// @brief load network65void loadNetwork(const std::string& networkFile);6667/// @brief starts to load a configuration68void loadConfiguration(const std::string& configurationFile);6970/// @brief starts to load a OSM File71void loadOSM(const std::string& OSMFile);7273/// @brief build dependent74void dependentBuild();7576/// @brief set text of the statusBar77void setStatusBarText(const std::string& statusBarText);7879/// @brief called if the user selects Processing->compute junctions with volatile options80long computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr);8182/// @brief check if console options was already loaded83bool consoleOptionsLoaded();8485/// @brief get file bucket handler86GNEApplicationWindowHelper::FileBucketHandler* getFileBucketHandler() const;8788/// @name functions related with external runner89/// @{9091/// @brief get external runner92GNEExternalRunner* getExternalRunner() const;9394/// @brief set external runner95void setExternalRunner(GNEExternalRunner* externalRunner);9697/// @}9899/// @name Inter-thread event handling100/// @{101/// @brief called when an event occurred102void eventOccurred();103104/// @brief handle event of type Network loaded105void handleEvent_FileLoaded(GUIEvent* e);106107/// @brief handle event of type message108void handleEvent_Message(GUIEvent* e);109110/// @}111112/// @name FOX-callbacks113/// @{114/// @brief called when the command/FXCall new window is executed115long onCmdNewWindow(FXObject*, FXSelector, void*);116117/// @brief called when the command/FXCall new network is executed118long onCmdNewNetwork(FXObject*, FXSelector, void*);119120/// @brief called when the command/FXCall open netconvertconfiguration is executed121long onCmdOpenNetconvertConfig(FXObject*, FXSelector, void*);122123/// @brief called when the command/FXCall open network is executed124long onCmdOpenNetwork(FXObject*, FXSelector, void*);125126/// @brief called when the command/FXCall open foreign is executed127long onCmdOpenForeign(FXObject*, FXSelector, void*);128129/// @brief called when the command/FXCall open netedit config is executed130long onCmdOpenNeteditConfig(FXObject*, FXSelector, void*);131132/// @brief called when the command/FXCall open SumoConfig is executed133long onCmdOpenSumoConfig(FXObject*, FXSelector, void*);134135/// @brief called when the command/FXCall reload netedit config is executed136long onCmdReloadNeteditConfig(FXObject*, FXSelector, void*);137138/// @brief called when the command/FXCall reload SumoConfig is executed139long onCmdReloadSumoConfig(FXObject*, FXSelector, void*);140141/// @brief called when the command/FXCall reload netedit config is updated142long onUpdReloadNeteditConfig(FXObject*, FXSelector, void*);143144/// @brief called when the command/FXCall reload SumoConfig is updated145long onUpdReloadSumoConfig(FXObject*, FXSelector, void*);146147/// @brief called when the command/FXCall open TLS programs is executed148long onCmdOpenTLSPrograms(FXObject*, FXSelector, void*);149150/// @brief called when the command/FXCall reload TLS programs is executed151long onCmdReloadTLSPrograms(FXObject*, FXSelector, void*);152153/// @brief called when the command/FXCall reload TLS programs is updated154long onUpdReloadTLSPrograms(FXObject*, FXSelector, void*);155156/// @brief called when the command/FXCall open edgeType is executed157long onCmdOpenEdgeTypes(FXObject*, FXSelector, void*);158159/// @brief called when the command/FXCall reload edge types is executed160long onCmdReloadEdgeTypes(FXObject*, FXSelector, void*);161162/// @brief called when the command/FXCall reload edge types is updated163long onUpdReloadEdgeTypes(FXObject*, FXSelector, void*);164165/// @brief called when the command/FXCall smart reload is executed166long onCmdSmartReload(FXObject*, FXSelector, void*);167168/// @brief called when the update/FXCall smart reload is executed169long onUpdSmartReload(FXObject*, FXSelector, void*);170171/// @brief called when the command/FXCall network reload is executed172long onCmdReloadNetwork(FXObject*, FXSelector, void*);173174/// @brief called when the update/FXCall network reload is executed175long onUpdReloadNetwork(FXObject*, FXSelector, void*);176177/// @brief called when the command/FXCall open recent is executed178long onCmdOpenRecent(FXObject*, FXSelector, void*);179180/// @brief called when the command/FXCall close is executed181long onCmdClose(FXObject*, FXSelector, void*);182183/// @brief Called on menu Edit->Visualization184long onCmdEditViewScheme(FXObject*, FXSelector, void*);185186/// @brief Called on menu Edit->Viewport187long onCmdEditViewport(FXObject*, FXSelector, void*);188189/// @brief called when the command/FXCall locate is executed190long onCmdLocate(FXObject*, FXSelector, void*);191192/// @brief called when user press over a tool dialog button193long onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*);194195/// @brief called when user run a tool196long onCmdRunPythonTool(FXObject* obj, FXSelector, void*);197198/// @brief post processing after run tool199long onCmdPostProcessingPythonTool(FXObject* obj, FXSelector, void*);200201/// @brief called when the command/FXCall python tool is updated202long onUpdPythonTool(FXObject*, FXSelector, void*);203204/// @brief called when the command/FXCall save network is executed205long onCmdSaveNetwork(FXObject*, FXSelector, void*);206207/// @brief called when the command/FXCall save network as is executed208long onCmdSaveNetworkAs(FXObject*, FXSelector, void*);209210/// @brief called when the command/FXCall save plain xml is executed211long onCmdSavePlainXML(FXObject*, FXSelector, void*);212213/// @brief called when the command/FXCall save as plain xml is executed214long onCmdSavePlainXMLAs(FXObject*, FXSelector, void*);215216/// @brief called when the command/FXCall save joined is executed217long onCmdSaveJoinedJunctionsAs(FXObject*, FXSelector, void*);218219/// @brief called when the command/FXCall save netedit config is executed220long onCmdSaveNeteditConfig(FXObject*, FXSelector, void*);221222/// @brief called when the command/FXCall save netedit config as is executed223long onCmdSaveNeteditConfigAs(FXObject*, FXSelector, void*);224225/// @brief called when the command/FXCall save netedit config is updated226long onUpdSaveNeteditConfig(FXObject*, FXSelector, void*);227228/// @brief called when the command/FXCall save SumoConfig is executed229long onCmdSaveSumoConfig(FXObject*, FXSelector, void*);230231/// @brief called when the command/FXCall save SumoConfig as is executed232long onCmdSaveSumoConfigAs(FXObject*, FXSelector, void*);233234/// @brief called when the command/FXCall save SumoConfig is updated235long onUpdSaveSumoConfig(FXObject*, FXSelector, void*);236237/// @brief called when the command/FXCall save TLSPrograms is executed238long onCmdSaveTLSPrograms(FXObject*, FXSelector, void*);239240/// @brief called when the command/FXCall save TLSPrograms is updated241long onUpdSaveTLSPrograms(FXObject*, FXSelector, void*);242243/// @brief called when the command/FXCall save edge types is executed244long onCmdSaveEdgeTypes(FXObject*, FXSelector, void*);245246/// @brief called when the command/FXCall save edge types is updated247long onUpdSaveEdgeTypes(FXObject*, FXSelector, void*);248249/// @brief called when the command/FXCall save TLSPrograms as is executed250long onCmdSaveTLSProgramsAs(FXObject*, FXSelector, void*);251252/// @brief called when the command/FXCall save edgeTypes as is executed253long onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*);254255/// @brief called when the command/FXCall open additionals is executed256long onCmdOpenAdditionalElements(FXObject*, FXSelector, void*);257258/// @brief called when the command/FXCall reload additionals is executed259long onCmdReloadAdditionalElements(FXObject*, FXSelector, void*);260261/// @brief called when the command/FXCall reload additionals is updated262long onUpdReloadAdditionalElements(FXObject*, FXSelector, void*);263264/// @brief called when the command/FXCall save additionals is executed265long onCmdSaveAdditionalElements(FXObject*, FXSelector, void*);266267/// @brief called when the command/FXCall save additionals as268long onCmdSaveAdditionalElementsAs(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 as is executed298long onCmdSaveDemandElementsAs(FXObject*, FXSelector, void*);299300/// @brief called when the command/FXCall save demand elements unified is executed301long onCmdSaveDemandElementsUnified(FXObject*, FXSelector, void*);302303/// @brief called when the command/FXCall save data elements is executed304long onCmdSaveDataElements(FXObject*, FXSelector, void*);305306/// @brief called when the command/FXCall save data elements as is executed307long onCmdSaveDataElementsAs(FXObject*, FXSelector, void*);308309/// @brief called when the command/FXCall save data elements unified is executed310long onCmdSaveDataElementsUnified(FXObject*, FXSelector, void*);311312/// @brief called when the command/FXCall open meanDatas is executed313long onCmdOpenMeanDataElements(FXObject*, FXSelector, void*);314315/// @brief called when the command/FXCall reload meanDatas is executed316long onCmdReloadMeanDataElements(FXObject*, FXSelector, void*);317318/// @brief called when the command/FXCall reload meanDatas is updated319long onUpdReloadMeanDataElements(FXObject*, FXSelector, void*);320321/// @brief called when the command/FXCall save meanDatas is executed322long onCmdSaveMeanDataElements(FXObject*, FXSelector, void*);323324/// @brief called when the command/FXCall save meanDatas as is executed325long onCmdSaveMeanDataElementsAs(FXObject*, FXSelector, void*);326327/// @brief called when the command/FXCall save meanDatas unified is executed328long onCmdSaveMeanDataElementsUnified(FXObject*, FXSelector, void*);329330/// @brief called when the update/FXCall needs network is executed331long onUpdNeedsNetwork(FXObject*, FXSelector, void*);332333/// @brief called when the update/FXCall needs at least one network element is executed334long onUpdNeedsNetworkElement(FXObject*, FXSelector, void*);335336/// @brief called when the update/FXCall needs front element is executed337long onUpdNeedsFrontElement(FXObject*, FXSelector, void*);338339/// @brief called when the update/FXCall save network is executed340long onUpdSaveNetwork(FXObject*, FXSelector, void*);341342/// @brief called when the update/FXCall save additionals is executed343long onUpdSaveAdditionalElements(FXObject*, FXSelector, void*);344345/// @brief called when the update/FXCall save additionals unified is executed346long onUpdSaveAdditionalElementsUnified(FXObject*, FXSelector, void*);347348/// @brief called when the update/FXCall save juPedSim as is executed349long onUpdSaveJuPedSimElementsAs(FXObject*, FXSelector, void*);350351/// @brief called when the update/FXCall save demand elements is executed352long onUpdSaveDemandElements(FXObject*, FXSelector, void*);353354/// @brief called when the update/FXCall save demand elements unified is executed355long onUpdSaveDemandElementsUnified(FXObject*, FXSelector, void*);356357/// @brief called when the update/FXCall save data elements is executed358long onUpdSaveDataElements(FXObject*, FXSelector, void*);359360/// @brief called when the update/FXCall save data elements unified is executed361long onUpdSaveDataElementsUnified(FXObject*, FXSelector, void*);362363/// @brief called when the update/FXCall save meanDatas is executed364long onUpdSaveMeanDataElements(FXObject*, FXSelector, void*);365366/// @brief called when the update/FXCall save meanDatas unified is executed367long onUpdSaveMeanDataElementsUnified(FXObject*, FXSelector, void*);368369/// @brief called when the update/FXCall undo is executed370long onUpdUndo(FXObject* obj, FXSelector sel, void* ptr);371372/// @brief called when the update/FXCall redo is executed373long onUpdRedo(FXObject* obj, FXSelector sel, void* ptr);374375/// @brief called when the update/FXCall compute path manager is executed376long onUpdComputePathManager(FXObject* obj, FXSelector sel, void* ptr);377378/// @brief toggle viewOption379long onCmdToggleViewOption(FXObject*, FXSelector, void*);380381/// @brief update viewOption382long onUpdToggleViewOption(FXObject*, FXSelector, void*);383384/// @brief called when a key is pressed385long onKeyPress(FXObject* o, FXSelector sel, void* data);386387/// @brief called when a key is released388long onKeyRelease(FXObject* o, FXSelector sel, void* data);389390/// @brief Called by FOX if the application shall be closed391long onCmdQuit(FXObject*, FXSelector, void*);392393/// @brief called when the command/FXCall edit chosen is executed394long onCmdEditChosen(FXObject*, FXSelector, void*);395396/// @brief called when the command/FXCall show about dialog is executed397long onCmdAbout(FXObject*, FXSelector, void*);398399/// @brief called when the command/FXCall on update open executed400long onUpdOpen(FXObject*, FXSelector, void*);401402/// @brief called when the command/FXCall clear message windows is executed403long onCmdClearMsgWindow(FXObject*, FXSelector, void*);404405/// @brief called when user toggle windows checkbox "load additionals"406long onCmdLoadAdditionalsInSUMOGUI(FXObject*, FXSelector, void*);407408/// @brief called when user toggle windows checkbox "load demand"409long onCmdLoadDemandInSUMOGUI(FXObject*, FXSelector, void*);410411/// @brief called when the command/FXCall load thread is executed412long onLoadThreadEvent(FXObject*, FXSelector, void*);413414/// @brief called when the command/FXCall clipboard request is executed415long onClipboardRequest(FXObject* sender, FXSelector sel, void* ptr);416417/// @brief called if the user hits an edit-supermode hotkey418long onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr);419420/// @brief called if the user hits an edit-mode hotkey421long onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr);422423/// @brief called when user press a lock menu check424long onCmdLockElements(FXObject*, FXSelector sel, void*);425426/// @brief called when user press lock all elements button427long onCmdLockAllElements(FXObject*, FXSelector sel, void*);428429/// @brief called when user press unlock all elements button430long onCmdUnlockAllElements(FXObject*, FXSelector sel, void*);431432/// @brief called when user press lock select elements button433long onCmdLockSelectElements(FXObject*, FXSelector sel, void*);434435/// @brief enable or disable lock menu title436long onUpdLockMenuTitle(FXObject*, FXSelector sel, void*);437438/// @brief called when user press a process button (or a shortcut)439long onCmdProcessButton(FXObject* sender, FXSelector sel, void*);440441/// @brief called if the user hints ctrl + T442long onCmdOpenSUMOGUI(FXObject* sender, FXSelector sel, void* ptr);443444/// @brief called if the user hits esc445long onCmdAbort(FXObject* sender, FXSelector sel, void* ptr);446447/// @brief called if the user hits del448long onCmdDel(FXObject* sender, FXSelector sel, void* ptr);449450/// @brief called if the user hits enter451long onCmdEnter(FXObject* sender, FXSelector sel, void* ptr);452453/// @brief called if the user hits backspace454long onCmdBackspace(FXObject* sender, FXSelector sel, void* ptr);455456/// @brief called if the user hits key combination for clear selection457long onCmdClearSelectionShortcut(FXObject* sender, FXSelector sel, void* ptr);458459/// @brief called if the user hits key combination for focus on frame460long onCmdFocusFrame(FXObject* sender, FXSelector sel, void* ptr);461462/// @brief called if the user press the toggle time format button463long onCmdToggleTimeFormat(FXObject* sender, FXSelector sel, void* ptr);464465/// @brief update toggle time format button466long onUpdToggleTimeFormat(FXObject* sender, FXSelector sel, void* ptr);467468/// @brief run tests469long onCmdRunTests(FXObject*, FXSelector, void*);470471/// @brief enable or disable sender object depending if viewNet exist472long onUpdRequireViewNet(FXObject* sender, FXSelector sel, void* ptr);473474/// @brief update label for require recomputing475long onUpdRequireRecomputing(FXObject* sender, FXSelector sel, void* ptr);476477/// @brief called when run netgenerate is called478long onCmdRunNetgenerate(FXObject* sender, FXSelector sel, void* ptr);479480/// @brief postprocessing netgenerate481long onCmdPostprocessingNetgenerate(FXObject* sender, FXSelector sel, void* ptr);482483/// @brief called if the user press key combination Ctrl + G to toggle grid484long onCmdToggleGrid(FXObject*, FXSelector, void*);485486/// @brief called if the user press key combination Ctrl + J to toggle draw junction shape487long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);488489/// @brief called if the user call toggle front element490long onCmdToggleFrontElement(FXObject*, FXSelector, void*);491492/// @brief called if the user press key combination Alt + <0-9>493long onCmdToggleEditOptions(FXObject*, FXSelector, void*);494495/// @brief called if the user selects help->Documentation496long onCmdHelp(FXObject* sender, FXSelector sel, void* ptr);497498/// @brief called if the user selects help->Changelog499long onCmdChangelog(FXObject* sender, FXSelector sel, void* ptr);500501/// @brief called if the user selects help->Hotkeys502long onCmdHotkeys(FXObject* sender, FXSelector sel, void* ptr);503504/// @brief called if the user selects help->Tutorial505long onCmdTutorial(FXObject* sender, FXSelector sel, void* ptr);506507/// @brief called if the user selects help->feedback508long onCmdFeedback(FXObject* sender, FXSelector sel, void* ptr);509510/// @brief called when toggle checkbox compute network when switching between supermodes511long onCmdToggleComputeNetworkData(FXObject*, FXSelector, void*);512513/// @brief called when toggle checkbox disable undo redo (processing)514long onCmdToggleUndoRedo(FXObject*, FXSelector, void*);515516/// @brief called when toggle checkbox disable undo redo during loading (file)517long onCmdToggleUndoRedoLoading(FXObject*, FXSelector, void*);518519/// @brief called when user press "options" button520long onCmdOpenOptionsDialog(FXObject*, FXSelector, void*);521522/// @brief called when user press "sumo options" button523long onCmdOpenSumoOptionsDialog(FXObject*, FXSelector, void*);524525/// @brief called when user press "netgenerate" button526long onCmdOpenNetgenerateDialog(FXObject*, FXSelector, void*);527528/// @brief called when user press "netgenerate options" button529long onCmdOpenNetgenerateOptionsDialog(FXObject*, FXSelector, void*);530531/// @brief called when user press Ctrl+Z532long onCmdUndo(FXObject* sender, FXSelector, void*);533534// @brief called when user press Ctrl+Y535long onCmdRedo(FXObject* sender, FXSelector, void*);536537// @brief called when user press open undoList dialog538long onCmdOpenUndoListDialog(FXObject*, FXSelector, void*);539540// @brief called when openUndoList is updated541long onUpdOpenUndoListDialog(FXObject*, FXSelector, void*);542543// @brief called when user press compute path manager544long onCmdComputePathManager(FXObject*, FXSelector, void*);545546/// @brief called when user press Ctrl+Z547long onCmdCut(FXObject*, FXSelector, void*);548549// @brief called when user press Ctrl+Y550long onCmdCopy(FXObject*, FXSelector, void*);551552// @brief called when user press Ctrl+Y553long onCmdPaste(FXObject*, FXSelector, void*);554555// @brief called when user press Ctrl+F1556long onCmdSetTemplate(FXObject*, FXSelector, void*);557558// @brief called when user press Ctrl+F2559long onCmdCopyTemplate(FXObject*, FXSelector, void*);560561// @brief called when user press Ctrl+F3562long onCmdClearTemplate(FXObject*, FXSelector, void*);563564/// @}565566/// @name inherited from GUIMainWindow567/// @{568/// @brief get build OpenGL Canvas (due netedit only uses a single View, it always return nullptr)569FXGLCanvas* getBuildGLCanvas() const;570571/// @brief get current simulation time (pure virtual but we don't need it)572SUMOTime getCurrentSimTime() const;573574/// @brief get current tracker interval (pure virtual but we don't need it)575double getTrackerInterval() const;576/// @}577578/// @brief get default cursor579FXCursor* getDefaultCursor();580581/// @brief get tag properties database582const GNETagPropertiesDatabase* getTagPropertiesDatabase() const;583584/// @brief get pointer to undoList585GNEUndoList* getUndoList();586587/// @brief get pointer to viewNet588GNEViewNet* getViewNet();589590/// @brief get ToolbarsGrip591GNEApplicationWindowHelper::ToolbarsGrip& getToolbarsGrip();592593/// @brief update recomputing label594void updateRecomputingLabel();595596/// @brief update control contents after undo/redo or recompute597void updateControls();598599/// @brief update FXMenuCommands depending of supermode600void updateSuperModeMenuCommands(const Supermode supermode);601602/// @name functions related with undo-redo603/// @{604/// @brief check if undo-redo is allow (processing/checkbox)605bool isUndoRedoAllowed() const;606607/// @brief enable undo-redo temporally (for example, after creating an edge)608void enableUndoRedoTemporally();609610/// @brief disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)611void disableUndoRedoTemporally(const std::string& reason);612613/// @brief check if undo-redo is enabled temporally614const std::string& isUndoRedoEnabledTemporally() const;615616/// @brief clear undo list617void clearUndoList();618619/// @}620621/// @brief get file Menu Commands (needed for show/hide menu commands)622GNEApplicationWindowHelper::FileMenuCommands& getFileMenuCommands();623624/// @brief get modes Menu Commands (needed for show/hide menu commands)625GNEApplicationWindowHelper::ModesMenuCommands& getModesMenuCommands();626627/// @brief get Edit Menu Commands (needed for show/hide menu commands)628GNEApplicationWindowHelper::EditMenuCommands& getEditMenuCommands();629630/// @brief get processing Menu Commands631const GNEApplicationWindowHelper::ProcessingMenuCommands& getProcessingMenuCommands() const;632633/// @brief get lock Menu Commands634GNEApplicationWindowHelper::LockMenuCommands& getLockMenuCommands();635636/// @brief get SUMO options container637OptionsCont& getSumoOptions();638639/// @brief get netgenerate options container640OptionsCont& getNetgenerateOptions();641642/// @brief load additional elements from netedit options643void loadAdditionalElements(const std::string operation);644645/// @brief load demand elements from netedit options646void loadDemandElements(const std::string operation);647648/// @brief load data elements from netedit options649void loadDataElements(const std::string operation);650651/// @brief load meanData elements from netedit options652void loadMeanDataElements(const std::string operation);653654/// @brief load traffic lights655void loadTrafficLights(const std::string operation);656657/// @brief load meanData elements658void loadEdgeTypes(const std::string operation);659660/// @name functions related with test system661/// @{662663/// @brief get netedit test system664GNEInternalTest* getInternalTest() const;665666/// @brief check if ignore input signal (using during netedit tests)667bool allowInputSignals(FXObject* obj) const;668669/// @}670671protected:672/// @brief FOX needs this for static members673GNEApplicationWindow();674675/// @brief external runner for running external tools676GNEExternalRunner* myExternalRunner = nullptr;677678/// @brief the thread that loads the network679GNELoadThread* myLoadThread = nullptr;680681/// @brief internal test system682public:683GNEInternalTest* myInternalTest = nullptr;684private:685/// @brief information whether the gui is currently loading and the load-options shall be greyed out686bool myAmLoading = false;687688/// @brief the submenus689FXMenuPane* myFileMenu = nullptr;690FXMenuPane* myFileMenuNeteditConfig = nullptr;691FXMenuPane* myFileMenuSumoConfig = nullptr;692FXMenuPane* myFileMenuTLS = nullptr;693FXMenuPane* myFileMenuEdgeTypes = nullptr;694FXMenuPane* myFileMenuAdditionals = nullptr;695FXMenuPane* myFileMenuDemandElements = nullptr;696FXMenuPane* myFileMenuDataElements = nullptr;697FXMenuPane* myFileMenuMeanDataElements = nullptr;698FXMenuPane* myFileMenuRecentNetworks = nullptr;699FXMenuPane* myFileMenuRecentConfigs = nullptr;700FXMenuPane* myModesMenu = nullptr;701FXMenuPane* myEditMenu = nullptr;702FXMenuPane* myLockMenu = nullptr;703FXMenuPane* myProcessingMenu = nullptr;704FXMenuPane* myLocatorMenu = nullptr;705FXMenuPane* myToolsMenu = nullptr;706FXMenuPane* myToolsAssignMenu = nullptr;707FXMenuPane* myToolsDetectorMenu = nullptr;708FXMenuPane* myToolsDistrictMenu = nullptr;709FXMenuPane* myToolsDRTMenu = nullptr;710FXMenuPane* myToolsEmissionsMenu = nullptr;711FXMenuPane* myToolsImportMenu = nullptr;712FXMenuPane* myToolsImportCityBrainMenu = nullptr;713FXMenuPane* myToolsImportGTFSMenu = nullptr;714FXMenuPane* myToolsImportVissim = nullptr;715FXMenuPane* myToolsImportVisum = nullptr;716FXMenuPane* myToolsNetMenu = nullptr;717FXMenuPane* myToolsRouteMenu = nullptr;718FXMenuPane* myToolsOutputMenu = nullptr;719FXMenuPane* myToolsShapes = nullptr;720FXMenuPane* myToolsTLS = nullptr;721FXMenuPane* myToolsTriggerMenu = nullptr;722FXMenuPane* myToolsTurnDefs = nullptr;723FXMenuPane* myToolsVisualizationMenu = nullptr;724FXMenuPane* myToolsXML = nullptr;725FXMenuPane* myWindowMenu = nullptr;726FXMenuPane* myHelpMenu = nullptr;727728/// @brief map with menu pane tools and strings729std::map<std::string, FXMenuPane*> myMenuPaneToolMaps;730731/// @brief menu title for modes732FXMenuTitle* myModesMenuTitle = nullptr;733734/// @brief menu title for lock735FXMenuTitle* myLockMenuTitle = nullptr;736737/// @brief A window to display messages, warnings and error in738GUIMessageWindow* myMessageWindow = nullptr;739740/// @brief The splitter that divides the main window into view and the log window741FXSplitter* myMainSplitter = nullptr;742743/// @brief Button used for show if recomputing is needed744MFXButtonTooltip* myRequireRecomputingButton = nullptr;745746/// @brief List of load requests747MFXSynchQue<GUIEvent*> myThreadEvents;748749/// @brief io-event with the load-thread750FXEX::MFXThreadEvent myLoadThreadEvent;751752/// @brief check if had dependent build753bool myHadDependentBuild = false;754755/// @brief tagProperties database756const GNETagPropertiesDatabase* myTagPropertiesDatabase = nullptr;757758/// @brief we are responsible for the net759GNENet* myNet = nullptr;760761/// @brief the one and only undo list762GNEUndoList* myUndoList = nullptr;763764/// @brief Input file pattern765std::string myConfigPattern;766767/// @brief string to check if undo/redo list is enabled (a String is used to keep the disabling reason)768std::string myUndoRedoListEnabled;769770/// @brief original netedit options container771OptionsCont myOriginalNeteditOptions;772773/// @brief sumo options container774OptionsCont mySumoOptions;775776/// @brief netconvert options container777OptionsCont myNetconvertOptions;778779/// @brief original sumo options container780OptionsCont myOriginalSumoOptions;781782/// @brief netgenerate options container783OptionsCont myNetgenerateOptions;784785/// @brief original netgenerate options container786OptionsCont myOriginalNetgenerateOptions;787788/// @brief flag for check if console options was already loaded789bool myConsoleOptionsLoaded = true;790791private:792/// @brief Toolbars Grip793GNEApplicationWindowHelper::ToolbarsGrip myToolbarsGrip;794795/// @brief MenuBarFile796GNEApplicationWindowHelper::MenuBarFile myMenuBarFile;797798/// @brief File Menu Commands799GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands;800801/// @brief Modes Menu Commands802GNEApplicationWindowHelper::ModesMenuCommands myModesMenuCommands;803804/// @brief Edit Menu Commands805GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands;806807/// @brief Lock Menu Commands808GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands;809810/// @brief Processing Menu Commands811GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands;812813/// @brief Locate Menu Commands814GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands;815816/// @brief Tools Menu Commands817GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands;818819/// @brief Windows Menu Commands820GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands;821822/// @brief Help Menu Commands823GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands;824825/// @brief Supermode Commands826GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands;827828/// @brief saving files handler829GNEApplicationWindowHelper::FileBucketHandler* myFileBucketHandler = nullptr;830831/// @brief pointer to current view net832GNEViewNet* myViewNet = nullptr;833834/// @brief the prefix for the window title835const FXString myTitlePrefix;836837/// @brief allow undo-redo (read from registry)838bool myAllowUndoRedo = true;839840/// @brief allow undo-redo loading (read from registry)841bool myAllowUndoRedoLoading = true;842843/// @brief The menu used for the MDI-windows844FXMDIMenu* myMDIMenu = nullptr;845846/// @brief Builds the menu bar847void fillMenuBar();848849/// @brief this method closes all windows and deletes the current simulation850void closeAllWindows(const bool resetFilenames);851852/// @brief warns about unsaved changes and gives the user the option to abort853bool askSaveElements(FXObject* sender, FXSelector sel, void* ptr);854855/// @brief Invalidated copy constructor.856GNEApplicationWindow(const GNEApplicationWindow&) = delete;857858/// @brief Invalidated assignment operator.859GNEApplicationWindow& operator=(const GNEApplicationWindow&) = delete;860};861862863