Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEApplicationWindow.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// Functions from main window of netedit
20/****************************************************************************/
21
23#include <netbuild/NBFrame.h>
47#include <netedit/templates.h>
48#include <netimport/NIFrame.h>
51#include <netwrite/NWFrame.h>
68#include <utils/xml/XMLSubSys.h>
69
72#include "GNELoadThread.h"
73#include "GNENet.h"
74#include "GNEInternalTest.h"
75#include "GNEUndoList.h"
76#include "GNEViewNet.h"
77#include "GNEViewParent.h"
78
79#ifdef HAVE_VERSION_H
80#include <version.h>
81#endif
82
83// ===========================================================================
84// FOX-declarations
85// ===========================================================================
86
87FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
88 // quit calls
92 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
93 // toolbar file
100 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
105 // network
120 // NeteditConfig
128 // SumoConfig
136 // TLS
143 // edge types
152 // additionals
163 // demand elements
172 // data elements
181 // meanDatas
190 // other
195 // Toolbar supermode
199 // Toolbar modes
216 // Toolbar edit
225 // Network view options
258 // Demand view options
281 // Data view options
298 // view
315 /* Prepared for #6042
316 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
317 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
318 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
319 */
320 // toolbar lock
352 // Toolbar processing
371 // Toolbar locate
396 // toolbar python tools
401 // toolbar windows
403 // toolbar help
406 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
407 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
408 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
410 // alt + <number>
431 // key events
432 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
433 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
434 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
435 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
436 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
438 // threads events
441 // edge template functions
445 // languages
466 // tools
469 // other
470 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
477 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
478};
479
480// Object implementation
481FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
482
483// ===========================================================================
484// GNEApplicationWindow method definitions
485// ===========================================================================
486#ifdef _MSC_VER
487#pragma warning(push)
488#pragma warning(disable: 4355) // mask warning about "this" in initializers
489#endif
490GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
491 GUIMainWindow(app),
492 myTagPropertiesDatabase(tagPropertiesDatabase),
493 myUndoList(new GNEUndoList(this)),
494 myConfigPattern(configPattern),
495 myToolbarsGrip(this),
496 myMenuBarFile(this),
497 myFileMenuCommands(this),
498 myModesMenuCommands(this),
499 myEditMenuCommands(this),
500 myLockMenuCommands(this),
501 myProcessingMenuCommands(this),
502 myLocateMenuCommands(this),
503 myToolsMenuCommands(this),
504 myWindowsMenuCommands(this),
505 myHelpMenuCommands(this),
506 mySupermodeCommands(this),
507 myTitlePrefix("netedit " VERSION_STRING),
508 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
509 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
510 // init icons
512 // init Textures
514 // init cursors
516 // create undoList dialog (after initCursors)
518 app->setTooltipTime(1000000000);
519 app->setTooltipPause(1000000000);
520 // set SUMO Options descriptions
521 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
522 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo Version " VERSION_STRING);
523 // set default netedit options
526 // parse options
531}
532#ifdef _MSC_VER
533#pragma warning(pop)
534#endif
535
536
537void
539 // do this not twice
541 // do not translate debug messages
542 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
543 return;
544 }
545 myHadDependentBuild = true;
546 setTarget(this);
547 setSelector(MID_WINDOW);
548 // build toolbar menu
550 // build the thread - io
553 // build the status bar
554 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
555 // build geo coordinates label
556 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
558 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
559 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
560 // build geo coordinates label
562 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
563 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
564 // build cartesian coordinates label
566 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
567 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
568 // build test coordinates label (only if gui-testing is enabled)
570 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
571 myTestCoordinate->setHelpText(TL("Test coordinate"));
572 myTestCoordinate->setTextColor(FXRGB(255, 0, 0));
573 myTestFrame->hide();
574 // make the window a mdi-window
575 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
577 myMDIMenu = new FXMDIMenu(this, myMDIClient);
578 // build the message window
580 myMainSplitter->setSplit(1, 65);
581 // fill menu and tool bar
582 fillMenuBar();
583 // build additional threads
585 // check if create internal test system
586 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
587 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
588 }
589 // set the status bar
590 setStatusBarText(TL("Ready."));
591 // set the caption
592 setTitle(myTitlePrefix);
593 // set Netedit ICON
596 // build netedit Accelerators (hotkeys)
597 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
598}
599
600
601void
603 // set windows size and position
605 // set current folder
606 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
607 // Create main window
608 FXMainWindow::create();
609 // get text width
610 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
611 // adjust cartesian and geo frame
612 myCartesianFrame->setWidth(textWidth);
613 myGeoFrame->setWidth(textWidth);
614 // fill online maps
615 if (myOnlineMaps.empty()) {
616 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
617 myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
618 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
619 }
620 // show application windows
621 show(PLACEMENT_DEFAULT);
622 // check if maximice
623 if (!OptionsCont::getOptions().isSet("window-size")) {
624 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
625 maximize();
626 }
627 }
628}
629
630
633 // Close icons
635 // Close gifs (Textures)
638 // delete visuals
639 delete myGLVisual;
640 // must delete menus to avoid segfault on removing accelerators
641 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
644 delete myFileMenuTLS;
645 delete myFileMenuEdgeTypes;
652 delete myFileMenu;
653 delete myModesMenu;
654 delete myEditMenu;
655 delete myLockMenu;
656 delete myProcessingMenu;
657 delete myLocatorMenu;
658 delete myToolsMenu;
659 delete myToolsDetectorMenu;
660 delete myToolsDistrictMenu;
661 delete myToolsDRTMenu;
663 delete myToolsImportMenu;
666 delete myToolsImportVissim;
667 delete myToolsImportVisum;
668 delete myToolsNetMenu;
669 delete myToolsRouteMenu;
670 delete myToolsOutputMenu;
671 delete myToolsShapes;
672 delete myToolsTLS;
673 delete myToolsTurnDefs;
675 delete myToolsXML;
676 delete myWindowMenu;
677 delete myHelpMenu;
678 delete myLanguageMenu;
679 // Delete load thread
680 delete myLoadThread;
681 if (myInternalTest) {
682 delete myInternalTest;
683 }
684 // drop all events
685 while (!myThreadEvents.empty()) {
686 // get the next event
689 delete e;
690 }
691 // delete undoList and dialog
692 delete myUndoList;
693 delete myUndoListDialog;
694}
695
696
697long
698GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
699 if (askSaveElements()) {
701 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
702 if (isMaximized()) {
703 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
704 } else {
705 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
706 }
707 getApp()->exit(0);
708 }
709 return 1;
710}
711
712
713long
714GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
715 GUIDialog_GLChosenEditor* chooser =
717 chooser->create();
718 chooser->show();
719 return 1;
720}
721
722
723long
724GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
725 // check if close current simulation
726 if (onCmdClose(0, 0, 0) == 1) {
727 // create new network
729 }
730 return 1;
731}
732
733
734long
736 // get netconvert filename
737 const auto netconvertFile = GNEApplicationWindowHelper::openNetconvertFileDialog(this);
738 // continue depending of netconvertFile
739 if (!netconvertFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
740 // load configuration
741 loadConfiguration(netconvertFile);
742 }
743 return 1;
744}
745
746
747long
748GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
749 // get netconvert filename
750 const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, false);
751 // continue depending of netconvertFile
752 if (!networkFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
753 // load network
754 loadNetwork(networkFile);
755 }
756 return 0;
757}
758
759
760long
761GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
762 // get netconvert filename
763 const auto OSMFile = GNEApplicationWindowHelper::openOSMFileDialog(this);
764 // continue depending of netconvertFile
765 if (!OSMFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
766 loadOSM(OSMFile);
767 }
768 return 1;
769}
770
771
772long
773GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
774 auto& neteditOptions = OptionsCont::getOptions();
775 // get netconvert filename
776 const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, false);
777 // continue depending of netconvertFile
778 if (!neteditConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
779 // reset netedit options
780 myLoadThread->fillOptions(neteditOptions);
781 myLoadThread->setDefaultOptions(neteditOptions);
782 // set netedit configuration file to load
783 neteditOptions.resetWritable();
784 neteditOptions.set("configuration-file", neteditConfigFile);
785 // run load thread
787 // update view
788 update();
789 }
790 return 1;
791}
792
793
794long
795GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
796 auto& neteditOptions = OptionsCont::getOptions();
797 // get netconvert filename
798 const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, false);
799 // continue depending of netconvertFile
800 if (!sumoConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
801 // reset options
802 myLoadThread->fillOptions(neteditOptions);
803 myLoadThread->setDefaultOptions(neteditOptions);
804 // set sumo configuration file to load
805 neteditOptions.resetWritable();
806 neteditOptions.set("sumocfg-file", sumoConfigFile);
807 // run load thread
809 // update view
810 update();
811 }
812 return 1;
813}
814
815
816long
818 // check if close current simulation
819 if (onCmdClose(0, 0, 0) == 1) {
820 auto& neteditOptions = OptionsCont::getOptions();
821 // get existent configuration file
822 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
823 // reset options
824 myLoadThread->fillOptions(neteditOptions);
825 myLoadThread->setDefaultOptions(neteditOptions);
826 // set configuration file to load
827 neteditOptions.resetWritable();
828 neteditOptions.set("configuration-file", neteditConfigFile);
829 // run load thread
831 // update view
832 update();
833 }
834 return 1;
835}
836
837
838long
839GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
840 auto& neteditOptions = OptionsCont::getOptions();
841 // check if close current simulation
842 if (onCmdClose(0, 0, 0) == 1) {
843 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
844 // reset options
845 myLoadThread->fillOptions(neteditOptions);
846 myLoadThread->setDefaultOptions(neteditOptions);
847 // set configuration file to load
848 neteditOptions.resetWritable();
849 neteditOptions.set("sumocfg-file", sumoConfigFile);
850 // run load thread
852 // update view
853 update();
854 }
855 return 1;
856}
857
858
859long
860GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
861 // check if file exist
862 if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
863 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
864 } else {
865 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
866 }
867}
868
869
870long
871GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
872 // check if file exist
873 if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
874 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
875 } else {
876 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
877 }
878}
879
880
881long
882GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
883 auto& neteditOptions = OptionsCont::getOptions();
884 // get netconvert filename
885 const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, false);
886 // continue depending of netconvertFile
887 if (!TLSFile.empty()) {
888 // set file to load
889 neteditOptions.resetWritable();
890 neteditOptions.set("tls-file", TLSFile);
891 // Run parser
892 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + TLSFile + "'");
893 myNet->computeNetwork(this);
894 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(TLSFile) == false) {
895 // Abort undo/redo
897 } else {
898 // commit undo/redo operation
899 myUndoList->end();
900 update();
901 }
902 }
903 return 1;
904}
905
906
907long
908GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
909 // get option container
910 auto& neteditOptions = OptionsCont::getOptions();
911 // Run parser
912 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + neteditOptions.getString("tls-file") + "'");
913 myNet->computeNetwork(this);
914 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(neteditOptions.getString("tls-file")) == false) {
915 // Abort undo/redo
917 } else {
918 // commit undo/redo operation
919 myUndoList->end();
920 update();
921 }
922 return 1;
923}
924
925
926long
927GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
928 // check if file exist
929 if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
930 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
931 } else {
932 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
933 }
934}
935
936
937long
938GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
939 auto& neteditOptions = OptionsCont::getOptions();
940 // get netconvert filename
941 const auto edgeTypeFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, false);
942 // continue depending of netconvertFile
943 if (!edgeTypeFile.empty()) {
944 // set file to load
945 neteditOptions.resetWritable();
946 neteditOptions.set("edgetypes-file", edgeTypeFile);
947 // declare type container
948 NBTypeCont typeContainerAux;
949 // declare type handler
950 NIXMLTypesHandler handler(typeContainerAux);
951 // load edge types
952 NITypeLoader::load(handler, {edgeTypeFile}, "types");
953 // write information
954 WRITE_MESSAGE(TL("Loaded edge types from '") + toString(typeContainerAux.size()) + "'");
955 // now create GNETypes based on typeContainerAux
957 // iterate over typeContainerAux
958 for (const auto& auxEdgeType : typeContainerAux) {
959 // create new edge type
960 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
961 // add lane types
962 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
963 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
964 }
965 // add it using undoList
966 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
967
968 }
969 // end undo list
971 // refresh edge type selector
973 }
974 return 1;
975}
976
977
978long
979GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
980 // declare type container
981 NBTypeCont typeContainerAux;
982 // declare type handler
983 NIXMLTypesHandler handler(typeContainerAux);
984 // load edge types
985 NITypeLoader::load(handler, {OptionsCont::getOptions().getString("edgetypes-file")}, "types");
986 // write information
987 WRITE_MESSAGE(TL("Reloaded edge types from '") + toString(typeContainerAux.size()) + ".");
988 // now create GNETypes based on typeContainerAux
990 // iterate over typeContainerAux
991 for (const auto& auxEdgeType : typeContainerAux) {
992 // create new edge type
993 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
994 // add lane types
995 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
996 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
997 }
998 // add it using undoList
999 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
1000
1001 }
1002 // end undo list
1004 // refresh edge type selector
1006 return 0;
1007}
1008
1009
1010long
1011GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1012 // check if file exist
1013 if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
1014 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1015 } else {
1016 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1017 }
1018}
1019
1020
1021long
1022GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector, void*) {
1023 auto& neteditOptions = OptionsCont::getOptions();
1024 // check if close current file
1025 if (onCmdClose(0, 0, 0) == 1) {
1026 // store size, position and viewport
1028 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1029 // set flag
1030 myAmLoading = true;
1031 // get files
1032 const auto neteditConfig = neteditOptions.getString("configuration-file");
1033 const auto sumoConfig = neteditOptions.getString("sumocfg-file");
1034 const auto networkFile = neteditOptions.getString("net-file");
1035 // fill (reset) all options
1036 myLoadThread->fillOptions(neteditOptions);
1037 // set default options defined in GNELoadThread::setDefaultOptions(...)
1038 myLoadThread->setDefaultOptions(neteditOptions);
1039 // set file to load
1040 neteditOptions.resetWritable();
1041 if (neteditConfig.size() > 0) {
1042 neteditOptions.set("configuration-file", neteditConfig);
1043 // set status bar
1044 setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
1045 } else if (sumoConfig.size() > 0) {
1046 neteditOptions.set("sumocfg-file", sumoConfig);
1047 // set status bar
1048 setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
1049 } else if (networkFile.size() > 0) {
1050 neteditOptions.set("net-file", networkFile);
1051 // set status bar
1052 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1053 } else {
1054 // nothing to load
1055 return 0;
1056 }
1057 // load network
1059 }
1060 return 1;
1061}
1062
1063
1064long
1065GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1066 auto& neteditOptions = OptionsCont::getOptions();
1067 // declare strings
1068 FXString neteditConfig = TL("&Reload Netedit config");
1069 FXString sumoConfig = TL("&Reload Sumo config");
1070 FXString netFile = TL("&Reload Network");
1071 FXString reload = TL("&Reload");
1072 // check options
1073 if (myNet == nullptr) {
1074 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1075 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1076 } else if (neteditOptions.getString("configuration-file").size() > 0) {
1077 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1078 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1079 } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1080 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1081 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1082 } else if (neteditOptions.getString("net-file").size() > 0) {
1083 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1084 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1085 } else {
1086 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1087 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1088 }
1089 return 1;
1090}
1091
1092
1093long
1094GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector, void*) {
1095 auto& neteditOptions = OptionsCont::getOptions();
1096 // check if close current file
1097 if (onCmdClose(0, 0, 0) == 1) {
1098 // store size, position and viewport
1100 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1101 // set flag
1102 myAmLoading = true;
1103 // get network
1104 const auto networkFile = neteditOptions.getString("net-file");
1105 // fill (reset) all options
1106 myLoadThread->fillOptions(neteditOptions);
1107 // set default options defined in GNELoadThread::setDefaultOptions(...)
1108 myLoadThread->setDefaultOptions(neteditOptions);
1109 // set file to load
1110 neteditOptions.resetWritable();
1111 neteditOptions.set("net-file", networkFile);
1112 // set status bar
1113 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1114 // loaad network
1116 }
1117 return 1;
1118}
1119
1120
1121long
1122GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1123 auto& neteditOptions = OptionsCont::getOptions();
1124 if (myNet == nullptr) {
1125 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1126 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1127 } else if ((neteditOptions.getString("net-file").size() > 0) &&
1128 ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1129 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1130 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1131 } else {
1132 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1133 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1134 }
1135 return 1;
1136}
1137
1138
1139long
1140GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1141 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1142 if (myAmLoading) {
1143 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1144 } else if (onCmdClose(0, 0, 0) == 1) {
1145 // get filedata
1146 const std::string recentFile = ((const char*)fileData);
1147 // check if we're loading a network o a config
1148 if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1149 (recentFile.find(".netecfg") != std::string::npos) ||
1150 (recentFile.find(".sumocfg") != std::string::npos) ||
1151 (recentFile.find(".netccfg") != std::string::npos)) {
1152 // load config
1153 loadConfiguration(recentFile);
1154 } else {
1155 // load network
1156 loadNetwork(recentFile);
1157 }
1158 }
1159 return 1;
1160}
1161
1162
1163long
1164GNEApplicationWindow::onCmdClose(FXObject*, FXSelector, void*) {
1165 if (myViewNet == nullptr) {
1166 return 1;
1167 } else if (askSaveElements()) {
1169 // add a separator to the log
1171 // hide all menu commands
1175 // hide view options
1179 return 1;
1180 } else {
1181 return 0;
1182 }
1183}
1184
1185
1186long
1187GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1188 if (myMDIClient->numChildren() > 0) {
1189 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1190 if (w != nullptr) {
1191 w->onCmdLocate(nullptr, sel, nullptr);
1192 }
1193 }
1194 return 1;
1195}
1196
1197
1198long
1199GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1200 return myToolsMenuCommands.showTool(obj);
1201}
1202
1203
1204long
1205GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1207}
1208
1209
1210long
1213}
1214
1215
1216long
1217GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1218 // currently always enabled
1219 return 1;
1220}
1221
1222
1223long
1224GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1225 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1226 return 1;
1227}
1228
1229
1230long
1231GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1233 return 1;
1234}
1235
1236
1237long
1239 return 1;
1240}
1241
1242
1243long
1245 return 1;
1246}
1247
1248
1249long
1250GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1251 // create and open about dialog
1252 GNEAbout* about = new GNEAbout(this);
1253 about->create();
1254 about->show(PLACEMENT_OWNER);
1255 return 1;
1256}
1257
1258
1259long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1260 FXEvent* event = (FXEvent*)ptr;
1261 FXString string = GUIUserIO::clipped.c_str();
1262 setDNDData(FROM_CLIPBOARD, event->target, string);
1263 return 1;
1264}
1265
1266
1267long
1268GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1269 eventOccurred();
1270 return 1;
1271}
1272
1273
1274void
1276 // load events
1277 while (!myThreadEvents.empty()) {
1278 // get the next event
1281 // process
1282 switch (e->getOwnType()) {
1285 break;
1292 break;
1293 default:
1294 break;
1295 }
1296 delete e;
1297 }
1298}
1299
1300
1301void
1303 myAmLoading = false;
1304 GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1305 // get option container
1306 auto& neteditOptions = OptionsCont::getOptions();
1307 // check whether the loading was successfull
1308 if (ec->net == nullptr) {
1309 // report failure
1310 setStatusBarText(TL("Loading of '") + ec->file + "' failed!");
1311 } else {
1312 // set new Net
1313 myNet = ec->net;
1314 // report success
1315 setStatusBarText(TL("'") + ec->file + TL("' loaded."));
1317 // build viewparent toolbar grips before creating view parent
1319 // initialise netedit View
1320 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1321 // create it maximized
1322 viewParent->maximize();
1323 // mark it as Active child
1324 myMDIClient->setActiveChild(viewParent);
1325 // cast pointer myViewNet
1326 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1327 // set settings in view
1328 if (viewParent->getView() && ec->settingsFile != "") {
1329 GUISettingsHandler settings(ec->settingsFile, true, true);
1330 settings.addSettings(viewParent->getView());
1331 viewParent->getView()->addDecals(settings.getDecals());
1332 settings.applyViewport(viewParent->getView());
1333 settings.setSnapshots(viewParent->getView());
1334 }
1335 // set network name on the caption
1336 setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1337 // force supermode network
1338 if (myViewNet) {
1340 }
1341 if (myViewNet && ec->viewportFromRegistry) {
1342 Position off;
1343 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1344 Position p(off.x(), off.y(), 0);
1345 myViewNet->setViewportFromToRot(off, p, 0);
1346 }
1347 // if we're loading a sumo config, update netedit options
1348 if ((mySumoOptions.getStringVector("additional-files").size() > 0) && neteditOptions.getStringVector("additional-files").empty()) {
1349 neteditOptions.resetWritable();
1350 neteditOptions.set("additional-files", mySumoOptions.getValueString("additional-files"));
1351 }
1352 if ((mySumoOptions.getStringVector("route-files").size() > 0) && neteditOptions.getStringVector("route-files").empty()) {
1353 neteditOptions.resetWritable();
1354 neteditOptions.set("route-files", mySumoOptions.getValueString("route-files"));
1355 }
1356 // load elements
1361 // load selection
1362 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1364 }
1366 }
1368 // update app
1369 update();
1370 // restore focus
1371 setFocus();
1372}
1373
1374
1375void
1380
1381// ---------------------------------------------------------------------------
1382// private methods
1383// ---------------------------------------------------------------------------
1384
1385void
1387 // build file menu
1388 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1390 myFileMenuNeteditConfig = new FXMenuPane(this);
1391 myFileMenuSumoConfig = new FXMenuPane(this);
1392 myFileMenuTLS = new FXMenuPane(this);
1393 myFileMenuEdgeTypes = new FXMenuPane(this);
1394 myFileMenuAdditionals = new FXMenuPane(this);
1395 myFileMenuDemandElements = new FXMenuPane(this);
1396 myFileMenuDataElements = new FXMenuPane(this);
1397 myFileMenuMeanDataElements = new FXMenuPane(this);
1398 myFileMenuRecentNetworks = new FXMenuPane(this);
1399 myFileMenuRecentConfigs = new FXMenuPane(this);
1403 // add separator for recent files
1404 new FXMenuSeparator(myFileMenu);
1405 // build recent files
1408 new FXMenuSeparator(myFileMenu);
1410 TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1411 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1412 // build modes menu
1413 myModesMenu = new FXMenuPane(this);
1415 myModesMenuTitle->setTarget(this);
1417 // build Supermode commands and hide it
1419 // add separator
1420 new FXSeparator(myModesMenu);
1421 // build modes menu commands
1423 // build edit menu
1424 myEditMenu = new FXMenuPane(this);
1426 // build edit menu commands
1428 // build separator
1429 new FXMenuSeparator(myEditMenu);
1430 // build view options
1434 // hide view options
1438 // build view menu commands
1440 // build separator
1441 new FXMenuSeparator(myEditMenu);
1442 // build front element menu commands
1444 // build separator
1445 new FXMenuSeparator(myEditMenu);
1446 // build open in sumo menu commands
1448 // build lock menu
1449 myLockMenu = new FXMenuPane(this);
1451 myLockMenuTitle->setTarget(this);
1453 // build lock menu commands
1455 // build processing menu (trigger netbuild computations)
1456 myProcessingMenu = new FXMenuPane(this);
1459 // build locate menu
1460 myLocatorMenu = new FXMenuPane(this);
1463 // build tools menu
1464 myToolsMenu = new FXMenuPane(this);
1465 myToolsAssignMenu = new FXMenuPane(this);
1466 myToolsDetectorMenu = new FXMenuPane(this);
1467 myToolsDistrictMenu = new FXMenuPane(this);
1468 myToolsDRTMenu = new FXMenuPane(this);
1469 myToolsEmissionsMenu = new FXMenuPane(this);
1470 myToolsImportMenu = new FXMenuPane(this);
1471 myToolsImportCityBrainMenu = new FXMenuPane(this);
1472 myToolsImportGTFSMenu = new FXMenuPane(this);
1473 myToolsImportVissim = new FXMenuPane(this);
1474 myToolsImportVisum = new FXMenuPane(this);
1475 myToolsNetMenu = new FXMenuPane(this);
1476 myToolsRouteMenu = new FXMenuPane(this);
1477 myToolsOutputMenu = new FXMenuPane(this);
1478 myToolsShapes = new FXMenuPane(this);
1479 myToolsTLS = new FXMenuPane(this);
1480 myToolsTriggerMenu = new FXMenuPane(this);
1481 myToolsTurnDefs = new FXMenuPane(this);
1482 myToolsVisualizationMenu = new FXMenuPane(this);
1483 myToolsXML = new FXMenuPane(this);
1485 // build tools menu cascasde
1486 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1487 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1488 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1490 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1499 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1500 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1501 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1505 // add separators between folders
1506 new FXMenuSeparator(myToolsMenu);
1507 new FXMenuSeparator(myToolsImportMenu);
1508 // create map with tool Menu panes and their associated folder
1515 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1517 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1518 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1525 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1528 // build tools
1530 // build windows menu
1531 myWindowMenu = new FXMenuPane(this);
1534 // build language menu
1536 // build help menu
1537 myHelpMenu = new FXMenuPane(this);
1540}
1541
1542
1543FXGLCanvas*
1545 // netedit uses only a single View, then return nullptr
1546 return nullptr;
1547}
1548
1549
1552 return 0;
1553}
1554
1555
1556double
1558 return 1;
1559}
1560
1561
1566
1567
1572
1573
1578
1579
1584
1585
1590
1591
1592void
1594 if (myViewNet && myViewNet->getNet()) {
1595 // show
1597 // set label depending of recomputing
1599 myRequireRecomputingButton->setText("");
1600 myRequireRecomputingButton->setTipText(TL("Network computed"));
1602 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1603 } else {
1604 myRequireRecomputingButton->setText(TL("Press F5"));
1605 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1607 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1608 }
1609 } else {
1610 // hide
1612 }
1613}
1614
1615
1616void
1618 // first check if net must be deleted
1619 if (myNet != nullptr) {
1620 delete myNet;
1621 myNet = nullptr;
1623 }
1624 // check if view has to be saved
1625 if (myViewNet) {
1627 // clear decals
1628 myViewNet->getDecals().clear();
1629 }
1630 // lock tracker
1631 myTrackerLock.lock();
1632 // remove trackers and other external windows
1633 while (!myGLWindows.empty()) {
1634 delete myGLWindows.front();
1635 }
1636 myViewNet = nullptr;
1637 for (FXMainWindow* const window : myTrackerWindows) {
1638 window->destroy();
1639 delete window;
1640 }
1641 myTrackerWindows.clear();
1642 // reset the caption
1643 setTitle(myTitlePrefix);
1644 // unlock tracker
1645 myTrackerLock.unlock();
1646 // remove coordinate information
1647 myGeoCoordinate->setText(TL("N/A"));
1648 myCartesianCoordinate->setText(TL("N/A"));
1649 myTestCoordinate->setText(TL("N/A"));
1650 myTestFrame->hide();
1652 // Reset textures
1654 // reset fonts
1656}
1657
1658
1659FXCursor*
1661 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1662}
1663
1664
1665void
1667 auto& neteditOptions = OptionsCont::getOptions();
1668 if (neteditOptions.getBool("new")) {
1669 // save output file
1670 const auto outputFile = neteditOptions.getString("output-file");
1671 // create new network reset all options
1673 // check if define output file
1674 if (!outputFile.empty()) {
1675 neteditOptions.resetWritable();
1676 neteditOptions.set("net-file", outputFile);
1677 }
1678 } else {
1679 // set flag
1680 myAmLoading = true;
1681 // set status bar
1682 setStatusBarText(TL("Loading console arguments"));
1683 // load console arguments
1685 // add it into recent networks and configs
1686 if (neteditOptions.getString("net-file").size() > 0) {
1687 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
1688 }
1689 if (neteditOptions.getString("configuration-file").size() > 0) {
1690 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
1691 }
1692 }
1693}
1694
1695
1696void
1698 auto& neteditOptions = OptionsCont::getOptions();
1699 // save windows size and position
1701 // enable loading flag and disable reloading flag
1702 myAmLoading = true;
1703 // recenter view
1704 gSchemeStorage.saveViewport(0, 0, -1, 0);
1705 // fill (reset) all options
1706 GNELoadThread::fillOptions(neteditOptions);
1707 // set default options defined in GNELoadThread::setDefaultOptions(...)
1708 GNELoadThread::setDefaultOptions(neteditOptions);
1709 // update status bar
1710 setStatusBarText(TL("Creating new network."));
1711 // create new network
1713 // update window
1714 update();
1715}
1716
1717
1718void
1719GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1720 if (networkFile.empty()) {
1721 WRITE_ERROR(TL("Trying to load an empty network"));
1722 } else {
1723 auto& neteditOptions = OptionsCont::getOptions();
1724 // store size, position and viewport
1726 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1727 // set flag
1728 myAmLoading = true;
1729 // fill (reset) all options
1730 myLoadThread->fillOptions(neteditOptions);
1731 // set default options defined in GNELoadThread::setDefaultOptions(...)
1732 myLoadThread->setDefaultOptions(neteditOptions);
1733 // set file to load
1734 neteditOptions.resetWritable();
1735 neteditOptions.set("net-file", networkFile);
1736 // set status bar
1737 setStatusBarText(TL("Loading network file '") + networkFile + "'");
1738 // load network
1740 // add it into recent nets
1741 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1742 }
1743}
1744
1745
1746void
1747GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1748 if (configurationFile.empty()) {
1749 WRITE_ERROR(TL("Trying to load an empty configuration"));
1750 } else {
1751 auto& neteditOptions = OptionsCont::getOptions();
1752 // store size, position and viewport
1754 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1755 // set flag
1756 myAmLoading = true;
1757 // fill (reset) all options
1758 myLoadThread->fillOptions(neteditOptions);
1759 // set default options defined in GNELoadThread::setDefaultOptions(...)
1760 myLoadThread->setDefaultOptions(neteditOptions);
1761 // set file to load
1762 neteditOptions.resetWritable();
1763 neteditOptions.set("configuration-file", configurationFile);
1764 // set status bar
1765 setStatusBarText(TL("Loading configuration file '") + configurationFile + "'");
1766 // load config
1768 // add it into recent configs
1769 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1770 }
1771}
1772
1773
1774void
1775GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1776 auto& neteditOptions = OptionsCont::getOptions();
1777 // store size, position and viewport
1779 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1780 // set flag
1781 myAmLoading = true;
1782 // fill (reset) all options
1783 myLoadThread->fillOptions(neteditOptions);
1784 // set default options defined in GNELoadThread::setDefaultOptions(...)
1785 myLoadThread->setDefaultOptions(neteditOptions);
1786 // recommended osm options
1787 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1788 neteditOptions.set("osm-files", OSMFile);
1789 neteditOptions.set("geometry.remove", "true");
1790 neteditOptions.set("ramps.guess", "true");
1791 neteditOptions.set("junctions.join", "true");
1792 neteditOptions.set("tls.guess-signals", "true");
1793 neteditOptions.set("tls.discard-simple", "true");
1794 // open wizard dialog
1795 if (GNEOptionsDialog::Options(this, GUIIcon::SUPERMODENETWORK, OptionsCont::getOptions(), myOriginalNeteditOptions, TL("Select Import Options")).first == TRUE) {
1796 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
1797 // set file to load
1798 neteditOptions.resetWritable();
1799 neteditOptions.set("configuration-file", OSMFile);
1800 // set status bar
1801 setStatusBarText(TL("Loading OSM file '") + OSMFile + "'");
1802 // load config
1804 }
1805}
1806
1807void
1808GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1809 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1810 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1811}
1812
1813
1814long
1816 // declare variable to save FXMessageBox outputs.
1817 FXuint answer = 0;
1818 // check if open dialog or obtain the argument trought input (used in tests)
1819 if (modalArguments) {
1820 answer = modalArguments->questionDialogValues[0];
1821 } else {
1822 // open question dialog box
1823 answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Recompute with volatile options"),
1824 TL("Changes produced in the net due a recomputing with volatile options cannot be undone. Continue?"));
1825 }
1826 if (answer != 1) { //1:yes, 2:no, 4:esc
1827 // abort recompute with volatile options
1828 return 0;
1829 } else {
1830 // save all elements
1831 onCmdSaveAdditionalElements(nullptr, 0, nullptr);
1832 onCmdSaveDemandElements(nullptr, 0, nullptr);
1833 onCmdSaveDataElements(nullptr, 0, nullptr);
1834 onCmdSaveMeanDataElements(nullptr, 0, nullptr);
1835 // compute with volatile options
1836 myNet->computeNetwork(this, true, true);
1838 return 1;
1839 }
1840}
1841
1842
1843bool
1846 myConsoleOptionsLoaded = false;
1847 return true;
1848 } else {
1849 return false;
1850 }
1851}
1852
1853
1854long
1855GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1856 // check that currently there is a View
1857 if (myViewNet) {
1858 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1859 }
1860 return 1;
1861}
1862
1863
1864long
1865GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1866 // check that currently there is a View
1867 if (myViewNet) {
1868 myViewNet->onCmdSetMode(sender, sel, ptr);
1869 }
1870 return 1;
1871}
1872
1873
1874long
1875GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1876 if (myViewNet) {
1877 // check if we're calling the functions using internal test
1878 switch (FXSELID(sel)) {
1881 break;
1882 case MID_GNE_LOCK_EDGE:
1884 break;
1885 case MID_GNE_LOCK_LANE:
1887 break;
1890 break;
1893 break;
1896 break;
1899 break;
1900 case MID_GNE_LOCK_WIRE:
1902 break;
1903 case MID_GNE_LOCK_TAZ:
1905 break;
1908 break;
1909 case MID_GNE_LOCK_POI:
1911 break;
1914 break;
1917 break;
1918 case MID_GNE_LOCK_ROUTE:
1920 break;
1923 break;
1926 break;
1929 break;
1930 case MID_GNE_LOCK_WALK:
1932 break;
1933 case MID_GNE_LOCK_RIDE:
1935 break;
1938 break;
1941 break;
1944 break;
1945 case MID_GNE_LOCK_STOP:
1947 break;
1950 break;
1953 break;
1956 break;
1957 default:
1958 break;
1959 }
1961 }
1962 return 1;
1963}
1964
1965
1966long
1967GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1968 // lock all
1971 return 1;
1972}
1973
1974
1975long
1977 // unlock all
1980 return 1;
1981}
1982
1983
1984long
1986 if (myViewNet) {
1987 myViewNet->update();
1988 }
1989 return 1;
1990}
1991
1992
1993long
1994GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
1995 if (myViewNet) {
1997 // supermode network
2003 myLockMenuTitle->enable();
2004 } else {
2005 myLockMenuTitle->disable();
2006 }
2008 // supermode demand
2013 myLockMenuTitle->enable();
2014 } else {
2015 myLockMenuTitle->disable();
2016 }
2018 // supermode data
2022 myLockMenuTitle->enable();
2023 } else {
2024 myLockMenuTitle->disable();
2025 }
2026 } else {
2027 myLockMenuTitle->disable();
2028 }
2029 } else {
2030 myLockMenuTitle->disable();
2031 }
2032 return 1;
2033}
2034
2035long
2036GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* arg) {
2037 // obtain modal arguments from internal tests
2038 auto dialogTest = (sender == myInternalTest) ? static_cast<InternalTestStep::DialogTest*>(arg) : nullptr;
2039 // first check if there is a view
2040 if (myViewNet) {
2041 // process depending of supermode
2043 // check what FXMenuCommand was called
2044 switch (FXSELID(sel)) {
2046 myNet->computeNetwork(this, true, false);
2048 break;
2051 break;
2054 break;
2057 break;
2060 break;
2061 default:
2062 break;
2063 }
2065 // check what FXMenuCommand was called
2066 switch (FXSELID(sel)) {
2070 break;
2073 break;
2076 break;
2079 break;
2082 break;
2083 default:
2084 break;
2085 }
2086 }
2087 // refresh to update undo-redo button
2088 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2089 }
2090 return 1;
2091}
2092
2093
2094long
2095GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2096 // get extra arguments
2097 std::string extraArg;
2099 extraArg = " -s " + myNetgenerateOptions.getValueString("output-file");
2100 }
2101 FXRegistry reg("SUMO netedit", "netedit");
2102 std::string netedit = "netedit";
2103 const char* sumoPath = getenv("SUMO_HOME");
2104 if (sumoPath != nullptr) {
2105#ifdef DEBUG
2106 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2107#else
2108 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2109#endif
2110 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2111 netedit = "\"" + newPath + "\"";
2112 }
2113 }
2114 std::string cmd = netedit + extraArg;
2115 // start in background
2116#ifndef WIN32
2117 cmd = cmd + " &";
2118#else
2119 // see "help start" for the parameters
2120 cmd = "start /B \"\" " + cmd;
2121#endif
2122 WRITE_MESSAGE(TL("Running ") + cmd + ".");
2123 // yay! fun with dangerous commands... Never use this over the internet
2125 return 1;
2126}
2127
2128
2129long
2130GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2131 // get option container
2132 auto& neteditOptions = OptionsCont::getOptions();
2133 // input parameters
2134 std::string inputParameters;
2135 // if we have only a network, then load directly without creating a SumoConfig
2137 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2138 // force save network
2139 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2140 // network wasn't saved, then stop
2141 return 0;
2142 }
2143 inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2144 // write info
2145 WRITE_MESSAGE(TL("Loading network '") + neteditOptions.getString("net-file") + TL("' in SUMO-GUI"));
2146 } else {
2147 // force save SumoConfig
2148 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2149 // SumoConfig wasn't saved, then stop
2150 return 0;
2151 }
2152 inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2153 // write info
2154 WRITE_MESSAGE(TL("Loading sumo config '") + neteditOptions.getString("sumocfg-file") + TL("' in SUMO-GUI"));
2155 }
2156 // save current viewport in registry
2157 FXRegistry reg("SUMO GUI", "sumo-gui");
2158 reg.read();
2159 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2160 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2161 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2162 reg.write();
2163 // declare executable
2164 std::string sumoGuiExecutable = "sumo-gui";
2165 // if SUMO_HOME is defined, update executable
2166 const char* sumoHome = getenv("SUMO_HOME");
2167 if (sumoHome != nullptr) {
2168 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2169 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2170 sumoGuiExecutable = "\"" + newPath + "\"";
2171 }
2172 }
2173 // declare command
2174 std::string cmd = sumoGuiExecutable + inputParameters;
2175 // start in background
2176#ifndef WIN32
2177 cmd = cmd + " &";
2178#else
2179 // see "help start" for the parameters
2180 cmd = "start /B \"\" " + cmd;
2181#endif
2182 WRITE_MESSAGE(TL("Running ") + cmd + ".");
2183 // yay! fun with dangerous commands... Never use this over the internet
2185 return 1;
2186}
2187
2188
2189long
2190GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2191 // check that view exists
2192 if (myViewNet) {
2193 // first check if we're selecting a subset of edges in TAZ Frame
2195 // clear current selection
2197 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2198 // check if stop select parent
2200 // and stop select paretn
2202 } else {
2203 // clear inspected elements
2205 }
2206 } else {
2207 // abort current operation
2209 }
2210 }
2211 return 1;
2212}
2213
2214
2215long
2216GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2217 // check that view exists
2218 if (myViewNet) {
2220 }
2221 return 1;
2222}
2223
2224
2225long
2226GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2227 // check that view exists
2228 if (myViewNet) {
2230 }
2231 return 1;
2232}
2233
2234
2235long
2236GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2237 // check that view exists
2238 if (myViewNet) {
2240 }
2241 return 1;
2242}
2243
2244
2245long
2246GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2247 // check that view exists
2248 if (myViewNet) {
2250 }
2251 return 1;
2252}
2253
2254
2255long
2257 // check that view exists
2258 if (myViewNet) {
2260 }
2261 return 1;
2262}
2263
2264
2265long
2266GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2267 // check that view exists
2268 if (myViewNet) {
2270 // refresh flow frames
2271 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2273 }
2274 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2276 }
2277 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2279 }
2280 // refresh inspector frame
2281 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2283 }
2284 }
2285 return 1;
2286}
2287
2288
2289long
2290GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2291 // check that view exists
2292 if (myViewNet) {
2294 }
2295 return 1;
2296}
2297
2298
2299long
2300GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2303 // after running, remove internal tests
2304 delete myInternalTest;
2305 myInternalTest = nullptr;
2306 }
2307 return 1;
2308}
2309
2310
2311long
2312GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2313 // enable or disable sender element depending of viewNet
2314 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2315}
2316
2317
2318long
2321 return 1;
2322}
2323
2324
2325long
2329
2330
2331long
2332GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2334}
2335
2336
2337long
2338GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2339 // check that view exists
2340 if (myViewNet) {
2342 }
2343 return 1;
2344}
2345
2346
2347long
2348GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2349 // check that view exists
2350 if (myViewNet) {
2352 }
2353 return 1;
2354}
2355
2356
2357long
2358GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2359 // check that view exists
2360 if (myViewNet) {
2361 // Call manually toggle grid function
2362 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2363 }
2364 return 1;
2365}
2366
2367
2368long
2369GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2370 // check that view exists
2371 if (myViewNet) {
2372 // Call manually toggle junction shape function
2373 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2374 }
2375 return 1;
2376}
2377
2378
2379long
2380GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2381 if (myViewNet) {
2382 // get first inspected AC
2383 auto inspectedAC = myViewNet->getInspectedElements().getFirstAC();
2384 if (inspectedAC) {
2385 // set or clear front attribute
2386 if (inspectedAC->isMarkedForDrawingFront()) {
2387 inspectedAC->unmarkForDrawingFront();
2388 } else {
2389 inspectedAC->markForDrawingFront();
2390 }
2391 } else {
2393 }
2394 myViewNet->update();
2395 }
2396 return 1;
2397}
2398
2399
2400long
2401GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2402 // first check that we have a ViewNet
2403 if (myViewNet) {
2404 // first check what selector was called
2405 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2406 // check that numericalKeyPressed is valid
2407 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2408 return 0;
2409 }
2410 // declare a vector in which save visible menu commands
2411 std::vector<MFXCheckableButton*> visibleMenuCommands;
2412 // get common, network and demand visible menu commands
2416 // now check that numericalKeyPressed isn't greater than visible view options
2417 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2418 return 0;
2419 }
2420 // toggle edit options
2422 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2423 return 1;
2425 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2426 return 1;
2428 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2429 return 1;
2430 }
2431 }
2432 return 0;
2433}
2434
2435
2436long
2437GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2438 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2439 return 1;
2440}
2441
2442
2443long
2444GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2445 // update in every version
2446 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2447 return 1;
2448}
2449
2450
2451long
2452GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2453 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2454 return 1;
2455}
2456
2457
2458long
2461 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2462 } else {
2463 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2464 }
2465}
2466
2467
2468long
2469GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2470 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2471 myAllowUndoRedo = true;
2472 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2473 } else {
2474 myAllowUndoRedo = false;
2475 // drop undo-redo list after changing flag
2476 myUndoList->clear();
2477 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2478 }
2479}
2480
2481
2482long
2484 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2486 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2487 } else {
2488 myAllowUndoRedoLoading = false;
2489 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2490 }
2491}
2492
2493
2494long
2495GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2496 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2497 return 1;
2498}
2499
2500
2501long
2502GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2503 // create and open feedback dialog
2504 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2505 feedback->create();
2506 feedback->show(PLACEMENT_OWNER);
2507 return 1;
2508}
2509
2510
2511long
2513 auto& neteditOptions = OptionsCont::getOptions();
2514 const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::OPTIONS, neteditOptions, myOriginalNeteditOptions, TL("Netedit options"));
2515 if (dialog.first == TRUE) {
2516 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2517 NBFrame::checkOptions(neteditOptions);
2518 NWFrame::checkOptions(neteditOptions);
2519 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2520 // check if mar netedit config as unsaved
2521 if (dialog.second && myNet) {
2523 }
2524 }
2525 return 1;
2526}
2527
2528
2529long
2531 const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::SUMO_MINI, mySumoOptions, myOriginalSumoOptions, TL("Sumo options"));
2532 // check if mark sumoConfig as unsaved
2533 if ((dialog.first == TRUE) && dialog.second && myNet) {
2535 }
2536 return 1;
2537}
2538
2539
2540long
2544
2545
2546long
2550
2551
2552long
2553GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2554 // Check conditions
2555 if (myViewNet == nullptr) {
2556 return 0;
2557 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2558 return 0;
2559 } else {
2560 // check supermode (currently ignore supermode data)
2563 // abort if user doesn't press "yes"
2565 return 0;
2566 }
2567 }
2569 // update current show frame after undo
2572 }
2573 // update manually undo/redo menu commands (see #6005)
2576 // update toolbar undo-redo buttons
2578 return 1;
2579 }
2580}
2581
2582
2583long
2584GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2585 // Check conditions
2586 if (myViewNet == nullptr) {
2587 return 0;
2588 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2589 return 0;
2590 } else {
2591 // check supermode (currently ignore supermode data)
2594 // abort if user doesn't press "yes"
2596 return 0;
2597 }
2598 }
2600 // update current show frame after redo
2603 }
2604 // update manually undo/redo menu commands (see #6005)
2607 // update toolbar undo-redo buttons
2609 return 1;
2610 }
2611}
2612
2613
2614long
2616 // avoid open two dialogs
2617 if (myUndoListDialog->shown()) {
2619 } else {
2621 }
2622 return 1;
2623}
2624
2625
2626long
2627GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2628 // check if net exist and there is something to undo/redo
2629 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2630 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2631 } else {
2632 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2633 if (myUndoListDialog->shown()) {
2635 }
2636 }
2637 return 1;
2638}
2639
2640
2641long
2643 // first check viewNet
2645 // update demand path calculator
2647 }
2648 return 1;
2649}
2650
2651
2652long
2653GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2654 // Prepared for #6042
2655 return 1;
2656}
2657
2658
2659long
2660GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2661 // Prepared for #6042
2662 return 1;
2663}
2664
2665
2666long
2667GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2668 // Prepared for #6042
2669 return 1;
2670}
2671
2672
2673long
2674GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2675 // first check if myViewNet exist
2676 if (myViewNet) {
2677 // call set template in inspector frame
2679 }
2680 return 1;
2681}
2682
2683
2684long
2685GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2686 // first check if myViewNet exist
2687 if (myViewNet) {
2688 // call copy template in inspector frame
2690 }
2691 return 1;
2692}
2693
2694
2695long
2696GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2697 // first check if myViewNet exist
2698 if (myViewNet) {
2699 // call clear template in inspector frame
2701 }
2702 return 1;
2703}
2704
2705
2706long
2707GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2708 // check if net exist
2709 if (myNet) {
2711 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2712 } else {
2714 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2715 }
2716}
2717
2718
2719long
2720GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2721 // check if at least there is one edge in the network
2722 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2723 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2724 } else {
2725 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2726 }
2727}
2728
2729
2730long
2731GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2732 // check if net, viewnet and front attribute exist
2733 if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2734 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2735 } else {
2736 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2737 }
2738}
2739
2740
2741long
2742GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2743 if (myNet == nullptr) {
2744 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2745 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2746 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2747 } else {
2748 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2749 }
2750}
2751
2752
2753long
2754GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2755 if (myNet == nullptr) {
2756 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2758 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2759 } else {
2760 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2761 }
2762}
2763
2764
2765long
2767 if (myNet == nullptr) {
2768 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2769 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2770 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2771 } else {
2772 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2773 }
2774}
2775
2776
2777long
2778GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2779 if (myNet == nullptr) {
2780 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2781 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2782 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2783 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2784 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2785 } else {
2786 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2787 }
2788}
2789
2790
2791long
2792GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2793 if (myNet == nullptr) {
2794 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2795 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2796 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2797 } else {
2798 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2799 }
2800
2801}
2802
2803
2804long
2805GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2806 if (myNet == nullptr) {
2807 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2809 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2810 } else {
2811 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2812 }
2813}
2814
2815
2816long
2817GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2818 if (myNet == nullptr) {
2819 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2820 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2821 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2822 } else {
2823 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2824 }
2825
2826}
2827
2828
2829long
2830GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2831 if (myNet == nullptr) {
2832 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2833 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2834 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2835 } else {
2836 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2837 }
2838
2839}
2840
2841
2842long
2843GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2844 if (myNet == nullptr) {
2845 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2846 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2847 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2848 } else {
2849 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2850 }
2851}
2852
2853
2854long
2856 if (myNet == nullptr) {
2857 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2858 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2859 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2860 } else {
2861 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2862 }
2863
2864}
2865
2866
2867long
2868GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2869 return myUndoList->onUpdUndo(sender, sel, ptr);
2870}
2871
2872
2873long
2874GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2875 return myUndoList->onUpdRedo(sender, sel, ptr);
2876}
2877
2878
2879long
2880GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2881 // first check viewNet
2882 if (myViewNet) {
2883 // check supermode network
2885 // disable
2886 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2888 // disable
2889 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2890 } else {
2891 // enable
2892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2893 }
2894 } else {
2895 // disable
2896 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2897 }
2898}
2899
2900
2901long
2902GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2903 // check viewNet
2904 if (myViewNet) {
2905 // continue depending of selector
2906 switch (FXSELID(sel)) {
2907 // Network
2909 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2911 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2913 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2915 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2917 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2919 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2921 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2923 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2925 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2927 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2929 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2931 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
2933 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2935 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2937 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2939 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2940 // Demand
2942 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2944 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2946 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2948 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2950 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2952 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2954 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2956 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2958 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2960 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2962 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2963 // Data
2965 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2967 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
2969 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
2971 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
2973 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2975 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2977 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
2979 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
2980 default:
2981 return 0;
2982 }
2983 } else {
2984 return 0;
2985 }
2986}
2987
2988
2989long
2990GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
2991 // get menuCheck
2992 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
2993 // check viewNet
2994 if (myViewNet && menuCheck) {
2995 // continue depending of selector
2996 switch (FXSELID(sel)) {
2997 // Network
3000 menuCheck->setCheck(TRUE);
3001 } else {
3002 menuCheck->setCheck(FALSE);
3003 }
3004 break;
3007 menuCheck->setCheck(TRUE);
3008 } else {
3009 menuCheck->setCheck(FALSE);
3010 }
3011 break;
3014 menuCheck->setCheck(TRUE);
3015 } else {
3016 menuCheck->setCheck(FALSE);
3017 }
3018 break;
3021 menuCheck->setCheck(TRUE);
3022 } else {
3023 menuCheck->setCheck(FALSE);
3024 }
3025 break;
3028 menuCheck->setCheck(TRUE);
3029 } else {
3030 menuCheck->setCheck(FALSE);
3031 }
3032 break;
3035 menuCheck->setCheck(TRUE);
3036 } else {
3037 menuCheck->setCheck(FALSE);
3038 }
3039 break;
3042 menuCheck->setCheck(TRUE);
3043 } else {
3044 menuCheck->setCheck(FALSE);
3045 }
3046 break;
3049 menuCheck->setCheck(TRUE);
3050 } else {
3051 menuCheck->setCheck(FALSE);
3052 }
3053 break;
3056 menuCheck->setCheck(TRUE);
3057 } else {
3058 menuCheck->setCheck(FALSE);
3059 }
3060 break;
3063 menuCheck->setCheck(TRUE);
3064 } else {
3065 menuCheck->setCheck(FALSE);
3066 }
3067 break;
3070 menuCheck->setCheck(TRUE);
3071 } else {
3072 menuCheck->setCheck(FALSE);
3073 }
3074 break;
3077 menuCheck->setCheck(TRUE);
3078 } else {
3079 menuCheck->setCheck(FALSE);
3080 }
3081 break;
3084 menuCheck->setCheck(TRUE);
3085 } else {
3086 menuCheck->setCheck(FALSE);
3087 }
3088 break;
3091 menuCheck->setCheck(TRUE);
3092 } else {
3093 menuCheck->setCheck(FALSE);
3094 }
3095 break;
3098 menuCheck->setCheck(TRUE);
3099 } else {
3100 menuCheck->setCheck(FALSE);
3101 }
3102 break;
3105 menuCheck->setCheck(TRUE);
3106 } else {
3107 menuCheck->setCheck(FALSE);
3108 }
3109 break;
3110 // Demand
3113 menuCheck->setCheck(TRUE);
3114 } else {
3115 menuCheck->setCheck(FALSE);
3116 }
3117 break;
3120 menuCheck->setCheck(TRUE);
3121 } else {
3122 menuCheck->setCheck(FALSE);
3123 }
3124 break;
3127 menuCheck->setCheck(TRUE);
3128 } else {
3129 menuCheck->setCheck(FALSE);
3130 }
3131 break;
3134 menuCheck->setCheck(TRUE);
3135 } else {
3136 menuCheck->setCheck(FALSE);
3137 }
3138 break;
3141 menuCheck->setCheck(TRUE);
3142 } else {
3143 menuCheck->setCheck(FALSE);
3144 }
3145 break;
3148 menuCheck->setCheck(TRUE);
3149 } else {
3150 menuCheck->setCheck(FALSE);
3151 }
3152 break;
3155 menuCheck->setCheck(TRUE);
3156 } else {
3157 menuCheck->setCheck(FALSE);
3158 }
3159 // special case for lock persons
3161 menuCheck->enable();
3162 } else {
3163 menuCheck->disable();
3164 }
3165 break;
3168 menuCheck->setCheck(TRUE);
3169 } else {
3170 menuCheck->setCheck(FALSE);
3171 }
3172 break;
3175 menuCheck->setCheck(TRUE);
3176 } else {
3177 menuCheck->setCheck(FALSE);
3178 }
3179 // special case for lock containers
3181 menuCheck->enable();
3182 } else {
3183 menuCheck->disable();
3184 }
3185 break;
3188 menuCheck->setCheck(TRUE);
3189 } else {
3190 menuCheck->setCheck(FALSE);
3191 }
3192 break;
3195 menuCheck->setCheck(TRUE);
3196 } else {
3197 menuCheck->setCheck(FALSE);
3198 }
3199 break;
3200 // Data
3203 menuCheck->setCheck(TRUE);
3204 } else {
3205 menuCheck->setCheck(FALSE);
3206 }
3207 break;
3210 menuCheck->setCheck(TRUE);
3211 } else {
3212 menuCheck->setCheck(FALSE);
3213 }
3214 break;
3217 menuCheck->setCheck(TRUE);
3218 } else {
3219 menuCheck->setCheck(FALSE);
3220 }
3221 break;
3224 menuCheck->setCheck(TRUE);
3225 } else {
3226 menuCheck->setCheck(FALSE);
3227 }
3228 break;
3231 menuCheck->setCheck(TRUE);
3232 } else {
3233 menuCheck->setCheck(FALSE);
3234 }
3235 break;
3238 menuCheck->setCheck(TRUE);
3239 } else {
3240 menuCheck->setCheck(FALSE);
3241 }
3242 break;
3243
3246 menuCheck->setCheck(TRUE);
3247 } else {
3248 menuCheck->setCheck(FALSE);
3249 }
3250 break;
3253 menuCheck->setCheck(TRUE);
3254 } else {
3255 menuCheck->setCheck(FALSE);
3256 }
3257 break;
3258 default:
3259 break;
3260 }
3261 }
3262 return 0;
3263}
3264
3265
3266long
3267GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3268 auto& neteditOptions = OptionsCont::getOptions();
3269 if (myNet->getSavingStatus()->isNetworkSaved() && !neteditOptions.getBool("force-saving")) {
3270 // nothing to save
3271 return 1;
3272 }
3273 // first check if we have to set the output filename
3274 if ((sel == MID_GNE_AUTOMATICFILENAME) && neteditOptions.getString("net-file").empty()) {
3275 neteditOptions.set("net-file", *(static_cast<std::string*>(ptr)) + ".net.xml");
3276 }
3277 // function onCmdSaveNetworkAs must be executed if this is the first save
3278 if (neteditOptions.getString("net-file").empty()) {
3279 return onCmdSaveNetworkAs(sender, sel, ptr);
3280 } else {
3281 // always recompute before saving
3282 myNet->computeNetwork(this);
3283 // se net file in SUMO options
3285 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3286 bool saved = false;
3287 try {
3288 // obtain invalid networkElements (currently only edges or crossings
3289 std::vector<GNENetworkElement*> invalidNetworkElements;
3290 // iterate over crossings and edges
3291 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3292 if (!edge.second->isNetworkElementValid()) {
3293 invalidNetworkElements.push_back(edge.second);
3294 }
3295 }
3296 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3297 if (!crossing.second->isNetworkElementValid()) {
3298 invalidNetworkElements.push_back(crossing.second);
3299 }
3300 }
3301 // if there are invalid network elements, open GNEFixNetworkElements
3302 if (invalidNetworkElements.size() > 0) {
3303 // 0 -> Canceled Saving, with or without selecting invalid network elements
3304 // 1 -> Invalid network elements fixed, friendlyPos enabled, or saved with invalid positions
3305 if (myViewNet->getFixNetworkElementsDialog()->openDialog(invalidNetworkElements) == 0) {
3306 // stop
3307 return 0;
3308 } else {
3309 // Save network
3310 myNet->saveNetwork();
3311 saved = true;
3312 }
3313 } else {
3314 // Save network
3315 myNet->saveNetwork();
3316 saved = true;
3317 }
3318 } catch (IOError& e) {
3319 // open error message box
3320 FXMessageBox::error(this, MBOX_OK, TL("Saving Network failed!"), "%s", e.what());
3321 }
3322 if (saved) {
3323 // write info
3324 WRITE_MESSAGE(TL("Network saved in '") + neteditOptions.getString("net-file") + "'.");
3325 // After saving a net successfully, add it into Recent Nets list.
3326 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3328 } else {
3330 WRITE_ERROR(TL("Could not save network in '") + neteditOptions.getString("net-file") + "'");
3331 return 0;
3332 }
3333 return 1;
3334 }
3335}
3336
3337
3338long
3339GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3340 // get network file file
3341 const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, true);
3342 if (!networkFile.empty()) {
3343 // set ouput file in netedit configs
3344 auto& neteditOptions = OptionsCont::getOptions();
3345 neteditOptions.resetWritable();
3346 neteditOptions.set("net-file", networkFile);
3347 // update netedit title with the network name
3348 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFile.c_str()));
3349 // enable save network
3351 // save network
3352 return onCmdSaveNetwork(nullptr, 0, nullptr);
3353 } else {
3354 return 0;
3355 }
3356}
3357
3358
3359long
3360GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3361 // get neteditConfig filename
3363 // Remove extension
3364 if (!plainXMLFile.empty()) {
3365 // adjust file
3366 if (plainXMLFile.back() == '.') {
3367 plainXMLFile.pop_back();
3368 } else {
3369 plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3370 plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3371 plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3372 plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3373 plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3374 plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3375 }
3376 }
3377 // continue depending of file
3378 if (!plainXMLFile.empty()) {
3379 // start saving plain XML
3380 getApp()->beginWaitCursor();
3381 try {
3382 myNet->savePlain(plainXMLFile);
3383 // write info
3384 WRITE_MESSAGE(TL("Plain XML saved with prefix '") + plainXMLFile + "'");
3385 } catch (IOError& e) {
3386 // open message box
3387 FXMessageBox::error(this, MBOX_OK, TL("Saving plain xml failed!"), "%s", e.what());
3388 }
3389 // end saving plain XML
3390 getApp()->endWaitCursor();
3391 // set focus again in viewNet
3392 myViewNet->setFocus();
3393 }
3394 return 1;
3395}
3396
3397
3398long
3400 // get neteditConfig filename
3401 const auto joinedJunctionsFile = GNEApplicationWindowHelper::saveJoinedJunctionsFileDialog(this);
3402 // continue depending of file
3403 if (joinedJunctionsFile.size() > 0) {
3404 getApp()->beginWaitCursor();
3405 try {
3406 myNet->saveJoined(joinedJunctionsFile);
3407 // write info
3408 WRITE_MESSAGE(TL("Joined junctions saved to '") + joinedJunctionsFile + "'");
3409 } catch (IOError& e) {
3410 // opening error message
3411 FXMessageBox::error(this, MBOX_OK, TL("Saving joined junctions failed!"), "%s", e.what());
3412 }
3413 getApp()->endWaitCursor();
3414 // set focus again in viewNet
3415 myViewNet->setFocus();
3416 }
3417 return 1;
3418}
3419
3420
3421long
3423 // obtain netedit option container
3424 auto& neteditOptions = OptionsCont::getOptions();
3425 neteditOptions.resetWritable();
3426 // Check if configuration file was already set at start of netedit or with a previous save
3427 if (neteditOptions.getString("configuration-file").empty()) {
3428 return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3429 } else {
3430 // get config file
3431 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3432 // get file path
3433 const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3434 // get patter file
3435 auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3436 // update netedit config
3438 // save all elements giving automatic names based on patter if their file isn't defined
3439 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3440 WRITE_MESSAGE(TL("Saving of Netedit configuration aborted"));
3441 return 0;
3442 }
3443 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3444 WRITE_MESSAGE(TL("Saving of Netedit configuration aborted"));
3445 return 0;
3446 }
3447 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3448 WRITE_MESSAGE(TL("Saving of Netedit configuration aborted"));
3449 return 0;
3450 }
3451 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3452 WRITE_MESSAGE(TL("Saving of Netedit configuration aborted"));
3453 return 0;
3454 }
3455 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3456 WRITE_MESSAGE(TL("Saving of Netedit configuration aborted"));
3457 return 0;
3458 }
3459 // configuration
3460 std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3461 if (out.good()) {
3462 // write netedit config
3463 neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3464 // write info
3465 WRITE_MESSAGE(TL("Netedit configuration saved in '") + neteditConfigFile + "'");
3466 // config saved
3468 // After saving a config successfully, add it into recent configs
3469 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3470 } else {
3471 WRITE_ERROR(TL("Could not save netedit configuration in '") + neteditConfigFile + "'");
3472 }
3473 out.close();
3474 return 1;
3475 }
3476}
3477
3478
3479long
3480GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3481 auto& neteditOptions = OptionsCont::getOptions();
3482 // get neteditConfig filename
3483 const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, true);
3484 // continue depending of file
3485 if (!neteditConfigFile.empty()) {
3486 neteditOptions.resetWritable();
3487 neteditOptions.set("configuration-file", neteditConfigFile);
3488 // continue saving netedit config
3489 return onCmdSaveNeteditConfig(sender, sel, ptr);
3490 } else {
3491 return 0;
3492 }
3493}
3494
3495
3496long
3497GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3498 // check if enable or disable save netedit config button
3499 if (myNet == nullptr) {
3500 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3501 } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3502 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3503 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3504 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3505 } else {
3506 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3507 }
3508 // check if enable/disable save individual files
3509 if (myNet) {
3513 } else {
3515 }
3516 }
3517 return 1;
3518}
3519
3520
3521long
3522GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3523 // obtain netedit option container
3524 auto& neteditOptions = OptionsCont::getOptions();
3525 // reset containers
3526 neteditOptions.resetWritable();
3528 // Check if configuration file was already set at start of netedit or with a previous save
3529 if (neteditOptions.getString("sumocfg-file").empty()) {
3530 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3531 } else {
3532 // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3533 const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3534 const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3535 const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3536 // get SumoConfig file
3537 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3538 // get config file without extension
3539 auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3540 // update netedit config
3542 // save all elements giving automatic names based on patter in their file isn't defined
3543 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3544 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3545 return 0;
3546 }
3547 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3548 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3549 return 0;
3550 }
3551 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3552 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3553 return 0;
3554 }
3555 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3556 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3557 return 0;
3558 }
3559 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3560 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3561 return 0;
3562 }
3563 // set input in sumo options
3564 setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3565 // if we have trips or flow over junctions, add option junction-taz
3568 mySumoOptions.set("junction-taz", "true");
3569 }
3570 std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3571 if (out.good()) {
3572 // write SUMO config
3573 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3574 // write info
3575 WRITE_MESSAGE(TL("SUMO configuration saved in '") + sumoConfigFile + "'");
3576 // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3577 if (!ignoreAdditionals && !ignoreDemandElements) {
3579 }
3580 // After saving a config successfully, add it into recent configs
3581 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3582 } else {
3583 WRITE_MESSAGE(TL("Could not save SUMO configuration in '") + sumoConfigFile + "'");
3584 }
3585 out.close();
3586 return 1;
3587 }
3588}
3589
3590
3591long
3592GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3593 auto& neteditOptions = OptionsCont::getOptions();
3594 // get sumoConfig filename
3595 const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, true);
3596 // continue depending of file
3597 if (!sumoConfigFile.empty()) {
3598 // save file in netedit options
3599 neteditOptions.resetWritable();
3600 neteditOptions.set("sumocfg-file", sumoConfigFile);
3601 // continue saving SUMO Config
3602 return onCmdSaveSumoConfig(sender, sel, ptr);
3603 } else {
3604 return 0;
3605 }
3606}
3607
3608
3609long
3610GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3611 if (myNet == nullptr) {
3612 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3613 } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3614 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3615 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3616 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3617 } else {
3618 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3619 }
3620}
3621
3622
3623long
3624GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3625 // get option container
3626 auto& neteditOptions = OptionsCont::getOptions();
3627 // Check if TLS Programs file was already set at start of netedit or with a previous save
3628 if (neteditOptions.getString("tls-file").empty()) {
3629 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3630 } else {
3631 // Start saving TLS Programs
3632 getApp()->beginWaitCursor();
3633 try {
3634 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3635 myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3636 // write info
3637 WRITE_MESSAGE(TL("TLS Programs saved in '") + neteditOptions.getString("tls-file") + "'");
3638 } catch (IOError& e) {
3639 // open error message box
3640 FXMessageBox::error(this, MBOX_OK, TL("Saving TLS Programs failed!"), "%s", e.what());
3641 }
3643 getApp()->endWaitCursor();
3644 // set focus again in viewNet
3645 myViewNet->setFocus();
3646 }
3647 return 1;
3648}
3649
3650
3651long
3652GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3653 if (myNet == nullptr) {
3654 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3655 } else {
3656 // check if there is at least one TLS
3657 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3658 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3659 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3660 }
3661 }
3662 // no TLS, then disable
3663 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3664 }
3665}
3666
3667
3668long
3669GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3670 // get option container
3671 auto& neteditOptions = OptionsCont::getOptions();
3672 // Check if edgeType file was already set at start of netedit or with a previous save
3673 if (neteditOptions.getString("edgetypes-file").empty()) {
3674 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3675 } else {
3676 // Start saving edgeTypes
3677 getApp()->beginWaitCursor();
3678 try {
3679 myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3680 // write info
3681 WRITE_MESSAGE(TL("EdgeType saved in '") + neteditOptions.getString("edgetypes-file") + "'");
3682 } catch (IOError& e) {
3683 // open error message box
3684 FXMessageBox::error(this, MBOX_OK, TL("Saving edgeTypes failed!"), "%s", e.what());
3685 }
3687 getApp()->endWaitCursor();
3688 }
3689 return 1;
3690}
3691
3692
3693long
3694GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3695 // check if net exist and there are edge types
3696 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3697 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3698 } else {
3699 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3700 }
3701 return 1;
3702}
3703
3704
3705long
3707 // get option container
3708 auto& neteditOptions = OptionsCont::getOptions();
3709 // get TLS file
3710 const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, true);
3711 // check tat file is valid
3712 if (!TLSFile.empty()) {
3713 // change value of "tls-file"
3714 neteditOptions.resetWritable();
3715 neteditOptions.set("tls-file", TLSFile);
3716 // set focus again in viewNet
3717 myViewNet->setFocus();
3718 // save TLS Programs
3719 return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3720 } else {
3721 return 1;
3722 }
3723}
3724
3725
3726long
3727GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3728 // get option container
3729 auto& neteditOptions = OptionsCont::getOptions();
3730 // get network file file
3731 const auto edgeTypesFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, true);
3732 // check tat file is valid
3733 if (!edgeTypesFile.empty()) {
3734 // change value of "edgetypes-file"
3735 neteditOptions.resetWritable();
3736 neteditOptions.set("edgetypes-file", edgeTypesFile);
3737 // set focus again in viewNet
3738 myViewNet->setFocus();
3739 // save edgeTypes
3740 return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3741 } else {
3742 return 1;
3743 }
3744}
3745
3746
3747long
3748GNEApplicationWindow::onUpdSaveEdgeTypesAs(FXObject* sender, FXSelector, void*) {
3749 // check if net exist and there are edge types
3750 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3751 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3752 } else {
3753 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3754 }
3755 return 1;
3756}
3757
3758
3759long
3761 // get file
3762 const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, false);
3763 // check file
3764 if (!additionalFile.empty()) {
3765 // declare overwrite flag
3766 bool overwriteElements = false;
3767 // check if open question dialog box
3768 if (myNet->getSavingFilesHandler()->existAdditionalFilename(additionalFile)) {
3769 // open overwrite dialog
3770 GNEKeepElementsDialog keepElementsDialog(this, "additional");
3771 // continue depending of result
3772 if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::CANCEL) {
3773 // abort load
3774 return 0;
3775 } else if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::OVERWRITE) {
3776 // enable overwriteElements
3777 overwriteElements = true;
3778 }
3779 }
3780 // flag for save current saving status
3781 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3782 // disable validation for additionals
3783 XMLSubSys::setValidation("never", "auto", "auto");
3784 // Create additional handler
3785 GNEGeneralHandler generalHandler(myNet, additionalFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, overwriteElements);
3786 // begin undoList operation
3787 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("load additionals from '") + additionalFile + "'");
3788 // Run parser
3789 if (!generalHandler.parse()) {
3790 // write error
3791 WRITE_ERROR(TL("Loading of additional file failed: ") + additionalFile);
3792 } else {
3793 // write info
3794 WRITE_MESSAGE(TL("Loading of additional file successfully: ") + additionalFile);
3795 // enable save if there is errors loading additionals
3796 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3798 }
3799 }
3800 // end undoList operation
3801 myUndoList->end();
3802 // restore validation for additionals
3803 XMLSubSys::setValidation("auto", "auto", "auto");
3804 // check if clear undoList
3806 myUndoList->clear();
3807 }
3808 update();
3809 }
3810 return 1;
3811}
3812
3813
3814long
3816 // disable validation for additionals
3817 XMLSubSys::setValidation("never", "auto", "auto");
3818 // begin undoList operation
3819 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
3820 // clear additionals
3822 // iterate over all additional files
3823 for (const auto& savingFile : myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames()) {
3824 // Create general handler
3825 GNEGeneralHandler generalHandler(myNet, savingFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, true);
3826 // Run parser
3827 if (!generalHandler.parse()) {
3828 WRITE_ERROR(TLF("Reloading of additional file '%' failed.", savingFile));
3829 }
3830
3831 }
3832 // end undoList operation
3833 myUndoList->end();
3834 // restore validation for additionals
3835 XMLSubSys::setValidation("auto", "auto", "auto");
3836 // check if clear undoList
3838 myUndoList->clear();
3839 }
3840 update();
3841 return 1;
3842}
3843
3844
3845long
3846GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
3847 if (myViewNet == nullptr) {
3848 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3849 } else if (myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames().empty()) {
3850 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3851 } else {
3852 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3853 }
3854}
3855
3856
3857long
3858GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
3859 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
3860 // get option container
3861 auto& neteditOptions = OptionsCont::getOptions();
3862 if (myNet->getSavingStatus()->isAdditionalsSaved() && !neteditOptions.getBool("force-saving")) {
3863 // nothing to save
3864 return 1;
3865 }
3866 // check if we have to set the output filename
3867 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getAdditionalFilenames().empty()) {
3868 savingFileHandler->updateAdditionalEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".add.xml");
3869 }
3870 // check if we have to open save as dialog
3871 if (savingFileHandler->getAdditionalFilenames().empty()) {
3872 // choose file to save
3873 return onCmdSaveAdditionalElementsUnified(sender, sel, ptr);
3874 } else {
3875 // always recompute before saving
3876 myNet->computeNetwork(this);
3877 try {
3878 // compute before saving (for detectors positions)
3879 myNet->computeNetwork(this);
3880 // save additionals
3881 const bool savingResult = myNet->saveAdditionals();
3882 // show info
3883 if (savingResult) {
3884 WRITE_MESSAGE(TL("Additionals saved"));
3885 return 1;
3886 } else {
3887 WRITE_MESSAGE(TL("Saving additional aborted"));
3888 return 0;
3889 }
3890 } catch (IOError& e) {
3891 // open error message box
3892 FXMessageBox::error(this, MBOX_OK, TL("Saving additionals failed!"), "%s", e.what());
3893 }
3894 return 0;
3895 }
3896}
3897
3898
3899long
3900GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
3901 // get option container
3902 auto& neteditOptions = OptionsCont::getOptions();
3903 // declare current folder
3904 FXString currentFolder = gCurrentFolder;
3905 // set current folder
3906 if (neteditOptions.getString("configuration-file").size() > 0) {
3907 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3908 } else if (neteditOptions.getString("net-file").size() > 0) {
3909 currentFolder = getFolder(neteditOptions.getString("net-file"));
3910 }
3911 // get additional file
3912 const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3913 // check that file is valid
3914 if (!additionalFile.empty()) {
3915 // begin undoList operation
3916 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFile));
3917 // iterate over all demand elementes and change file
3918 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
3919 for (const auto& additionalElement : additionalElementTag.second) {
3920 additionalElement.second->setAttribute(GNE_ATTR_ADDITIONAL_FILE, additionalFile, myUndoList);
3921 }
3922 }
3923 // end undoList operation
3924 myUndoList->end();
3925 // save additionals
3926 return onCmdSaveAdditionalElements(sender, sel, ptr);
3927 } else {
3928 return 0;
3929 }
3930}
3931
3932
3933long
3935 // declare current folder
3936 FXString currentFolder = gCurrentFolder;
3937 // get juPedSim file
3938 const auto juPedSimFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3939 // check that file is valid
3940 if (!juPedSimFile.empty()) {
3941 try {
3942 // get all jupedsims
3943 std::unordered_set<const GNEAttributeCarrier*> juPedSimElements;
3944 for (const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3945 if (myTagPropertiesDatabase->getTagProperty(additionalTag.first, true)->isJuPedSimElement()) {
3946 for (const auto& additional : additionalTag.second) {
3947 juPedSimElements.insert(additional.second);
3948 }
3949 }
3950 }
3951 // save additionals
3952 const bool savingResult = myNet->saveJuPedSimElements(juPedSimElements, juPedSimFile);
3953 // set focus again in viewNet
3954 myViewNet->setFocus();
3955 // show info
3956 if (savingResult) {
3957 WRITE_MESSAGE(TL("JuPedSim elements saved"));
3958 return 1;
3959 } else {
3960 WRITE_MESSAGE(TL("Saving JuPedSim aborted"));
3961
3962 return 0;
3963 }
3964 } catch (IOError& e) {
3965 // open error message box
3966 FXMessageBox::error(this, MBOX_OK, TL("Saving JuPedSim elements failed!"), "%s", e.what());
3967 }
3968 }
3969 return 0;
3970}
3971
3972
3973long
3975 // get file
3976 const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, false);
3977 // check file
3978 if (!routeFile.empty()) {
3979 // declare overwrite flag
3980 bool overwriteElements = false;
3981 // check if open question dialog box
3982 if (myNet->getSavingFilesHandler()->existDemandFilename(routeFile)) {
3983 // open overwrite dialog
3984 GNEKeepElementsDialog keepElementsDialog(this, "route");
3985 // continue depending of result
3986 if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::CANCEL) {
3987 // abort load
3988 return 0;
3989 } else if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::OVERWRITE) {
3990 // enable overwriteElements
3991 overwriteElements = true;
3992 }
3993 }
3994 // save previous demand element status saving
3995 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
3996 // disable validation for additionals
3997 XMLSubSys::setValidation("never", "auto", "auto");
3998 // Create generic handler
3999 GNEGeneralHandler handler(myNet, routeFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, overwriteElements);
4000 // begin undoList operation
4001 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + routeFile + "'");
4002 // Run parser for additionals
4003 if (!handler.parse()) {
4004 // write error
4005 WRITE_ERROR(TL("Loading of route file failed: ") + routeFile);
4006 } else {
4007 // show info
4008 WRITE_MESSAGE(TL("Loading of route file successfully: ") + routeFile);
4009 // enable demand elements if there is an error creating element
4010 if (previouslySaved && !handler.isErrorCreatingElement()) {
4012 }
4013 }
4014 // end undoList operation
4015 myUndoList->end();
4016 // restore validation
4017 XMLSubSys::setValidation("auto", "auto", "auto");
4018 // check if clear undoList
4020 myUndoList->clear();
4021 }
4022 update();
4023 }
4024 return 1;
4025}
4026
4027
4028long
4030 // disable validation for additionals
4031 XMLSubSys::setValidation("never", "auto", "auto");
4032 // begin undoList operation
4033 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4034 // clear demand elements
4036 // iterate over all demand elements
4037 for (const auto& demandFileName : myNet->getSavingFilesHandler()->getDemandFilenames()) {
4038 // Create handler
4039 GNEGeneralHandler handler(myNet, demandFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false, true);
4040 // Run parser for additionals
4041 if (!handler.parse()) {
4042 WRITE_ERROR(TLF("Reloading of route file '%'failed.", demandFileName));
4043 }
4044 }
4045 // end undoList operation and update view
4046 myUndoList->end();
4047 // restore validation for demand
4048 XMLSubSys::setValidation("auto", "auto", "auto");
4049 // check if clear undoList
4051 myUndoList->clear();
4052 }
4053 update();
4054 return 1;
4055}
4056
4057
4058long
4059GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4060 if (myViewNet == nullptr) {
4061 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4062 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDemandFilenames().empty()) {
4063 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4064 } else {
4065 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4066 }
4067}
4068
4069
4070long
4071GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4072 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4073 // get option container
4074 auto& neteditOptions = OptionsCont::getOptions();
4075 // check saving conditions
4076 if (myNet->getSavingStatus()->isDemandElementsSaved() && !neteditOptions.getBool("force-saving")) {
4077 // nothing to save
4078 return 1;
4079 }
4080 // check if we have to set the output filename
4081 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDemandFilenames().empty()) {
4082 savingFileHandler->updateDemandEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".rou.xml");
4083 }
4084 // check if we have to open save as dialog
4085 if (savingFileHandler->getDemandFilenames().empty()) {
4086 // choose file to save
4087 return onCmdSaveDemandElementsUnified(sender, sel, ptr);
4088 } else {
4089 // always recompute before saving
4090 myNet->computeNetwork(this);
4091 try {
4092 // save demand elements
4093 const bool savingResult = myNet->saveDemandElements();
4094 // show info
4095 if (savingResult) {
4096 WRITE_MESSAGE(TL("Demand elements saved"));
4097 return 1;
4098 } else {
4099 WRITE_MESSAGE(TL("Saving demand elements aborted"));
4100 return 0;
4101 }
4102 } catch (IOError& e) {
4103 // open error message box
4104 FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements failed!"), "%s", e.what());
4105 }
4106 }
4107 return 0;
4108}
4109
4110
4111long
4112GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4113 // get option container
4114 auto& neteditOptions = OptionsCont::getOptions();
4115 // declare current folder
4116 FXString currentFolder = gCurrentFolder;
4117 // set current folder
4118 if (neteditOptions.getString("configuration-file").size() > 0) {
4119 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4120 } else if (neteditOptions.getString("net-file").size() > 0) {
4121 currentFolder = getFolder(neteditOptions.getString("net-file"));
4122 }
4123 // get route file
4124 const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, true);
4125 // check that file is correct
4126 if (!routeFile.empty()) {
4127 // begin undoList operation
4128 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'", routeFile));
4129 // iterate over all demand elementes and change file
4130 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4131 for (const auto& demandElement : demandElementTag.second) {
4132 demandElement.second->setAttribute(GNE_ATTR_DEMAND_FILE, routeFile, myUndoList);
4133 }
4134 }
4135 // end undoList operation
4136 myUndoList->end();
4137 // save demand elements
4138 return onCmdSaveDemandElements(sender, sel, ptr);
4139 } else {
4140 return 0;
4141 }
4142}
4143
4144
4145long
4146GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4147 // get file
4148 const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, false);
4149 // check file
4150 if (!dataFile.empty()) {
4151 // declare overwrite flag
4152 bool overwriteElements = false;
4153 // check if open question dialog box
4154 if (myNet->getSavingFilesHandler()->existDataFilename(dataFile)) {
4155 // open overwrite dialog
4156 GNEKeepElementsDialog keepElementsDialog(this, "data");
4157 // continue depending of result
4158 if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::CANCEL) {
4159 // abort load
4160 return 0;
4161 } else if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::OVERWRITE) {
4162 // enable overwriteElements
4163 overwriteElements = true;
4164 }
4165 }
4166 // save previous demand element status saving
4167 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4168 // disable update data
4170 // disable validation for data elements
4171 XMLSubSys::setValidation("never", "auto", "auto");
4172 // Create data handler
4173 GNEDataHandler dataHandler(myNet, dataFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, overwriteElements);
4174 // begin undoList operation
4175 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + dataFile + "'");
4176 // Run data parser
4177 if (!dataHandler.parse()) {
4178 // write error
4179 WRITE_ERROR(TL("Loading of data file failed: ") + dataFile);
4180 } else {
4181 // show info
4182 WRITE_MESSAGE(TL("Loading of data file successfully: ") + dataFile);
4183 // enable demand elements if there is an error creating element
4184 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4186 }
4187 }
4188 // end undoList operation
4189 myUndoList->end();
4190 // enable update data
4192 // restore validation for data
4193 XMLSubSys::setValidation("auto", "auto", "auto");
4194 // check if clear undoList
4196 myUndoList->clear();
4197 }
4198 update();
4199 }
4200 return 1;
4201}
4202
4203
4204long
4206 // disable update data
4208 // disable validation for additionals
4209 XMLSubSys::setValidation("never", "auto", "auto");
4210 // begin undoList operation
4211 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4212 // clear data elements
4214 // iterate over all data elements
4215 for (const auto& savingFile : myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames()) {
4216 // Create additional handler
4217 GNEDataHandler dataHandler(myNet, savingFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, false);
4218 // Run data parser
4219 if (!dataHandler.parse()) {
4220 WRITE_ERROR(TL("Reloading of data file failed: ") + savingFile);
4221 }
4222 }
4223 // restore validation for data
4224 XMLSubSys::setValidation("auto", "auto", "auto");
4225 // end undoList operation and update view
4226 myUndoList->end();
4227 // enable update data
4229 // check if clear undoList
4231 myUndoList->clear();
4232 }
4233 update();
4234 return 1;
4235}
4236
4237
4238long
4239GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4240 if (myViewNet == nullptr) {
4241 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4242 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames().empty()) {
4243 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4244 } else {
4245 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4246 }
4247}
4248
4249
4250long
4251GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4252 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4253 // get option container
4254 auto& neteditOptions = OptionsCont::getOptions();
4255 // check saving conditions
4256 if (myNet->getSavingStatus()->isDataElementsSaved() && !neteditOptions.getBool("force-saving")) {
4257 // nothing to save
4258 return 1;
4259 }
4260 // check if we have to set the output filename
4261 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDataFilenames().empty()) {
4262 savingFileHandler->updateDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".xml");
4263 }
4264 // check if we have to open save as dialog
4265 if (savingFileHandler->getDataFilenames().empty()) {
4266 return onCmdSaveDataElementsUnified(sender, sel, ptr);
4267 } else {
4268 try {
4269 // save data elements
4270 const bool savingResult = myNet->saveDataElements();
4271 // show info
4272 if (savingResult) {
4273 WRITE_MESSAGE(TL("Data elements saved"));
4274 return 1;
4275 } else {
4276 WRITE_MESSAGE(TL("Saving demand elements aborted"));
4277 return 0;
4278 }
4279 } catch (IOError& e) {
4280 // open error message box
4281 FXMessageBox::error(this, MBOX_OK, TL("Saving data elements failed!"), "%s", e.what());
4282 }
4283 }
4284 return 0;
4285}
4286
4287
4288long
4289GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4290 // get option container
4291 auto& neteditOptions = OptionsCont::getOptions();
4292 // declare current folder
4293 FXString currentFolder = gCurrentFolder;
4294 // set current folder
4295 if (neteditOptions.getString("configuration-file").size() > 0) {
4296 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4297 } else if (neteditOptions.getString("net-file").size() > 0) {
4298 currentFolder = getFolder(neteditOptions.getString("net-file"));
4299 }
4300 // get data file
4301 const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, true);
4302 // check that file is correct
4303 if (!dataFile.empty()) {
4304 // begin undoList operation
4305 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFile));
4306 // iterate over all demand elementes and change file
4307 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4308 dataSet.second->setAttribute(GNE_ATTR_DATA_FILE, dataFile, myUndoList);
4309 }
4310 // end undoList operation
4311 myUndoList->end();
4312 // save data elements
4313 return onCmdSaveDataElements(sender, sel, ptr);
4314 } else {
4315 return 0;
4316 }
4317}
4318
4319
4320long
4322 // get file
4323 const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, false);
4324 // check file
4325 if (!meanDataFile.empty()) {
4326 // declare overwrite flag
4327 bool overwriteElements = false;
4328 // check if open question dialog box
4329 if (myNet->getSavingFilesHandler()->existMeanDataFilename(meanDataFile)) {
4330 // open overwrite dialog
4331 GNEKeepElementsDialog keepElementsDialog(this, "meanData");
4332 // continue depending of result
4333 if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::CANCEL) {
4334 // abort load
4335 return 0;
4336 } else if (keepElementsDialog.getResult() == GNEKeepElementsDialog::Result::OVERWRITE) {
4337 // enable overwriteElements
4338 overwriteElements = true;
4339 }
4340 }
4341 // save previous demand element status saving
4342 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4343 // disable validation for meanDatas
4344 XMLSubSys::setValidation("never", "auto", "auto");
4345 // Create meanData handler
4346 GNEGeneralHandler generalHandler(myNet, meanDataFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, overwriteElements);
4347 // begin undoList operation
4348 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("load meanDatas from '") + meanDataFile + "'");
4349 // Run parser
4350 if (!generalHandler.parse()) {
4351 // write error
4352 WRITE_ERROR(TL("Loading of meandata file failed: ") + meanDataFile);
4353 } else {
4354 // show info
4355 WRITE_MESSAGE(TL("Loading of meandata file successfully: ") + meanDataFile);
4356 // enable demand elements if there is an error creating element
4357 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4359 }
4360 }
4361 // end undoList operation
4362 myUndoList->end();
4363 // restore validation for meanDatas
4364 XMLSubSys::setValidation("auto", "auto", "auto");
4365 // check if clear undoList
4367 myUndoList->clear();
4368 }
4369 update();
4370 }
4371 return 1;
4372}
4373
4374
4375long
4377 // disable validation for meanDatas
4378 XMLSubSys::setValidation("never", "auto", "auto");
4379 // begin undoList operation
4381 // clear meanDatas
4383 // iterate over all data elements
4384 for (const auto& savingFile : myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames()) {
4385 // Create general handler
4386 GNEGeneralHandler generalHandler(myNet, savingFile, myAllowUndoRedoLoading ? myAllowUndoRedo : false, true);
4387 // Run parser
4388 if (!generalHandler.parse()) {
4389 WRITE_MESSAGE(TL("Loading of meandata file successfully: ") + savingFile);
4390 }
4391 }
4392 // end undoList operation and update view
4393 myUndoList->end();
4394 // restore validation for meanDatas
4395 XMLSubSys::setValidation("auto", "auto", "auto");
4396 // check if clear undoList
4398 myUndoList->clear();
4399 }
4400 update();
4401 return 1;
4402}
4403
4404
4405long
4406GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4407 if (myViewNet == nullptr) {
4408 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4409 } else if (myViewNet->getNet()->getSavingFilesHandler()->getMeanDataFilenames().empty()) {
4410 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4411 } else {
4412 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4413 }
4414}
4415
4416
4417long
4418GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4419 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4420 // get option container
4421 auto& neteditOptions = OptionsCont::getOptions();
4422 // check saving conditions
4423 if (myNet->getSavingStatus()->isMeanDatasSaved() && !neteditOptions.getBool("force-saving")) {
4424 // nothing to save
4425 return 1;
4426 }
4427 // check if we have to set the output filename
4428 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getMeanDataFilenames().empty()) {
4429 savingFileHandler->updateMeanDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + "add.xml");
4430 }
4431 // check if we have to open save as dialog
4432 if (savingFileHandler->getMeanDataFilenames().empty()) {
4433 return onCmdSaveMeanDataElementsUnified(sender, sel, ptr);
4434 } else {
4435 try {
4436 // compute before saving
4437 myNet->computeNetwork(this);
4438 // save demand elements
4439 const bool savingResult = myNet->saveMeanDatas();
4440 // show info
4441 if (savingResult) {
4442 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4443 return 1;
4444 } else {
4445 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4446 return 0;
4447 }
4448 } catch (IOError& e) {
4449 // open error message box
4450 FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements failed!"), "%s", e.what());
4451 }
4452 }
4453 return 0;
4454}
4455
4456
4457long
4458GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4459 // get option container
4460 auto& neteditOptions = OptionsCont::getOptions();
4461 // declare current folder
4462 FXString currentFolder = gCurrentFolder;
4463 // set current folder
4464 if (neteditOptions.getString("configuration-file").size() > 0) {
4465 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4466 } else if (neteditOptions.getString("net-file").size() > 0) {
4467 currentFolder = getFolder(neteditOptions.getString("net-file"));
4468 }
4469 // get meanData file
4470 const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, true);
4471 // check that file is valid
4472 if (!meanDataFile.empty()) {
4473 // begin undoList operation
4474 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFile));
4475 // iterate over all demand elementes and change file
4476 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4477 for (const auto& meanData : meanDataTag.second) {
4478 meanData.second->setAttribute(GNE_ATTR_MEANDATA_FILE, meanDataFile, myUndoList);
4479 }
4480 }
4481 // end undoList operation
4482 myUndoList->end();
4483 // save meanDatas
4484 return onCmdSaveMeanDataElements(sender, sel, ptr);
4485 } else {
4486 return 0;
4487 }
4488}
4489
4490
4491bool
4493 if (myNet) {
4494 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork();
4495 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements();
4496 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements();
4497 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements();
4498 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements();
4499 // first check if abort saving
4500 if ((saveNetwork == GNENetHelper::SavingStatus::AskSaving::ABORT) ||
4501 (saveAdditionalElements == GNENetHelper::SavingStatus::AskSaving::ABORT) ||
4502 (saveDemandElements == GNENetHelper::SavingStatus::AskSaving::ABORT) ||
4503 (saveDataElements == GNENetHelper::SavingStatus::AskSaving::ABORT) ||
4504 (saveMeanDataElements == GNENetHelper::SavingStatus::AskSaving::ABORT)) {
4505 return false;
4506 }
4507 // save every type of file
4508 if ((saveNetwork == GNENetHelper::SavingStatus::AskSaving::SAVE) &&
4509 (onCmdSaveNetwork(nullptr, 0, nullptr) != 1)) {
4510 return false;
4511 }
4512 if ((saveAdditionalElements == GNENetHelper::SavingStatus::AskSaving::SAVE) &&
4513 (onCmdSaveAdditionalElements(nullptr, 0, nullptr) != 1)) {
4514 return false;
4515 }
4516 if ((saveDemandElements == GNENetHelper::SavingStatus::AskSaving::SAVE) &&
4517 (onCmdSaveDemandElements(nullptr, 0, nullptr) != 1)) {
4518 return false;
4519 }
4520 if ((saveDataElements == GNENetHelper::SavingStatus::AskSaving::SAVE) &&
4521 (onCmdSaveDataElements(nullptr, 0, nullptr) != 1)) {
4522 return false;
4523 }
4524 if ((saveMeanDataElements == GNENetHelper::SavingStatus::AskSaving::SAVE) &&
4525 (onCmdSaveMeanDataElements(nullptr, 0, nullptr) != 1)) {
4526 return false;
4527 }
4528 // restore focus in viewNet
4529 myViewNet->setFocus();
4530 // clear undo list
4531 clearUndoList();
4532 // all saved, then continue
4533 return true;
4534 } else {
4535 // nothing to do, then continue
4536 return true;
4537 }
4538}
4539
4540
4541void
4542GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4543 // obtain netedit option container
4544 auto& neteditOptions = OptionsCont::getOptions();
4546 // set network
4547 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4548 // set routes
4549 if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4550 mySumoOptions.resetDefault("route-files");
4551 } else {
4552 mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4553 }
4554 // set SumoOptions depending of additionalFiles and meanData files
4555 if (ignoreAdditionals) {
4556 if (neteditOptions.getString("meandata-files").empty()) {
4557 mySumoOptions.resetDefault("additional-files");
4558 } else {
4559 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4560 }
4561 } else {
4562 if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4563 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4564 } else if (neteditOptions.getString("additional-files").size() > 0) {
4565 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4566 } else if (neteditOptions.getString("meandata-files").size() > 0) {
4567 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4568 } else {
4569 mySumoOptions.resetDefault("additional-files");
4570 }
4571 }
4572}
4573
4574
4575FXString
4576GNEApplicationWindow::getFolder(const std::string& folder) const {
4577 // declare folder
4578 std::string newFolder = folder;
4579 // declare stop flag
4580 bool stop = false;
4581 // continue while stop is false
4582 while (!stop) {
4583 if (newFolder.empty()) {
4584 // new folder empty, then stop
4585 stop = true;
4586 } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4587 (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4588 // removed file, then stop
4589 stop = true;
4590 } else {
4591 newFolder.pop_back();
4592 }
4593 }
4594 // if is empty, return gCurrentFolder
4595 if (newFolder.empty()) {
4596 return gCurrentFolder;
4597 }
4598 return FXString(newFolder.c_str());
4599}
4600
4601
4602void
4604 // check that view exists
4605 if (myViewNet) {
4607 }
4608 // update require recomputing
4610}
4611
4612
4613void
4615 // remove lock hotkeys
4617 // check supermode
4618 if (supermode == Supermode::NETWORK) {
4619 // menu commands
4623 // lock
4627 // processing
4632 } else if (supermode == Supermode::DEMAND) {
4633 // menu commands
4637 // lock
4641 // processing
4646 } else if (supermode == Supermode::DATA) {
4647 // menu commands
4651 // lock
4655 // processing
4660 } else {
4661 // menu commands
4666 // lock
4670 // processing
4674 }
4675 // continue depending of view
4676 if (myViewNet) {
4680 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4683 }
4684 }
4685}
4686
4687
4688bool
4692
4693
4694void
4698
4699
4700void
4702 myUndoRedoListEnabled = reason;
4703}
4704
4705
4706const std::string&
4710
4711
4712void
4714 if (myViewNet) {
4715 // destroy Popup (to avoid crashes)
4717 }
4718 // clear undo list and return true to continue with closing/reload
4719 myUndoList->clear();
4720}
4721
4722
4727
4728
4733
4734
4739
4740
4745
4746
4751
4752
4757
4758
4763
4764
4765void
4767 // get option container
4768 auto& neteditOptions = OptionsCont::getOptions();
4769 // get additional files
4770 const auto& additionalFiles = neteditOptions.getStringVector("additional-files");
4771 // check if ignore loading of additional files
4772 const auto ignoreLoadAdditionalFiles = neteditOptions.getBool("ignore.additionalelements");
4773 // check conditions
4774 if (ignoreLoadAdditionalFiles) {
4775 // reset flag
4776 neteditOptions.resetWritable();
4777 neteditOptions.set("ignore.additionalelements", "false");
4778 // also reset route files in both containers
4779 neteditOptions.resetDefault("additional-files");
4780 mySumoOptions.resetDefault("additional-files");
4781 } else if (myNet && (additionalFiles.size() > 0)) {
4782 // update saving files handler
4783 myNet->getSavingFilesHandler()->updateAdditionalEmptyFilenames(additionalFiles.front());
4784 // disable validation for additionals
4785 XMLSubSys::setValidation("never", "auto", "auto");
4786 // begin undolist
4787 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4788 // use this flag for mark all elements as saved after loading, if it was sucessfully
4789 bool setSaved = additionalFiles.size() == 1;
4790 // iterate over every additional file
4791 for (const auto& file : additionalFiles) {
4792 // check if ignore missing imputs
4793 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4794 WRITE_MESSAGE(TL("loading additionals from '") + file + "'");
4795 // declare general handler
4796 GNEGeneralHandler handler(myNet, file, myAllowUndoRedoLoading ? myAllowUndoRedo : false, false);
4797 // Run parser
4798 if (!handler.parse()) {
4799 WRITE_ERRORF(TL("Loading of % failed."), file);
4800 }
4801 setSaved &= !handler.isErrorCreatingElement();
4802 // set additionals in SumoConfig
4803 setInputInSumoOptions(false, false);
4804 }
4805 }
4806 // end undo list
4807 myUndoList->end();
4808 // disable validation for additionals
4809 XMLSubSys::setValidation("auto", "auto", "auto");
4810 if (setSaved) {
4812 }
4813 // check if clear undoList
4815 myUndoList->clear();
4816 }
4817 }
4818}
4819
4820
4821void
4823 // get option container
4824 auto& neteditOptions = OptionsCont::getOptions();
4825 // get demand files
4826 const auto& demandFiles = neteditOptions.getStringVector("route-files");
4827 // check if ignore loading of additional files
4828 const auto ignoreLoadDemandFiles = neteditOptions.getBool("ignore.routeelements");
4829 // check conditions
4830 if (ignoreLoadDemandFiles) {
4831 // reset flag
4832 neteditOptions.resetWritable();
4833 neteditOptions.set("ignore.routeelements", "false");
4834 // also reset route files in both containers
4835 neteditOptions.resetDefault("route-files");
4836 mySumoOptions.resetDefault("route-files");
4837 } else if (myNet && (demandFiles.size() > 0)) {
4838 // update saving files handler
4840 // disable validation for additionals
4841 XMLSubSys::setValidation("never", "auto", "auto");
4842 // begin undolist
4843 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4844 // use this flag for mark all elements as saved after loading, if it was sucessfully
4845 bool setSaved = demandFiles.size() == 1;
4846 // iterate over every demand file
4847 for (const auto& file : demandFiles) {
4848 // check if ignore missing imputs
4849 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4850 WRITE_MESSAGE(TL("loading demand elements from '") + file + "'");
4851 // declare general handler
4852 GNEGeneralHandler handler(myNet, file, myAllowUndoRedoLoading ? myAllowUndoRedo : false, false);
4853 // Run parser
4854 if (!handler.parse()) {
4855 WRITE_ERRORF(TL("Loading of % failed."), file);
4856 }
4857 setSaved &= !handler.isErrorCreatingElement();
4858 // set additionals in SumoConfig
4859 setInputInSumoOptions(false, false);
4860 }
4861 }
4862 // end undo list
4863 myUndoList->end();
4864 // disable validation for additionals
4865 XMLSubSys::setValidation("auto", "auto", "auto");
4866 if (setSaved) {
4868 }
4869 // check if clear undoList
4871 myUndoList->clear();
4872 }
4873 }
4874}
4875
4876
4877void
4879 // get option container
4880 auto& neteditOptions = OptionsCont::getOptions();
4881 // get data files
4882 const auto& dataFiles = neteditOptions.getStringVector("data-files");
4883 if (myNet && (dataFiles.size() > 0)) {
4884 // update saving files handler
4886 // disable validation for additionals
4887 XMLSubSys::setValidation("never", "auto", "auto");
4888 // begin undolist
4889 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading data elements from '") + toString(dataFiles) + "'");
4890 // use this flag for mark all elements as saved after loading, if it was sucessfully
4891 bool setSaved = dataFiles.size() == 1;
4892 // iterate over every data file
4893 for (const auto& file : dataFiles) {
4894 // check if ignore missing imputs
4895 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4896 WRITE_MESSAGE(TL("loading data elements from '") + file + "'");
4897 // declare general handler
4898 GNEDataHandler handler(myNet, file, myAllowUndoRedoLoading ? myAllowUndoRedo : false, false);
4899 // Run parser
4900 if (!handler.parse()) {
4901 WRITE_ERRORF(TL("Loading of % failed."), file);
4902 }
4903 setSaved &= !handler.isErrorCreatingElement();
4904 // set additionals in SumoConfig
4905 setInputInSumoOptions(false, false);
4906 }
4907 }
4908 // end undo list
4909 myUndoList->end();
4910 // disable validation for additionals
4911 XMLSubSys::setValidation("auto", "auto", "auto");
4912 if (setSaved) {
4914 }
4915 // check if clear undoList
4917 myUndoList->clear();
4918 }
4919 }
4920}
4921
4922
4923void
4925 // get option container
4926 auto& neteditOptions = OptionsCont::getOptions();
4927 // get meanData files
4928 const auto& meanDataFiles = neteditOptions.getStringVector("meandata-files");
4929 if (myNet && (meanDataFiles.size() > 0)) {
4930 // update saving files handler
4931 myNet->getSavingFilesHandler()->updateMeanDataEmptyFilenames(meanDataFiles.front());
4932 // disable validation for additionals
4933 XMLSubSys::setValidation("never", "auto", "auto");
4934 // begin undolist
4935 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading meanData elements from '") + toString(meanDataFiles) + "'");
4936 // use this flag for mark all elements as saved after loading, if it was sucessfully
4937 bool setSaved = meanDataFiles.size() == 1;
4938 // iterate over every meanData file
4939 for (const auto& file : meanDataFiles) {
4940 // check if ignore missing imputs
4941 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4942 WRITE_MESSAGE(TL("loading meanData elements from '") + file + "'");
4943 // declare general handler
4944 GNEGeneralHandler handler(myNet, file, myAllowUndoRedoLoading ? myAllowUndoRedo : false, false);
4945 // Run parser
4946 if (!handler.parse()) {
4947 WRITE_ERRORF(TL("Loading of % failed."), file);
4948 }
4949 setSaved &= !handler.isErrorCreatingElement();
4950 // set additionals in SumoConfig
4951 setInputInSumoOptions(false, false);
4952 }
4953 }
4954 // end undo list
4955 myUndoList->end();
4956 // disable validation for additionals
4957 XMLSubSys::setValidation("auto", "auto", "auto");
4958 if (setSaved) {
4960 }
4961 // check if clear undoList
4963 myUndoList->clear();
4964 }
4965 }
4966}
4967
4968
4973
4974
4975bool
4977 if (myInternalTest == nullptr) {
4978 return true;
4979 } else if (obj == myInternalTest) {
4980 return true;
4981 } else {
4982 return false;
4983 }
4984}
4985
4986// ---------------------------------------------------------------------------
4987// GNEApplicationWindow - protected methods
4988// ---------------------------------------------------------------------------
4989#ifdef _MSC_VER
4990#pragma warning(push)
4991#pragma warning(disable: 4355) // mask warning about "this" in initializers
4992#endif
4994 myToolbarsGrip(this),
4995 myMenuBarFile(this),
4996 myFileMenuCommands(this),
4997 myModesMenuCommands(this),
4998 myEditMenuCommands(this),
4999 myLockMenuCommands(this),
5000 myProcessingMenuCommands(this),
5001 myLocateMenuCommands(this),
5002 myToolsMenuCommands(this),
5003 myWindowsMenuCommands(this),
5004 myHelpMenuCommands(this),
5005 mySupermodeCommands(this) {
5006}
5007#ifdef _MSC_VER
5008#pragma warning(pop)
5009#endif
5010
5011
5012long
5013GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5014 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5015 if (handled == 0 && myMDIClient->numChildren() > 0) {
5016 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5017 if (w != nullptr) {
5018 w->onKeyPress(nullptr, sel, eventData);
5019 }
5020 }
5021 return 0;
5022}
5023
5024
5025long
5026GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5027 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5028 if (handled == 0 && myMDIClient->numChildren() > 0) {
5029 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5030 if (w != nullptr) {
5031 w->onKeyRelease(nullptr, sel, eventData);
5032 }
5033 }
5034 return 0;
5035}
5036
5037
5038/****************************************************************************/
FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[]
@ DATA_SELECT
mode for selecting data elements
@ DATA_INSPECT
mode for inspecting data elements
@ DATA_DELETE
mode for deleting data elements
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ NETWORK_SELECT
mode for selecting network elements
@ NETWORK_INSPECT
mode for inspecting network elements
@ NETWORK_CONNECT
mode for connecting lanes
@ DEMAND_INSPECT
mode for inspecting demand elements
@ DEMAND_DELETE
mode for deleting demand elements
@ DEMAND_SELECT
mode for selecting demand elements
@ DEMAND_MOVE
mode for moving demand elements
long long int SUMOTime
Definition GUI.h:36
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition GUIAppEnum.h:847
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:761
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition GUIAppEnum.h:272
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition GUIAppEnum.h:270
@ MID_GNE_LOCK_POLYGON
lock polygons
Definition GUIAppEnum.h:873
@ MID_HOTKEY_CTRL_Q_CLOSE
Main window closes.
Definition GUIAppEnum.h:115
@ MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE
compute junctions with volatile options
Definition GUIAppEnum.h:268
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition GUIAppEnum.h:204
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition GUIAppEnum.h:234
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:931
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:909
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:763
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:897
@ MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO
Open current SUMO simulation/network in netedit, or current netedit simulation/network in SUMO.
Definition GUIAppEnum.h:123
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition GUIAppEnum.h:955
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:795
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:721
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:889
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:681
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:821
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:899
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:773
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:755
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:843
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:869
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:733
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:829
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:827
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:961
@ MID_HOTKEY_CTRL_W_CLOSESIMULATION
Close simulation - ID.
Definition GUIAppEnum.h:129
@ MID_HOTKEY_ALT_2_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:147
@ MID_GNE_LOCK_ALLELEMENTS
lock all element
Definition GUIAppEnum.h:907
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition GUIAppEnum.h:242
@ MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS
Perform a single simulation step in SUMO and open Demand Elements in netedit.
Definition GUIAppEnum.h:89
@ MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND
compute Network in network mode and Demand elements in demand mode
Definition GUIAppEnum.h:238
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:947
@ MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK
Open simulation in SUMO and open network in netedit.
Definition GUIAppEnum.h:111
@ MID_GNE_LOCK_MENUTITLE
selector for LockMenuTitle
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition GUIAppEnum.h:833
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:933
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:877
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition GUIAppEnum.h:75
@ MID_HOTKEY_F9_EDIT_VIEWSCHEME
open edit scheme menu
Definition GUIAppEnum.h:246
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:921
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:276
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:911
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:717
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:729
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition GUIAppEnum.h:286
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition GUIAppEnum.h:43
@ MID_GNE_TOOLBARFILE_OPENMEANDATAELEMENTS
open meanData file
Definition GUIAppEnum.h:743
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:655
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:707
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:801
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:711
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in netedit.
Definition GUIAppEnum.h:85
@ MID_TOOLBAREDIT_LOADDEMAND
load demand in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:683
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:919
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:149
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition GUIAppEnum.h:230
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition GUIAppEnum.h:208
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition GUIAppEnum.h:759
@ MID_HOTKEY_CTRL_R_RELOAD
Reload the previously loaded simulation.
Definition GUIAppEnum.h:119
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in netedit.
Definition GUIAppEnum.h:117
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition GUIAppEnum.h:49
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition GUIAppEnum.h:845
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition GUIAppEnum.h:284
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition GUIAppEnum.h:248
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition GUIAppEnum.h:250
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition GUIAppEnum.h:244
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:953
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:747
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:745
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:865
@ MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALELEMENTS
Start the simulation in SUMO and open Additionals Elements in netedit.
Definition GUIAppEnum.h:83
@ MID_HOTKEY_C_MODE_CONNECT_CONTAINER
hotkey for mode connecting lanes AND container
Definition GUIAppEnum.h:45
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition GUIAppEnum.h:53
@ MID_HOTKEY_SHIFT_O_LOCATEPOI
Locate poi - button.
Definition GUIAppEnum.h:182
@ MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION
hotkey for mode editing overhead wires AND route distributions
Definition GUIAppEnum.h:73
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition GUIAppEnum.h:67
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition GUIAppEnum.h:927
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:797
@ MID_LANGUAGE_ZHT
change language to chinese (traditional)
@ MID_LANGUAGE_ES
change language to spanish
@ MID_GNE_LOCK_JPS_OBSTACLE
lock obstacles
Definition GUIAppEnum.h:879
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition GUIAppEnum.h:172
@ MID_HOTKEY_ALT_4_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:151
@ MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS
save TLS Programs as
Definition GUIAppEnum.h:727
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:949
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:757
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:841
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:737
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:835
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition GUIAppEnum.h:99
@ MID_RECENTFILE
Loads a file previously loaded.
Definition GUIAppEnum.h:318
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition GUIAppEnum.h:63
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition GUIAppEnum.h:831
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:883
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:935
@ MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW
open a new window (SUMO AND netedit)
Definition GUIAppEnum.h:218
@ MID_HOTKEY_SHIFT_V_LOCATEVEHICLE
Locate vehicle - button.
Definition GUIAppEnum.h:192
@ MID_GNE_LOCK_ADDITIONALELEMENT
lock additional elements
Definition GUIAppEnum.h:867
@ MID_LANGUAGE_HU
change language to hungarian
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:236
@ MID_HOTKEY_SHIFT_L_LOCATEPOLY
Locate polygons - button.
Definition GUIAppEnum.h:180
@ MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES
clean junctions without edges in network mode and unused routes in demand mode
Definition GUIAppEnum.h:240
@ MID_GNE_LOCK_EDGE
lock edges
Definition GUIAppEnum.h:857
@ MID_HOTKEY_ALT_1_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:145
@ MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS
Load file with TLS Programs.
Definition GUIAppEnum.h:103
@ MID_LANGUAGE_IT
change language to italian
@ MID_GNE_LOCK_ELEMENT
lock element (general, used if we press directly the menuCommand in the toolbar)
Definition GUIAppEnum.h:853
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:713
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition GUIAppEnum.h:367
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition GUIAppEnum.h:65
@ MID_TUTORIAL
tutorial button
Definition GUIAppEnum.h:659
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:895
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:799
@ MID_HOTKEY_CTRL_G_GAMINGMODE_TOGGLEGRID
Toggle Gaming mode in SUMO and grid in netedit.
Definition GUIAppEnum.h:95
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition GUIAppEnum.h:957
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:155
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition GUIAppEnum.h:346
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:57
@ MID_GNE_LOCK_CONTAINER
lock containers
Definition GUIAppEnum.h:893
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED
save data elements unified
Definition GUIAppEnum.h:739
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:823
@ MID_HOTKEY_SHIFT_J_LOCATEJUNCTION
Locate junction - button.
Definition GUIAppEnum.h:178
@ MID_HOTKEY_ALT_0_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:143
@ MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG
save netedit Config
Definition GUIAppEnum.h:210
@ MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS
save edgeTypes as
Definition GUIAppEnum.h:731
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:657
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:925
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:861
@ MID_LANGUAGE_DE
change language to german
@ MID_HOTKEY_ALT_F4_CLOSE
Main window closes.
Definition GUIAppEnum.h:163
@ MID_GNE_TOOLBARFILE_RELOADNETWORK
reload only network
Definition GUIAppEnum.h:705
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:839
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS
save Mean Datas
Definition GUIAppEnum.h:216
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition GUIAppEnum.h:264
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:837
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:951
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:775
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition GUIAppEnum.h:959
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:881
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:891
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:715
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:859
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:819
@ MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE
open Netconvert file
Definition GUIAppEnum.h:220
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition GUIAppEnum.h:107
@ MID_GNE_TOOLBARFILE_SAVENETWORK_AS
save network as
Definition GUIAppEnum.h:719
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:923
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:939
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
@ MID_LANGUAGE_JA
change language to japanese
@ MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_UNIFIED
save demand elements unified
Definition GUIAppEnum.h:735
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:661
@ MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES
open app setting dialog in SUMO and open edge type files in netedit
Definition GUIAppEnum.h:97
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition GUIAppEnum.h:290
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:222
@ MID_GNE_LOCK_PERSON
lock persons
Definition GUIAppEnum.h:885
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:863
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:157
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition GUIAppEnum.h:254
@ MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG
Edit selection in SUMO and load neteditConfig in netedit.
Definition GUIAppEnum.h:91
@ MID_HOTKEY_ENTER
hot key <ENTER> accept current operation
Definition GUIAppEnum.h:288
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition GUIAppEnum.h:741
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition GUIAppEnum.h:214
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition GUIAppEnum.h:262
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition GUIAppEnum.h:190
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition GUIAppEnum.h:232
@ MID_GNE_LOCK_TAZRELDATA
lock TAZRelDatas
Definition GUIAppEnum.h:905
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:937
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition GUIAppEnum.h:274
@ MID_GNE_AUTOMATICFILENAME
create automatic filename if it was not defined previously
@ MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK
open network in SUMO and create new empty network in netedit
Definition GUIAppEnum.h:109
@ MID_GNE_LOCK_PERSONTRIP
lock personTrips
Definition GUIAppEnum.h:887
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:725
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:266
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:825
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:709
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:929
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:817
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:723
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:855
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:875
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition GUIAppEnum.h:61
@ MID_HOTKEY_CTRL_L_SAVEASPLAINXML
save network as plain XML
Definition GUIAppEnum.h:105
@ MID_GNE_LOCK_EDGERELDATA
lock edgeRelDatas
Definition GUIAppEnum.h:903
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:901
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:793
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:871
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:298
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition GUIDesigns.h:106
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition GUIDesigns.h:340
#define GUIDesignLabelStatusBar
label used in statusBar
Definition GUIDesigns.h:282
#define GUIDesignSplitter
Definition GUIDesigns.h:474
#define GUIDesignSplitterMDI
MDI Splitter.
Definition GUIDesigns.h:477
#define GUIDesignStatusBar
design used in status bar
Definition GUIDesigns.h:446
@ MESSAGE_OCCURRED
send when a message occured
@ GLDEBUG_OCCURRED
send when a gldebug occured
@ ERROR_OCCURRED
send when a error occured
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occured
@ WARNING_OCCURRED
send when a warning occured
GUISelectedStorage gSelected
A global holder of selected objects.
FXString gCurrentFolder
The folder used as last.
@ MODEMEANDATA
@ MODEADDITIONAL
@ SUPERMODEDEMAND
@ NETEDIT_MINI
@ VCLASS_SMALL_TAXI
@ MODECREATEEDGE
@ TOOL_TURNDEFS
@ SUPERMODENETWORK
@ SUPERMODEDATA
@ TOOL_CITYBRAIN
#define WRITE_ERRORF(...)
Definition MsgHandler.h:297
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:289
#define WRITE_ERROR(msg)
Definition MsgHandler.h:296
#define TL(string)
Definition MsgHandler.h:305
#define TLF(string,...)
Definition MsgHandler.h:307
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:295
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ GNE_ATTR_MEANDATA_FILE
meanData data file
@ GNE_ATTR_DEMAND_FILE
demand demand file
@ GNE_ATTR_ADDITIONAL_FILE
additional save file
@ GNE_ATTR_DATA_FILE
data data file
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
bool isErrorCreatingElement() const
get flag for mark if a element wasn't created
bool parse()
parse
void setSelector(FXSelector sel)
set the selector
void setTarget(FXObject *tgt)
set the target
static bool isReadable(std::string path)
Checks whether the given file is readable.
static std::string getFilePath(const std::string &path)
Removes the file information from the given path.
static void resetFont()
to be called when the font context is invalidated
Definition GLHelper.cpp:670
void create()
Creates the widget.
Definition GNEAbout.cpp:83
The main window of Netedit.
bool askSaveElements()
warns about unsaved changes and gives the user the option to abort
long onCmdOpenNetgenerateDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate" button
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands
Supermode Commands.
long onCmdToggleUndoRedoLoading(FXObject *, FXSelector, void *)
called when toggle checkbox disable undo redo during loading (file)
long onCmdSaveTLSProgramsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms as is executed
FXMenuTitle * myModesMenuTitle
menu title for modes
const std::string & isUndoRedoEnabledTemporally() const
check if undo-redo is enabled temporally
void create()
Creates the main window (required by FOX)
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + J to toggle draw junction shape
GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands
Windows Menu Commands.
GNELoadThread * myLoadThread
the thread that loads the network
void enableUndoRedoTemporally()
enable undo-redo temporally (for example, after creating an edge)
void clearUndoList()
clear undo list
GNENet * myNet
we are responsible for the net
long onCmdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is executed
long onCmdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onCmdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is executed
void handleEvent_Message(GUIEvent *e)
handle event of type message
void setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes)
set input files in sumo options
long onCmdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is executed
long onCmdLoadAdditionalsInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load additionals"
long onCmdOpenTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall open TLS programs is executed
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
long onCmdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
void updateControls()
update control contents after undo/redo or recompute
long onUpdSaveMeanDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas unified is executed
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands
Lock Menu Commands.
const GNETagPropertiesDatabase * myTagPropertiesDatabase
tagProperties database
long onCmdFeedback(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->feedback
long onCmdNewNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall new network is executed
long onCmdRunTests(FXObject *, FXSelector, void *)
run tests
long onCmdSavePlainXMLAs(FXObject *, FXSelector, void *)
called when the command/FXCall save as plain xml is executed
long onCmdOpenOptionsDialog(FXObject *, FXSelector, void *)
called when user press "options" button
GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands
Help Menu Commands.
GNEApplicationWindow()
FOX needs this for static members.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
called when the command/FXCall clipboard request is executed
long onCmdToggleUndoRedo(FXObject *, FXSelector, void *)
called when toggle checkbox disable undo redo (processing)
long onCmdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is executed
long onUpdSaveNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall save network is executed
std::string myUndoRedoListEnabled
string to check if undo/redo list is enabled (a String is used to keep the disabling reason)
long onUpdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is updated
std::map< std::string, FXMenuPane * > myMenuPaneToolMaps
map with menu pane tools and strings
long onCmdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is executed
long onCmdOpenMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open meanDatas is executed
long onUpdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is updated
long onCmdClose(FXObject *, FXSelector, void *)
called when the command/FXCall close is executed
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
long onCmdToggleViewOption(FXObject *, FXSelector, void *)
toggle viewOption
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
OptionsCont myOriginalNetgenerateOptions
original netgenerate options container
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
OptionsCont myOriginalNeteditOptions
original netedit options container
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
GNEApplicationWindowHelper::ModesMenuCommands & getModesMenuCommands()
get modes Menu Commands (needed for show/hide menu commands)
long onCmdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
called if the user press the toggle time format button
long onCmdRunNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
called when run netgenerate is called
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands
Processing Menu Commands.
OptionsCont & getSumoOptions()
get SUMO options container
long computeJunctionWithVolatileOptions(const InternalTestStep::DialogTest *modalArguments)
called if the user selects Processing->compute junctions with volatile options
FXMenuPane * myToolsImportCityBrainMenu
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
get Edit Menu Commands (needed for show/hide menu commands)
void setStatusBarText(const std::string &statusBarText)
set text of the statusBar
GNEUndoList * myUndoList
the one and only undo list
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
FXMenuPane * myFileMenuDemandElements
long onCmdSmartReload(FXObject *, FXSelector, void *)
called when the command/FXCall smart reload is executed
long onCmdPaste(FXObject *, FXSelector, void *)
long onUpdPythonTool(FXObject *, FXSelector, void *)
called when the command/FXCall python tool is updated
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall open network is executed
void closeAllWindows()
this method closes all windows and deletes the current simulation *‍/
long onCmdComputePathManager(FXObject *, FXSelector, void *)
long onCmdToggleComputeNetworkData(FXObject *, FXSelector, void *)
called when toggle checkbox compute network when switching between supermodes
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
FXString getFolder(const std::string &folder) const
extract folder
GNEInternalTest * getInternalTest() const
get netedit test system
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread is executed
long onUpdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements unified is executed
long onUpdRequireRecomputing(FXObject *sender, FXSelector sel, void *ptr)
update label for require recomputing
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is executed
long onUpdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onUpdSaveDemandElements(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements is executed
OptionsCont myOriginalSumoOptions
original sumo options container
OptionsCont myNetgenerateOptions
netgenerate options container
SUMOTime getCurrentSimTime() const
get current simulation time (pure virtual but we don't need it)
long onCmdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is executed
FXMenuPane * myFileMenuMeanDataElements
long onCmdLockAllElements(FXObject *, FXSelector sel, void *)
called when user press lock all elements button
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
long onCmdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
long onCmdClearSelectionShortcut(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for clear selection
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
long onCmdProcessButton(FXObject *sender, FXSelector sel, void *arg)
called when user press a process button (or a shortcut)
GNEUndoList * getUndoList()
get pointer to undoList
long onUpdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is updated
long onUpdNeedsFrontElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs front element is executed
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
GNEUndoListDialog * getUndoListDialog()
get pointer to undoList dialog
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
long onUpdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is updated
void disableUndoRedoTemporally(const std::string &reason)
disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)
long onCmdToggleGrid(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + G to toggle grid
void loadDataElements()
load data elements
void dependentBuild()
build dependent
long onCmdEditChosen(FXObject *, FXSelector, void *)
called when the command/FXCall edit chosen is executed
long onUpdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is updated
long onCmdOpenSumoOptionsDialog(FXObject *, FXSelector, void *)
called when user press "sumo options" button
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands
Edit Menu Commands.
long onCmdSetSuperMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-supermode hotkey
bool allowInputSignals(FXObject *obj) const
check if ignore input signal (using during netedit tests)
long onCmdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is executed
long onUpdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is updated
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
void loadDemandElements()
load demand elements
void loadAdditionalElements()
load additional elements
GNEViewNet * myViewNet
pointer to current view net
long onUpdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onUpdNeedsNetworkElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs at least one network element is executed
const FXString myTitlePrefix
the prefix for the window title
long onCmdOpenAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
long onCmdSaveNetworkAs(FXObject *, FXSelector, void *)
called when the command/FXCall save network as is executed
double getTrackerInterval() const
get current tracker interval (pure virtual but we don't need it)
void fillMenuBar()
Builds the menu bar.
long onCmdFocusFrame(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for focus on frame
void loadConfiguration(const std::string &configurationFile)
starts to load a configuration
GNEApplicationWindowHelper::LockMenuCommands & getLockMenuCommands()
get lock Menu Commands
long onCmdPostprocessingNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
postprocessing netgenerate
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
long onCmdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is executed
long onUpdRequireViewNet(FXObject *sender, FXSelector sel, void *ptr)
enable or disable sender object depending if viewNet exist
long onUpdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is updated
OptionsCont & getNetgenerateOptions()
get netgenerate options container
long onCmdSaveDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements is executed
long onCmdCut(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdNewWindow(FXObject *, FXSelector, void *)
long onCmdSaveJoinedJunctionsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save joined is executed
long onCmdOpenEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall open edgeType is executed
long onCmdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save JuPedSim elements as is executed
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database
long onCmdLoadDemandInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load demand"
long onUpdLockMenuTitle(FXObject *, FXSelector sel, void *)
enable or disable lock menu title
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onUpdSaveDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements unified is executed
long onCmdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is executed
long onCmdRedo(FXObject *sender, FXSelector, void *)
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadMeanDataElements()
load meanData elements
GNEInternalTest * myInternalTest
internal test system
void loadOSM(const std::string &OSMFile)
starts to load a OSM File
long onUpdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals is executed
long onCmdOpenNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netedit config is executed
bool myAllowUndoRedoLoading
allow undo-redo loading (read from registry)
long onCmdOpenRecent(FXObject *, FXSelector, void *)
called when the command/FXCall open recent is executed
bool myAllowUndoRedo
allow undo-redo (read from registry)
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
long onUpdOpen(FXObject *, FXSelector, void *)
called when the command/FXCall on update open executed
long onCmdSetMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-mode hotkey
bool myHadDependentBuild
check if had dependent build
long onCmdBackspace(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits backspace
void updateRecomputingLabel()
update recomputing label
long onUpdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
void handleEvent_NetworkLoaded(GUIEvent *e)
handle event of type Network loaded
long onCmdCopy(FXObject *, FXSelector, void *)
long onCmdOpenSUMOGUI(FXObject *sender, FXSelector sel, void *ptr)
called if the user hints ctrl + T
long onCmdOpenDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall open demand is executed
FXMenuPane * myToolsVisualizationMenu
void loadNetwork(const std::string &networkFile)
load network
long onUpdToggleViewOption(FXObject *, FXSelector, void *)
update viewOption
GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands
Tools Menu Commands.
long onCmdUnlockAllElements(FXObject *, FXSelector sel, void *)
called when user press unlock all elements button
long onUpdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is updated
long onUpdNeedsNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall needs network is executed
long onUpdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is updated
GNEApplicationWindowHelper::ToolbarsGrip & getToolbarsGrip()
get ToolbarsGrip
long onUpdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save juPedSim as is executed
long onUpdReloadNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall network reload is executed
OptionsCont mySumoOptions
sumo options container
bool consoleOptionsLoaded()
check if console options was already loaded
long onCmdSaveDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements is executed
long onCmdOpenPythonToolDialog(FXObject *obj, FXSelector, void *)
called when user press over a tool dialog button
long onCmdLocate(FXObject *, FXSelector, void *)
called when the command/FXCall locate is executed
long onCmdDel(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits del
long onCmdHotkeys(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Hotkeys
long onCmdOpenDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open data is executed
long onCmdRunPythonTool(FXObject *obj, FXSelector, void *)
called when user run a tool
void updateSuperModeMenuCommands(const Supermode supermode)
update FXMenuCommands depending of supermode
bool myConsoleOptionsLoaded
flag for check if console options was already loaded
long onCmdSetFrontElement(FXObject *, FXSelector, void *)
called if the user call set front element
GNEUndoListDialog * myUndoListDialog
undoList dialog
long onUpdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is updated
void createNewNetwork()
create new network
long onCmdEnter(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits enter
FXCursor * getDefaultCursor()
get default cursor
long onCmdSetTemplate(FXObject *, FXSelector, void *)
GNEApplicationWindowHelper::FileMenuCommands & getFileMenuCommands()
get file Menu Commands (needed for show/hide menu commands)
long onCmdSaveDataElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements unified is executed
long onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
long onCmdOpenNetgenerateOptionsDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate options" button
long onUpdUndo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall undo is executed
const GNEApplicationWindowHelper::ProcessingMenuCommands & getProcessingMenuCommands() const
get processing Menu Commands
long onCmdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements unified is executed
long onCmdPostProcessingPythonTool(FXObject *obj, FXSelector, void *)
post processing after run tool
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
long onCmdReloadNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall network reload is executed
long onUpdSaveAdditionalElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals unified is executed
long onUpdSmartReload(FXObject *, FXSelector, void *)
called when the update/FXCall smart reload is executed
FXMenuPane * myFileMenuRecentNetworks
FXSplitter * myMainSplitter
The splitter that divides the main window into view and the log window.
long onCmdLockSelectElements(FXObject *, FXSelector sel, void *)
called when user press lock select elements button
long onCmdOpenNetconvertConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netconvertconfiguration is executed
long onCmdSaveTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms is executed
long onUpdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is updated
long onCmdUndo(FXObject *sender, FXSelector, void *)
called when user press Ctrl+Z
long onCmdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is executed
long onCmdSaveNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall save network is executed
FXMenuPane * myFileMenu
the submenus
GNEApplicationWindowHelper::ToolbarsGrip myToolbarsGrip
Toolbars Grip.
long onUpdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
update toggle time format button
MFXSynchQue< GUIEvent * > myThreadEvents
List of load requests.
long onCmdSaveAdditionalElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals unified is executed
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
called when a key is released
GNEApplicationWindowHelper::ModesMenuCommands myModesMenuCommands
Modes Menu Commands.
long onUpdSaveTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms is updated
FXGLCanvas * getBuildGLCanvas() const
get build GL Canvas (must be implemented in all children)
long onCmdEditViewScheme(FXObject *, FXSelector, void *)
Called on menu Edit->Visualization.
long onCmdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as is executed
long onCmdOpenForeign(FXObject *, FXSelector, void *)
called when the command/FXCall open foreign is executed
long onCmdSaveMeanDataElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas unified is executed
void unmarkForDrawingFront()
unmark for drawing front
void refreshAttributesEditor()
refresh attribute editor
void abortReparenting()
abort selecting parent
GNEAttributesEditor * getContainerAttributesEditor() const
get attributes editor
void refreshEdgeTypeSelector()
refresh edge type selector
EdgeTypeSelector * getEdgeTypeSelector() const
get edgeType selector
void addLaneType(GNELaneType *laneType)
add laneType
GNENet * net
the loaded net
const bool viewportFromRegistry
whether loading viewport from registry
const std::string file
the name of the loaded file
const std::string settingsFile
the name of the settings file to load
FXuint openDialog(const std::vector< GNENetworkElement * > &invalidNetworkElements)
open fix network elements dialog
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition GNEFrame.cpp:262
bool isErrorCreatingElement() const
get flag for check if a element wasn't created
void clearTemplate()
clear template (used by shortcut)
void setTemplate()
set template (used by shortcut)
void copyTemplate()
copy template (used by shortcut)
TemplateEditor * getTemplateEditor() const
get template editor
void clearInspection()
clear inspection
GNEAttributesEditor * getAttributesEditor() const
get AttributesEditor
void refreshInspection()
refresh current inspection
bool isRunning() const
check if test is running
void runNeteditInternalTests(GNEApplicationWindow *applicationWindow)
run netedit internal test
Result getResult() const
get result
void newNetwork()
begins the creation of an empty network
static void fillOptions(OptionsCont &neteditOptions)
clears and initializes the OptionsCont
void loadNetworkOrConfig()
begins the loading of an existent network or config
static void setDefaultOptions(OptionsCont &neteditOptions)
sets required options for proper functioning
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEDemandElement * >, std::hash< int > > & getDemandElements() const
get demand elements
const std::unordered_map< const GUIGlObject *, GNECrossing * > & getCrossings() const
get crossings
int getNumberOfMeanDatas() const
get number of meanDatas
const std::unordered_map< SumoXMLTag, std::map< const std::string, GNEMeanData * >, std::hash< int > > & getMeanDatas() const
get meanDatas
const std::map< const std::string, GNEDataSet * > & getDataSets() const
get demand elements
const std::map< std::string, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
int getNumberOfDemandElements() const
get number of current demand elements saved in AttributeCarriers (default vTypes are NOT included)
int getNumberOfAdditionals() const
get number of additionals
const std::map< std::string, GNEJunction * > & getJunctions() const
get junctions
const std::map< std::string, GNEEdgeType * > & getEdgeTypes() const
map with the ID and pointer to edgeTypes of net
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEAdditional * >, std::hash< int > > & getAdditionals() const
get additionals
bool existMeanDataFilename(const std::string &file) const
check if the given meanData file was already registered
const std::vector< std::string > & getAdditionalFilenames() const
get vector with additional elements saving files (starting with default)
void updateMeanDataEmptyFilenames(const std::string &file)
update meanData elements with empty filenames with the given file
void updateAdditionalEmptyFilenames(const std::string &file)
update additional elements with empty filenames with the given file
const std::vector< std::string > & getDemandFilenames() const
get vector with demand elements saving files (starting with default)
bool existAdditionalFilename(const std::string &file) const
check if the given additional file was already registered
void updateDataEmptyFilenames(const std::string &file)
update data elements with empty filenames with the given file
bool existDataFilename(const std::string &file) const
check if the given data file was already registered
void updateNeteditConfig()
update netedit config
void updateDemandEmptyFilenames(const std::string &file)
update demand elements with empty filenames with the given file
const std::vector< std::string > & getMeanDataFilenames() const
get vector with meanData elements saving files (starting with default)
const std::vector< std::string > & getDataFilenames() const
get vector with data elements saving files (starting with default)
bool existDemandFilename(const std::string &file) const
check if the given demand file was already registered
void dataElementsSaved()
mark demand elements as saved
void requireSaveNetwork()
inform that network has to be saved
void demandElementsSaved()
mark demand elements as saved
AskSaving askSaveMeanDataElements() const
warns about unsaved changes in meanData elements and gives the user the option to abort
AskSaving askSaveAdditionalElements() const
warns about unsaved changes in additionals and gives the user the option to abort
void SumoConfigSaved()
mark SumoConfig as saved
void additionalsSaved()
mark additionals as saved
void requireSaveNeteditConfig()
inform that netedit config has to be saved
void requireSaveSumoConfig()
inform that SumoConfig has to be saved
AskSaving askSaveNetwork() const
warns about unsaved changes in network and gives the user the option to abort
AskSaving askSaveDemandElements() const
warns about unsaved changes in demand elements and gives the user the option to abort
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void meanDatasSaved()
mark mean data elements as saved
AskSaving askSaveDataElements() const
warns about unsaved changes in data elements and gives the user the option to abort
bool isDemandElementsSaved() const
check if demand elements are saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
bool isAdditionalsSaved() const
check if additionals are saved
void clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition GNENet.cpp:2127
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1784
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1625
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2355
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2859
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1417
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:165
void enableUpdateData()
Definition GNENet.cpp:2924
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2878
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2162
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2309
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2140
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:177
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1890
void computeNetwork(GNEApplicationWindow *window, bool force=false, bool volatileOptions=false)
trigger full netbuild computation param[in] window The window to inform about delay param[in] force W...
Definition GNENet.cpp:1463
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1935
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1800
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:147
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition GNENet.cpp:2173
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2935
GNENetHelper::SavingFilesHandler * getSavingFilesHandler() const
get saving files handler
Definition GNENet.cpp:159
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2225
void saveNetwork()
save the network
Definition GNENet.cpp:1370
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1607
bool saveJuPedSimElements(const std::unordered_set< const GNEAttributeCarrier * > &ACs, const std::string &file)
save JuPedSim elements
Definition GNENet.cpp:2258
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1742
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1826
void savePlain(const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition GNENet.cpp:1408
bool saveDemandElements()
save demand element elements of the network
Definition GNENet.cpp:2275
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2195
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1550
static std::pair< int, bool > Run(GNEApplicationWindow *GNEApp, GUIIcon icon, OptionsCont &optionsContainer, const OptionsCont &originalOptionsContainer, const char *titleName)
Constructor for run dialogs.
static std::pair< int, bool > Options(GNEApplicationWindow *GNEApp, GUIIcon icon, OptionsCont &optionsContainer, const OptionsCont &originalOptionsContainer, const char *titleName)
Constructor for options dialogs.
void updatePathCalculator()
update DijkstraRouter (needed a good calculation of dijkstra path after modifying network)
bool isPathCalculatorUpdated() const
check if pathCalculator is updated
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
GNEAttributesEditor * getPersonAttributesEditor() const
get attributes creator
void loadFromFile(const std::string &file) const
load from file
void clearCurrentSelection() const
clear current selection with possibility of undo/redo
GNESelectorFrame::SelectionOperation * getSelectionOperationModul() const
get selection operation modul
bool isChangesPending() const
return true if there is changes to save
const std::vector< CurrentTAZ::TAZEdgeColor > & getEdgeAndTAZChildrenSelected() const
get map with edge and TAZChildren
void clearSelectedEdges()
clear current TAZ children
TAZSelectionStatistics * getTAZSelectionStatisticsModule() const
get TAZ Selection Statistics modul
TAZSaveChanges * getTAZSaveChangesModule() const
get TAZ Save Changes modul
bool parseTLSPrograms(const std::string &file)
parse TLS Programs from a file
const GNETagProperties * getTagProperty(const SumoXMLTag tag, const bool hardFail) const
get tagProperty associated to the given tag
bool isJuPedSimElement() const
return true if tag correspond to a JuPedSim element
Dialog for edit rerouters.
void show()
show window
bool shown() const
check if dialog is shown
void setFocus()
Move the focus to this window.
void hide()
hide window
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void undo()
undo the last command group
long onUpdUndo(FXObject *, FXSelector, void *)
event after Undo
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
void abortAllChangeGroups()
reverts and discards ALL active chained change groups
Supermode getRedoSupermode() const
get redo supermode
long onUpdRedo(FXObject *, FXSelector, void *)
event after Redo
Supermode getUndoSupermode() const
get undo supermode
void redo()
redo the last command group
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
GNEAttributesEditor * getVehicleAttributesEditor() const
get attributes creator
GNEAttributeCarrier * getFirstAC() const
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all fronted ACs
long onCmdToggleShowDemandElementsNetwork(FXObject *, FXSelector, void *)
toggle show demand elements (network)
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
GNENet * getNet() const
get the net object
void hotkeyBackSpace()
handle backspace keypress
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
long onCmdToggleShowDemandElementsData(FXObject *, FXSelector, void *)
toggle show demand elements (data)
void abortOperation(bool clearSelection=true)
abort current edition operation
GNEViewNetHelper::InspectedElements & getInspectedElements()
get inspected elements
long onCmdToggleDrawSpreadVehicles(FXObject *, FXSelector, void *)
toggle draw vehicles in begin position or spread in lane
long onCmdToggleShowConnections(FXObject *, FXSelector, void *)
toggle show connections
long onCmdToggleShowTAZElements(FXObject *, FXSelector, void *)
toggle show TAZ elements
long onCmdToggleMoveElevation(FXObject *, FXSelector, void *)
toggle move elevation
long onCmdToggleShowAllPersonPlans(FXObject *, FXSelector, void *)
toggle show all person plans in super mode demand
long onCmdToggleTAZRelOnlyTo(FXObject *, FXSelector, void *)
toggle TAZRez only to
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
void hotkeyFocusFrame()
handle focus frame keypress
long onCmdToggleChainEdges(FXObject *, FXSelector, void *)
toggle chain edges
long onCmdToggleLockContainer(FXObject *, FXSelector, void *)
toggle lock container in super mode demand
long onCmdToggleShowGrid(FXObject *, FXSelector, void *)
toggle show grid
GNEViewNetHelper::MarkFrontElements & getMarkFrontElements()
get marked for drawing front elements
long onCmdToggleHideNonInspecteDemandElements(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
GNEViewParent * getViewParent() const
get the net object
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
toggle draw junction shape
long onCmdToggleShowShapes(FXObject *, FXSelector, void *)
toggle show shapes in super mode data
long onCmdToggleMergeAutomatically(FXObject *, FXSelector, void *)
toggle warn for merge
GNEViewNetHelper::SaveElements & getSaveElements()
get variable used to save elements
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
GNEFixNetworkElements * getFixNetworkElementsDialog() const
get fix network elements dialog
long onCmdSetSupermode(FXObject *, FXSelector sel, void *)
long onCmdToggleExtendSelection(FXObject *, FXSelector, void *)
toggle extend selection
bool aksChangeSupermode(const std::string &operation, Supermode expectedSupermode)
ask about change supermode
long onCmdSetMode(FXObject *, FXSelector sel, void *)
called when user press a mode button (Network or demand)
void hotkeyEnter()
handle enter keypress
long onCmdToggleShowOverlappedRoutes(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
long onCmdToggleAutoOppositeEdge(FXObject *, FXSelector, void *)
toggle autoOpposite edge
GNEViewNetHelper::LockManager & getLockManager()
get lock manager
void updateControls()
update control contents after undo/redo or recompute
void hotkeyDel()
handle del keypress
long onCmdToggleChangeAllPhases(FXObject *, FXSelector, void *)
toggle change all phases
long onCmdToggleTAZRelDrawing(FXObject *, FXSelector, void *)
toggle TAZRel drawing
long onCmdToggleShowJunctionBubbles(FXObject *, FXSelector, void *)
toggle show junction bubbles
long onCmdToggleShowAdditionalSubElements(FXObject *, FXSelector, void *)
toggle show additional sub-elements
long onCmdToggleShowAllContainerPlans(FXObject *, FXSelector, void *)
toggle show all container plans in super mode demand
long onCmdToggleTAZRelOnlyFrom(FXObject *, FXSelector, void *)
toggle TAZRez only from
long onCmdToggleShowAdditionals(FXObject *, FXSelector, void *)
toggle show additionals in super mode data
long onCmdToggleLockPerson(FXObject *, FXSelector, void *)
toggle lock person in super mode demand
GNEViewNetHelper::TimeFormat & getTimeFormat()
get variable used to switch between time formats
long onCmdToggleSelectEdges(FXObject *, FXSelector, void *)
toggle select edges
long onCmdToggleShowTrips(FXObject *, FXSelector, void *)
toggle show all trips in super mode demand
long onCmdToggleHideShapes(FXObject *, FXSelector, void *)
toggle hide shapes in super mode demand
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
A single child window which contains a view of the simulation area.
void updateUndoRedoButtons()
update toolbar undo/redo buttons (called when user press Ctrl+Z/Y)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
Called when user press a key.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
static void close()
close GUICursorSubSys
static void initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
static FXMenuCommand * buildFXMenuCommandShortcut(FXComposite *p, const std::string &text, const std::string &shortcut, const std::string &info, FXIcon *icon, FXObject *tgt, FXSelector sel)
build menu command
The application's "Feedback" dialog.
void create()
Creates the widget.
Editor for the list of chosen objects.
const std::string & getMsg() const
Returns the message.
GUIEventType getOwnType() const
returns the event type
Definition GUIEvent.h:89
GUISUMOAbstractView * getView() const
return GUISUMOAbstractView
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static void initIcons(FXApp *a)
Initiate GUIIconSubSys.
static void close()
close GUIIconSubSys
void setWindowSizeAndPos()
perform initial window positioning and sizing according to user options / previous call
std::vector< FXMainWindow * > myTrackerWindows
list of tracker windows
FXMenuPane * myLanguageMenu
Language menu common to all applications.
FXLabel * myCartesianCoordinate
Labels for the current cartesian, geo-coordinate and test coordinates.
std::map< std::string, std::string > myOnlineMaps
online mapping services for the context menu
MFXStaticToolTip * myStaticTooltipMenu
static toolTip used in menus
FXMDIClient * myMDIClient
The multi view panel.
void buildLanguageMenu(FXMenuBar *menuBar)
long onCmdChangeLanguage(FXObject *, FXSelector, void *)
FXHorizontalFrame * myGeoFrame
FXHorizontalFrame * myTestFrame
FXHorizontalFrame * myCartesianFrame
FXLabel * myTestCoordinate
FXMutex myTrackerLock
A lock to make the removal and addition of trackers secure.
void storeWindowSizeAndPos()
record window position and size in registry
FXLabel * myGeoCoordinate
FXStatusBar * myStatusbar
The status bar.
FXGLVisual * myGLVisual
The gl-visual used.
std::vector< GUIGlChildWindow * > myGLWindows
list of GLWindows
long onUpdChangeLanguage(FXObject *, FXSelector, void *)
A logging window for the gui.
void addSeparator()
Adds a a separator to this log window.
void unregisterMsgHandlers()
unregister message handlers
void clear()
Clears the window.
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
void registerMsgHandlers()
register message handlers
virtual double getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
virtual double getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
virtual double getZPos() const =0
Returns the camera height corresponding to the current zoom factor.
void addDecals(const std::vector< Decal > &decals)
add decals
void showViewschemeEditor()
show viewsscheme editor
virtual void showViewportEditor()
show viewport editor
GUIPerspectiveChanger & getChanger() const
get changer
std::vector< Decal > & getDecals()
The list of decals to show.
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
void destroyPopup()
destroys the popup
An XML-handler for visualisation schemes.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
static void buildAccelerators(FXAccelTable *accelTable, FXObject *target, const bool sumogui)
build accelerators
static void close()
close GUITextureSubSys
static void resetTextures()
Reset textures.
static void initTextures(FXApp *a)
Initiate GUITextureSubSys for textures.
static std::string clipped
Definition GUIUserIO.h:58
bool parse()
parse
static void resetLoaded()
resets loaded location elements
dialog arguments (used for certain functions that opens modal dialogs)
const std::vector< FXuint > questionDialogValues
used if we have multiple modal dialogs
bool amChecked() const
check if this MFXCheckableButton is checked
void toggleCheck()
Toggle current check state.
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependence to an optional file name.
Definition MFXUtils.cpp:61
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp:758
A storage for available edgeTypes of edges.
Definition NBTypeCont.h:52
int size() const
Returns the number of known edgeTypes.
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NIFrame.cpp:397
static bool load(SUMOSAXHandler &handler, const std::vector< std::string > &files, const std::string &type, const bool stringParse=false)
Importer for edge type information stored in XML.
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NWFrame.cpp:145
A storage for options typed value containers)
Definition OptionsCont.h:89
void resetDefault()
Resets all options to default.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false) const
Writes the configuration.
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
std::string getValueString(const std::string &name) const
Returns the string-value of the named option (all options)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
void set(double x, double y)
set positions x and y
Definition Position.h:82
double x() const
Returns the x-position.
Definition Position.h:52
double y() const
Returns the y-position.
Definition Position.h:57
static std::string replace(std::string str, const std::string &what, const std::string &by)
Replaces all occurrences of the second string by the third string within the first string.
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp:69
static bool checkOptions(OptionsCont &oc)
checks shared options and sets StdDefs
static void parseTemplate(OptionsCont &options, const std::string &templateString)
run parser
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition XMLSubSys.cpp:83
@ SEL_THREAD_EVENT
Definition fxexdefs.h:173
@ SEL_THREAD
Definition fxexdefs.h:155
DemandViewOptions demandViewOptions
demand view options
FXMenuCheck * menuCheckAllowUndoRedo
checkBox for allow undo-redo
NetworkViewOptions networkViewOptions
network view options
void buildUndoRedoMenuCommands(FXMenuPane *editMenu)
build undo-redo menu commands
void buildViewMenuCommands(FXMenuPane *editMenu)
build view menu commands
FXMenuCheck * loadAdditionalsInSUMOGUI
menu check for load additionals in SUMO GUI
FXMenuCommand * undoLastChange
FXMenuCommand for undo last change.
FXMenuCheck * loadDemandInSUMOGUI
menu check for load demand in SUMO GUI
FXMenuCommand * redoLastChange
FXMenuCommand for redo last change.
void buildOpenSUMOMenuCommands(FXMenuPane *editMenu)
build open sumo menu commands
void buildFrontElementMenuCommand(FXMenuPane *editMenu)
build front element commands
void buildFileMenuCommands(FXMenuPane *fileMenu, FXMenuPane *fileMenuNEEDITConfig, FXMenuPane *fileMenuSumoConfig, FXMenuPane *fileMenuTLS, FXMenuPane *fileMenuEdgeTypes, FXMenuPane *fileMenuAdditionals, FXMenuPane *fileMenuDemandElements, FXMenuPane *fileMenuDataElements, FXMenuPane *fileMenuMeanDataElements)
build menu commands
FXMenuCheck * menuCheckAllowUndoRedoLoading
checkBox for allow undo-redo loading
void buildHelpMenuCommands(FXMenuPane *helpMenu)
build menu commands
void buildLocateMenuCommands(FXMenuPane *locateMenu)
build menu commands
void buildLockMenuCommands(FXMenuPane *editMenu)
build menu commands
MFXMenuCheckIcon * menuCheckLockConnections
menu check to lock connections
void hideNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockPersons
menu check to lock persons
MFXMenuCheckIcon * menuCheckLockVehicles
menu check to lock vehicles
MFXMenuCheckIcon * menuCheckLockCrossings
menu check to lock crossings
MFXMenuCheckIcon * menuCheckLockTAZs
menu check to lock TAZs
void hideDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockEdgeTAZRels
menu check to lock edgeTAZRels
void hideDataLockMenuCommands()
show data processing menu commands
void showDataLockMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckLockPersonTrips
menu check to lock personTrips
MFXMenuCheckIcon * menuCheckLockWires
menu check to lock Wires
MFXMenuCheckIcon * menuCheckLockPOIs
menu check to lock POIs
MFXMenuCheckIcon * menuCheckLockPolygons
menu check to lock polygons
MFXMenuCheckIcon * menuCheckLockWalkingAreas
menu check to lock walkingAreas
MFXMenuCheckIcon * menuCheckLockEdges
menu check to lock edges
MFXMenuCheckIcon * menuCheckLockRides
menu check to lock rides
MFXMenuCheckIcon * menuCheckLockContainers
menu check to lock containers
MFXMenuCheckIcon * menuCheckLockJpsWalkableAreas
menu check to lock jps walkableareas
MFXMenuCheckIcon * menuCheckLockEdgeRelDatas
menu check to lock edgeRelDatas
MFXMenuCheckIcon * menuCheckLockStops
menu check to lock stops
MFXMenuCheckIcon * menuCheckLockLanes
menu check to lock lanes
MFXMenuCheckIcon * menuCheckLockAdditionals
menu check to lock additionals
void showNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockWalks
menu check to lock walks
MFXMenuCheckIcon * menuCheckLockJpsObstacles
menu check to lock jps obstacles
void showDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockTranships
menu check to lock tranships
MFXMenuCheckIcon * menuCheckLockTransports
menu check to lock transports
void buildRecentConfigFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentConfigFiles)
build recent config
MFXRecentNetworks myRecentConfigs
List of recent configs.
MFXRecentNetworks myRecentNetworks
List of recent networks.
void buildRecentNetworkFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentNetworkFiles)
build recent network
void buildModesMenuCommands(FXMenuPane *modesMenu)
build modes menu commands
DemandMenuCommands demandMenuCommands
Demand Menu Commands.
void setDefaultView(Supermode supermode)
set default view
void setJuPedSimView(Supermode supermode)
set JuPedSim view
NetworkMenuCommands networkMenuCommands
Network Menu Commands.
void showDataProcessingMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckRecomputeDataMode
checkBox for recomputing when changing data mode
void showDemandProcessingMenuCommands()
show demand processing menu commands
void hideDemandProcessingMenuCommands()
show demand processing menu commands
void hideDataProcessingMenuCommands()
show data processing menu commands
void buildProcessingMenuCommands(FXMenuPane *processingMenu)
build menu commands
void showNetworkProcessingMenuCommands()
show network processing menu commands
void hideNetworkProcessingMenuCommands()
show network processing menu commands
void buildSupermodeCommands(FXMenuPane *editMenu)
build menu commands
FXMenuBar * menu
The application menu bar (for file, edit, processing...)
long postProcessing(FXObject *menuCommand) const
run postprocessing
void buildTools(FXMenuPane *toolsMenu, const std::map< std::string, FXMenuPane * > &menuPaneToolMaps)
build tools (and menu commands)
long showTool(FXObject *menuCommand) const
show tool
long runNetgenerateDialog(const OptionsCont *netgenerateOptions) const
run netgenerate dialog
long runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
static std::string openRouteFileDialog(FXWindow *window, bool save, bool multi=false)
open route file dialog
static bool toggleEditOptionsDemand(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Demand menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsData(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Data menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string openMeanDataDialog(FXWindow *window, bool save, bool multi=false)
open meandata filename dialog
static std::string openAdditionalFileDialog(FXWindow *window, bool save, bool multi=false)
open additional dialog
static bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string openOSMFileDialog(FXWindow *window)
open OSM file dialog
static std::string saveJoinedJunctionsFileDialog(FXWindow *window)
open joined junctions file dialog
static std::string openTLSFileDialog(FXWindow *window, bool save)
open TLS file dialog
static std::string openDataFileDialog(FXWindow *window, bool save, bool multi=false)
open data file dialog
static std::string openNeteditConfigFileDialog(FXWindow *window, bool save)
open netedit config file dialog
static std::string savePlainXMLFileDialog(FXWindow *window)
open plain xml file dialog
static std::string openSumoConfigFileDialog(FXWindow *window, bool save, bool multi=false)
open SUMO config file dialog
static std::string openEdgeTypeFileDialog(FXWindow *window, bool save)
open edgeType file dialog
static std::string openNetworkFileDialog(FXWindow *window, bool save, bool multi=false)
open netconvert file dialog
static std::string openNetconvertFileDialog(FXWindow *window)
open netconvert file dialog
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckLockContainer
Lock Container.
DataEditMode dataEditMode
the current Data edit mode
bool isDefaultView() const
check if default view is enabled
DemandEditMode demandEditMode
the current Demand edit mode
Supermode currentSupermode
the current supermode
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
MFXCheckableButton * menuCheckSelectEdges
checkable button to select only edges
MFXCheckableButton * menuCheckChainEdges
checkable button to the endpoint for a created edge should be set as the new source
MFXCheckableButton * menuCheckShowDemandElements
checkable button to show Demand Elements
MFXCheckableButton * menuCheckMoveElevation
checkable button to apply movement to elevation
MFXCheckableButton * menuCheckShowTAZElements
checkable button to show TAZ elements
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
MFXCheckableButton * menuCheckAutoOppositeEdge
check checkable to create auto create opposite edge
MFXCheckableButton * menuCheckDrawSpreadVehicles
checkable button to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowConnections
checkable button to show connections
MFXCheckableButton * menuCheckHideConnections
checkable button to hide connections in connect mode
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckToggleGrid
checkable button to show grid button
MFXCheckableButton * menuCheckMergeAutomatically
checkable button to we should't warn about merging junctions
MFXCheckableButton * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
MFXCheckableButton * menuCheckShowAdditionalSubElements
checkable button to show additional sub-elements
MFXCheckableButton * menuCheckChangeAllPhases
checkable button to set change all phases
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label