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>
51#include <netedit/templates.h>
52#include <netimport/NIFrame.h>
55#include <netwrite/NWFrame.h>
71#include <utils/xml/XMLSubSys.h>
72
75#include "GNEInternalTest.h"
76#include "GNELoadThread.h"
77#include "GNENet.h"
78#include "GNEUndoList.h"
79#include "GNEViewParent.h"
80
81#ifdef HAVE_VERSION_H
82#include <version.h>
83#endif
84
85// ===========================================================================
86// FOX-declarations
87// ===========================================================================
88
89FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
90 // quit calls
94 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
95 // toolbar file
102 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
107 // network
122 // NeteditConfig
130 // SumoConfig
138 // TLS
147 // edge types
156 // additionals
167 // demand elements
176 // data elements
185 // meanDatas
194 // other
199 // Toolbar supermode
203 // Toolbar modes
220 // Toolbar edit
229 // Network view options
262 // Demand view options
285 // Data view options
302 // view
319 /* Prepared for #6042
320 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
321 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
322 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
323 */
324 // toolbar lock
356 // Toolbar processing
375 // Toolbar locate
400 // toolbar python tools
405 // toolbar windows
407 // toolbar help
410 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
411 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
412 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
414 // alt + <number>
435 // key events
436 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
437 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
438 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
439 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
440 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
442 // threads events
445 // edge template functions
449 // languages
472 // tools
475 // other
476 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
483 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
484};
485
486// Object implementation
487FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
488
489// ===========================================================================
490// GNEApplicationWindow method definitions
491// ===========================================================================
492#ifdef _MSC_VER
493#pragma warning(push)
494#pragma warning(disable: 4355) // mask warning about "this" in initializers
495#endif
496GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
497 GUIMainWindow(app),
498 myTagPropertiesDatabase(tagPropertiesDatabase),
499 myUndoList(new GNEUndoList(this)),
500 myConfigPattern(configPattern),
501 myToolbarsGrip(this),
502 myMenuBarFile(this),
503 myFileMenuCommands(this),
504 myModesMenuCommands(this),
505 myEditMenuCommands(this),
506 myLockMenuCommands(this),
507 myProcessingMenuCommands(this),
508 myLocateMenuCommands(this),
509 myToolsMenuCommands(this),
510 myWindowsMenuCommands(this),
511 myHelpMenuCommands(this),
512 mySupermodeCommands(this),
513 myTitlePrefix("netedit " VERSION_STRING),
514 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
515 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
516 // init icons
518 // init Textures
520 // init cursors
522 // set tooltip options
523 app->setTooltipTime(1000000000);
524 app->setTooltipPause(1000000000);
525 // set SUMO Options descriptions
526 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
527 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo " VERSION_STRING);
528 // set default netedit options
531 // parse options
536}
537#ifdef _MSC_VER
538#pragma warning(pop)
539#endif
540
541
542void
544 // do this not twice
546 // do not translate debug messages
547 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
548 return;
549 }
550 myHadDependentBuild = true;
551 setTarget(this);
552 setSelector(MID_WINDOW);
553 // build toolbar menu
555 // build the thread - io
558 // build the status bar
559 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
560 // build geo coordinates label
561 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
563 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
564 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
565 // build geo coordinates label
567 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
568 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
569 // build cartesian coordinates label
571 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
572 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
573 // build test coordinates label (only if gui-testing is enabled)
575 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
576 myTestCoordinate->setHelpText(TL("Test coordinate"));
578 myTestFrame->hide();
579 // make the window a mdi-window
580 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
582 myMDIMenu = new FXMDIMenu(this, myMDIClient);
583 // build the message window
585 myMainSplitter->setSplit(1, 65);
586 // fill menu and tool bar
587 fillMenuBar();
588 // build additional threads
590 // check if create internal test system
591 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
592 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
593 }
594 // set the status bar
595 setStatusBarText(TL("Ready."));
596 // set the caption
597 setTitle(myTitlePrefix);
598 // set Netedit ICON
601 // build netedit Accelerators (hotkeys)
602 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
603}
604
605
606void
608 // set windows size and position
610 // set current folder
611 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
612 // Create main window
613 FXMainWindow::create();
614 // get text width
615 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
616 // adjust cartesian and geo frame
617 myCartesianFrame->setWidth(textWidth);
618 myGeoFrame->setWidth(textWidth);
619 // fill online maps
620 if (myOnlineMaps.empty()) {
621 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
622 myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
623 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
624 }
625 // show application windows
626 show(PLACEMENT_DEFAULT);
627 // check if maximice
628 if (!OptionsCont::getOptions().isSet("window-size")) {
629 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
630 maximize();
631 }
632 }
633}
634
635
638 // Close icons
640 // Close gifs (Textures)
643 // delete visuals
644 delete myGLVisual;
645 // must delete menus to avoid segfault on removing accelerators
646 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
649 delete myFileMenuTLS;
650 delete myFileMenuEdgeTypes;
657 delete myFileMenu;
658 delete myModesMenu;
659 delete myEditMenu;
660 delete myLockMenu;
661 delete myProcessingMenu;
662 delete myLocatorMenu;
663 delete myToolsMenu;
664 delete myToolsDetectorMenu;
665 delete myToolsDistrictMenu;
666 delete myToolsDRTMenu;
668 delete myToolsImportMenu;
671 delete myToolsImportVissim;
672 delete myToolsImportVisum;
673 delete myToolsNetMenu;
674 delete myToolsRouteMenu;
675 delete myToolsOutputMenu;
676 delete myToolsShapes;
677 delete myToolsTLS;
678 delete myToolsTurnDefs;
680 delete myToolsXML;
681 delete myWindowMenu;
682 delete myHelpMenu;
683 delete myLanguageMenu;
684 // Delete load thread
685 delete myLoadThread;
686 if (myInternalTest) {
687 delete myInternalTest;
688 }
689 // drop all events
690 while (!myThreadEvents.empty()) {
691 // get the next event
694 delete e;
695 }
696 // delete undoList and dialog
697 delete myUndoList;
698}
699
700
701long
702GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
703 if (askSaveElements()) {
705 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
706 if (isMaximized()) {
707 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
708 } else {
709 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
710 }
711 getApp()->exit(0);
712 }
713 return 1;
714}
715
716
717long
718GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
719 GUIDialog_GLChosenEditor* chooser =
721 chooser->create();
722 chooser->show();
723 return 1;
724}
725
726
727long
728GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
729 // check if close current simulation
730 if (onCmdClose(0, 0, 0) == 1) {
731 // create new network
733 }
734 return 1;
735}
736
737
738long
740 // get netconvert file dialog
741 const auto netConvertFileDialog = GNEFileDialog(this, TL("netconvert config file"),
745 // continue depending of netConvertFileDialog
746 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
747 // load configuration
748 loadConfiguration(netConvertFileDialog.getFilename());
749 }
750 return 1;
751}
752
753
754long
755GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
756 // get netconvert filename
757 const auto networkFileDialog = GNEFileDialog(this, TL("network file"),
761 // continue depending of netconvertFile
762 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
763 // load network
764 loadNetwork(networkFileDialog.getFilename());
765 }
766 return 0;
767}
768
769
770long
771GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
772 // get OSM file dilaog
773 const auto OSMFileDialog = GNEFileDialog(this, TL("OpenStreetMap file"),
777 // continue depending of netconvertFile
778 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
779 loadOSM(OSMFileDialog.getFilename());
780 }
781 return 1;
782}
783
784
785long
786GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
787 auto& neteditOptions = OptionsCont::getOptions();
788 // get netconvert filename
789 const auto neteditConfigFileDialog = GNEFileDialog(this, TL("netedit config file"),
793 // continue depending of netconvertFile
794 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
795 // stop test before calling load thread
796 if (myInternalTest) {
798 }
799 // reset netedit options
800 myLoadThread->fillOptions(neteditOptions);
801 myLoadThread->setDefaultOptions(neteditOptions);
802 // set netedit configuration file to load
803 neteditOptions.resetWritable();
804 neteditOptions.set("configuration-file", neteditConfigFileDialog.getFilename());
805 // run load thread
807 // update view
808 update();
809 }
810 return 1;
811}
812
813
814long
815GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
816 auto& neteditOptions = OptionsCont::getOptions();
817 // get netconvert filename
818 const auto sumoConfigFileDialog = GNEFileDialog(this, TL("sumo config file"),
822 // continue depending of netconvertFile
823 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
824 // stop test before calling load thread
825 if (myInternalTest) {
827 }
828 // reset options
829 myLoadThread->fillOptions(neteditOptions);
830 myLoadThread->setDefaultOptions(neteditOptions);
831 // set sumo configuration file to load
832 neteditOptions.resetWritable();
833 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
834 // run load thread
836 // update view
837 update();
838 }
839 return 1;
840}
841
842
843long
845 // check if close current simulation
846 if (onCmdClose(0, 0, 0) == 1) {
847 // stop test before calling load thread
848 if (myInternalTest) {
850 }
851 auto& neteditOptions = OptionsCont::getOptions();
852 // get existent configuration file
853 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
854 // reset options
855 myLoadThread->fillOptions(neteditOptions);
856 myLoadThread->setDefaultOptions(neteditOptions);
857 // set configuration file to load
858 neteditOptions.resetWritable();
859 neteditOptions.set("configuration-file", neteditConfigFile);
860 // run load thread
862 // update view
863 update();
864 }
865 return 1;
866}
867
868
869long
870GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
871 auto& neteditOptions = OptionsCont::getOptions();
872 // check if close current simulation
873 if (onCmdClose(0, 0, 0) == 1) {
874 // stop test before calling load thread
875 if (myInternalTest) {
877 }
878 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
879 // reset options
880 myLoadThread->fillOptions(neteditOptions);
881 myLoadThread->setDefaultOptions(neteditOptions);
882 // set configuration file to load
883 neteditOptions.resetWritable();
884 neteditOptions.set("sumocfg-file", sumoConfigFile);
885 // run load thread
887 // update view
888 update();
889 }
890 return 1;
891}
892
893
894long
895GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
896 // check if file exist
897 if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
898 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
899 } else {
900 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
901 }
902}
903
904
905long
906GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
907 // check if file exist
908 if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
909 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
910 } else {
911 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
912 }
913}
914
915
916long
917GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
918 auto& neteditOptions = OptionsCont::getOptions();
919 // get netconvert filename
920 const auto TLSfileDialog = GNEFileDialog(this, TL("Traffic Light definitions file"),
924 // continue depending of netconvertFile
925 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
926 // set file to load
927 neteditOptions.resetWritable();
928 neteditOptions.set("tls-file", TLSfileDialog.getFilename());
929 // load traffic lights
930 loadTrafficLights(false);
931 }
932 return 1;
933}
934
935
936long
937GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
938 // load traffic lights
939 loadTrafficLights(true);
940 return 1;
941}
942
943
944long
945GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
946 // check if file exist
947 if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
948 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
949 } else {
950 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
951 }
952}
953
954
955long
956GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
957 auto& neteditOptions = OptionsCont::getOptions();
958 // get netconvert filename
959 const auto edgeTypesFileDialog = GNEFileDialog(this, TL("EdgeTypes file"),
963 // continue depending of netconvertFile
964 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
965 // set file to load
966 neteditOptions.resetWritable();
967 neteditOptions.set("edgetypes-file", edgeTypesFileDialog.getFilename());
968 // load edge types
969 loadEdgeTypes(false);
970 }
971 return 1;
972}
973
974
975long
976GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
977 // load edge types
978 loadEdgeTypes(true);
979 return 0;
980}
981
982
983long
984GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
985 // check if file exist
986 if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
987 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
988 } else {
989 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
990 }
991}
992
993
994long
995GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector sel, void*) {
996 auto& neteditOptions = OptionsCont::getOptions();
997 // check if close current file
998 if (onCmdClose(0, sel, 0) == 1) {
999 // stop test before calling load thread
1000 if (myInternalTest) {
1002 }
1003 // store size, position and viewport
1005 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1006 // set flag
1007 myAmLoading = true;
1008 // get files
1009 const auto neteditConfig = neteditOptions.getString("configuration-file");
1010 const auto sumoConfig = neteditOptions.getString("sumocfg-file");
1011 const auto networkFile = neteditOptions.getString("net-file");
1012 // fill (reset) all options
1013 myLoadThread->fillOptions(neteditOptions);
1014 // set default options defined in GNELoadThread::setDefaultOptions(...)
1015 myLoadThread->setDefaultOptions(neteditOptions);
1016 // set file to load
1017 neteditOptions.resetWritable();
1018 if (neteditConfig.size() > 0) {
1019 neteditOptions.set("configuration-file", neteditConfig);
1020 // set status bar
1021 setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
1022 } else if (sumoConfig.size() > 0) {
1023 neteditOptions.set("sumocfg-file", sumoConfig);
1024 // set status bar
1025 setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
1026 } else if (networkFile.size() > 0) {
1027 neteditOptions.set("net-file", networkFile);
1028 // set status bar
1029 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1030 } else {
1031 // nothing to load
1032 return 0;
1033 }
1034 // load network
1036 }
1037 return 1;
1038}
1039
1040
1041long
1042GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1043 auto& neteditOptions = OptionsCont::getOptions();
1044 // declare strings
1045 FXString neteditConfig = TL("&Reload Netedit config");
1046 FXString sumoConfig = TL("&Reload Sumo config");
1047 FXString netFile = TL("&Reload Network");
1048 FXString reload = TL("&Reload");
1049 // check options
1050 if (myNet == nullptr) {
1051 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1052 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1053 } else if (neteditOptions.getString("configuration-file").size() > 0) {
1054 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1055 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1056 } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1057 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1058 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1059 } else if (neteditOptions.getString("net-file").size() > 0) {
1060 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1061 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1062 } else {
1063 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1064 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1065 }
1066 return 1;
1067}
1068
1069
1070long
1071GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector sel, void*) {
1072 auto& neteditOptions = OptionsCont::getOptions();
1073 // check if close current file
1074 if (onCmdClose(0, sel, 0) == 1) {
1075 // stop test before calling load thread
1076 if (myInternalTest) {
1078 }
1079 // store size, position and viewport
1081 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1082 // set flag
1083 myAmLoading = true;
1084 // get network
1085 const auto networkFile = neteditOptions.getString("net-file");
1086 // fill (reset) all options
1087 myLoadThread->fillOptions(neteditOptions);
1088 // set default options defined in GNELoadThread::setDefaultOptions(...)
1089 myLoadThread->setDefaultOptions(neteditOptions);
1090 // set file to load
1091 neteditOptions.resetWritable();
1092 neteditOptions.set("net-file", networkFile);
1093 // set status bar
1094 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1095 // loaad network
1097 }
1098 return 1;
1099}
1100
1101
1102long
1103GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1104 auto& neteditOptions = OptionsCont::getOptions();
1105 if (myNet == nullptr) {
1106 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1107 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1108 } else if ((neteditOptions.getString("net-file").size() > 0) &&
1109 ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1110 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1111 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1112 } else {
1113 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1114 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1115 }
1116 return 1;
1117}
1118
1119
1120long
1121GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1122 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1123 if (myAmLoading) {
1124 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1125 } else if (onCmdClose(0, 0, 0) == 1) {
1126 // get filedata
1127 const std::string recentFile = ((const char*)fileData);
1128 // check if we're loading a network o a config
1129 if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1130 (recentFile.find(".netecfg") != std::string::npos) ||
1131 (recentFile.find(".sumocfg") != std::string::npos) ||
1132 (recentFile.find(".netccfg") != std::string::npos)) {
1133 // load config
1134 loadConfiguration(recentFile);
1135 } else {
1136 // load network
1137 loadNetwork(recentFile);
1138 }
1139 }
1140 return 1;
1141}
1142
1143
1144long
1145GNEApplicationWindow::onCmdClose(FXObject*, FXSelector sel, void*) {
1146 if (myViewNet == nullptr) {
1147 return 1;
1148 } else if (askSaveElements()) {
1150 // add a separator to the log
1152 // hide all menu commands
1156 // hide view options
1160 // reset files (except if we're reloading)
1161 if ((FXSELID(sel) != MID_GNE_TOOLBARFILE_RELOADNETWORK) && (FXSELID(sel) != MID_HOTKEY_CTRL_R_RELOAD)) {
1162 auto& neteditOptions = OptionsCont::getOptions();
1163 neteditOptions.resetWritable();
1164 neteditOptions.set("configuration-file", "");
1165 neteditOptions.set("sumocfg-file", "");
1166 neteditOptions.set("net-file", "");
1167 neteditOptions.set("tls-file", "");
1168 neteditOptions.set("edgetypes-file", "");
1169 neteditOptions.set("additional-files", "");
1170 neteditOptions.set("route-files", "");
1171 neteditOptions.set("meandata-files", "");
1172 neteditOptions.set("data-files", "");
1173 // also in sumoConfig
1175 mySumoOptions.set("configuration-file", "");
1176 mySumoOptions.set("net-file", "");
1177 mySumoOptions.set("additional-files", "");
1178 mySumoOptions.set("route-files", "");
1179 mySumoOptions.set("data-files", "");
1180 }
1181 return 1;
1182 } else {
1183 return 0;
1184 }
1185}
1186
1187
1188long
1189GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1190 if (myMDIClient->numChildren() > 0) {
1191 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1192 if (w != nullptr) {
1193 w->onCmdLocate(nullptr, sel, nullptr);
1194 }
1195 }
1196 return 1;
1197}
1198
1199
1200long
1201GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1202 return myToolsMenuCommands.showTool(obj);
1203}
1204
1205
1206long
1207GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1209}
1210
1211
1212long
1215}
1216
1217
1218long
1219GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1220 // currently always enabled
1221 return 1;
1222}
1223
1224
1225long
1226GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1227 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1228 return 1;
1229}
1230
1231
1232long
1233GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1235 return 1;
1236}
1237
1238
1239long
1241 return 1;
1242}
1243
1244
1245long
1247 return 1;
1248}
1249
1250
1251long
1252GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1253 // create and open about dialog
1254 GNEAboutDialog(this);
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 successful
1308 if (ec->net == nullptr) {
1309 if (ec->file.size() > 0) {
1310 // report failure
1311 setStatusBarText(TLF("Loading of network '%' failed", ec->file));
1312 } else {
1313 setStatusBarText("");
1314 }
1315 } else {
1316 // set new Net
1317 myNet = ec->net;
1318 // report success
1319 setStatusBarText(TLF("Network '%' loaded", ec->file));
1321 // build viewparent toolbar grips before creating view parent
1323 // initialise netedit View
1324 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1325 // create it maximized
1326 viewParent->maximize();
1327 // mark it as Active child
1328 myMDIClient->setActiveChild(viewParent);
1329 // cast pointer myViewNet
1330 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1331 // set settings in view
1332 if (viewParent->getView() && ec->settingsFile != "") {
1333 GUISettingsHandler settings(ec->settingsFile, true, true);
1334 settings.addSettings(viewParent->getView());
1335 viewParent->getView()->addDecals(settings.getDecals());
1336 settings.applyViewport(viewParent->getView());
1337 settings.setSnapshots(viewParent->getView());
1338 }
1339 // set network name on the caption
1340 setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1341 // force supermode network
1342 if (myViewNet) {
1344 }
1345 if (myViewNet && ec->viewportFromRegistry) {
1346 Position off;
1347 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1348 Position p(off.x(), off.y(), 0);
1349 myViewNet->setViewportFromToRot(off, p, 0);
1350 }
1351 // if we're loading a sumo config, update netedit options
1352 if ((mySumoOptions.getStringVector("additional-files").size() > 0) && neteditOptions.getStringVector("additional-files").empty()) {
1353 neteditOptions.resetWritable();
1354 neteditOptions.set("additional-files", mySumoOptions.getValueString("additional-files"));
1355 }
1356 if ((mySumoOptions.getStringVector("route-files").size() > 0) && neteditOptions.getStringVector("route-files").empty()) {
1357 neteditOptions.resetWritable();
1358 neteditOptions.set("route-files", mySumoOptions.getValueString("route-files"));
1359 }
1360 // load elements
1365 // load selection
1366 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1368 }
1370 }
1372 // update app
1373 update();
1374 // restore focus
1375 setFocus();
1376}
1377
1378
1379void
1384
1385// ---------------------------------------------------------------------------
1386// private methods
1387// ---------------------------------------------------------------------------
1388
1389void
1391 // build file menu
1392 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1394 myFileMenuNeteditConfig = new FXMenuPane(this);
1395 myFileMenuSumoConfig = new FXMenuPane(this);
1396 myFileMenuTLS = new FXMenuPane(this);
1397 myFileMenuEdgeTypes = new FXMenuPane(this);
1398 myFileMenuAdditionals = new FXMenuPane(this);
1399 myFileMenuDemandElements = new FXMenuPane(this);
1400 myFileMenuDataElements = new FXMenuPane(this);
1401 myFileMenuMeanDataElements = new FXMenuPane(this);
1402 myFileMenuRecentNetworks = new FXMenuPane(this);
1403 myFileMenuRecentConfigs = new FXMenuPane(this);
1407 // add separator for recent files
1408 new FXMenuSeparator(myFileMenu);
1409 // build recent files
1412 new FXMenuSeparator(myFileMenu);
1413 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1414 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1415 // build modes menu
1416 myModesMenu = new FXMenuPane(this);
1418 myModesMenuTitle->setTarget(this);
1420 // build Supermode commands and hide it
1422 // add separator
1423 new FXSeparator(myModesMenu);
1424 // build modes menu commands
1426 // build edit menu
1427 myEditMenu = new FXMenuPane(this);
1429 // build edit menu commands
1431 // build separator
1432 new FXMenuSeparator(myEditMenu);
1433 // build view options
1437 // hide view options
1441 // build view menu commands
1443 // build separator
1444 new FXMenuSeparator(myEditMenu);
1445 // build front element menu commands
1447 // build separator
1448 new FXMenuSeparator(myEditMenu);
1449 // build open in sumo menu commands
1451 // build lock menu
1452 myLockMenu = new FXMenuPane(this);
1454 myLockMenuTitle->setTarget(this);
1456 // build lock menu commands
1458 // build processing menu (trigger netbuild computations)
1459 myProcessingMenu = new FXMenuPane(this);
1462 // build locate menu
1463 myLocatorMenu = new FXMenuPane(this);
1466 // build tools menu
1467 myToolsMenu = new FXMenuPane(this);
1468 myToolsAssignMenu = new FXMenuPane(this);
1469 myToolsDetectorMenu = new FXMenuPane(this);
1470 myToolsDistrictMenu = new FXMenuPane(this);
1471 myToolsDRTMenu = new FXMenuPane(this);
1472 myToolsEmissionsMenu = new FXMenuPane(this);
1473 myToolsImportMenu = new FXMenuPane(this);
1474 myToolsImportCityBrainMenu = new FXMenuPane(this);
1475 myToolsImportGTFSMenu = new FXMenuPane(this);
1476 myToolsImportVissim = new FXMenuPane(this);
1477 myToolsImportVisum = new FXMenuPane(this);
1478 myToolsNetMenu = new FXMenuPane(this);
1479 myToolsRouteMenu = new FXMenuPane(this);
1480 myToolsOutputMenu = new FXMenuPane(this);
1481 myToolsShapes = new FXMenuPane(this);
1482 myToolsTLS = new FXMenuPane(this);
1483 myToolsTriggerMenu = new FXMenuPane(this);
1484 myToolsTurnDefs = new FXMenuPane(this);
1485 myToolsVisualizationMenu = new FXMenuPane(this);
1486 myToolsXML = new FXMenuPane(this);
1488 // build tools menu cascasde
1489 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1490 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1491 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1493 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1502 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1503 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1504 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1508 // add separators between folders
1509 new FXMenuSeparator(myToolsMenu);
1510 new FXMenuSeparator(myToolsImportMenu);
1511 // create map with tool Menu panes and their associated folder
1518 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1520 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1521 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1528 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1531 // build tools
1533 // build windows menu
1534 myWindowMenu = new FXMenuPane(this);
1537 // build language menu
1539 // build help menu
1540 myHelpMenu = new FXMenuPane(this);
1543}
1544
1545
1546FXGLCanvas*
1548 // netedit uses only a single View, then return nullptr
1549 return nullptr;
1550}
1551
1552
1555 return 0;
1556}
1557
1558
1559double
1561 return 1;
1562}
1563
1564
1569
1570
1575
1576
1581
1582
1587
1588
1589void
1591 if (myViewNet && myViewNet->getNet()) {
1592 // show
1594 // set label depending of recomputing
1596 myRequireRecomputingButton->setText("");
1597 myRequireRecomputingButton->setTipText(TL("Network computed"));
1599 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1600 } else {
1601 myRequireRecomputingButton->setText(TL("Press F5"));
1602 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1604 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1605 }
1606 } else {
1607 // hide
1609 }
1610}
1611
1612
1613void
1615 // first check if net must be deleted
1616 if (myNet != nullptr) {
1617 delete myNet;
1618 myNet = nullptr;
1620 }
1621 // check if view has to be saved
1622 if (myViewNet) {
1624 // clear decals
1625 myViewNet->getDecals().clear();
1626 }
1627 // lock tracker
1628 myTrackerLock.lock();
1629 // remove trackers and other external windows
1630 while (!myGLWindows.empty()) {
1631 delete myGLWindows.front();
1632 }
1633 myViewNet = nullptr;
1634 for (FXMainWindow* const window : myTrackerWindows) {
1635 window->destroy();
1636 delete window;
1637 }
1638 myTrackerWindows.clear();
1639 // reset the caption
1640 setTitle(myTitlePrefix);
1641 // unlock tracker
1642 myTrackerLock.unlock();
1643 // remove coordinate information
1644 myGeoCoordinate->setText(TL("N/A"));
1645 myCartesianCoordinate->setText(TL("N/A"));
1646 myTestCoordinate->setText(TL("N/A"));
1647 myTestFrame->hide();
1649 // Reset textures
1651 // reset fonts
1653}
1654
1655
1656FXCursor*
1658 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1659}
1660
1661
1662void
1664 auto& neteditOptions = OptionsCont::getOptions();
1665 if (neteditOptions.getBool("new")) {
1666 // save output file
1667 const auto outputFile = neteditOptions.getString("output-file");
1668 // create new network reset all options
1670 // check if define output file
1671 if (!outputFile.empty()) {
1672 neteditOptions.resetWritable();
1673 neteditOptions.set("net-file", outputFile);
1674 }
1675 } else {
1676 // set flag
1677 myAmLoading = true;
1678 // set status bar
1679 setStatusBarText(TL("Loading console arguments."));
1680 // load console arguments
1682 // add it into recent networks and configs
1683 if (neteditOptions.getString("net-file").size() > 0) {
1684 myMenuBarFile.myRecentNetworks.appendFile(FXPath::absolute(neteditOptions.getString("net-file").c_str()));
1685 }
1686 if (neteditOptions.getString("configuration-file").size() > 0) {
1687 myMenuBarFile.myRecentConfigs.appendFile(FXPath::absolute(neteditOptions.getString("configuration-file").c_str()));
1688 }
1689 }
1690}
1691
1692
1693void
1695 auto& neteditOptions = OptionsCont::getOptions();
1696 // save windows size and position
1698 // enable loading flag and disable reloading flag
1699 myAmLoading = true;
1700 // recenter view
1701 gSchemeStorage.saveViewport(0, 0, -1, 0);
1702 // fill (reset) all options
1703 GNELoadThread::fillOptions(neteditOptions);
1704 // set default options defined in GNELoadThread::setDefaultOptions(...)
1705 GNELoadThread::setDefaultOptions(neteditOptions);
1706 // update status bar
1707 setStatusBarText(TL("Creating new network."));
1708 // create new network
1710 // update window
1711 update();
1712}
1713
1714
1715void
1716GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1717 if (networkFile.empty()) {
1718 WRITE_ERROR(TL("Trying to load an empty network."));
1719 } else {
1720 auto& neteditOptions = OptionsCont::getOptions();
1721 // stop test before calling load thread
1722 if (myInternalTest) {
1724 }
1725 // store size, position and viewport
1727 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1728 // set flag
1729 myAmLoading = true;
1730 // fill (reset) all options
1731 myLoadThread->fillOptions(neteditOptions);
1732 // set default options defined in GNELoadThread::setDefaultOptions(...)
1733 myLoadThread->setDefaultOptions(neteditOptions);
1734 // set file to load
1735 neteditOptions.resetWritable();
1736 neteditOptions.set("net-file", networkFile);
1737 // set status bar
1738 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1739 // load network
1741 // add it into recent nets
1742 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1743 }
1744}
1745
1746
1747void
1748GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1749 if (configurationFile.empty()) {
1750 WRITE_ERROR(TL("Trying to load an empty configuration."));
1751 } else {
1752 auto& neteditOptions = OptionsCont::getOptions();
1753 // store size, position and viewport
1755 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1756 // set flag
1757 myAmLoading = true;
1758 // fill (reset) all options
1759 myLoadThread->fillOptions(neteditOptions);
1760 // set default options defined in GNELoadThread::setDefaultOptions(...)
1761 myLoadThread->setDefaultOptions(neteditOptions);
1762 // set file to load
1763 neteditOptions.resetWritable();
1764 neteditOptions.set("configuration-file", configurationFile);
1765 // set status bar
1766 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1767 // load config
1769 // add it into recent configs
1770 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1771 }
1772}
1773
1774
1775void
1776GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1777 auto& neteditOptions = OptionsCont::getOptions();
1778 // store size, position and viewport
1780 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1781 // set flag
1782 myAmLoading = true;
1783 // fill (reset) all options
1784 myLoadThread->fillOptions(neteditOptions);
1785 // set default options defined in GNELoadThread::setDefaultOptions(...)
1786 myLoadThread->setDefaultOptions(neteditOptions);
1787 // recommended osm options
1788 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1789 neteditOptions.set("osm-files", OSMFile);
1790 neteditOptions.set("geometry.remove", "true");
1791 neteditOptions.set("ramps.guess", "true");
1792 neteditOptions.set("junctions.join", "true");
1793 neteditOptions.set("tls.guess-signals", "true");
1794 neteditOptions.set("tls.discard-simple", "true");
1795 // open netedit options dialog
1796 const auto neteditOptionsDialog = GNENeteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1797 // open wizard dialog
1798 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1799 // needed to set projection parameters
1800 NIFrame::checkOptions(neteditOptions);
1801 // set file to load
1802 neteditOptions.resetWritable();
1803 neteditOptions.set("configuration-file", OSMFile);
1804 // set status bar
1805 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1806 // load config
1808 }
1809}
1810
1811void
1812GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1813 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1814 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1815}
1816
1817
1818long
1820 // open question dialog box
1821 const auto questionDialog = GNEQuestionBasicDialog(this, GNEDialog::Buttons::YES_NO,
1822 TL("Recompute with volatile options"),
1823 TL("Changes produced in the net due a recomputing with"),
1824 TL("volatile options cannot be undone. Continue?"));
1825 // check result
1826 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1827 // save all elements
1828 onCmdSaveAdditionalElements(nullptr, 0, nullptr);
1829 onCmdSaveDemandElements(nullptr, 0, nullptr);
1830 onCmdSaveDataElements(nullptr, 0, nullptr);
1831 onCmdSaveMeanDataElements(nullptr, 0, nullptr);
1832 // compute with volatile options
1833 myNet->computeNetwork(this, true, true);
1835 }
1836 return 1;
1837}
1838
1839
1840bool
1843 myConsoleOptionsLoaded = false;
1844 return true;
1845 } else {
1846 return false;
1847 }
1848}
1849
1850
1855
1856
1857void
1861
1862
1863long
1864GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1865 // check that currently there is a View
1866 if (myViewNet) {
1867 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1868 }
1869 return 1;
1870}
1871
1872
1873long
1874GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1875 // check that currently there is a View
1876 if (myViewNet) {
1877 myViewNet->onCmdSetMode(sender, sel, ptr);
1878 }
1879 return 1;
1880}
1881
1882
1883long
1884GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1885 if (myViewNet) {
1886 // check if we're calling the functions using internal test
1887 switch (FXSELID(sel)) {
1890 break;
1891 case MID_GNE_LOCK_EDGE:
1893 break;
1894 case MID_GNE_LOCK_LANE:
1896 break;
1899 break;
1902 break;
1905 break;
1908 break;
1909 case MID_GNE_LOCK_WIRE:
1911 break;
1912 case MID_GNE_LOCK_TAZ:
1914 break;
1917 break;
1918 case MID_GNE_LOCK_POI:
1920 break;
1923 break;
1926 break;
1927 case MID_GNE_LOCK_ROUTE:
1929 break;
1932 break;
1935 break;
1938 break;
1939 case MID_GNE_LOCK_WALK:
1941 break;
1942 case MID_GNE_LOCK_RIDE:
1944 break;
1947 break;
1950 break;
1953 break;
1954 case MID_GNE_LOCK_STOP:
1956 break;
1959 break;
1962 break;
1965 break;
1966 default:
1967 break;
1968 }
1970 }
1971 return 1;
1972}
1973
1974
1975long
1976GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1977 // lock all
1980 return 1;
1981}
1982
1983
1984long
1986 // unlock all
1989 return 1;
1990}
1991
1992
1993long
1995 if (myViewNet) {
1996 myViewNet->update();
1997 }
1998 return 1;
1999}
2000
2001
2002long
2003GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2004 if (myViewNet) {
2006 // supermode network
2012 myLockMenuTitle->enable();
2013 } else {
2014 myLockMenuTitle->disable();
2015 }
2017 // supermode demand
2022 myLockMenuTitle->enable();
2023 } else {
2024 myLockMenuTitle->disable();
2025 }
2027 // supermode data
2031 myLockMenuTitle->enable();
2032 } else {
2033 myLockMenuTitle->disable();
2034 }
2035 } else {
2036 myLockMenuTitle->disable();
2037 }
2038 } else {
2039 myLockMenuTitle->disable();
2040 }
2041 return 1;
2042}
2043
2044
2045long
2046GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
2047 // first check if there is a view
2048 if (myViewNet) {
2049 // process depending of supermode
2051 // check what FXMenuCommand was called
2052 switch (FXSELID(sel)) {
2054 myNet->computeNetwork(this, true, false);
2056 break;
2059 break;
2062 break;
2065 break;
2068 break;
2069 default:
2070 break;
2071 }
2073 // check what FXMenuCommand was called
2074 switch (FXSELID(sel)) {
2078 break;
2081 break;
2084 break;
2087 break;
2090 break;
2091 default:
2092 break;
2093 }
2094 }
2095 // refresh to update undo-redo button
2096 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2097 }
2098 return 1;
2099}
2100
2101
2102long
2103GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2104 // get extra arguments
2105 std::string extraArg;
2107 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2108 }
2109 FXRegistry reg("SUMO netedit", "netedit");
2110 std::string netedit = "netedit";
2111 const char* sumoPath = getenv("SUMO_HOME");
2112 if (sumoPath != nullptr) {
2113#ifdef DEBUG
2114 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2115#else
2116 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2117#endif
2118 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2119 netedit = "\"" + newPath + "\"";
2120 }
2121 }
2122 std::string cmd = netedit + extraArg;
2123 // start in background
2124#ifndef WIN32
2125 cmd = cmd + " &";
2126#else
2127 // see "help start" for the parameters
2128 cmd = "start /B \"\" " + cmd;
2129#endif
2130 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2131 // yay! fun with dangerous commands... Never use this over the internet
2133 return 1;
2134}
2135
2136
2137long
2138GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2139 // get option container
2140 auto& neteditOptions = OptionsCont::getOptions();
2141 // input parameters
2142 std::string inputParameters;
2143 // if we have only a network, then load directly without creating a SumoConfig
2145 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2146 // force save network
2147 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2148 // network wasn't saved, then stop
2149 return 0;
2150 }
2151 inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2152 // write info
2153 WRITE_MESSAGE(TLF("Loading network '%' in SUMO-GUI.", neteditOptions.getString("net-file")));
2154 } else {
2155 // force save SumoConfig
2156 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2157 // SumoConfig wasn't saved, then stop
2158 return 0;
2159 }
2160 inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2161 // write info
2162 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", neteditOptions.getString("sumocfg-file")));
2163 }
2164 // save current viewport in registry
2165 FXRegistry reg("SUMO GUI", "sumo-gui");
2166 reg.read();
2167 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2168 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2169 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2170 reg.write();
2171 // declare executable
2172 std::string sumoGuiExecutable = "sumo-gui";
2173 // if SUMO_HOME is defined, update executable
2174 const char* sumoHome = getenv("SUMO_HOME");
2175 if (sumoHome != nullptr) {
2176 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2177 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2178 sumoGuiExecutable = "\"" + newPath + "\"";
2179 }
2180 }
2181 // declare command
2182 std::string cmd = sumoGuiExecutable + inputParameters;
2183 // start in background
2184#ifndef WIN32
2185 cmd = cmd + " &";
2186#else
2187 // see "help start" for the parameters
2188 cmd = "start /B \"\" " + cmd;
2189#endif
2190 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2191 // yay! fun with dangerous commands... Never use this over the internet
2193 return 1;
2194}
2195
2196
2197long
2198GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2199 // check that view exists
2200 if (myViewNet) {
2201 // first check if we're selecting a subset of edges in TAZ Frame
2203 // clear current selection
2205 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2206 // check if stop select parent
2208 // and stop select paretn
2210 } else {
2211 // clear inspected elements
2213 }
2214 } else {
2215 // abort current operation
2217 }
2218 }
2219 return 1;
2220}
2221
2222
2223long
2224GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2225 // check that view exists
2226 if (myViewNet) {
2228 }
2229 return 1;
2230}
2231
2232
2233long
2234GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2235 // check that view exists
2236 if (myViewNet) {
2238 }
2239 return 1;
2240}
2241
2242
2243long
2244GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2245 // check that view exists
2246 if (myViewNet) {
2248 }
2249 return 1;
2250}
2251
2252
2253long
2254GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2255 // check that view exists
2256 if (myViewNet) {
2258 }
2259 return 1;
2260}
2261
2262
2263long
2265 // check that view exists
2266 if (myViewNet) {
2268 }
2269 return 1;
2270}
2271
2272
2273long
2274GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2275 // check that view exists
2276 if (myViewNet) {
2278 // refresh flow frames
2279 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2281 }
2282 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2284 }
2285 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2287 }
2288 // refresh inspector frame
2289 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2291 }
2292 }
2293 return 1;
2294}
2295
2296
2297long
2298GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2299 // check that view exists
2300 if (myViewNet) {
2302 }
2303 return 1;
2304}
2305
2306
2307long
2308GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2311 }
2312 return 1;
2313}
2314
2315
2316long
2317GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2318 // enable or disable sender element depending of viewNet
2319 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2320}
2321
2322
2323long
2326 return 1;
2327}
2328
2329
2330long
2331GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2332 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2333 return 1;
2334}
2335
2336
2337long
2338GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2340}
2341
2342
2343long
2344GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2345 // check that view exists
2346 if (myViewNet) {
2348 }
2349 return 1;
2350}
2351
2352
2353long
2354GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2355 // check that view exists
2356 if (myViewNet) {
2358 }
2359 return 1;
2360}
2361
2362
2363long
2364GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2365 // check that view exists
2366 if (myViewNet) {
2367 // Call manually toggle grid function
2368 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2369 }
2370 return 1;
2371}
2372
2373
2374long
2375GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2376 // check that view exists
2377 if (myViewNet) {
2378 // Call manually toggle junction shape function
2379 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2380 }
2381 return 1;
2382}
2383
2384
2385long
2386GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2387 if (myViewNet) {
2388 // get first inspected AC
2389 auto inspectedAC = myViewNet->getInspectedElements().getFirstAC();
2390 if (inspectedAC) {
2391 // set or clear front attribute
2392 if (inspectedAC->isMarkedForDrawingFront()) {
2393 inspectedAC->unmarkForDrawingFront();
2394 } else {
2395 inspectedAC->markForDrawingFront();
2396 }
2397 } else {
2399 }
2400 myViewNet->update();
2401 }
2402 return 1;
2403}
2404
2405
2406long
2407GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2408 // first check that we have a ViewNet
2409 if (myViewNet) {
2410 // first check what selector was called
2411 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2412 // check that numericalKeyPressed is valid
2413 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2414 return 0;
2415 }
2416 // declare a vector in which save visible menu commands
2417 std::vector<MFXCheckableButton*> visibleMenuCommands;
2418 // get common, network and demand visible menu commands
2422 // now check that numericalKeyPressed isn't greater than visible view options
2423 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2424 return 0;
2425 }
2426 // toggle edit options
2428 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2429 return 1;
2431 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2432 return 1;
2434 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2435 return 1;
2436 }
2437 }
2438 return 0;
2439}
2440
2441
2442long
2443GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2444 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2445 return 1;
2446}
2447
2448
2449long
2450GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2451 // update in every version
2452 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2453 return 1;
2454}
2455
2456
2457long
2458GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2459 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2460 return 1;
2461}
2462
2463
2464long
2467 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2468 } else {
2469 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2470 }
2471}
2472
2473
2474long
2475GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2476 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2477 myAllowUndoRedo = true;
2478 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2479 } else {
2480 myAllowUndoRedo = false;
2481 // drop undo-redo list after changing flag
2482 myUndoList->clear();
2483 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2484 }
2485}
2486
2487
2488long
2490 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2492 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2493 } else {
2494 myAllowUndoRedoLoading = false;
2495 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2496 }
2497}
2498
2499
2500long
2501GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2502 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2503 return 1;
2504}
2505
2506
2507long
2508GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2509 // create and open feedback dialog
2510 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2511 feedback->create();
2512 feedback->show(PLACEMENT_OWNER);
2513 return 1;
2514}
2515
2516
2517long
2519 auto& neteditOptions = OptionsCont::getOptions();
2520 // open netedit option dialog
2521 const auto neteditOptionsDialog = GNENeteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2522 // continue depending of result
2523 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2524 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2525 NBFrame::checkOptions(neteditOptions);
2526 NWFrame::checkOptions(neteditOptions);
2527 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2528 // check if mark netedit config as unsaved
2529 if (neteditOptionsDialog.isOptionModified() && myNet) {
2531 }
2532 }
2533 return 1;
2534}
2535
2536
2537long
2539 // open sumo option dialog
2540 const auto sumoOptionsDialog = GNESumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2541 // continue depending of result
2542 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2544 }
2545 return 1;
2546}
2547
2548
2549long
2552 return 1;
2553}
2554
2555
2556long
2558 // open netgenerate options dialog
2560 return 1;
2561}
2562
2563
2564long
2565GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2566 // Check conditions
2567 if (myViewNet == nullptr) {
2568 return 0;
2569 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2570 return 0;
2571 } else {
2572 // check supermode (currently ignore supermode data)
2575 // abort if user doesn't press "yes"
2577 return 0;
2578 }
2579 }
2581 // update current show frame after undo
2584 }
2585 // update manually undo/redo menu commands (see #6005)
2588 // update toolbar undo-redo buttons
2590 return 1;
2591 }
2592}
2593
2594
2595long
2596GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2597 // Check conditions
2598 if (myViewNet == nullptr) {
2599 return 0;
2600 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2601 return 0;
2602 } else {
2603 // check supermode (currently ignore supermode data)
2606 // abort if user doesn't press "yes"
2608 return 0;
2609 }
2610 }
2612 // update current show frame after redo
2615 }
2616 // update manually undo/redo menu commands (see #6005)
2619 // update toolbar undo-redo buttons
2621 return 1;
2622 }
2623}
2624
2625
2626long
2628 // open UndoList Dialog
2629 GNEUndoListDialog(this);
2630 return 1;
2631}
2632
2633
2634long
2635GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2636 // check if net exist and there is something to undo/redo
2637 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2638 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2639 } else {
2640 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2641 }
2642 return 1;
2643}
2644
2645
2646long
2648 // first check viewNet
2650 // update demand path calculator
2652 }
2653 return 1;
2654}
2655
2656
2657long
2658GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2659 // Prepared for #6042
2660 return 1;
2661}
2662
2663
2664long
2665GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2666 // Prepared for #6042
2667 return 1;
2668}
2669
2670
2671long
2672GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2673 // Prepared for #6042
2674 return 1;
2675}
2676
2677
2678long
2679GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2680 // first check if myViewNet exist
2681 if (myViewNet) {
2682 // call set template in inspector frame
2684 }
2685 return 1;
2686}
2687
2688
2689long
2690GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2691 // first check if myViewNet exist
2692 if (myViewNet) {
2693 // call copy template in inspector frame
2695 }
2696 return 1;
2697}
2698
2699
2700long
2701GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2702 // first check if myViewNet exist
2703 if (myViewNet) {
2704 // call clear template in inspector frame
2706 }
2707 return 1;
2708}
2709
2710
2711long
2712GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2713 // check if net exist
2714 if (myNet) {
2716 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2717 } else {
2719 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2720 }
2721}
2722
2723
2724long
2725GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2726 // check if at least there is one edge in the network
2727 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2728 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2729 } else {
2730 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2731 }
2732}
2733
2734
2735long
2736GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2737 // check if net, viewnet and front attribute exist
2738 if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2739 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2740 } else {
2741 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2742 }
2743}
2744
2745
2746long
2747GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2748 if (myNet == nullptr) {
2749 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2750 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2751 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2752 } else {
2753 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2754 }
2755}
2756
2757
2758long
2759GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2760 if (myNet == nullptr) {
2761 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2763 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2764 } else {
2765 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2766 }
2767}
2768
2769
2770long
2772 if (myNet == nullptr) {
2773 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2774 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2775 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2776 } else {
2777 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2778 }
2779}
2780
2781
2782long
2783GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2784 if (myNet == nullptr) {
2785 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2786 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2787 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2788 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2789 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2790 } else {
2791 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2792 }
2793}
2794
2795
2796long
2797GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2798 if (myNet == nullptr) {
2799 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2800 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2801 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2802 } else {
2803 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2804 }
2805
2806}
2807
2808
2809long
2810GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2811 if (myNet == nullptr) {
2812 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2814 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2815 } else {
2816 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2817 }
2818}
2819
2820
2821long
2822GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2823 if (myNet == nullptr) {
2824 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2825 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2826 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2827 } else {
2828 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2829 }
2830
2831}
2832
2833
2834long
2835GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2836 if (myNet == nullptr) {
2837 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2838 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2839 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2840 } else {
2841 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2842 }
2843
2844}
2845
2846
2847long
2848GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2849 if (myNet == nullptr) {
2850 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2851 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2852 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2853 } else {
2854 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2855 }
2856}
2857
2858
2859long
2861 if (myNet == nullptr) {
2862 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2863 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2864 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2865 } else {
2866 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2867 }
2868
2869}
2870
2871
2872long
2873GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2874 return myUndoList->onUpdUndo(sender, sel, ptr);
2875}
2876
2877
2878long
2879GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2880 return myUndoList->onUpdRedo(sender, sel, ptr);
2881}
2882
2883
2884long
2885GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2886 // first check viewNet
2887 if (myViewNet) {
2888 // check supermode network
2890 // disable
2891 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2893 // disable
2894 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2895 } else {
2896 // enable
2897 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2898 }
2899 } else {
2900 // disable
2901 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2902 }
2903}
2904
2905
2906long
2907GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2908 // check viewNet
2909 if (myViewNet) {
2910 // continue depending of selector
2911 switch (FXSELID(sel)) {
2912 // Network
2914 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2916 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2918 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2920 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2922 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2924 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2926 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2928 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2930 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2932 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2934 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2936 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
2938 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2940 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2942 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2944 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2945 // Demand
2947 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2949 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2951 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2953 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2955 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2957 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2959 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2961 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2963 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2965 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2967 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2968 // Data
2970 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2972 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
2974 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
2976 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
2978 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2980 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2982 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
2984 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
2985 default:
2986 return 0;
2987 }
2988 } else {
2989 return 0;
2990 }
2991}
2992
2993
2994long
2995GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
2996 // get menuCheck
2997 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
2998 // check viewNet
2999 if (myViewNet && menuCheck) {
3000 // continue depending of selector
3001 switch (FXSELID(sel)) {
3002 // Network
3005 menuCheck->setCheck(TRUE);
3006 } else {
3007 menuCheck->setCheck(FALSE);
3008 }
3009 break;
3012 menuCheck->setCheck(TRUE);
3013 } else {
3014 menuCheck->setCheck(FALSE);
3015 }
3016 break;
3019 menuCheck->setCheck(TRUE);
3020 } else {
3021 menuCheck->setCheck(FALSE);
3022 }
3023 break;
3026 menuCheck->setCheck(TRUE);
3027 } else {
3028 menuCheck->setCheck(FALSE);
3029 }
3030 break;
3033 menuCheck->setCheck(TRUE);
3034 } else {
3035 menuCheck->setCheck(FALSE);
3036 }
3037 break;
3040 menuCheck->setCheck(TRUE);
3041 } else {
3042 menuCheck->setCheck(FALSE);
3043 }
3044 break;
3047 menuCheck->setCheck(TRUE);
3048 } else {
3049 menuCheck->setCheck(FALSE);
3050 }
3051 break;
3054 menuCheck->setCheck(TRUE);
3055 } else {
3056 menuCheck->setCheck(FALSE);
3057 }
3058 break;
3061 menuCheck->setCheck(TRUE);
3062 } else {
3063 menuCheck->setCheck(FALSE);
3064 }
3065 break;
3068 menuCheck->setCheck(TRUE);
3069 } else {
3070 menuCheck->setCheck(FALSE);
3071 }
3072 break;
3075 menuCheck->setCheck(TRUE);
3076 } else {
3077 menuCheck->setCheck(FALSE);
3078 }
3079 break;
3082 menuCheck->setCheck(TRUE);
3083 } else {
3084 menuCheck->setCheck(FALSE);
3085 }
3086 break;
3089 menuCheck->setCheck(TRUE);
3090 } else {
3091 menuCheck->setCheck(FALSE);
3092 }
3093 break;
3096 menuCheck->setCheck(TRUE);
3097 } else {
3098 menuCheck->setCheck(FALSE);
3099 }
3100 break;
3103 menuCheck->setCheck(TRUE);
3104 } else {
3105 menuCheck->setCheck(FALSE);
3106 }
3107 break;
3110 menuCheck->setCheck(TRUE);
3111 } else {
3112 menuCheck->setCheck(FALSE);
3113 }
3114 break;
3115 // Demand
3118 menuCheck->setCheck(TRUE);
3119 } else {
3120 menuCheck->setCheck(FALSE);
3121 }
3122 break;
3125 menuCheck->setCheck(TRUE);
3126 } else {
3127 menuCheck->setCheck(FALSE);
3128 }
3129 break;
3132 menuCheck->setCheck(TRUE);
3133 } else {
3134 menuCheck->setCheck(FALSE);
3135 }
3136 break;
3139 menuCheck->setCheck(TRUE);
3140 } else {
3141 menuCheck->setCheck(FALSE);
3142 }
3143 break;
3146 menuCheck->setCheck(TRUE);
3147 } else {
3148 menuCheck->setCheck(FALSE);
3149 }
3150 break;
3153 menuCheck->setCheck(TRUE);
3154 } else {
3155 menuCheck->setCheck(FALSE);
3156 }
3157 break;
3160 menuCheck->setCheck(TRUE);
3161 } else {
3162 menuCheck->setCheck(FALSE);
3163 }
3164 // special case for lock persons
3166 menuCheck->enable();
3167 } else {
3168 menuCheck->disable();
3169 }
3170 break;
3173 menuCheck->setCheck(TRUE);
3174 } else {
3175 menuCheck->setCheck(FALSE);
3176 }
3177 break;
3180 menuCheck->setCheck(TRUE);
3181 } else {
3182 menuCheck->setCheck(FALSE);
3183 }
3184 // special case for lock containers
3186 menuCheck->enable();
3187 } else {
3188 menuCheck->disable();
3189 }
3190 break;
3193 menuCheck->setCheck(TRUE);
3194 } else {
3195 menuCheck->setCheck(FALSE);
3196 }
3197 break;
3200 menuCheck->setCheck(TRUE);
3201 } else {
3202 menuCheck->setCheck(FALSE);
3203 }
3204 break;
3205 // Data
3208 menuCheck->setCheck(TRUE);
3209 } else {
3210 menuCheck->setCheck(FALSE);
3211 }
3212 break;
3215 menuCheck->setCheck(TRUE);
3216 } else {
3217 menuCheck->setCheck(FALSE);
3218 }
3219 break;
3222 menuCheck->setCheck(TRUE);
3223 } else {
3224 menuCheck->setCheck(FALSE);
3225 }
3226 break;
3229 menuCheck->setCheck(TRUE);
3230 } else {
3231 menuCheck->setCheck(FALSE);
3232 }
3233 break;
3236 menuCheck->setCheck(TRUE);
3237 } else {
3238 menuCheck->setCheck(FALSE);
3239 }
3240 break;
3243 menuCheck->setCheck(TRUE);
3244 } else {
3245 menuCheck->setCheck(FALSE);
3246 }
3247 break;
3248
3251 menuCheck->setCheck(TRUE);
3252 } else {
3253 menuCheck->setCheck(FALSE);
3254 }
3255 break;
3258 menuCheck->setCheck(TRUE);
3259 } else {
3260 menuCheck->setCheck(FALSE);
3261 }
3262 break;
3263 default:
3264 break;
3265 }
3266 }
3267 return 0;
3268}
3269
3270
3271long
3272GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3273 auto& neteditOptions = OptionsCont::getOptions();
3274 if (myNet->getSavingStatus()->isNetworkSaved() && !neteditOptions.getBool("force-saving")) {
3275 // nothing to save
3276 return 1;
3277 }
3278 // first check if we have to set the output filename
3279 if ((sel == MID_GNE_AUTOMATICFILENAME) && neteditOptions.getString("net-file").empty()) {
3280 neteditOptions.set("net-file", *(static_cast<std::string*>(ptr)) + ".net.xml");
3281 }
3282 // function onCmdSaveNetworkAs must be executed if this is the first save
3283 if (neteditOptions.getString("net-file").empty()) {
3284 return onCmdSaveNetworkAs(sender, sel, ptr);
3285 } else {
3286 // always recompute before saving
3287 myNet->computeNetwork(this);
3288 // se net file in SUMO options
3290 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3291 bool saved = false;
3292 try {
3293 // obtain invalid networkElements (currently only edges or crossings
3294 std::vector<GNENetworkElement*> invalidNetworkElements;
3295 // iterate over crossings and edges
3296 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3297 if (!edge.second->isNetworkElementValid()) {
3298 invalidNetworkElements.push_back(edge.second);
3299 }
3300 }
3301 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3302 if (!crossing.second->isNetworkElementValid()) {
3303 invalidNetworkElements.push_back(crossing.second);
3304 }
3305 }
3306 // if there are invalid network elements, open GNEFixNetworkElements
3307 if (invalidNetworkElements.size() > 0) {
3308 // create fix network elements dialog
3309 const auto fixNetworkElementsDialog = GNEFixNetworkElements(this, invalidNetworkElements);
3310 // continue depending of result
3311 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3312 // Save network
3313 myNet->saveNetwork();
3314 saved = true;
3315 } else {
3316 // stop
3317 return 0;
3318 }
3319 } else {
3320 // Save network
3321 myNet->saveNetwork();
3322 saved = true;
3323 }
3324 } catch (IOError& e) {
3325 // open error message box
3326 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3327 }
3328 if (saved) {
3329 // write info
3330 WRITE_MESSAGE(TLF("Network saved in '%'.", neteditOptions.getString("net-file")));
3331 // After saving a net successfully, add it into Recent Nets list.
3332 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3334 } else {
3336 WRITE_ERROR(TLF("Could not save network in '%'.", neteditOptions.getString("net-file")));
3337 return 0;
3338 }
3339 return 1;
3340 }
3341}
3342
3343
3344long
3345GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3346 // get network file file
3347 const auto networkFileDialog = GNEFileDialog(this, TL("network file"),
3351 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3352 // set ouput file in netedit configs
3353 auto& neteditOptions = OptionsCont::getOptions();
3354 neteditOptions.resetWritable();
3355 neteditOptions.set("net-file", networkFileDialog.getFilename());
3356 // update netedit title with the network name
3357 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3358 // enable save network
3360 // save network
3361 return onCmdSaveNetwork(nullptr, 0, nullptr);
3362 } else {
3363 return 0;
3364 }
3365}
3366
3367
3368long
3369GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3370 // get neteditConfig filename
3371 const auto plainXMLFileDialog = GNEFileDialog(this, TL("plain XML file"),
3375 // Remove extension
3376 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3377 auto plainXMLFile = plainXMLFileDialog.getFilename();
3378 // adjust file
3379 if (plainXMLFile.back() == '.') {
3380 plainXMLFile.pop_back();
3381 } else {
3382 plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3383 plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3384 plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3385 plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3386 plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3387 plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3388 }
3389 // continue depending of file
3390 if (!plainXMLFile.empty()) {
3391 // start saving plain XML
3392 getApp()->beginWaitCursor();
3393 try {
3394 myNet->savePlain(plainXMLFile);
3395 // write info
3396 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLFile));
3397 } catch (IOError& e) {
3398 // open message box
3399 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3400 }
3401 // end saving plain XML
3402 getApp()->endWaitCursor();
3403 // set focus again in viewNet
3404 myViewNet->setFocus();
3405 }
3406 }
3407 return 1;
3408}
3409
3410
3411long
3413 // get neteditConfig filename
3414 const auto joinedJunctionsFileDialog = GNEFileDialog(this, TL("joined junctions file"),
3418 // continue depending of file
3419 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3420 getApp()->beginWaitCursor();
3421 try {
3422 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3423 // write info
3424 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3425 } catch (IOError& e) {
3426 // opening error message
3427 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3428 }
3429 getApp()->endWaitCursor();
3430 // set focus again in viewNet
3431 myViewNet->setFocus();
3432 }
3433 return 1;
3434}
3435
3436
3437long
3439 // obtain netedit option container
3440 auto& neteditOptions = OptionsCont::getOptions();
3441 neteditOptions.resetWritable();
3442 // Check if configuration file was already set at start of netedit or with a previous save
3443 if (neteditOptions.getString("configuration-file").empty()) {
3444 return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3445 } else {
3446 // get config file
3447 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3448 // get file path
3449 const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3450 // get patter file
3451 auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3452 // update netedit config
3454 // save all elements giving automatic names based on patter if their file isn't defined
3455 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3456 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3457 return 0;
3458 }
3459 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3460 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3461 return 0;
3462 }
3463 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3464 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3465 return 0;
3466 }
3467 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3468 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3469 return 0;
3470 }
3471 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3472 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3473 return 0;
3474 }
3475 // configuration
3476 std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3477 if (out.good()) {
3478 // write netedit config
3479 neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3480 // write info
3481 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3482 // config saved
3484 // After saving a config successfully, add it into recent configs
3485 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3486 } else {
3487 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3488 }
3489 out.close();
3490 return 1;
3491 }
3492}
3493
3494
3495long
3496GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3497 auto& neteditOptions = OptionsCont::getOptions();
3498 // get neteditConfig filename
3499 const auto neteditConfigFileDialog = GNEFileDialog(this, TL("netedit config file"),
3503 // continue depending of file
3504 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3505 neteditOptions.resetWritable();
3506 neteditOptions.set("configuration-file", neteditConfigFileDialog.getFilename());
3507 // continue saving netedit config
3508 return onCmdSaveNeteditConfig(sender, sel, ptr);
3509 } else {
3510 return 0;
3511 }
3512}
3513
3514
3515long
3516GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3517 // check if enable or disable save netedit config button
3518 if (myNet == nullptr) {
3519 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3520 } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3521 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3522 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3523 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3524 } else {
3525 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3526 }
3527 // check if enable/disable save individual files
3528 if (myNet) {
3532 } else {
3534 }
3535 }
3536 return 1;
3537}
3538
3539
3540long
3541GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3542 // obtain netedit option container
3543 auto& neteditOptions = OptionsCont::getOptions();
3544 // reset containers
3545 neteditOptions.resetWritable();
3547 // Check if configuration file was already set at start of netedit or with a previous save
3548 if (neteditOptions.getString("sumocfg-file").empty()) {
3549 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3550 } else {
3551 // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3552 const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3553 const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3554 const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3555 // get SumoConfig file
3556 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3557 // get config file without extension
3558 auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3559 // update netedit config
3561 // save all elements giving automatic names based on patter in their file isn't defined
3562 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3563 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3564 return 0;
3565 }
3566 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3567 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3568 return 0;
3569 }
3570 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3571 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3572 return 0;
3573 }
3574 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3575 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3576 return 0;
3577 }
3578 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3579 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3580 return 0;
3581 }
3582 // set input in sumo options
3583 setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3584 // if we have trips or flow over junctions, add option junction-taz
3587 mySumoOptions.set("junction-taz", "true");
3588 }
3589 std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3590 if (out.good()) {
3591 // write SUMO config
3592 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3593 // write info
3594 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3595 // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3596 if (!ignoreAdditionals && !ignoreDemandElements) {
3598 }
3599 // After saving a config successfully, add it into recent configs
3600 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3601 } else {
3602 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3603 }
3604 out.close();
3605 return 1;
3606 }
3607}
3608
3609
3610long
3611GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3612 auto& neteditOptions = OptionsCont::getOptions();
3613 // get sumoConfig filename
3614 const auto sumoConfigFileDialog = GNEFileDialog(this, TL("sumo config file"),
3618 // continue depending of file
3619 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3620 // save file in netedit options
3621 neteditOptions.resetWritable();
3622 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
3623 // continue saving SUMO Config
3624 return onCmdSaveSumoConfig(sender, sel, ptr);
3625 } else {
3626 return 0;
3627 }
3628}
3629
3630
3631long
3632GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3633 if (myNet == nullptr) {
3634 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3635 } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3636 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3637 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3638 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3639 } else {
3640 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3641 }
3642}
3643
3644
3645long
3646GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3647 // get option container
3648 auto& neteditOptions = OptionsCont::getOptions();
3649 // Check if TLS Programs file was already set at start of netedit or with a previous save
3650 if (neteditOptions.getString("tls-file").empty()) {
3651 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3652 } else {
3653 // Start saving TLS Programs
3654 getApp()->beginWaitCursor();
3655 try {
3656 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3657 myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3658 // write info
3659 WRITE_MESSAGE(TLF("TLS Programs saved in '%'.", neteditOptions.getString("tls-file")));
3660 } catch (IOError& e) {
3661 // open error message box
3662 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3663 }
3665 getApp()->endWaitCursor();
3666 // set focus again in viewNet
3667 myViewNet->setFocus();
3668 }
3669 return 1;
3670}
3671
3672
3673long
3674GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3675 if (myNet == nullptr) {
3676 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3677 } else {
3678 // check if there is at least one TLS
3679 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3680 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3681 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3682 }
3683 }
3684 // no TLS, then disable
3685 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3686 }
3687}
3688
3689
3690long
3691GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3692 // get option container
3693 auto& neteditOptions = OptionsCont::getOptions();
3694 // Check if edgeType file was already set at start of netedit or with a previous save
3695 if (neteditOptions.getString("edgetypes-file").empty()) {
3696 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3697 } else {
3698 // Start saving edgeTypes
3699 getApp()->beginWaitCursor();
3700 try {
3701 myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3702 // write info
3703 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", neteditOptions.getString("edgetypes-file")));
3704 } catch (IOError& e) {
3705 // open error message box
3706 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3707 }
3709 getApp()->endWaitCursor();
3710 }
3711 return 1;
3712}
3713
3714
3715long
3716GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3717 // check if net exist and there are edge types
3718 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3719 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3720 } else {
3721 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3722 }
3723 return 1;
3724}
3725
3726
3727long
3729 // get option container
3730 auto& neteditOptions = OptionsCont::getOptions();
3731 // get TLS file
3732 const auto TLSfileDialog = GNEFileDialog(this, TL("Traffic Light definitions file"),
3736 // check tat file is valid
3737 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3738 // change value of "tls-file"
3739 neteditOptions.resetWritable();
3740 neteditOptions.set("tls-file", TLSfileDialog.getFilename());
3741 // enable save netedit config
3743 // set focus again in viewNet
3744 myViewNet->setFocus();
3745 // save TLS Programs
3746 return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3747 } else {
3748 return 1;
3749 }
3750}
3751
3752
3753long
3754GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3755 // get option container
3756 auto& neteditOptions = OptionsCont::getOptions();
3757 // get network file file
3758 const auto edgeTypeFileDialog = GNEFileDialog(this, TL("EdgeTypes file"),
3762 // check tat file is valid
3763 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3764 // change value of "edgetypes-file"
3765 neteditOptions.resetWritable();
3766 neteditOptions.set("edgetypes-file", edgeTypeFileDialog.getFilename());
3767 // enable save netedit config
3769 // set focus again in viewNet
3770 myViewNet->setFocus();
3771 // save edgeTypes
3772 return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3773 } else {
3774 return 1;
3775 }
3776}
3777
3778
3779long
3781 // get file
3782 const auto additionalFileDialog = GNEFileDialog(this, TL("Additional elements file"),
3786 // check file
3787 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3788 // flag for save current saving status
3789 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3790 // disable validation for additionals
3791 XMLSubSys::setValidation("never", "auto", "auto");
3792 // Create additional handler
3793 GNEGeneralHandler generalHandler(myNet, additionalFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3794 // begin undoList operation
3795 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", additionalFileDialog.getFilename()));
3796 // Run parser
3797 if (!generalHandler.parse()) {
3798 // write error
3799 WRITE_ERROR(TLF("Loading of additional file '%' failed.", additionalFileDialog.getFilename()));
3800 } else {
3801 // write info
3802 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", additionalFileDialog.getFilename()));
3803 // enable save if there is errors loading additionals
3804 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3806 }
3807 }
3808 // end undoList operation
3809 myUndoList->end();
3810 // restore validation for additionals
3811 XMLSubSys::setValidation("auto", "auto", "auto");
3812 // check if clear undoList
3814 myUndoList->clear();
3815 }
3816 update();
3817 }
3818 return 1;
3819}
3820
3821
3822long
3824 // disable validation for additionals
3825 XMLSubSys::setValidation("never", "auto", "auto");
3826 // begin undoList operation
3827 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
3828 // clear additionals
3830 // iterate over all additional files
3831 for (const auto& additionalFileName : myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames()) {
3832 // Create general handler
3833 GNEGeneralHandler generalHandler(myNet, additionalFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3834 // force overwritte elements
3835 generalHandler.forceOverwriteElements();
3836 // Run parser
3837 if (!generalHandler.parse()) {
3838 WRITE_ERROR(TLF("Reloading of additional file '%' failed.", additionalFileName));
3839 } else {
3840 WRITE_MESSAGE(TLF("Reloading of additional file '%' successfully.", additionalFileName));
3841 }
3842 }
3843 // end undoList operation
3844 myUndoList->end();
3845 // restore validation for additionals
3846 XMLSubSys::setValidation("auto", "auto", "auto");
3847 // check if clear undoList
3849 myUndoList->clear();
3850 }
3851 update();
3852 return 1;
3853}
3854
3855
3856long
3857GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
3858 if (myViewNet == nullptr) {
3859 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3860 } else if (myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames().empty()) {
3861 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3862 } else {
3863 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3864 }
3865}
3866
3867
3868long
3869GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
3870 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
3871 // get option container
3872 auto& neteditOptions = OptionsCont::getOptions();
3873 if (myNet->getSavingStatus()->isAdditionalsSaved() && !neteditOptions.getBool("force-saving")) {
3874 // nothing to save
3875 return 1;
3876 }
3877 // check if we have to set the output filename
3878 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getAdditionalFilenames().empty()) {
3879 savingFileHandler->updateAdditionalEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".add.xml");
3880 }
3881 // check if we have to open save as dialog
3882 if (savingFileHandler->getAdditionalFilenames().empty()) {
3883 // choose file to save
3884 return onCmdSaveAdditionalElementsUnified(sender, sel, ptr);
3885 } else {
3886 // always recompute before saving
3887 myNet->computeNetwork(this);
3888 try {
3889 // compute before saving (for detectors positions)
3890 myNet->computeNetwork(this);
3891 // save additionals
3892 const bool savingResult = myNet->saveAdditionals();
3893 // show info
3894 if (savingResult) {
3895 WRITE_MESSAGE(TL("Additionals saved."));
3896 return 1;
3897 } else {
3898 WRITE_MESSAGE(TL("Saving additional aborted."));
3899 return 0;
3900 }
3901 } catch (IOError& e) {
3902 // open error message box
3903 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
3904 }
3905 return 0;
3906 }
3907}
3908
3909
3910long
3911GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
3912 // get option container
3913 auto& neteditOptions = OptionsCont::getOptions();
3914 // declare current folder
3915 FXString currentFolder = gCurrentFolder;
3916 // set current folder
3917 if (neteditOptions.getString("configuration-file").size() > 0) {
3918 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3919 } else if (neteditOptions.getString("net-file").size() > 0) {
3920 currentFolder = getFolder(neteditOptions.getString("net-file"));
3921 }
3922 // get additional file
3923 const auto additionalFileDialog = GNEFileDialog(this, TL("Additional elements file"),
3927 // check that file is valid
3928 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3929 // begin undoList operation
3930 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
3931 // iterate over all demand elementes and change file
3932 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
3933 for (const auto& additionalElement : additionalElementTag.second) {
3934 additionalElement.second->setAttribute(GNE_ATTR_ADDITIONAL_FILE, additionalFileDialog.getFilename(), myUndoList);
3935 }
3936 }
3937 // end undoList operation
3938 myUndoList->end();
3939 // save additionals
3940 return onCmdSaveAdditionalElements(sender, sel, ptr);
3941 } else {
3942 return 0;
3943 }
3944}
3945
3946
3947long
3949 // get juPedSim file
3950 const auto juPedSimfileDialog = GNEFileDialog(this, TL("JuPedSim elements file"),
3954 // check that file is valid
3955 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3956 try {
3957 // get all jupedsims
3958 std::unordered_set<const GNEAttributeCarrier*> juPedSimElements;
3959 for (const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3960 if (myTagPropertiesDatabase->getTagProperty(additionalTag.first, true)->isJuPedSimElement()) {
3961 for (const auto& additional : additionalTag.second) {
3962 juPedSimElements.insert(additional.second);
3963 }
3964 }
3965 }
3966 // save additionals
3967 const bool savingResult = myNet->saveJuPedSimElements(juPedSimElements, juPedSimfileDialog.getFilename());
3968 // set focus again in viewNet
3969 myViewNet->setFocus();
3970 // show info
3971 if (savingResult) {
3972 WRITE_MESSAGE(TL("JuPedSim elements saved."));
3973 return 1;
3974 } else {
3975 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
3976
3977 return 0;
3978 }
3979 } catch (IOError& e) {
3980 // open error message box
3981 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
3982 }
3983 }
3984 return 0;
3985}
3986
3987
3988long
3990 // get file
3991 const auto routeFileDialog = GNEFileDialog(this, TL("Route elements file"),
3995 // check file
3996 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3997 // save previous demand element status saving
3998 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
3999 // disable validation for additionals
4000 XMLSubSys::setValidation("never", "auto", "auto");
4001 // Create generic handler
4002 GNEGeneralHandler handler(myNet, routeFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4003 // begin undoList operation
4004 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", routeFileDialog.getFilename()));
4005 // Run parser for additionals
4006 if (!handler.parse()) {
4007 // write error
4008 WRITE_ERROR(TLF("Loading of route file '%' failed.", routeFileDialog.getFilename()));
4009 } else {
4010 // show info
4011 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", routeFileDialog.getFilename()));
4012 // enable demand elements if there is an error creating element
4013 if (previouslySaved && !handler.isErrorCreatingElement()) {
4015 }
4016 }
4017 // end undoList operation
4018 myUndoList->end();
4019 // restore validation
4020 XMLSubSys::setValidation("auto", "auto", "auto");
4021 // check if clear undoList
4023 myUndoList->clear();
4024 }
4025 update();
4026 }
4027 return 1;
4028}
4029
4030
4031long
4033 // disable validation for additionals
4034 XMLSubSys::setValidation("never", "auto", "auto");
4035 // begin undoList operation
4036 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4037 // clear demand elements
4039 // iterate over all demand elements
4040 for (const auto& demandFileName : myNet->getSavingFilesHandler()->getDemandFilenames()) {
4041 // Create handler
4042 GNEGeneralHandler generalHandler(myNet, demandFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4043 // force overwritte elements
4044 generalHandler.forceOverwriteElements();
4045 // Run parser for additionals
4046 if (!generalHandler.parse()) {
4047 WRITE_ERROR(TLF("Reloading of route file '%' failed.", demandFileName));
4048 } else {
4049 WRITE_MESSAGE(TLF("Reloading of route file '%' successfully.", demandFileName));
4050 }
4051 }
4052 // end undoList operation and update view
4053 myUndoList->end();
4054 // restore validation for demand
4055 XMLSubSys::setValidation("auto", "auto", "auto");
4056 // check if clear undoList
4058 myUndoList->clear();
4059 }
4060 update();
4061 return 1;
4062}
4063
4064
4065long
4066GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4067 if (myViewNet == nullptr) {
4068 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4069 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDemandFilenames().empty()) {
4070 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4071 } else {
4072 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4073 }
4074}
4075
4076
4077long
4078GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4079 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4080 // get option container
4081 auto& neteditOptions = OptionsCont::getOptions();
4082 // check saving conditions
4083 if (myNet->getSavingStatus()->isDemandElementsSaved() && !neteditOptions.getBool("force-saving")) {
4084 // nothing to save
4085 return 1;
4086 }
4087 // check if we have to set the output filename
4088 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDemandFilenames().empty()) {
4089 savingFileHandler->updateDemandEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".rou.xml");
4090 }
4091 // check if we have to open save as dialog
4092 if (savingFileHandler->getDemandFilenames().empty()) {
4093 // choose file to save
4094 return onCmdSaveDemandElementsUnified(sender, sel, ptr);
4095 } else {
4096 // always recompute before saving
4097 myNet->computeNetwork(this);
4098 try {
4099 // save demand elements
4100 const bool savingResult = myNet->saveDemandElements();
4101 // show info
4102 if (savingResult) {
4103 WRITE_MESSAGE(TL("Demand elements saved."));
4104 return 1;
4105 } else {
4106 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4107 return 0;
4108 }
4109 } catch (IOError& e) {
4110 // open error message box
4111 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4112 }
4113 }
4114 return 0;
4115}
4116
4117
4118long
4119GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4120 // get option container
4121 auto& neteditOptions = OptionsCont::getOptions();
4122 // declare current folder
4123 FXString currentFolder = gCurrentFolder;
4124 // set current folder
4125 if (neteditOptions.getString("configuration-file").size() > 0) {
4126 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4127 } else if (neteditOptions.getString("net-file").size() > 0) {
4128 currentFolder = getFolder(neteditOptions.getString("net-file"));
4129 }
4130 // get route file
4131 const auto routeFileDialog = GNEFileDialog(this, TL("Route elements file"),
4135 // check that file is correct
4136 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4137 // begin undoList operation
4138 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4139 // iterate over all demand elementes and change file
4140 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4141 for (const auto& demandElement : demandElementTag.second) {
4142 demandElement.second->setAttribute(GNE_ATTR_DEMAND_FILE, routeFileDialog.getFilename(), myUndoList);
4143 }
4144 }
4145 // end undoList operation
4146 myUndoList->end();
4147 // save demand elements
4148 return onCmdSaveDemandElements(sender, sel, ptr);
4149 } else {
4150 return 0;
4151 }
4152}
4153
4154
4155long
4156GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4157 // get file
4158 const auto dataFileDialog = GNEFileDialog(this, TL("Data elements file"),
4162 // check file
4163 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4164 // save previous demand element status saving
4165 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4166 // disable update data
4168 // disable validation for data elements
4169 XMLSubSys::setValidation("never", "auto", "auto");
4170 // Create data handler
4171 GNEDataHandler dataHandler(myNet, dataFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4172 // begin undoList operation
4173 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", dataFileDialog.getFilename()));
4174 // Run data parser
4175 if (!dataHandler.parse()) {
4176 // write error
4177 WRITE_ERROR(TLF("Loading of data file '%' failed.", dataFileDialog.getFilename()));
4178 } else {
4179 // show info
4180 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", dataFileDialog.getFilename()));
4181 // enable demand elements if there is an error creating element
4182 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4184 }
4185 }
4186 // end undoList operation
4187 myUndoList->end();
4188 // enable update data
4190 // restore validation for data
4191 XMLSubSys::setValidation("auto", "auto", "auto");
4192 // check if clear undoList
4194 myUndoList->clear();
4195 }
4196 update();
4197 }
4198 return 1;
4199}
4200
4201
4202long
4204 // disable update data
4206 // disable validation for additionals
4207 XMLSubSys::setValidation("never", "auto", "auto");
4208 // begin undoList operation
4209 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4210 // clear data elements
4212 // iterate over all data elements
4213 for (const auto& dataFileName : myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames()) {
4214 // Create additional handler
4215 GNEDataHandler dataHandler(myNet, dataFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4216 // force overwritte elements
4217 dataHandler.forceOverwriteElements();
4218 // Run data parser
4219 if (!dataHandler.parse()) {
4220 WRITE_ERROR(TLF("Reloading of data file '%' failed.", dataFileName));
4221 } else {
4222 WRITE_MESSAGE(TLF("Reloading of data file '%' successfully.", dataFileName));
4223 }
4224 }
4225 // restore validation for data
4226 XMLSubSys::setValidation("auto", "auto", "auto");
4227 // end undoList operation and update view
4228 myUndoList->end();
4229 // enable update data
4231 // check if clear undoList
4233 myUndoList->clear();
4234 }
4235 update();
4236 return 1;
4237}
4238
4239
4240long
4241GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4242 if (myViewNet == nullptr) {
4243 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4244 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames().empty()) {
4245 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4246 } else {
4247 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4248 }
4249}
4250
4251
4252long
4253GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4254 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4255 // get option container
4256 auto& neteditOptions = OptionsCont::getOptions();
4257 // check saving conditions
4258 if (myNet->getSavingStatus()->isDataElementsSaved() && !neteditOptions.getBool("force-saving")) {
4259 // nothing to save
4260 return 1;
4261 }
4262 // check if we have to set the output filename
4263 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDataFilenames().empty()) {
4264 savingFileHandler->updateDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".xml");
4265 }
4266 // check if we have to open save as dialog
4267 if (savingFileHandler->getDataFilenames().empty()) {
4268 return onCmdSaveDataElementsUnified(sender, sel, ptr);
4269 } else {
4270 try {
4271 // save data elements
4272 const bool savingResult = myNet->saveDataElements();
4273 // show info
4274 if (savingResult) {
4275 WRITE_MESSAGE(TL("Data elements saved."));
4276 return 1;
4277 } else {
4278 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4279 return 0;
4280 }
4281 } catch (IOError& e) {
4282 // open error message box
4283 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4284 }
4285 }
4286 return 0;
4287}
4288
4289
4290long
4291GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4292 // get option container
4293 auto& neteditOptions = OptionsCont::getOptions();
4294 // declare current folder
4295 FXString currentFolder = gCurrentFolder;
4296 // set current folder
4297 if (neteditOptions.getString("configuration-file").size() > 0) {
4298 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4299 } else if (neteditOptions.getString("net-file").size() > 0) {
4300 currentFolder = getFolder(neteditOptions.getString("net-file"));
4301 }
4302 // get data file
4303 const auto dataFileDialog = GNEFileDialog(this, TL("Data elements file"),
4307 // check that file is correct
4308 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4309 // begin undoList operation
4310 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4311 // iterate over all demand elementes and change file
4312 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4313 dataSet.second->setAttribute(GNE_ATTR_DATA_FILE, dataFileDialog.getFilename(), myUndoList);
4314 }
4315 // end undoList operation
4316 myUndoList->end();
4317 // save data elements
4318 return onCmdSaveDataElements(sender, sel, ptr);
4319 } else {
4320 return 0;
4321 }
4322}
4323
4324
4325long
4327 // get file
4328 const auto meanDataFileDialog = GNEFileDialog(this, TL("MeanData elements file"),
4332 // check file
4333 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4334 // save previous demand element status saving
4335 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4336 // disable validation for meanDatas
4337 XMLSubSys::setValidation("never", "auto", "auto");
4338 // Create meanData handler
4339 GNEGeneralHandler generalHandler(myNet, meanDataFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4340 // begin undoList operation
4341 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", meanDataFileDialog.getFilename()));
4342 // Run parser
4343 if (!generalHandler.parse()) {
4344 // write error
4345 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", meanDataFileDialog.getFilename()));
4346 } else {
4347 // show info
4348 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", meanDataFileDialog.getFilename()));
4349 // enable demand elements if there is an error creating element
4350 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4352 }
4353 }
4354 // end undoList operation
4355 myUndoList->end();
4356 // restore validation for meanDatas
4357 XMLSubSys::setValidation("auto", "auto", "auto");
4358 // check if clear undoList
4360 myUndoList->clear();
4361 }
4362 update();
4363 }
4364 return 1;
4365}
4366
4367
4368long
4370 // disable validation for meanDatas
4371 XMLSubSys::setValidation("never", "auto", "auto");
4372 // begin undoList operation
4374 // clear meanDatas
4376 // iterate over all data elements
4377 for (const auto& meanDataFileName : myViewNet->getNet()->getSavingFilesHandler()->getMeanDataFilenames()) {
4378 // Create general handler
4379 GNEGeneralHandler generalHandler(myNet, meanDataFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4380 // force overwritte elements
4381 generalHandler.forceOverwriteElements();
4382 // Run parser
4383 if (!generalHandler.parse()) {
4384 WRITE_ERROR(TLF("Reloading of meanData file '%' failed.", meanDataFileName));
4385 } else {
4386 WRITE_MESSAGE(TLF("Reloading of meanData file '%' successfully.", meanDataFileName));
4387 }
4388 }
4389 // end undoList operation and update view
4390 myUndoList->end();
4391 // restore validation for meanDatas
4392 XMLSubSys::setValidation("auto", "auto", "auto");
4393 // check if clear undoList
4395 myUndoList->clear();
4396 }
4397 update();
4398 return 1;
4399}
4400
4401
4402long
4403GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4404 if (myViewNet == nullptr) {
4405 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4406 } else if (myViewNet->getNet()->getSavingFilesHandler()->getMeanDataFilenames().empty()) {
4407 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4408 } else {
4409 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4410 }
4411}
4412
4413
4414long
4415GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4416 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4417 // get option container
4418 auto& neteditOptions = OptionsCont::getOptions();
4419 // check saving conditions
4420 if (myNet->getSavingStatus()->isMeanDatasSaved() && !neteditOptions.getBool("force-saving")) {
4421 // nothing to save
4422 return 1;
4423 }
4424 // check if we have to set the output filename
4425 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getMeanDataFilenames().empty()) {
4426 savingFileHandler->updateMeanDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".dat.add.xml");
4427 }
4428 // check if we have to open save as dialog
4429 if (savingFileHandler->getMeanDataFilenames().empty()) {
4430 return onCmdSaveMeanDataElementsUnified(sender, sel, ptr);
4431 } else {
4432 try {
4433 // compute before saving
4434 myNet->computeNetwork(this);
4435 // save demand elements
4436 const bool savingResult = myNet->saveMeanDatas();
4437 // show info
4438 if (savingResult) {
4439 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4440 return 1;
4441 } else {
4442 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4443 return 0;
4444 }
4445 } catch (IOError& e) {
4446 // open error message box
4447 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4448 }
4449 }
4450 return 0;
4451}
4452
4453
4454long
4455GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4456 // get option container
4457 auto& neteditOptions = OptionsCont::getOptions();
4458 // declare current folder
4459 FXString currentFolder = gCurrentFolder;
4460 // set current folder
4461 if (neteditOptions.getString("configuration-file").size() > 0) {
4462 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4463 } else if (neteditOptions.getString("net-file").size() > 0) {
4464 currentFolder = getFolder(neteditOptions.getString("net-file"));
4465 }
4466 // get meanData file
4467 const auto meanDataFileDialog = GNEFileDialog(this, TL("MeanData elements file"),
4471 // check that file is valid
4472 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4473 // begin undoList operation
4474 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
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, meanDataFileDialog.getFilename(), 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) {
4495 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4496 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4497 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4498 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4499 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4500 // first check if abort saving
4501 if (commonResult == GNEDialog::Result::ABORT) {
4502 return false;
4503 }
4504 // save every type of file
4505 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4506 (onCmdSaveNetwork(nullptr, 0, nullptr) != 1)) {
4507 return false;
4508 }
4509 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4510 (onCmdSaveAdditionalElements(nullptr, 0, nullptr) != 1)) {
4511 return false;
4512 }
4513 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4514 (onCmdSaveDemandElements(nullptr, 0, nullptr) != 1)) {
4515 return false;
4516 }
4517 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4518 (onCmdSaveDataElements(nullptr, 0, nullptr) != 1)) {
4519 return false;
4520 }
4521 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4522 (onCmdSaveMeanDataElements(nullptr, 0, nullptr) != 1)) {
4523 return false;
4524 }
4525 // restore focus in viewNet
4526 myViewNet->setFocus();
4527 // clear undo list
4528 clearUndoList();
4529 // all saved, then continue
4530 return true;
4531 } else {
4532 // nothing to do, then continue
4533 return true;
4534 }
4535}
4536
4537
4538void
4539GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4540 // obtain netedit option container
4541 auto& neteditOptions = OptionsCont::getOptions();
4543 // set network
4544 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4545 // set routes
4546 if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4547 mySumoOptions.resetDefault("route-files");
4548 } else {
4549 mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4550 }
4551 // set SumoOptions depending of additionalFiles and meanData files
4552 if (ignoreAdditionals) {
4553 if (neteditOptions.getString("meandata-files").empty()) {
4554 mySumoOptions.resetDefault("additional-files");
4555 } else {
4556 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4557 }
4558 } else {
4559 if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4560 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4561 } else if (neteditOptions.getString("additional-files").size() > 0) {
4562 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4563 } else if (neteditOptions.getString("meandata-files").size() > 0) {
4564 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4565 } else {
4566 mySumoOptions.resetDefault("additional-files");
4567 }
4568 }
4569}
4570
4571
4572FXString
4573GNEApplicationWindow::getFolder(const std::string& folder) const {
4574 // declare folder
4575 std::string newFolder = folder;
4576 // declare stop flag
4577 bool stop = false;
4578 // continue while stop is false
4579 while (!stop) {
4580 if (newFolder.empty()) {
4581 // new folder empty, then stop
4582 stop = true;
4583 } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4584 (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4585 // removed file, then stop
4586 stop = true;
4587 } else {
4588 newFolder.pop_back();
4589 }
4590 }
4591 // if is empty, return gCurrentFolder
4592 if (newFolder.empty()) {
4593 return gCurrentFolder;
4594 }
4595 return FXString(newFolder.c_str());
4596}
4597
4598
4599void
4601 // check that view exists
4602 if (myViewNet) {
4604 }
4605 // update require recomputing
4607}
4608
4609
4610void
4612 // remove lock hotkeys
4614 // check supermode
4615 if (supermode == Supermode::NETWORK) {
4616 // menu commands
4620 // lock
4624 // processing
4629 } else if (supermode == Supermode::DEMAND) {
4630 // menu commands
4634 // lock
4638 // processing
4643 } else if (supermode == Supermode::DATA) {
4644 // menu commands
4648 // lock
4652 // processing
4657 } else {
4658 // menu commands
4663 // lock
4667 // processing
4671 }
4672 // continue depending of view
4673 if (myViewNet) {
4677 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4680 }
4681 }
4682}
4683
4684
4685bool
4689
4690
4691void
4695
4696
4697void
4699 myUndoRedoListEnabled = reason;
4700}
4701
4702
4703const std::string&
4707
4708
4709void
4711 if (myViewNet) {
4712 // destroy Popup (to avoid crashes)
4714 }
4715 // clear undo list and return true to continue with closing/reload
4716 myUndoList->clear();
4717}
4718
4719
4724
4725
4730
4731
4736
4737
4742
4743
4748
4749
4754
4755
4760
4761
4762void
4764 // get option container
4765 auto& neteditOptions = OptionsCont::getOptions();
4766 // get additional files
4767 const auto& additionalFiles = neteditOptions.getStringVector("additional-files");
4768 // check if ignore loading of additional files
4769 const auto ignoreLoadAdditionalFiles = neteditOptions.getBool("ignore.additionalelements");
4770 // check conditions
4771 if (ignoreLoadAdditionalFiles) {
4772 // reset flag
4773 neteditOptions.resetWritable();
4774 neteditOptions.set("ignore.additionalelements", "false");
4775 // also reset route files in both containers
4776 neteditOptions.resetDefault("additional-files");
4777 mySumoOptions.resetDefault("additional-files");
4778 } else if (myNet && (additionalFiles.size() > 0)) {
4779 // update saving files handler
4780 myNet->getSavingFilesHandler()->updateAdditionalEmptyFilenames(additionalFiles.front());
4781 // disable validation for additionals
4782 XMLSubSys::setValidation("never", "auto", "auto");
4783 // begin undolist
4784 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4785 // use this flag for mark all elements as saved after loading, if it was sucessfully
4786 bool setSaved = additionalFiles.size() == 1;
4787 // iterate over every additional file
4788 for (const auto& file : additionalFiles) {
4789 // check if ignore missing inputs
4790 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4791 WRITE_MESSAGE(TLF("loading additionals from '%'.", file));
4792 // declare general handler
4794 // Run parser
4795 if (!handler.parse()) {
4796 WRITE_ERROR(TLF("Loading of '%' failed.", file));
4797 }
4798 setSaved &= !handler.isErrorCreatingElement();
4799 // set additionals in SumoConfig
4800 setInputInSumoOptions(false, false);
4801 }
4802 }
4803 // end undo list
4804 myUndoList->end();
4805 // disable validation for additionals
4806 XMLSubSys::setValidation("auto", "auto", "auto");
4807 if (setSaved) {
4809 }
4810 // check if clear undoList
4812 myUndoList->clear();
4813 }
4814 }
4815}
4816
4817
4818void
4820 // get option container
4821 auto& neteditOptions = OptionsCont::getOptions();
4822 // get demand files
4823 const auto& demandFiles = neteditOptions.getStringVector("route-files");
4824 // check if ignore loading of additional files
4825 const auto ignoreLoadDemandFiles = neteditOptions.getBool("ignore.routeelements");
4826 // check conditions
4827 if (ignoreLoadDemandFiles) {
4828 // reset flag
4829 neteditOptions.resetWritable();
4830 neteditOptions.set("ignore.routeelements", "false");
4831 // also reset route files in both containers
4832 neteditOptions.resetDefault("route-files");
4833 mySumoOptions.resetDefault("route-files");
4834 } else if (myNet && (demandFiles.size() > 0)) {
4835 // update saving files handler
4837 // disable validation for additionals
4838 XMLSubSys::setValidation("never", "auto", "auto");
4839 // begin undolist
4840 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4841 // use this flag for mark all elements as saved after loading, if it was sucessfully
4842 bool setSaved = demandFiles.size() == 1;
4843 // iterate over every demand file
4844 for (const auto& file : demandFiles) {
4845 // check if ignore missing inputs
4846 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4847 WRITE_MESSAGE(TLF("loading demand elements from '%'.", file));
4848 // declare general handler
4850 // Run parser
4851 if (!handler.parse()) {
4852 WRITE_ERROR(TLF("Loading of '%' failed.", file));
4853 }
4854 setSaved &= !handler.isErrorCreatingElement();
4855 // set additionals in SumoConfig
4856 setInputInSumoOptions(false, false);
4857 }
4858 }
4859 // end undo list
4860 myUndoList->end();
4861 // disable validation for additionals
4862 XMLSubSys::setValidation("auto", "auto", "auto");
4863 if (setSaved) {
4865 }
4866 // check if clear undoList
4868 myUndoList->clear();
4869 }
4870 }
4871}
4872
4873
4874void
4876 // get option container
4877 auto& neteditOptions = OptionsCont::getOptions();
4878 // get data files
4879 const auto& dataFiles = neteditOptions.getStringVector("data-files");
4880 if (myNet && (dataFiles.size() > 0)) {
4881 // update saving files handler
4883 // disable validation for additionals
4884 XMLSubSys::setValidation("never", "auto", "auto");
4885 // begin undolist
4886 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading data elements from '") + toString(dataFiles) + "'");
4887 // use this flag for mark all elements as saved after loading, if it was sucessfully
4888 bool setSaved = dataFiles.size() == 1;
4889 // iterate over every data file
4890 for (const auto& file : dataFiles) {
4891 // check if ignore missing inputs
4892 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4893 WRITE_MESSAGE(TLF("loading data elements from '%'.", file));
4894 // declare general handler
4896 // Run parser
4897 if (!handler.parse()) {
4898 WRITE_ERROR(TLF("Loading of % failed.", file));
4899 }
4900 setSaved &= !handler.isErrorCreatingElement();
4901 // set additionals in SumoConfig
4902 setInputInSumoOptions(false, false);
4903 }
4904 }
4905 // end undo list
4906 myUndoList->end();
4907 // disable validation for additionals
4908 XMLSubSys::setValidation("auto", "auto", "auto");
4909 if (setSaved) {
4911 }
4912 // check if clear undoList
4914 myUndoList->clear();
4915 }
4916 }
4917}
4918
4919
4920void
4922 // get option container
4923 auto& neteditOptions = OptionsCont::getOptions();
4924 // get meanData files
4925 const auto& meanDataFiles = neteditOptions.getStringVector("meandata-files");
4926 if (myNet && (meanDataFiles.size() > 0)) {
4927 // update saving files handler
4928 myNet->getSavingFilesHandler()->updateMeanDataEmptyFilenames(meanDataFiles.front());
4929 // disable validation for additionals
4930 XMLSubSys::setValidation("never", "auto", "auto");
4931 // begin undolist
4932 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading meanData elements from '") + toString(meanDataFiles) + "'");
4933 // use this flag for mark all elements as saved after loading, if it was sucessfully
4934 bool setSaved = meanDataFiles.size() == 1;
4935 // iterate over every meanData file
4936 for (const auto& file : meanDataFiles) {
4937 // check if ignore missing inputs
4938 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4939 WRITE_MESSAGE(TLF("loading meanData elements from '%'.", file));
4940 // declare general handler
4942 // Run parser
4943 if (!handler.parse()) {
4944 WRITE_ERROR(TLF("Loading of % failed.", file));
4945 }
4946 setSaved &= !handler.isErrorCreatingElement();
4947 // set additionals in SumoConfig
4948 setInputInSumoOptions(false, false);
4949 }
4950 }
4951 // end undo list
4952 myUndoList->end();
4953 // disable validation for additionals
4954 XMLSubSys::setValidation("auto", "auto", "auto");
4955 if (setSaved) {
4957 }
4958 // check if clear undoList
4960 myUndoList->clear();
4961 }
4962 }
4963}
4964
4965
4966void
4968 // get TLS file
4969 const auto tlsFile = OptionsCont::getOptions().getString("tls-file");
4970 // check if file exist
4971 if (tlsFile.size() > 0) {
4972 // Run parser
4973 if (reloading) {
4974 WRITE_MESSAGE(TL("Reloading TLS programs"));
4975 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("reloading TLS Programs from '%'", tlsFile));
4976 } else {
4977 WRITE_MESSAGE(TLF("Loading TLS programs from '%'", tlsFile));
4978 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("loading TLS Programs from '%'", tlsFile));
4979 }
4980 myNet->computeNetwork(this);
4981 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
4982 // Abort undo/redo
4984 } else {
4985 // commit undo/redo operation
4986 myUndoList->end();
4987 update();
4988 }
4989 }
4990}
4991
4992
4993void
4995 // get edgeType file
4996 const auto edgeTypeFile = OptionsCont::getOptions().getString("edgetypes-file");
4997 // check if file exist
4998 if (edgeTypeFile.size() > 0) {
4999 // declare type container
5000 NBTypeCont typeContainerAux;
5001 // declare type handler
5002 NIXMLTypesHandler handler(typeContainerAux);
5003 // load edge types
5004 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5005 // now create GNETypes based on typeContainerAux
5006 if (reloading) {
5007 WRITE_MESSAGE(TL("Reloading edge types"));
5008 myViewNet->getUndoList()->begin(Supermode::NETWORK, GUIIcon::EDGE, TLF("loading edge types from '%'", edgeTypeFile));
5009 } else {
5010 WRITE_MESSAGE(TLF("Loading edge types from '%'", edgeTypeFile));
5011 myViewNet->getUndoList()->begin(Supermode::NETWORK, GUIIcon::EDGE, TLF("reloading edge types from '%'", edgeTypeFile));
5012 }
5013 // iterate over typeContainerAux
5014 for (const auto& auxEdgeType : typeContainerAux) {
5015 // create new edge type
5016 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5017 // add lane types
5018 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5019 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5020 }
5021 // add it using undoList
5022 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5023
5024 }
5025 // end undo list
5027 // refresh edge type selector
5029 }
5030}
5031
5032
5037
5038
5039bool
5041 if (myInternalTest == nullptr) {
5042 return true;
5043 } else if (obj == myInternalTest) {
5044 return true;
5045 } else {
5046 return false;
5047 }
5048}
5049
5050// ---------------------------------------------------------------------------
5051// GNEApplicationWindow - protected methods
5052// ---------------------------------------------------------------------------
5053#ifdef _MSC_VER
5054#pragma warning(push)
5055#pragma warning(disable: 4355) // mask warning about "this" in initializers
5056#endif
5058 myToolbarsGrip(this),
5059 myMenuBarFile(this),
5060 myFileMenuCommands(this),
5061 myModesMenuCommands(this),
5062 myEditMenuCommands(this),
5063 myLockMenuCommands(this),
5064 myProcessingMenuCommands(this),
5065 myLocateMenuCommands(this),
5066 myToolsMenuCommands(this),
5067 myWindowsMenuCommands(this),
5068 myHelpMenuCommands(this),
5069 mySupermodeCommands(this) {
5070}
5071#ifdef _MSC_VER
5072#pragma warning(pop)
5073#endif
5074
5075
5076long
5077GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5078 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5079 if (handled == 0 && myMDIClient->numChildren() > 0) {
5080 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5081 if (w != nullptr) {
5082 w->onKeyPress(nullptr, sel, eventData);
5083 }
5084 }
5085 return 0;
5086}
5087
5088
5089long
5090GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5091 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5092 if (handled == 0 && myMDIClient->numChildren() > 0) {
5093 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5094 if (w != nullptr) {
5095 w->onKeyRelease(nullptr, sel, eventData);
5096 }
5097 }
5098 return 0;
5099}
5100
5101
5102/****************************************************************************/
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:849
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:763
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition GUIAppEnum.h:274
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition GUIAppEnum.h:272
@ MID_GNE_LOCK_POLYGON
lock polygons
Definition GUIAppEnum.h:875
@ 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:270
@ 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:236
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:933
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:911
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:765
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:899
@ 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:957
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:797
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:723
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:891
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:683
@ 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:823
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:901
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:775
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:757
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:845
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:871
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:735
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:831
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:829
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:963
@ 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:909
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition GUIAppEnum.h:244
@ 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:240
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:949
@ 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:835
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:935
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:879
@ 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:248
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:923
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:913
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:719
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:731
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition GUIAppEnum.h:288
@ 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:745
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:657
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:709
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:803
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:713
@ 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:685
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:921
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:149
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition GUIAppEnum.h:232
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition GUIAppEnum.h:208
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition GUIAppEnum.h:761
@ 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:847
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition GUIAppEnum.h:286
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition GUIAppEnum.h:250
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition GUIAppEnum.h:252
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition GUIAppEnum.h:246
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:955
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:749
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:747
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:867
@ 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:929
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:799
@ 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:881
@ 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:729
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:951
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:759
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:843
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:739
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:837
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition GUIAppEnum.h:99
@ MID_RECENTFILE
Loads a file previously loaded.
Definition GUIAppEnum.h:320
@ 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:833
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:885
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:937
@ 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:869
@ MID_LANGUAGE_HU
change language to hungarian
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:238
@ 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:242
@ MID_GNE_LOCK_EDGE
lock edges
Definition GUIAppEnum.h:859
@ 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:855
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:715
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition GUIAppEnum.h:369
@ 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:661
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:897
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:801
@ 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:959
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:155
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition GUIAppEnum.h:348
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:57
@ MID_GNE_LOCK_CONTAINER
lock containers
Definition GUIAppEnum.h:895
@ 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:741
@ 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:825
@ 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:733
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:659
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:927
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:863
@ 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:707
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:841
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS
save Mean Datas
Definition GUIAppEnum.h:216
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition GUIAppEnum.h:266
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:839
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:953
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:777
@ 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:961
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:883
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:893
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:717
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:861
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:821
@ 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:721
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:925
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:941
@ 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:737
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:663
@ 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:292
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:222
@ MID_GNE_LOCK_PERSON
lock persons
Definition GUIAppEnum.h:887
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:865
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:157
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition GUIAppEnum.h:256
@ 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:290
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition GUIAppEnum.h:743
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition GUIAppEnum.h:214
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition GUIAppEnum.h:264
@ 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:234
@ MID_GNE_LOCK_TAZRELDATA
lock TAZRelDatas
Definition GUIAppEnum.h:907
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:939
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition GUIAppEnum.h:276
@ 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:889
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:727
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:268
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:827
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:711
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:931
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:819
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:725
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:857
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:877
@ 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:905
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:903
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:795
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:873
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:300
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition GUIDesigns.h:124
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition GUIDesigns.h:359
#define GUIDesignLabelStatusBar
label used in statusBar
Definition GUIDesigns.h:284
#define GUIDesignSplitter
Definition GUIDesigns.h:505
#define GUIDesignSplitterMDI
MDI Splitter.
Definition GUIDesigns.h:508
#define GUIDesignStatusBar
design used in status bar
Definition GUIDesigns.h:477
@ MESSAGE_OCCURRED
send when a message occurred
@ GLDEBUG_OCCURRED
send when a gldebug occurred
@ ERROR_OCCURRED
send when a error occurred
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occurred
@ WARNING_OCCURRED
send when a warning occurred
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_MESSAGE(msg)
Definition MsgHandler.h:288
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:294
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
@ SUMO_TAG_TYPES
types (edge)
@ 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
void forceOverwriteElements()
force overwritte elements (used if we're reloading elements)
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:666
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.
void loadEdgeTypes(const bool reloading)
load meanData elements
const GNETagPropertiesDatabase * myTagPropertiesDatabase
tagProperties database
long computeJunctionWithVolatileOptions()
called if the user selects Processing->compute junctions with volatile options
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)
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 onCmdProcessButton(FXObject *sender, FXSelector sel, void *)
called when user press a process button (or a shortcut)
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
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 *‍/
GNEExternalRunner * myExternalRunner
external runner for running external tools
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 *)
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
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 loadTrafficLights(const bool reloading)
load traffic lights
void loadDemandElements()
load demand elements
void loadAdditionalElements()
load additional elements
GNEViewNet * myViewNet
pointer to current view net
GNEExternalRunner * getExternalRunner() const
get external runner
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
void setExternalRunner(GNEExternalRunner *externalRunner)
set external runner
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
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
Result
list of possible results when closing the dialog
Definition GNEDialog.h:70
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
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition GNEFrame.cpp:193
void forceOverwriteElements()
force overwritte elements (used if we're reloading elements)
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
void runNeteditInternalTests(GNEApplicationWindow *applicationWindow)
run netedit internal test
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
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)
void updateDataEmptyFilenames(const std::string &file)
update data elements with empty filenames with the given file
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)
GNEDialog::Result askSaveMeanDataElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in meanData elements and gives the user the option to abort
void dataElementsSaved()
mark demand elements as saved
GNEDialog::Result askSaveDemandElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in demand elements and gives the user the option to abort
void requireSaveNetwork()
inform that network has to be saved
void demandElementsSaved()
mark demand elements as saved
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
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
GNEDialog::Result askSaveAdditionalElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in additionals and gives the user the option to abort
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
GNEDialog::Result askSaveNetwork(GNEDialog::Result &commonResult) const
warns about unsaved changes in network and gives the user the option to abort
bool isAdditionalsSaved() const
check if additionals are saved
GNEDialog::Result askSaveDataElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in data elements and gives the user the option to abort
void clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition GNENet.cpp:2125
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1782
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1622
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2344
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2848
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1414
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:162
void enableUpdateData()
Definition GNENet.cpp:2913
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2867
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2160
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2298
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2138
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:174
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1888
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:1460
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1933
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1798
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:144
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition GNENet.cpp:2171
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2924
GNENetHelper::SavingFilesHandler * getSavingFilesHandler() const
get saving files handler
Definition GNENet.cpp:156
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2223
void saveNetwork()
save the network
Definition GNENet.cpp:1367
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1604
bool saveJuPedSimElements(const std::unordered_set< const GNEAttributeCarrier * > &ACs, const std::string &file)
save JuPedSim elements
Definition GNENet.cpp:2250
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1740
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1824
void savePlain(const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition GNENet.cpp:1405
bool saveDemandElements()
save demand element elements of the network
Definition GNENet.cpp:2267
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2193
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1547
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 module
TAZSaveChanges * getTAZSaveChangesModule() const
get TAZ Save Changes module
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
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
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
bool isRunning() const
check if test is running
void stopTests()
stop tests
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:764
A storage for available edgeTypes of edges.
Definition NBTypeCont.h:52
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:148
A storage for options typed value containers)
Definition OptionsCont.h:89
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 std::string &indent="") const
Writes the configuration.
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.
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 StringBijection< SumoConfigFileExtension > SumoConfigFileExtensions
sumo config file extensions
static StringBijection< AdditionalFileExtension > AdditionalFileExtensions
additional file extensions
static StringBijection< MeanDataFileExtension > MeanDataFileExtensions
mean data file extensions
static StringBijection< TLSFileExtension > TLSFileExtensions
TLS file extensions.
static StringBijection< RouteFileExtension > RouteFileExtensions
route file extensions
static StringBijection< XMLFileExtension > XMLFileExtensions
XML file Extensions.
static StringBijection< NetconvertConfigFileExtension > NetconvertConfigFileExtensions
netconvert config file extensions
static StringBijection< OSMFileExtension > OSMFileExtensions
OSM file extensions.
static StringBijection< EdgeDataFileExtension > EdgeDataFileExtensions
edgedata file extensions
static StringBijection< JunctionFileExtension > JunctionFileExtensions
juntion file extensions
static StringBijection< NeteditConfigFileExtension > NeteditConfigFileExtensions
netedit config file extensions
static StringBijection< NetFileExtension > NetFileExtensions
net file extensions
static StringBijection< EdgeTypeFileExtension > EdgeTypeFileExtensions
edge file extensions
static std::string escapeShell(const std::string &orig)
Escape special characters with backslash.
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 runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
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 bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
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