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 // add extra option for automatic closing
537 myNetgenerateOptions.doRegister("close-dialog-automatic", new Option_Bool(true));
538 myNetgenerateOptions.addDescription("close-dialog-automatic", "report", TL("Close dialog automatic"));
539}
540#ifdef _MSC_VER
541#pragma warning(pop)
542#endif
543
544
545void
547 // do this not twice
549 // do not translate debug messages
550 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
551 return;
552 }
553 myHadDependentBuild = true;
554 setTarget(this);
555 setSelector(MID_WINDOW);
556 // build toolbar menu
558 // build the thread - io
561 // build the status bar
562 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
563 // build geo coordinates label
564 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
566 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
567 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
568 // build geo coordinates label
570 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
571 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
572 // build cartesian coordinates label
574 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
575 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
576 // build test coordinates label (only if gui-testing is enabled)
578 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
579 myTestCoordinate->setHelpText(TL("Test coordinate"));
581 myTestFrame->hide();
582 // make the window a mdi-window
583 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
585 myMDIMenu = new FXMDIMenu(this, myMDIClient);
586 // build the message window
588 myMainSplitter->setSplit(1, 65);
589 // fill menu and tool bar
590 fillMenuBar();
591 // build additional threads
593 // check if create internal test system
594 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
595 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
596 }
597 // set the status bar
598 setStatusBarText(TL("Ready."));
599 // set the caption
600 setTitle(myTitlePrefix);
601 // set Netedit ICON
604 // build netedit Accelerators (hotkeys)
605 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
606}
607
608
609void
611 // set windows size and position
613 // set current folder
614 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
615 // Create main window
616 FXMainWindow::create();
617 // get text width
618 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
619 // adjust cartesian and geo frame
620 myCartesianFrame->setWidth(textWidth);
621 myGeoFrame->setWidth(textWidth);
622 // fill online maps
623 if (myOnlineMaps.empty()) {
624 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
625 myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
626 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
627 }
628 // show application windows
629 show(PLACEMENT_DEFAULT);
630 // check if maximice
631 if (!OptionsCont::getOptions().isSet("window-size")) {
632 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
633 maximize();
634 }
635 }
636}
637
638
641 // Close icons
643 // Close gifs (Textures)
646 // delete visuals
647 delete myGLVisual;
648 // must delete menus to avoid segfault on removing accelerators
649 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
652 delete myFileMenuTLS;
653 delete myFileMenuEdgeTypes;
660 delete myFileMenu;
661 delete myModesMenu;
662 delete myEditMenu;
663 delete myLockMenu;
664 delete myProcessingMenu;
665 delete myLocatorMenu;
666 delete myToolsMenu;
667 delete myToolsDetectorMenu;
668 delete myToolsDistrictMenu;
669 delete myToolsDRTMenu;
671 delete myToolsImportMenu;
674 delete myToolsImportVissim;
675 delete myToolsImportVisum;
676 delete myToolsNetMenu;
677 delete myToolsRouteMenu;
678 delete myToolsOutputMenu;
679 delete myToolsShapes;
680 delete myToolsTLS;
681 delete myToolsTurnDefs;
683 delete myToolsXML;
684 delete myWindowMenu;
685 delete myHelpMenu;
686 delete myLanguageMenu;
687 // Delete load thread
688 delete myLoadThread;
689 if (myInternalTest) {
690 delete myInternalTest;
691 }
692 // drop all events
693 while (!myThreadEvents.empty()) {
694 // get the next event
697 delete e;
698 }
699 // delete undoList and dialog
700 delete myUndoList;
701}
702
703
704long
705GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
706 if (askSaveElements()) {
708 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
709 if (isMaximized()) {
710 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
711 } else {
712 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
713 }
714 getApp()->exit(0);
715 }
716 return 1;
717}
718
719
720long
721GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
722 GUIDialog_GLChosenEditor* chooser =
724 chooser->create();
725 chooser->show();
726 return 1;
727}
728
729
730long
731GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
732 // check if close current simulation
733 if (onCmdClose(0, 0, 0) == 1) {
734 // create new network
736 }
737 return 1;
738}
739
740
741long
743 // get netconvert file dialog
744 const auto netConvertFileDialog = GNEFileDialog(this, TL("netconvert config file"),
748 // continue depending of netConvertFileDialog
749 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
750 // load configuration
751 loadConfiguration(netConvertFileDialog.getFilename());
752 }
753 return 1;
754}
755
756
757long
758GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
759 // get netconvert filename
760 const auto networkFileDialog = GNEFileDialog(this, TL("network file"),
764 // continue depending of netconvertFile
765 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
766 // load network
767 loadNetwork(networkFileDialog.getFilename());
768 }
769 return 0;
770}
771
772
773long
774GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
775 // get OSM file dilaog
776 const auto OSMFileDialog = GNEFileDialog(this, TL("OpenStreetMap file"),
780 // continue depending of netconvertFile
781 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
782 loadOSM(OSMFileDialog.getFilename());
783 }
784 return 1;
785}
786
787
788long
789GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
790 auto& neteditOptions = OptionsCont::getOptions();
791 // get netconvert filename
792 const auto neteditConfigFileDialog = GNEFileDialog(this, TL("netedit config file"),
796 // continue depending of netconvertFile
797 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
798 // stop test before calling load thread
799 if (myInternalTest) {
801 }
802 // reset netedit options
803 myLoadThread->fillOptions(neteditOptions);
804 myLoadThread->setDefaultOptions(neteditOptions);
805 // set netedit configuration file to load
806 neteditOptions.resetWritable();
807 neteditOptions.set("configuration-file", neteditConfigFileDialog.getFilename());
808 // run load thread
810 // update view
811 update();
812 }
813 return 1;
814}
815
816
817long
818GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
819 auto& neteditOptions = OptionsCont::getOptions();
820 // get netconvert filename
821 const auto sumoConfigFileDialog = GNEFileDialog(this, TL("sumo config file"),
825 // continue depending of netconvertFile
826 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
827 // stop test before calling load thread
828 if (myInternalTest) {
830 }
831 // reset options
832 myLoadThread->fillOptions(neteditOptions);
833 myLoadThread->setDefaultOptions(neteditOptions);
834 // set sumo configuration file to load
835 neteditOptions.resetWritable();
836 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
837 // run load thread
839 // update view
840 update();
841 }
842 return 1;
843}
844
845
846long
848 // check if close current simulation
849 if (onCmdClose(0, 0, 0) == 1) {
850 // stop test before calling load thread
851 if (myInternalTest) {
853 }
854 auto& neteditOptions = OptionsCont::getOptions();
855 // get existent configuration file
856 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
857 // reset options
858 myLoadThread->fillOptions(neteditOptions);
859 myLoadThread->setDefaultOptions(neteditOptions);
860 // set configuration file to load
861 neteditOptions.resetWritable();
862 neteditOptions.set("configuration-file", neteditConfigFile);
863 // run load thread
865 // update view
866 update();
867 }
868 return 1;
869}
870
871
872long
873GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
874 auto& neteditOptions = OptionsCont::getOptions();
875 // check if close current simulation
876 if (onCmdClose(0, 0, 0) == 1) {
877 // stop test before calling load thread
878 if (myInternalTest) {
880 }
881 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
882 // reset options
883 myLoadThread->fillOptions(neteditOptions);
884 myLoadThread->setDefaultOptions(neteditOptions);
885 // set configuration file to load
886 neteditOptions.resetWritable();
887 neteditOptions.set("sumocfg-file", sumoConfigFile);
888 // run load thread
890 // update view
891 update();
892 }
893 return 1;
894}
895
896
897long
898GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
899 // check if file exist
900 if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
901 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
902 } else {
903 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
904 }
905}
906
907
908long
909GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
910 // check if file exist
911 if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
912 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
913 } else {
914 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
915 }
916}
917
918
919long
920GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
921 auto& neteditOptions = OptionsCont::getOptions();
922 // get netconvert filename
923 const auto TLSfileDialog = GNEFileDialog(this, TL("Traffic Light definitions file"),
927 // continue depending of netconvertFile
928 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
929 // set file to load
930 neteditOptions.resetWritable();
931 neteditOptions.set("tls-file", TLSfileDialog.getFilename());
932 // load traffic lights
933 loadTrafficLights(false);
934 }
935 return 1;
936}
937
938
939long
940GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
941 // load traffic lights
942 loadTrafficLights(true);
943 return 1;
944}
945
946
947long
948GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
949 // check if file exist
950 if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
951 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
952 } else {
953 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
954 }
955}
956
957
958long
959GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
960 auto& neteditOptions = OptionsCont::getOptions();
961 // get netconvert filename
962 const auto edgeTypesFileDialog = GNEFileDialog(this, TL("EdgeTypes file"),
966 // continue depending of netconvertFile
967 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
968 // set file to load
969 neteditOptions.resetWritable();
970 neteditOptions.set("edgetypes-file", edgeTypesFileDialog.getFilename());
971 // load edge types
972 loadEdgeTypes(false);
973 }
974 return 1;
975}
976
977
978long
979GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
980 // load edge types
981 loadEdgeTypes(true);
982 return 0;
983}
984
985
986long
987GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
988 // check if file exist
989 if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
990 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
991 } else {
992 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
993 }
994}
995
996
997long
998GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector sel, void*) {
999 auto& neteditOptions = OptionsCont::getOptions();
1000 // check if close current file
1001 if (onCmdClose(0, sel, 0) == 1) {
1002 // stop test before calling load thread
1003 if (myInternalTest) {
1005 }
1006 // store size, position and viewport
1008 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1009 // set flag
1010 myAmLoading = true;
1011 // get files
1012 const auto neteditConfig = neteditOptions.getString("configuration-file");
1013 const auto sumoConfig = neteditOptions.getString("sumocfg-file");
1014 const auto networkFile = neteditOptions.getString("net-file");
1015 // fill (reset) all options
1016 myLoadThread->fillOptions(neteditOptions);
1017 // set default options defined in GNELoadThread::setDefaultOptions(...)
1018 myLoadThread->setDefaultOptions(neteditOptions);
1019 // set file to load
1020 neteditOptions.resetWritable();
1021 if (neteditConfig.size() > 0) {
1022 neteditOptions.set("configuration-file", neteditConfig);
1023 // set status bar
1024 setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
1025 } else if (sumoConfig.size() > 0) {
1026 neteditOptions.set("sumocfg-file", sumoConfig);
1027 // set status bar
1028 setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
1029 } else if (networkFile.size() > 0) {
1030 neteditOptions.set("net-file", networkFile);
1031 // set status bar
1032 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1033 } else {
1034 // nothing to load
1035 return 0;
1036 }
1037 // load network
1039 }
1040 return 1;
1041}
1042
1043
1044long
1045GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1046 auto& neteditOptions = OptionsCont::getOptions();
1047 // declare strings
1048 FXString neteditConfig = TL("&Reload Netedit config");
1049 FXString sumoConfig = TL("&Reload Sumo config");
1050 FXString netFile = TL("&Reload Network");
1051 FXString reload = TL("&Reload");
1052 // check options
1053 if (myNet == nullptr) {
1054 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1055 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1056 } else if (neteditOptions.getString("configuration-file").size() > 0) {
1057 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1058 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1059 } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1060 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1061 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1062 } else if (neteditOptions.getString("net-file").size() > 0) {
1063 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1064 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1065 } else {
1066 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1067 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1068 }
1069 return 1;
1070}
1071
1072
1073long
1074GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector sel, void*) {
1075 auto& neteditOptions = OptionsCont::getOptions();
1076 // check if close current file
1077 if (onCmdClose(0, sel, 0) == 1) {
1078 // stop test before calling load thread
1079 if (myInternalTest) {
1081 }
1082 // store size, position and viewport
1084 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1085 // set flag
1086 myAmLoading = true;
1087 // get network
1088 const auto networkFile = neteditOptions.getString("net-file");
1089 // fill (reset) all options
1090 myLoadThread->fillOptions(neteditOptions);
1091 // set default options defined in GNELoadThread::setDefaultOptions(...)
1092 myLoadThread->setDefaultOptions(neteditOptions);
1093 // set file to load
1094 neteditOptions.resetWritable();
1095 neteditOptions.set("net-file", networkFile);
1096 // set status bar
1097 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1098 // loaad network
1100 }
1101 return 1;
1102}
1103
1104
1105long
1106GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1107 auto& neteditOptions = OptionsCont::getOptions();
1108 if (myNet == nullptr) {
1109 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1110 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1111 } else if ((neteditOptions.getString("net-file").size() > 0) &&
1112 ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1113 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1114 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1115 } else {
1116 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1117 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1118 }
1119 return 1;
1120}
1121
1122
1123long
1124GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1125 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1126 if (myAmLoading) {
1127 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1128 } else if (onCmdClose(0, 0, 0) == 1) {
1129 // get filedata
1130 const std::string recentFile = ((const char*)fileData);
1131 // check if we're loading a network o a config
1132 if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1133 (recentFile.find(".netecfg") != std::string::npos) ||
1134 (recentFile.find(".sumocfg") != std::string::npos) ||
1135 (recentFile.find(".netccfg") != std::string::npos)) {
1136 // load config
1137 loadConfiguration(recentFile);
1138 } else {
1139 // load network
1140 loadNetwork(recentFile);
1141 }
1142 }
1143 return 1;
1144}
1145
1146
1147long
1148GNEApplicationWindow::onCmdClose(FXObject*, FXSelector sel, void*) {
1149 if (myViewNet == nullptr) {
1150 return 1;
1151 } else if (askSaveElements()) {
1153 // add a separator to the log
1155 // hide all menu commands
1159 // hide view options
1163 // reset files (except if we're reloading)
1164 if ((FXSELID(sel) != MID_GNE_TOOLBARFILE_RELOADNETWORK) && (FXSELID(sel) != MID_HOTKEY_CTRL_R_RELOAD)) {
1165 auto& neteditOptions = OptionsCont::getOptions();
1166 neteditOptions.resetWritable();
1167 neteditOptions.set("configuration-file", "");
1168 neteditOptions.set("sumocfg-file", "");
1169 neteditOptions.set("net-file", "");
1170 neteditOptions.set("tls-file", "");
1171 neteditOptions.set("edgetypes-file", "");
1172 neteditOptions.set("additional-files", "");
1173 neteditOptions.set("route-files", "");
1174 neteditOptions.set("meandata-files", "");
1175 neteditOptions.set("data-files", "");
1176 // also in sumoConfig
1178 mySumoOptions.set("configuration-file", "");
1179 mySumoOptions.set("net-file", "");
1180 mySumoOptions.set("additional-files", "");
1181 mySumoOptions.set("route-files", "");
1182 mySumoOptions.set("data-files", "");
1183 }
1184 return 1;
1185 } else {
1186 return 0;
1187 }
1188}
1189
1190
1191long
1192GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1193 if (myMDIClient->numChildren() > 0) {
1194 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1195 if (w != nullptr) {
1196 w->onCmdLocate(nullptr, sel, nullptr);
1197 }
1198 }
1199 return 1;
1200}
1201
1202
1203long
1204GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1205 return myToolsMenuCommands.showTool(obj);
1206}
1207
1208
1209long
1210GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1212}
1213
1214
1215long
1218}
1219
1220
1221long
1222GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1223 // currently always enabled
1224 return 1;
1225}
1226
1227
1228long
1229GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1230 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1231 return 1;
1232}
1233
1234
1235long
1236GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1238 return 1;
1239}
1240
1241
1242long
1244 return 1;
1245}
1246
1247
1248long
1250 return 1;
1251}
1252
1253
1254long
1255GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1256 // create and open about dialog
1257 GNEAboutDialog(this);
1258 return 1;
1259}
1260
1261
1262long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1263 FXEvent* event = (FXEvent*)ptr;
1264 FXString string = GUIUserIO::clipped.c_str();
1265 setDNDData(FROM_CLIPBOARD, event->target, string);
1266 return 1;
1267}
1268
1269
1270long
1271GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1272 eventOccurred();
1273 return 1;
1274}
1275
1276
1277void
1279 // load events
1280 while (!myThreadEvents.empty()) {
1281 // get the next event
1284 // process
1285 switch (e->getOwnType()) {
1288 break;
1295 break;
1296 default:
1297 break;
1298 }
1299 delete e;
1300 }
1301}
1302
1303
1304void
1306 myAmLoading = false;
1307 GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1308 // get option container
1309 auto& neteditOptions = OptionsCont::getOptions();
1310 // check whether the loading was successful
1311 if (ec->net == nullptr) {
1312 // report failure
1313 setStatusBarText(TLF("Loading of network '%' failed", ec->file));
1314 } else {
1315 // set new Net
1316 myNet = ec->net;
1317 // report success
1318 setStatusBarText(TLF("Network '%' loaded", ec->file));
1320 // build viewparent toolbar grips before creating view parent
1322 // initialise netedit View
1323 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1324 // create it maximized
1325 viewParent->maximize();
1326 // mark it as Active child
1327 myMDIClient->setActiveChild(viewParent);
1328 // cast pointer myViewNet
1329 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1330 // set settings in view
1331 if (viewParent->getView() && ec->settingsFile != "") {
1332 GUISettingsHandler settings(ec->settingsFile, true, true);
1333 settings.addSettings(viewParent->getView());
1334 viewParent->getView()->addDecals(settings.getDecals());
1335 settings.applyViewport(viewParent->getView());
1336 settings.setSnapshots(viewParent->getView());
1337 }
1338 // set network name on the caption
1339 setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1340 // force supermode network
1341 if (myViewNet) {
1343 }
1344 if (myViewNet && ec->viewportFromRegistry) {
1345 Position off;
1346 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1347 Position p(off.x(), off.y(), 0);
1348 myViewNet->setViewportFromToRot(off, p, 0);
1349 }
1350 // if we're loading a sumo config, update netedit options
1351 if ((mySumoOptions.getStringVector("additional-files").size() > 0) && neteditOptions.getStringVector("additional-files").empty()) {
1352 neteditOptions.resetWritable();
1353 neteditOptions.set("additional-files", mySumoOptions.getValueString("additional-files"));
1354 }
1355 if ((mySumoOptions.getStringVector("route-files").size() > 0) && neteditOptions.getStringVector("route-files").empty()) {
1356 neteditOptions.resetWritable();
1357 neteditOptions.set("route-files", mySumoOptions.getValueString("route-files"));
1358 }
1359 // load elements
1364 // load selection
1365 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1367 }
1369 }
1371 // update app
1372 update();
1373 // restore focus
1374 setFocus();
1375}
1376
1377
1378void
1383
1384// ---------------------------------------------------------------------------
1385// private methods
1386// ---------------------------------------------------------------------------
1387
1388void
1390 // build file menu
1391 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1393 myFileMenuNeteditConfig = new FXMenuPane(this);
1394 myFileMenuSumoConfig = new FXMenuPane(this);
1395 myFileMenuTLS = new FXMenuPane(this);
1396 myFileMenuEdgeTypes = new FXMenuPane(this);
1397 myFileMenuAdditionals = new FXMenuPane(this);
1398 myFileMenuDemandElements = new FXMenuPane(this);
1399 myFileMenuDataElements = new FXMenuPane(this);
1400 myFileMenuMeanDataElements = new FXMenuPane(this);
1401 myFileMenuRecentNetworks = new FXMenuPane(this);
1402 myFileMenuRecentConfigs = new FXMenuPane(this);
1406 // add separator for recent files
1407 new FXMenuSeparator(myFileMenu);
1408 // build recent files
1411 new FXMenuSeparator(myFileMenu);
1412 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1413 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1414 // build modes menu
1415 myModesMenu = new FXMenuPane(this);
1417 myModesMenuTitle->setTarget(this);
1419 // build Supermode commands and hide it
1421 // add separator
1422 new FXSeparator(myModesMenu);
1423 // build modes menu commands
1425 // build edit menu
1426 myEditMenu = new FXMenuPane(this);
1428 // build edit menu commands
1430 // build separator
1431 new FXMenuSeparator(myEditMenu);
1432 // build view options
1436 // hide view options
1440 // build view menu commands
1442 // build separator
1443 new FXMenuSeparator(myEditMenu);
1444 // build front element menu commands
1446 // build separator
1447 new FXMenuSeparator(myEditMenu);
1448 // build open in sumo menu commands
1450 // build lock menu
1451 myLockMenu = new FXMenuPane(this);
1453 myLockMenuTitle->setTarget(this);
1455 // build lock menu commands
1457 // build processing menu (trigger netbuild computations)
1458 myProcessingMenu = new FXMenuPane(this);
1461 // build locate menu
1462 myLocatorMenu = new FXMenuPane(this);
1465 // build tools menu
1466 myToolsMenu = new FXMenuPane(this);
1467 myToolsAssignMenu = new FXMenuPane(this);
1468 myToolsDetectorMenu = new FXMenuPane(this);
1469 myToolsDistrictMenu = new FXMenuPane(this);
1470 myToolsDRTMenu = new FXMenuPane(this);
1471 myToolsEmissionsMenu = new FXMenuPane(this);
1472 myToolsImportMenu = new FXMenuPane(this);
1473 myToolsImportCityBrainMenu = new FXMenuPane(this);
1474 myToolsImportGTFSMenu = new FXMenuPane(this);
1475 myToolsImportVissim = new FXMenuPane(this);
1476 myToolsImportVisum = new FXMenuPane(this);
1477 myToolsNetMenu = new FXMenuPane(this);
1478 myToolsRouteMenu = new FXMenuPane(this);
1479 myToolsOutputMenu = new FXMenuPane(this);
1480 myToolsShapes = new FXMenuPane(this);
1481 myToolsTLS = new FXMenuPane(this);
1482 myToolsTriggerMenu = new FXMenuPane(this);
1483 myToolsTurnDefs = new FXMenuPane(this);
1484 myToolsVisualizationMenu = new FXMenuPane(this);
1485 myToolsXML = new FXMenuPane(this);
1487 // build tools menu cascasde
1488 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1489 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1490 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1492 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1501 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1502 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1503 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1507 // add separators between folders
1508 new FXMenuSeparator(myToolsMenu);
1509 new FXMenuSeparator(myToolsImportMenu);
1510 // create map with tool Menu panes and their associated folder
1517 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1519 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1520 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1527 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1530 // build tools
1532 // build windows menu
1533 myWindowMenu = new FXMenuPane(this);
1536 // build language menu
1538 // build help menu
1539 myHelpMenu = new FXMenuPane(this);
1542}
1543
1544
1545FXGLCanvas*
1547 // netedit uses only a single View, then return nullptr
1548 return nullptr;
1549}
1550
1551
1554 return 0;
1555}
1556
1557
1558double
1560 return 1;
1561}
1562
1563
1568
1569
1574
1575
1580
1581
1586
1587
1588void
1590 if (myViewNet && myViewNet->getNet()) {
1591 // show
1593 // set label depending of recomputing
1595 myRequireRecomputingButton->setText("");
1596 myRequireRecomputingButton->setTipText(TL("Network computed"));
1598 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1599 } else {
1600 myRequireRecomputingButton->setText(TL("Press F5"));
1601 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1603 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1604 }
1605 } else {
1606 // hide
1608 }
1609}
1610
1611
1612void
1614 // first check if net must be deleted
1615 if (myNet != nullptr) {
1616 delete myNet;
1617 myNet = nullptr;
1619 }
1620 // check if view has to be saved
1621 if (myViewNet) {
1623 // clear decals
1624 myViewNet->getDecals().clear();
1625 }
1626 // lock tracker
1627 myTrackerLock.lock();
1628 // remove trackers and other external windows
1629 while (!myGLWindows.empty()) {
1630 delete myGLWindows.front();
1631 }
1632 myViewNet = nullptr;
1633 for (FXMainWindow* const window : myTrackerWindows) {
1634 window->destroy();
1635 delete window;
1636 }
1637 myTrackerWindows.clear();
1638 // reset the caption
1639 setTitle(myTitlePrefix);
1640 // unlock tracker
1641 myTrackerLock.unlock();
1642 // remove coordinate information
1643 myGeoCoordinate->setText(TL("N/A"));
1644 myCartesianCoordinate->setText(TL("N/A"));
1645 myTestCoordinate->setText(TL("N/A"));
1646 myTestFrame->hide();
1648 // Reset textures
1650 // reset fonts
1652}
1653
1654
1655FXCursor*
1657 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1658}
1659
1660
1661void
1663 auto& neteditOptions = OptionsCont::getOptions();
1664 if (neteditOptions.getBool("new")) {
1665 // save output file
1666 const auto outputFile = neteditOptions.getString("output-file");
1667 // create new network reset all options
1669 // check if define output file
1670 if (!outputFile.empty()) {
1671 neteditOptions.resetWritable();
1672 neteditOptions.set("net-file", outputFile);
1673 }
1674 } else {
1675 // set flag
1676 myAmLoading = true;
1677 // set status bar
1678 setStatusBarText(TL("Loading console arguments."));
1679 // load console arguments
1681 // add it into recent networks and configs
1682 if (neteditOptions.getString("net-file").size() > 0) {
1683 myMenuBarFile.myRecentNetworks.appendFile(FXPath::absolute(neteditOptions.getString("net-file").c_str()));
1684 }
1685 if (neteditOptions.getString("configuration-file").size() > 0) {
1686 myMenuBarFile.myRecentConfigs.appendFile(FXPath::absolute(neteditOptions.getString("configuration-file").c_str()));
1687 }
1688 }
1689}
1690
1691
1692void
1694 auto& neteditOptions = OptionsCont::getOptions();
1695 // save windows size and position
1697 // enable loading flag and disable reloading flag
1698 myAmLoading = true;
1699 // recenter view
1700 gSchemeStorage.saveViewport(0, 0, -1, 0);
1701 // fill (reset) all options
1702 GNELoadThread::fillOptions(neteditOptions);
1703 // set default options defined in GNELoadThread::setDefaultOptions(...)
1704 GNELoadThread::setDefaultOptions(neteditOptions);
1705 // update status bar
1706 setStatusBarText(TL("Creating new network."));
1707 // create new network
1709 // update window
1710 update();
1711}
1712
1713
1714void
1715GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1716 if (networkFile.empty()) {
1717 WRITE_ERROR(TL("Trying to load an empty network."));
1718 } else {
1719 auto& neteditOptions = OptionsCont::getOptions();
1720 // stop test before calling load thread
1721 if (myInternalTest) {
1723 }
1724 // store size, position and viewport
1726 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1727 // set flag
1728 myAmLoading = true;
1729 // fill (reset) all options
1730 myLoadThread->fillOptions(neteditOptions);
1731 // set default options defined in GNELoadThread::setDefaultOptions(...)
1732 myLoadThread->setDefaultOptions(neteditOptions);
1733 // set file to load
1734 neteditOptions.resetWritable();
1735 neteditOptions.set("net-file", networkFile);
1736 // set status bar
1737 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1738 // load network
1740 // add it into recent nets
1741 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1742 }
1743}
1744
1745
1746void
1747GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1748 if (configurationFile.empty()) {
1749 WRITE_ERROR(TL("Trying to load an empty configuration."));
1750 } else {
1751 auto& neteditOptions = OptionsCont::getOptions();
1752 // store size, position and viewport
1754 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1755 // set flag
1756 myAmLoading = true;
1757 // fill (reset) all options
1758 myLoadThread->fillOptions(neteditOptions);
1759 // set default options defined in GNELoadThread::setDefaultOptions(...)
1760 myLoadThread->setDefaultOptions(neteditOptions);
1761 // set file to load
1762 neteditOptions.resetWritable();
1763 neteditOptions.set("configuration-file", configurationFile);
1764 // set status bar
1765 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1766 // load config
1768 // add it into recent configs
1769 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1770 }
1771}
1772
1773
1774void
1775GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1776 auto& neteditOptions = OptionsCont::getOptions();
1777 // store size, position and viewport
1779 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1780 // set flag
1781 myAmLoading = true;
1782 // fill (reset) all options
1783 myLoadThread->fillOptions(neteditOptions);
1784 // set default options defined in GNELoadThread::setDefaultOptions(...)
1785 myLoadThread->setDefaultOptions(neteditOptions);
1786 // recommended osm options
1787 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1788 neteditOptions.set("osm-files", OSMFile);
1789 neteditOptions.set("geometry.remove", "true");
1790 neteditOptions.set("ramps.guess", "true");
1791 neteditOptions.set("junctions.join", "true");
1792 neteditOptions.set("tls.guess-signals", "true");
1793 neteditOptions.set("tls.discard-simple", "true");
1794 // open netedit options dialog
1795 const auto neteditOptionsDialog = GNENeteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1796 // open wizard dialog
1797 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1798 // needed to set projection parameters
1799 NIFrame::checkOptions(neteditOptions);
1800 // set file to load
1801 neteditOptions.resetWritable();
1802 neteditOptions.set("configuration-file", OSMFile);
1803 // set status bar
1804 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1805 // load config
1807 }
1808}
1809
1810void
1811GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1812 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1813 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1814}
1815
1816
1817long
1819 // open question dialog box
1820 const auto questionDialog = GNEQuestionBasicDialog(this, GNEDialog::Buttons::YES_NO,
1821 TL("Recompute with volatile options"),
1822 TL("Changes produced in the net due a recomputing with"),
1823 TL("volatile options cannot be undone. Continue?"));
1824 // check result
1825 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1826 // save all elements
1827 onCmdSaveAdditionalElements(nullptr, 0, nullptr);
1828 onCmdSaveDemandElements(nullptr, 0, nullptr);
1829 onCmdSaveDataElements(nullptr, 0, nullptr);
1830 onCmdSaveMeanDataElements(nullptr, 0, nullptr);
1831 // compute with volatile options
1832 myNet->computeNetwork(this, true, true);
1834 }
1835 return 1;
1836}
1837
1838
1839bool
1842 myConsoleOptionsLoaded = false;
1843 return true;
1844 } else {
1845 return false;
1846 }
1847}
1848
1849
1854
1855
1856void
1860
1861
1862long
1863GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1864 // check that currently there is a View
1865 if (myViewNet) {
1866 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1867 }
1868 return 1;
1869}
1870
1871
1872long
1873GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1874 // check that currently there is a View
1875 if (myViewNet) {
1876 myViewNet->onCmdSetMode(sender, sel, ptr);
1877 }
1878 return 1;
1879}
1880
1881
1882long
1883GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1884 if (myViewNet) {
1885 // check if we're calling the functions using internal test
1886 switch (FXSELID(sel)) {
1889 break;
1890 case MID_GNE_LOCK_EDGE:
1892 break;
1893 case MID_GNE_LOCK_LANE:
1895 break;
1898 break;
1901 break;
1904 break;
1907 break;
1908 case MID_GNE_LOCK_WIRE:
1910 break;
1911 case MID_GNE_LOCK_TAZ:
1913 break;
1916 break;
1917 case MID_GNE_LOCK_POI:
1919 break;
1922 break;
1925 break;
1926 case MID_GNE_LOCK_ROUTE:
1928 break;
1931 break;
1934 break;
1937 break;
1938 case MID_GNE_LOCK_WALK:
1940 break;
1941 case MID_GNE_LOCK_RIDE:
1943 break;
1946 break;
1949 break;
1952 break;
1953 case MID_GNE_LOCK_STOP:
1955 break;
1958 break;
1961 break;
1964 break;
1965 default:
1966 break;
1967 }
1969 }
1970 return 1;
1971}
1972
1973
1974long
1975GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1976 // lock all
1979 return 1;
1980}
1981
1982
1983long
1985 // unlock all
1988 return 1;
1989}
1990
1991
1992long
1994 if (myViewNet) {
1995 myViewNet->update();
1996 }
1997 return 1;
1998}
1999
2000
2001long
2002GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2003 if (myViewNet) {
2005 // supermode network
2011 myLockMenuTitle->enable();
2012 } else {
2013 myLockMenuTitle->disable();
2014 }
2016 // supermode demand
2021 myLockMenuTitle->enable();
2022 } else {
2023 myLockMenuTitle->disable();
2024 }
2026 // supermode data
2030 myLockMenuTitle->enable();
2031 } else {
2032 myLockMenuTitle->disable();
2033 }
2034 } else {
2035 myLockMenuTitle->disable();
2036 }
2037 } else {
2038 myLockMenuTitle->disable();
2039 }
2040 return 1;
2041}
2042
2043
2044long
2045GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
2046 // first check if there is a view
2047 if (myViewNet) {
2048 // process depending of supermode
2050 // check what FXMenuCommand was called
2051 switch (FXSELID(sel)) {
2053 myNet->computeNetwork(this, true, false);
2055 break;
2058 break;
2061 break;
2064 break;
2067 break;
2068 default:
2069 break;
2070 }
2072 // check what FXMenuCommand was called
2073 switch (FXSELID(sel)) {
2077 break;
2080 break;
2083 break;
2086 break;
2089 break;
2090 default:
2091 break;
2092 }
2093 }
2094 // refresh to update undo-redo button
2095 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2096 }
2097 return 1;
2098}
2099
2100
2101long
2102GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2103 // get extra arguments
2104 std::string extraArg;
2106 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2107 }
2108 FXRegistry reg("SUMO netedit", "netedit");
2109 std::string netedit = "netedit";
2110 const char* sumoPath = getenv("SUMO_HOME");
2111 if (sumoPath != nullptr) {
2112#ifdef DEBUG
2113 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2114#else
2115 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2116#endif
2117 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2118 netedit = "\"" + newPath + "\"";
2119 }
2120 }
2121 std::string cmd = netedit + extraArg;
2122 // start in background
2123#ifndef WIN32
2124 cmd = cmd + " &";
2125#else
2126 // see "help start" for the parameters
2127 cmd = "start /B \"\" " + cmd;
2128#endif
2129 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2130 // yay! fun with dangerous commands... Never use this over the internet
2132 return 1;
2133}
2134
2135
2136long
2137GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2138 // get option container
2139 auto& neteditOptions = OptionsCont::getOptions();
2140 // input parameters
2141 std::string inputParameters;
2142 // if we have only a network, then load directly without creating a SumoConfig
2144 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2145 // force save network
2146 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2147 // network wasn't saved, then stop
2148 return 0;
2149 }
2150 inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2151 // write info
2152 WRITE_MESSAGE(TLF("Loading network '%' in SUMO-GUI.", neteditOptions.getString("net-file")));
2153 } else {
2154 // force save SumoConfig
2155 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2156 // SumoConfig wasn't saved, then stop
2157 return 0;
2158 }
2159 inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2160 // write info
2161 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", neteditOptions.getString("sumocfg-file")));
2162 }
2163 // save current viewport in registry
2164 FXRegistry reg("SUMO GUI", "sumo-gui");
2165 reg.read();
2166 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2167 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2168 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2169 reg.write();
2170 // declare executable
2171 std::string sumoGuiExecutable = "sumo-gui";
2172 // if SUMO_HOME is defined, update executable
2173 const char* sumoHome = getenv("SUMO_HOME");
2174 if (sumoHome != nullptr) {
2175 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2176 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2177 sumoGuiExecutable = "\"" + newPath + "\"";
2178 }
2179 }
2180 // declare command
2181 std::string cmd = sumoGuiExecutable + inputParameters;
2182 // start in background
2183#ifndef WIN32
2184 cmd = cmd + " &";
2185#else
2186 // see "help start" for the parameters
2187 cmd = "start /B \"\" " + cmd;
2188#endif
2189 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2190 // yay! fun with dangerous commands... Never use this over the internet
2192 return 1;
2193}
2194
2195
2196long
2197GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2198 // check that view exists
2199 if (myViewNet) {
2200 // first check if we're selecting a subset of edges in TAZ Frame
2202 // clear current selection
2204 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2205 // check if stop select parent
2207 // and stop select paretn
2209 } else {
2210 // clear inspected elements
2212 }
2213 } else {
2214 // abort current operation
2216 }
2217 }
2218 return 1;
2219}
2220
2221
2222long
2223GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2224 // check that view exists
2225 if (myViewNet) {
2227 }
2228 return 1;
2229}
2230
2231
2232long
2233GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2234 // check that view exists
2235 if (myViewNet) {
2237 }
2238 return 1;
2239}
2240
2241
2242long
2243GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2244 // check that view exists
2245 if (myViewNet) {
2247 }
2248 return 1;
2249}
2250
2251
2252long
2253GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2254 // check that view exists
2255 if (myViewNet) {
2257 }
2258 return 1;
2259}
2260
2261
2262long
2264 // check that view exists
2265 if (myViewNet) {
2267 }
2268 return 1;
2269}
2270
2271
2272long
2273GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2274 // check that view exists
2275 if (myViewNet) {
2277 // refresh flow frames
2278 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2280 }
2281 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2283 }
2284 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2286 }
2287 // refresh inspector frame
2288 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2290 }
2291 }
2292 return 1;
2293}
2294
2295
2296long
2297GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2298 // check that view exists
2299 if (myViewNet) {
2301 }
2302 return 1;
2303}
2304
2305
2306long
2307GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2310 }
2311 return 1;
2312}
2313
2314
2315long
2316GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2317 // enable or disable sender element depending of viewNet
2318 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2319}
2320
2321
2322long
2325 return 1;
2326}
2327
2328
2329long
2330GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2331 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2332 return 1;
2333}
2334
2335
2336long
2337GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2339}
2340
2341
2342long
2343GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2344 // check that view exists
2345 if (myViewNet) {
2347 }
2348 return 1;
2349}
2350
2351
2352long
2353GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2354 // check that view exists
2355 if (myViewNet) {
2357 }
2358 return 1;
2359}
2360
2361
2362long
2363GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2364 // check that view exists
2365 if (myViewNet) {
2366 // Call manually toggle grid function
2367 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2368 }
2369 return 1;
2370}
2371
2372
2373long
2374GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2375 // check that view exists
2376 if (myViewNet) {
2377 // Call manually toggle junction shape function
2378 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2379 }
2380 return 1;
2381}
2382
2383
2384long
2386 if (myViewNet) {
2387 // check if all element are front
2388 bool allFront = true;
2389 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2390 if (!AC->isMarkedForDrawingFront()) {
2391 allFront = false;
2392 break;
2393 }
2394 }
2395 // first unfront all elements
2397 // only mark front elements if we have at least one non-front element
2398 if (!allFront) {
2399 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2400 AC->markForDrawingFront();
2401 }
2402 }
2403 myViewNet->update();
2405 }
2406 return 1;
2407}
2408
2409
2410long
2411GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2412 // first check that we have a ViewNet
2413 if (myViewNet) {
2414 // first check what selector was called
2415 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2416 // check that numericalKeyPressed is valid
2417 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2418 return 0;
2419 }
2420 // declare a vector in which save visible menu commands
2421 std::vector<MFXCheckableButton*> visibleMenuCommands;
2422 // get common, network and demand visible menu commands
2426 // now check that numericalKeyPressed isn't greater than visible view options
2427 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2428 return 0;
2429 }
2430 // toggle edit options
2432 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2433 return 1;
2435 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2436 return 1;
2438 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2439 return 1;
2440 }
2441 }
2442 return 0;
2443}
2444
2445
2446long
2447GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2448 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2449 return 1;
2450}
2451
2452
2453long
2454GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2455 // update in every version
2456 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2457 return 1;
2458}
2459
2460
2461long
2462GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2463 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2464 return 1;
2465}
2466
2467
2468long
2471 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2472 } else {
2473 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2474 }
2475}
2476
2477
2478long
2479GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2480 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2481 myAllowUndoRedo = true;
2482 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2483 } else {
2484 myAllowUndoRedo = false;
2485 // drop undo-redo list after changing flag
2486 myUndoList->clear();
2487 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2488 }
2489}
2490
2491
2492long
2494 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2496 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2497 } else {
2498 myAllowUndoRedoLoading = false;
2499 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2500 }
2501}
2502
2503
2504long
2505GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2506 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2507 return 1;
2508}
2509
2510
2511long
2512GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2513 // create and open feedback dialog
2514 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2515 feedback->create();
2516 feedback->show(PLACEMENT_OWNER);
2517 return 1;
2518}
2519
2520
2521long
2523 auto& neteditOptions = OptionsCont::getOptions();
2524 // open netedit option dialog
2525 const auto neteditOptionsDialog = GNENeteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2526 // continue depending of result
2527 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2528 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2529 NBFrame::checkOptions(neteditOptions);
2530 NWFrame::checkOptions(neteditOptions);
2531 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2532 // check if mark netedit config as unsaved
2533 if (neteditOptionsDialog.isOptionModified() && myNet) {
2535 }
2536 }
2537 return 1;
2538}
2539
2540
2541long
2543 // open sumo option dialog
2544 const auto sumoOptionsDialog = GNESumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2545 // continue depending of result
2546 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2548 }
2549 return 1;
2550}
2551
2552
2553long
2556 return 1;
2557}
2558
2559
2560long
2562 // open netgenerate options dialog
2564 return 1;
2565}
2566
2567
2568long
2569GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2570 // Check conditions
2571 if (myViewNet == nullptr) {
2572 return 0;
2573 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2574 return 0;
2575 } else {
2576 // check supermode (currently ignore supermode data)
2579 // abort if user doesn't press "yes"
2581 return 0;
2582 }
2583 }
2585 // update current show frame after undo
2588 }
2589 // update manually undo/redo menu commands (see #6005)
2592 // update toolbar undo-redo buttons
2594 return 1;
2595 }
2596}
2597
2598
2599long
2600GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2601 // Check conditions
2602 if (myViewNet == nullptr) {
2603 return 0;
2604 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2605 return 0;
2606 } else {
2607 // check supermode (currently ignore supermode data)
2610 // abort if user doesn't press "yes"
2612 return 0;
2613 }
2614 }
2616 // update current show frame after redo
2619 }
2620 // update manually undo/redo menu commands (see #6005)
2623 // update toolbar undo-redo buttons
2625 return 1;
2626 }
2627}
2628
2629
2630long
2632 // open UndoList Dialog
2633 GNEUndoListDialog(this);
2634 return 1;
2635}
2636
2637
2638long
2639GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2640 // check if net exist and there is something to undo/redo
2641 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2642 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2643 } else {
2644 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2645 }
2646 return 1;
2647}
2648
2649
2650long
2652 // first check viewNet
2654 // update demand path calculator
2656 }
2657 return 1;
2658}
2659
2660
2661long
2662GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2663 // Prepared for #6042
2664 return 1;
2665}
2666
2667
2668long
2669GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2670 // Prepared for #6042
2671 return 1;
2672}
2673
2674
2675long
2676GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2677 // Prepared for #6042
2678 return 1;
2679}
2680
2681
2682long
2683GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2684 // first check if myViewNet exist
2685 if (myViewNet) {
2686 // call set template in inspector frame
2688 }
2689 return 1;
2690}
2691
2692
2693long
2694GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2695 // first check if myViewNet exist
2696 if (myViewNet) {
2697 // call copy template in inspector frame
2699 }
2700 return 1;
2701}
2702
2703
2704long
2705GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2706 // first check if myViewNet exist
2707 if (myViewNet) {
2708 // call clear template in inspector frame
2710 }
2711 return 1;
2712}
2713
2714
2715long
2716GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2717 // check if net exist
2718 if (myNet) {
2720 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2721 } else {
2723 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2724 }
2725}
2726
2727
2728long
2729GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2730 // check if at least there is one edge in the network
2731 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2732 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2733 } else {
2734 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2735 }
2736}
2737
2738
2739long
2740GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2741 // check if net, viewnet and front attribute exist
2742 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2743 // check if all element are front
2744 bool allFront = true;
2745 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2746 if (!AC->isMarkedForDrawingFront()) {
2747 allFront = false;
2748 break;
2749 }
2750 }
2751 // set button text depending of all selected
2752 if (allFront) {
2753 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2754 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2755 } else {
2756 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2757 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element for draw over the rest"));
2758 }
2759 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2760 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2761 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2762 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2763 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2764 } else {
2765 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2766 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element for draw over the rest"));
2767 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2768 }
2769}
2770
2771
2772long
2773GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2774 if (myNet == nullptr) {
2775 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2776 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2777 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2778 } else {
2779 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2780 }
2781}
2782
2783
2784long
2785GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2786 if (myNet == nullptr) {
2787 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2789 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2790 } else {
2791 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2792 }
2793}
2794
2795
2796long
2798 if (myNet == nullptr) {
2799 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2800 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
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
2808long
2809GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2810 if (myNet == nullptr) {
2811 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2812 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2813 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2814 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2815 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2816 } else {
2817 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2818 }
2819}
2820
2821
2822long
2823GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2824 if (myNet == nullptr) {
2825 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2826 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2827 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2828 } else {
2829 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2830 }
2831
2832}
2833
2834
2835long
2836GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2837 if (myNet == nullptr) {
2838 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2840 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2841 } else {
2842 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2843 }
2844}
2845
2846
2847long
2848GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2849 if (myNet == nullptr) {
2850 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2851 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
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
2859
2860long
2861GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2862 if (myNet == nullptr) {
2863 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2864 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2865 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2866 } else {
2867 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2868 }
2869
2870}
2871
2872
2873long
2874GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2875 if (myNet == nullptr) {
2876 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2877 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2878 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2879 } else {
2880 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2881 }
2882}
2883
2884
2885long
2887 if (myNet == nullptr) {
2888 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2889 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2890 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2891 } else {
2892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2893 }
2894
2895}
2896
2897
2898long
2899GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2900 return myUndoList->onUpdUndo(sender, sel, ptr);
2901}
2902
2903
2904long
2905GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2906 return myUndoList->onUpdRedo(sender, sel, ptr);
2907}
2908
2909
2910long
2911GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2912 // first check viewNet
2913 if (myViewNet) {
2914 // check supermode network
2916 // disable
2917 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2919 // disable
2920 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2921 } else {
2922 // enable
2923 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2924 }
2925 } else {
2926 // disable
2927 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2928 }
2929}
2930
2931
2932long
2933GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2934 // check viewNet
2935 if (myViewNet) {
2936 // continue depending of selector
2937 switch (FXSELID(sel)) {
2938 // Network
2940 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2942 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2944 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2946 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2948 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2950 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2952 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2954 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2956 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2958 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2960 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2962 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
2964 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2966 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2968 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2970 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2971 // Demand
2973 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2975 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2977 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2979 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2981 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2983 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2985 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2987 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2989 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2991 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2993 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2994 // Data
2996 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2998 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3000 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3002 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3004 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3006 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3008 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3010 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3011 default:
3012 return 0;
3013 }
3014 } else {
3015 return 0;
3016 }
3017}
3018
3019
3020long
3021GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3022 // get menuCheck
3023 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3024 // check viewNet
3025 if (myViewNet && menuCheck) {
3026 // continue depending of selector
3027 switch (FXSELID(sel)) {
3028 // Network
3031 menuCheck->setCheck(TRUE);
3032 } else {
3033 menuCheck->setCheck(FALSE);
3034 }
3035 break;
3038 menuCheck->setCheck(TRUE);
3039 } else {
3040 menuCheck->setCheck(FALSE);
3041 }
3042 break;
3045 menuCheck->setCheck(TRUE);
3046 } else {
3047 menuCheck->setCheck(FALSE);
3048 }
3049 break;
3052 menuCheck->setCheck(TRUE);
3053 } else {
3054 menuCheck->setCheck(FALSE);
3055 }
3056 break;
3059 menuCheck->setCheck(TRUE);
3060 } else {
3061 menuCheck->setCheck(FALSE);
3062 }
3063 break;
3066 menuCheck->setCheck(TRUE);
3067 } else {
3068 menuCheck->setCheck(FALSE);
3069 }
3070 break;
3073 menuCheck->setCheck(TRUE);
3074 } else {
3075 menuCheck->setCheck(FALSE);
3076 }
3077 break;
3080 menuCheck->setCheck(TRUE);
3081 } else {
3082 menuCheck->setCheck(FALSE);
3083 }
3084 break;
3087 menuCheck->setCheck(TRUE);
3088 } else {
3089 menuCheck->setCheck(FALSE);
3090 }
3091 break;
3094 menuCheck->setCheck(TRUE);
3095 } else {
3096 menuCheck->setCheck(FALSE);
3097 }
3098 break;
3101 menuCheck->setCheck(TRUE);
3102 } else {
3103 menuCheck->setCheck(FALSE);
3104 }
3105 break;
3108 menuCheck->setCheck(TRUE);
3109 } else {
3110 menuCheck->setCheck(FALSE);
3111 }
3112 break;
3115 menuCheck->setCheck(TRUE);
3116 } else {
3117 menuCheck->setCheck(FALSE);
3118 }
3119 break;
3122 menuCheck->setCheck(TRUE);
3123 } else {
3124 menuCheck->setCheck(FALSE);
3125 }
3126 break;
3129 menuCheck->setCheck(TRUE);
3130 } else {
3131 menuCheck->setCheck(FALSE);
3132 }
3133 break;
3136 menuCheck->setCheck(TRUE);
3137 } else {
3138 menuCheck->setCheck(FALSE);
3139 }
3140 break;
3141 // Demand
3144 menuCheck->setCheck(TRUE);
3145 } else {
3146 menuCheck->setCheck(FALSE);
3147 }
3148 break;
3151 menuCheck->setCheck(TRUE);
3152 } else {
3153 menuCheck->setCheck(FALSE);
3154 }
3155 break;
3158 menuCheck->setCheck(TRUE);
3159 } else {
3160 menuCheck->setCheck(FALSE);
3161 }
3162 break;
3165 menuCheck->setCheck(TRUE);
3166 } else {
3167 menuCheck->setCheck(FALSE);
3168 }
3169 break;
3172 menuCheck->setCheck(TRUE);
3173 } else {
3174 menuCheck->setCheck(FALSE);
3175 }
3176 break;
3179 menuCheck->setCheck(TRUE);
3180 } else {
3181 menuCheck->setCheck(FALSE);
3182 }
3183 break;
3186 menuCheck->setCheck(TRUE);
3187 } else {
3188 menuCheck->setCheck(FALSE);
3189 }
3190 // special case for lock persons
3192 menuCheck->enable();
3193 } else {
3194 menuCheck->disable();
3195 }
3196 break;
3199 menuCheck->setCheck(TRUE);
3200 } else {
3201 menuCheck->setCheck(FALSE);
3202 }
3203 break;
3206 menuCheck->setCheck(TRUE);
3207 } else {
3208 menuCheck->setCheck(FALSE);
3209 }
3210 // special case for lock containers
3212 menuCheck->enable();
3213 } else {
3214 menuCheck->disable();
3215 }
3216 break;
3219 menuCheck->setCheck(TRUE);
3220 } else {
3221 menuCheck->setCheck(FALSE);
3222 }
3223 break;
3226 menuCheck->setCheck(TRUE);
3227 } else {
3228 menuCheck->setCheck(FALSE);
3229 }
3230 break;
3231 // Data
3234 menuCheck->setCheck(TRUE);
3235 } else {
3236 menuCheck->setCheck(FALSE);
3237 }
3238 break;
3241 menuCheck->setCheck(TRUE);
3242 } else {
3243 menuCheck->setCheck(FALSE);
3244 }
3245 break;
3248 menuCheck->setCheck(TRUE);
3249 } else {
3250 menuCheck->setCheck(FALSE);
3251 }
3252 break;
3255 menuCheck->setCheck(TRUE);
3256 } else {
3257 menuCheck->setCheck(FALSE);
3258 }
3259 break;
3262 menuCheck->setCheck(TRUE);
3263 } else {
3264 menuCheck->setCheck(FALSE);
3265 }
3266 break;
3269 menuCheck->setCheck(TRUE);
3270 } else {
3271 menuCheck->setCheck(FALSE);
3272 }
3273 break;
3274
3277 menuCheck->setCheck(TRUE);
3278 } else {
3279 menuCheck->setCheck(FALSE);
3280 }
3281 break;
3284 menuCheck->setCheck(TRUE);
3285 } else {
3286 menuCheck->setCheck(FALSE);
3287 }
3288 break;
3289 default:
3290 break;
3291 }
3292 }
3293 return 0;
3294}
3295
3296
3297long
3298GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3299 auto& neteditOptions = OptionsCont::getOptions();
3300 if (myNet->getSavingStatus()->isNetworkSaved() && !neteditOptions.getBool("force-saving")) {
3301 // nothing to save
3302 return 1;
3303 }
3304 // first check if we have to set the output filename
3305 if ((sel == MID_GNE_AUTOMATICFILENAME) && neteditOptions.getString("net-file").empty()) {
3306 neteditOptions.set("net-file", *(static_cast<std::string*>(ptr)) + ".net.xml");
3307 }
3308 // function onCmdSaveNetworkAs must be executed if this is the first save
3309 if (neteditOptions.getString("net-file").empty()) {
3310 return onCmdSaveNetworkAs(sender, sel, ptr);
3311 } else {
3312 // always recompute before saving
3313 myNet->computeNetwork(this);
3314 // se net file in SUMO options
3316 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3317 bool saved = false;
3318 try {
3319 // obtain invalid networkElements (currently only edges or crossings
3320 std::vector<GNENetworkElement*> invalidNetworkElements;
3321 // iterate over crossings and edges
3322 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3323 if (!edge.second->isNetworkElementValid()) {
3324 invalidNetworkElements.push_back(edge.second);
3325 }
3326 }
3327 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3328 if (!crossing.second->isNetworkElementValid()) {
3329 invalidNetworkElements.push_back(crossing.second);
3330 }
3331 }
3332 // if there are invalid network elements, open GNEFixNetworkElements
3333 if (invalidNetworkElements.size() > 0) {
3334 // create fix network elements dialog
3335 const auto fixNetworkElementsDialog = GNEFixNetworkElements(this, invalidNetworkElements);
3336 // continue depending of result
3337 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3338 // Save network
3339 myNet->saveNetwork();
3340 saved = true;
3341 } else {
3342 // stop
3343 return 0;
3344 }
3345 } else {
3346 // Save network
3347 myNet->saveNetwork();
3348 saved = true;
3349 }
3350 } catch (IOError& e) {
3351 // open error message box
3352 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3353 }
3354 if (saved) {
3355 // write info
3356 WRITE_MESSAGE(TLF("Network saved in '%'.", neteditOptions.getString("net-file")));
3357 // After saving a net successfully, add it into Recent Nets list.
3358 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3360 } else {
3362 WRITE_ERROR(TLF("Could not save network in '%'.", neteditOptions.getString("net-file")));
3363 return 0;
3364 }
3365 return 1;
3366 }
3367}
3368
3369
3370long
3371GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3372 // get network file file
3373 const auto networkFileDialog = GNEFileDialog(this, TL("network file"),
3377 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3378 // set ouput file in netedit configs
3379 auto& neteditOptions = OptionsCont::getOptions();
3380 neteditOptions.resetWritable();
3381 neteditOptions.set("net-file", networkFileDialog.getFilename());
3382 // update netedit title with the network name
3383 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3384 // enable save network
3386 // save network
3387 return onCmdSaveNetwork(nullptr, 0, nullptr);
3388 } else {
3389 return 0;
3390 }
3391}
3392
3393
3394long
3395GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3396 // get neteditConfig filename
3397 const auto plainXMLFileDialog = GNEFileDialog(this, TL("plain XML file"),
3401 // Remove extension
3402 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3403 auto plainXMLFile = plainXMLFileDialog.getFilename();
3404 // adjust file
3405 if (plainXMLFile.back() == '.') {
3406 plainXMLFile.pop_back();
3407 } else {
3408 plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3409 plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3410 plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3411 plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3412 plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3413 plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3414 }
3415 // continue depending of file
3416 if (!plainXMLFile.empty()) {
3417 // start saving plain XML
3418 getApp()->beginWaitCursor();
3419 try {
3420 myNet->savePlain(plainXMLFile);
3421 // write info
3422 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLFile));
3423 } catch (IOError& e) {
3424 // open message box
3425 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3426 }
3427 // end saving plain XML
3428 getApp()->endWaitCursor();
3429 // set focus again in viewNet
3430 myViewNet->setFocus();
3431 }
3432 }
3433 return 1;
3434}
3435
3436
3437long
3439 // get neteditConfig filename
3440 const auto joinedJunctionsFileDialog = GNEFileDialog(this, TL("joined junctions file"),
3444 // continue depending of file
3445 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3446 getApp()->beginWaitCursor();
3447 try {
3448 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3449 // write info
3450 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3451 } catch (IOError& e) {
3452 // opening error message
3453 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3454 }
3455 getApp()->endWaitCursor();
3456 // set focus again in viewNet
3457 myViewNet->setFocus();
3458 }
3459 return 1;
3460}
3461
3462
3463long
3465 // obtain netedit option container
3466 auto& neteditOptions = OptionsCont::getOptions();
3467 neteditOptions.resetWritable();
3468 // Check if configuration file was already set at start of netedit or with a previous save
3469 if (neteditOptions.getString("configuration-file").empty()) {
3470 return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3471 } else {
3472 // get config file
3473 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3474 // get file path
3475 const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3476 // get patter file
3477 auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3478 // update netedit config
3480 // save all elements giving automatic names based on patter if their file isn't defined
3481 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3482 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3483 return 0;
3484 }
3485 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3486 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3487 return 0;
3488 }
3489 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3490 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3491 return 0;
3492 }
3493 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3494 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3495 return 0;
3496 }
3497 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3498 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3499 return 0;
3500 }
3501 // configuration
3502 std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3503 if (out.good()) {
3504 // write netedit config
3505 neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3506 // write info
3507 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3508 // config saved
3510 // After saving a config successfully, add it into recent configs
3511 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3512 } else {
3513 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3514 }
3515 out.close();
3516 return 1;
3517 }
3518}
3519
3520
3521long
3522GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3523 auto& neteditOptions = OptionsCont::getOptions();
3524 // get neteditConfig filename
3525 const auto neteditConfigFileDialog = GNEFileDialog(this, TL("netedit config file"),
3529 // continue depending of file
3530 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3531 neteditOptions.resetWritable();
3532 neteditOptions.set("configuration-file", neteditConfigFileDialog.getFilename());
3533 // continue saving netedit config
3534 return onCmdSaveNeteditConfig(sender, sel, ptr);
3535 } else {
3536 return 0;
3537 }
3538}
3539
3540
3541long
3542GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3543 // check if enable or disable save netedit config button
3544 if (myNet == nullptr) {
3545 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3546 } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3547 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3548 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3549 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3550 } else {
3551 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3552 }
3553 // check if enable/disable save individual files
3554 if (myNet) {
3558 } else {
3560 }
3561 }
3562 return 1;
3563}
3564
3565
3566long
3567GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3568 // obtain netedit option container
3569 auto& neteditOptions = OptionsCont::getOptions();
3570 // reset containers
3571 neteditOptions.resetWritable();
3573 // Check if configuration file was already set at start of netedit or with a previous save
3574 if (neteditOptions.getString("sumocfg-file").empty()) {
3575 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3576 } else {
3577 // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3578 const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3579 const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3580 const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3581 // get SumoConfig file
3582 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3583 // get config file without extension
3584 auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3585 // update netedit config
3587 // save all elements giving automatic names based on patter in their file isn't defined
3588 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3589 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3590 return 0;
3591 }
3592 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3593 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3594 return 0;
3595 }
3596 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3597 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3598 return 0;
3599 }
3600 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3601 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3602 return 0;
3603 }
3604 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3605 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3606 return 0;
3607 }
3608 // set input in sumo options
3609 setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3610 // if we have trips or flow over junctions, add option junction-taz
3613 mySumoOptions.set("junction-taz", "true");
3614 }
3615 std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3616 if (out.good()) {
3617 // write SUMO config
3618 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3619 // write info
3620 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3621 // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3622 if (!ignoreAdditionals && !ignoreDemandElements) {
3624 }
3625 // After saving a config successfully, add it into recent configs
3626 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3627 } else {
3628 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3629 }
3630 out.close();
3631 return 1;
3632 }
3633}
3634
3635
3636long
3637GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3638 auto& neteditOptions = OptionsCont::getOptions();
3639 // get sumoConfig filename
3640 const auto sumoConfigFileDialog = GNEFileDialog(this, TL("sumo config file"),
3644 // continue depending of file
3645 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3646 // save file in netedit options
3647 neteditOptions.resetWritable();
3648 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
3649 // continue saving SUMO Config
3650 return onCmdSaveSumoConfig(sender, sel, ptr);
3651 } else {
3652 return 0;
3653 }
3654}
3655
3656
3657long
3658GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3659 if (myNet == nullptr) {
3660 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3661 } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3662 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3663 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3664 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3665 } else {
3666 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3667 }
3668}
3669
3670
3671long
3672GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3673 // get option container
3674 auto& neteditOptions = OptionsCont::getOptions();
3675 // Check if TLS Programs file was already set at start of netedit or with a previous save
3676 if (neteditOptions.getString("tls-file").empty()) {
3677 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3678 } else {
3679 // Start saving TLS Programs
3680 getApp()->beginWaitCursor();
3681 try {
3682 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3683 myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3684 // write info
3685 WRITE_MESSAGE(TLF("TLS Programs saved in '%'.", neteditOptions.getString("tls-file")));
3686 } catch (IOError& e) {
3687 // open error message box
3688 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3689 }
3691 getApp()->endWaitCursor();
3692 // set focus again in viewNet
3693 myViewNet->setFocus();
3694 }
3695 return 1;
3696}
3697
3698
3699long
3700GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3701 if (myNet == nullptr) {
3702 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3703 } else {
3704 // check if there is at least one TLS
3705 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3706 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3707 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3708 }
3709 }
3710 // no TLS, then disable
3711 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3712 }
3713}
3714
3715
3716long
3717GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3718 // get option container
3719 auto& neteditOptions = OptionsCont::getOptions();
3720 // Check if edgeType file was already set at start of netedit or with a previous save
3721 if (neteditOptions.getString("edgetypes-file").empty()) {
3722 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3723 } else {
3724 // Start saving edgeTypes
3725 getApp()->beginWaitCursor();
3726 try {
3727 myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3728 // write info
3729 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", neteditOptions.getString("edgetypes-file")));
3730 } catch (IOError& e) {
3731 // open error message box
3732 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3733 }
3735 getApp()->endWaitCursor();
3736 }
3737 return 1;
3738}
3739
3740
3741long
3742GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3743 // check if net exist and there are edge types
3744 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3745 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3746 } else {
3747 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3748 }
3749 return 1;
3750}
3751
3752
3753long
3755 // get option container
3756 auto& neteditOptions = OptionsCont::getOptions();
3757 // get TLS file
3758 const auto TLSfileDialog = GNEFileDialog(this, TL("Traffic Light definitions file"),
3762 // check tat file is valid
3763 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3764 // change value of "tls-file"
3765 neteditOptions.resetWritable();
3766 neteditOptions.set("tls-file", TLSfileDialog.getFilename());
3767 // enable save netedit config
3769 // set focus again in viewNet
3770 myViewNet->setFocus();
3771 // save TLS Programs
3772 return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3773 } else {
3774 return 1;
3775 }
3776}
3777
3778
3779long
3780GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3781 // get option container
3782 auto& neteditOptions = OptionsCont::getOptions();
3783 // get network file file
3784 const auto edgeTypeFileDialog = GNEFileDialog(this, TL("EdgeTypes file"),
3788 // check tat file is valid
3789 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3790 // change value of "edgetypes-file"
3791 neteditOptions.resetWritable();
3792 neteditOptions.set("edgetypes-file", edgeTypeFileDialog.getFilename());
3793 // enable save netedit config
3795 // set focus again in viewNet
3796 myViewNet->setFocus();
3797 // save edgeTypes
3798 return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3799 } else {
3800 return 1;
3801 }
3802}
3803
3804
3805long
3807 // get file
3808 const auto additionalFileDialog = GNEFileDialog(this, TL("Additional elements file"),
3812 // check file
3813 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3814 // flag for save current saving status
3815 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3816 // disable validation for additionals
3817 XMLSubSys::setValidation("never", "auto", "auto");
3818 // Create additional handler
3819 GNEGeneralHandler generalHandler(myNet, additionalFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3820 // begin undoList operation
3821 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", additionalFileDialog.getFilename()));
3822 // Run parser
3823 if (!generalHandler.parse()) {
3824 // write error
3825 WRITE_ERROR(TLF("Loading of additional file '%' failed.", additionalFileDialog.getFilename()));
3826 } else {
3827 // write info
3828 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", additionalFileDialog.getFilename()));
3829 // enable save if there is errors loading additionals
3830 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3832 }
3833 }
3834 // end undoList operation
3835 myUndoList->end();
3836 // restore validation for additionals
3837 XMLSubSys::setValidation("auto", "auto", "auto");
3838 // check if clear undoList
3840 myUndoList->clear();
3841 }
3842 update();
3843 }
3844 return 1;
3845}
3846
3847
3848long
3850 // disable validation for additionals
3851 XMLSubSys::setValidation("never", "auto", "auto");
3852 // begin undoList operation
3853 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
3854 // clear additionals
3856 // iterate over all additional files
3857 for (const auto& additionalFileName : myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames()) {
3858 // Create general handler
3859 GNEGeneralHandler generalHandler(myNet, additionalFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3860 // force overwritte elements
3861 generalHandler.forceOverwriteElements();
3862 // Run parser
3863 if (!generalHandler.parse()) {
3864 WRITE_ERROR(TLF("Reloading of additional file '%' failed.", additionalFileName));
3865 } else {
3866 WRITE_MESSAGE(TLF("Reloading of additional file '%' successfully.", additionalFileName));
3867 }
3868 }
3869 // end undoList operation
3870 myUndoList->end();
3871 // restore validation for additionals
3872 XMLSubSys::setValidation("auto", "auto", "auto");
3873 // check if clear undoList
3875 myUndoList->clear();
3876 }
3877 update();
3878 return 1;
3879}
3880
3881
3882long
3883GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
3884 if (myViewNet == nullptr) {
3885 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3886 } else if (myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames().empty()) {
3887 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3888 } else {
3889 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3890 }
3891}
3892
3893
3894long
3895GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
3896 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
3897 // get option container
3898 auto& neteditOptions = OptionsCont::getOptions();
3899 if (myNet->getSavingStatus()->isAdditionalsSaved() && !neteditOptions.getBool("force-saving")) {
3900 // nothing to save
3901 return 1;
3902 }
3903 // check if we have to set the output filename
3904 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getAdditionalFilenames().empty()) {
3905 savingFileHandler->updateAdditionalEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".add.xml");
3906 }
3907 // check if we have to open save as dialog
3908 if (savingFileHandler->getAdditionalFilenames().empty()) {
3909 // choose file to save
3910 return onCmdSaveAdditionalElementsUnified(sender, sel, ptr);
3911 } else {
3912 // always recompute before saving
3913 myNet->computeNetwork(this);
3914 try {
3915 // compute before saving (for detectors positions)
3916 myNet->computeNetwork(this);
3917 // save additionals
3918 const bool savingResult = myNet->saveAdditionals();
3919 // show info
3920 if (savingResult) {
3921 WRITE_MESSAGE(TL("Additionals saved."));
3922 return 1;
3923 } else {
3924 WRITE_MESSAGE(TL("Saving additional aborted."));
3925 return 0;
3926 }
3927 } catch (IOError& e) {
3928 // open error message box
3929 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
3930 }
3931 return 0;
3932 }
3933}
3934
3935
3936long
3937GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
3938 // get option container
3939 auto& neteditOptions = OptionsCont::getOptions();
3940 // declare current folder
3941 FXString currentFolder = gCurrentFolder;
3942 // set current folder
3943 if (neteditOptions.getString("configuration-file").size() > 0) {
3944 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3945 } else if (neteditOptions.getString("net-file").size() > 0) {
3946 currentFolder = getFolder(neteditOptions.getString("net-file"));
3947 }
3948 // get additional file
3949 const auto additionalFileDialog = GNEFileDialog(this, TL("Additional elements file"),
3953 // check that file is valid
3954 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3955 // begin undoList operation
3956 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
3957 // iterate over all demand elementes and change file
3958 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
3959 for (const auto& additionalElement : additionalElementTag.second) {
3960 additionalElement.second->setAttribute(GNE_ATTR_ADDITIONAL_FILE, additionalFileDialog.getFilename(), myUndoList);
3961 }
3962 }
3963 // end undoList operation
3964 myUndoList->end();
3965 // save additionals
3966 return onCmdSaveAdditionalElements(sender, sel, ptr);
3967 } else {
3968 return 0;
3969 }
3970}
3971
3972
3973long
3975 // get juPedSim file
3976 const auto juPedSimfileDialog = GNEFileDialog(this, TL("JuPedSim elements file"),
3980 // check that file is valid
3981 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3982 try {
3983 // get all jupedsims
3984 std::unordered_set<const GNEAttributeCarrier*> juPedSimElements;
3985 for (const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3986 if (myTagPropertiesDatabase->getTagProperty(additionalTag.first, true)->isJuPedSimElement()) {
3987 for (const auto& additional : additionalTag.second) {
3988 juPedSimElements.insert(additional.second);
3989 }
3990 }
3991 }
3992 // save additionals
3993 const bool savingResult = myNet->saveJuPedSimElements(juPedSimElements, juPedSimfileDialog.getFilename());
3994 // set focus again in viewNet
3995 myViewNet->setFocus();
3996 // show info
3997 if (savingResult) {
3998 WRITE_MESSAGE(TL("JuPedSim elements saved."));
3999 return 1;
4000 } else {
4001 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4002
4003 return 0;
4004 }
4005 } catch (IOError& e) {
4006 // open error message box
4007 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4008 }
4009 }
4010 return 0;
4011}
4012
4013
4014long
4016 // get file
4017 const auto routeFileDialog = GNEFileDialog(this, TL("Route elements file"),
4021 // check file
4022 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4023 // save previous demand element status saving
4024 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4025 // disable validation for additionals
4026 XMLSubSys::setValidation("never", "auto", "auto");
4027 // Create generic handler
4028 GNEGeneralHandler handler(myNet, routeFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4029 // begin undoList operation
4030 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", routeFileDialog.getFilename()));
4031 // Run parser for additionals
4032 if (!handler.parse()) {
4033 // write error
4034 WRITE_ERROR(TLF("Loading of route file '%' failed.", routeFileDialog.getFilename()));
4035 } else {
4036 // show info
4037 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", routeFileDialog.getFilename()));
4038 // enable demand elements if there is an error creating element
4039 if (previouslySaved && !handler.isErrorCreatingElement()) {
4041 }
4042 }
4043 // end undoList operation
4044 myUndoList->end();
4045 // restore validation
4046 XMLSubSys::setValidation("auto", "auto", "auto");
4047 // check if clear undoList
4049 myUndoList->clear();
4050 }
4051 update();
4052 }
4053 return 1;
4054}
4055
4056
4057long
4059 // disable validation for additionals
4060 XMLSubSys::setValidation("never", "auto", "auto");
4061 // begin undoList operation
4062 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4063 // clear demand elements
4065 // iterate over all demand elements
4066 for (const auto& demandFileName : myNet->getSavingFilesHandler()->getDemandFilenames()) {
4067 // Create handler
4068 GNEGeneralHandler generalHandler(myNet, demandFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4069 // force overwritte elements
4070 generalHandler.forceOverwriteElements();
4071 // Run parser for additionals
4072 if (!generalHandler.parse()) {
4073 WRITE_ERROR(TLF("Reloading of route file '%' failed.", demandFileName));
4074 } else {
4075 WRITE_MESSAGE(TLF("Reloading of route file '%' successfully.", demandFileName));
4076 }
4077 }
4078 // end undoList operation and update view
4079 myUndoList->end();
4080 // restore validation for demand
4081 XMLSubSys::setValidation("auto", "auto", "auto");
4082 // check if clear undoList
4084 myUndoList->clear();
4085 }
4086 update();
4087 return 1;
4088}
4089
4090
4091long
4092GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4093 if (myViewNet == nullptr) {
4094 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4095 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDemandFilenames().empty()) {
4096 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4097 } else {
4098 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4099 }
4100}
4101
4102
4103long
4104GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4105 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4106 // get option container
4107 auto& neteditOptions = OptionsCont::getOptions();
4108 // check saving conditions
4109 if (myNet->getSavingStatus()->isDemandElementsSaved() && !neteditOptions.getBool("force-saving")) {
4110 // nothing to save
4111 return 1;
4112 }
4113 // check if we have to set the output filename
4114 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDemandFilenames().empty()) {
4115 savingFileHandler->updateDemandEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".rou.xml");
4116 }
4117 // check if we have to open save as dialog
4118 if (savingFileHandler->getDemandFilenames().empty()) {
4119 // choose file to save
4120 return onCmdSaveDemandElementsUnified(sender, sel, ptr);
4121 } else {
4122 // always recompute before saving
4123 myNet->computeNetwork(this);
4124 try {
4125 // save demand elements
4126 const bool savingResult = myNet->saveDemandElements();
4127 // show info
4128 if (savingResult) {
4129 WRITE_MESSAGE(TL("Demand elements saved."));
4130 return 1;
4131 } else {
4132 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4133 return 0;
4134 }
4135 } catch (IOError& e) {
4136 // open error message box
4137 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4138 }
4139 }
4140 return 0;
4141}
4142
4143
4144long
4145GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4146 // get option container
4147 auto& neteditOptions = OptionsCont::getOptions();
4148 // declare current folder
4149 FXString currentFolder = gCurrentFolder;
4150 // set current folder
4151 if (neteditOptions.getString("configuration-file").size() > 0) {
4152 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4153 } else if (neteditOptions.getString("net-file").size() > 0) {
4154 currentFolder = getFolder(neteditOptions.getString("net-file"));
4155 }
4156 // get route file
4157 const auto routeFileDialog = GNEFileDialog(this, TL("Route elements file"),
4161 // check that file is correct
4162 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4163 // begin undoList operation
4164 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4165 // iterate over all demand elementes and change file
4166 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4167 for (const auto& demandElement : demandElementTag.second) {
4168 demandElement.second->setAttribute(GNE_ATTR_DEMAND_FILE, routeFileDialog.getFilename(), myUndoList);
4169 }
4170 }
4171 // end undoList operation
4172 myUndoList->end();
4173 // save demand elements
4174 return onCmdSaveDemandElements(sender, sel, ptr);
4175 } else {
4176 return 0;
4177 }
4178}
4179
4180
4181long
4182GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4183 // get file
4184 const auto dataFileDialog = GNEFileDialog(this, TL("Data elements file"),
4188 // check file
4189 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4190 // save previous demand element status saving
4191 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4192 // disable update data
4194 // disable validation for data elements
4195 XMLSubSys::setValidation("never", "auto", "auto");
4196 // Create data handler
4197 GNEDataHandler dataHandler(myNet, dataFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4198 // begin undoList operation
4199 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", dataFileDialog.getFilename()));
4200 // Run data parser
4201 if (!dataHandler.parse()) {
4202 // write error
4203 WRITE_ERROR(TLF("Loading of data file '%' failed.", dataFileDialog.getFilename()));
4204 } else {
4205 // show info
4206 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", dataFileDialog.getFilename()));
4207 // enable demand elements if there is an error creating element
4208 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4210 }
4211 }
4212 // end undoList operation
4213 myUndoList->end();
4214 // enable update data
4216 // restore validation for data
4217 XMLSubSys::setValidation("auto", "auto", "auto");
4218 // check if clear undoList
4220 myUndoList->clear();
4221 }
4222 update();
4223 }
4224 return 1;
4225}
4226
4227
4228long
4230 // disable update data
4232 // disable validation for additionals
4233 XMLSubSys::setValidation("never", "auto", "auto");
4234 // begin undoList operation
4235 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4236 // clear data elements
4238 // iterate over all data elements
4239 for (const auto& dataFileName : myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames()) {
4240 // Create additional handler
4241 GNEDataHandler dataHandler(myNet, dataFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4242 // force overwritte elements
4243 dataHandler.forceOverwriteElements();
4244 // Run data parser
4245 if (!dataHandler.parse()) {
4246 WRITE_ERROR(TLF("Reloading of data file '%' failed.", dataFileName));
4247 } else {
4248 WRITE_MESSAGE(TLF("Reloading of data file '%' successfully.", dataFileName));
4249 }
4250 }
4251 // restore validation for data
4252 XMLSubSys::setValidation("auto", "auto", "auto");
4253 // end undoList operation and update view
4254 myUndoList->end();
4255 // enable update data
4257 // check if clear undoList
4259 myUndoList->clear();
4260 }
4261 update();
4262 return 1;
4263}
4264
4265
4266long
4267GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4268 if (myViewNet == nullptr) {
4269 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4270 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames().empty()) {
4271 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4272 } else {
4273 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4274 }
4275}
4276
4277
4278long
4279GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4280 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4281 // get option container
4282 auto& neteditOptions = OptionsCont::getOptions();
4283 // check saving conditions
4284 if (myNet->getSavingStatus()->isDataElementsSaved() && !neteditOptions.getBool("force-saving")) {
4285 // nothing to save
4286 return 1;
4287 }
4288 // check if we have to set the output filename
4289 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDataFilenames().empty()) {
4290 savingFileHandler->updateDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".xml");
4291 }
4292 // check if we have to open save as dialog
4293 if (savingFileHandler->getDataFilenames().empty()) {
4294 return onCmdSaveDataElementsUnified(sender, sel, ptr);
4295 } else {
4296 try {
4297 // save data elements
4298 const bool savingResult = myNet->saveDataElements();
4299 // show info
4300 if (savingResult) {
4301 WRITE_MESSAGE(TL("Data elements saved."));
4302 return 1;
4303 } else {
4304 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4305 return 0;
4306 }
4307 } catch (IOError& e) {
4308 // open error message box
4309 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4310 }
4311 }
4312 return 0;
4313}
4314
4315
4316long
4317GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4318 // get option container
4319 auto& neteditOptions = OptionsCont::getOptions();
4320 // declare current folder
4321 FXString currentFolder = gCurrentFolder;
4322 // set current folder
4323 if (neteditOptions.getString("configuration-file").size() > 0) {
4324 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4325 } else if (neteditOptions.getString("net-file").size() > 0) {
4326 currentFolder = getFolder(neteditOptions.getString("net-file"));
4327 }
4328 // get data file
4329 const auto dataFileDialog = GNEFileDialog(this, TL("Data elements file"),
4333 // check that file is correct
4334 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4335 // begin undoList operation
4336 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4337 // iterate over all demand elementes and change file
4338 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4339 dataSet.second->setAttribute(GNE_ATTR_DATA_FILE, dataFileDialog.getFilename(), myUndoList);
4340 }
4341 // end undoList operation
4342 myUndoList->end();
4343 // save data elements
4344 return onCmdSaveDataElements(sender, sel, ptr);
4345 } else {
4346 return 0;
4347 }
4348}
4349
4350
4351long
4353 // get file
4354 const auto meanDataFileDialog = GNEFileDialog(this, TL("MeanData elements file"),
4358 // check file
4359 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4360 // save previous demand element status saving
4361 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4362 // disable validation for meanDatas
4363 XMLSubSys::setValidation("never", "auto", "auto");
4364 // Create meanData handler
4365 GNEGeneralHandler generalHandler(myNet, meanDataFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4366 // begin undoList operation
4367 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", meanDataFileDialog.getFilename()));
4368 // Run parser
4369 if (!generalHandler.parse()) {
4370 // write error
4371 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", meanDataFileDialog.getFilename()));
4372 } else {
4373 // show info
4374 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", meanDataFileDialog.getFilename()));
4375 // enable demand elements if there is an error creating element
4376 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4378 }
4379 }
4380 // end undoList operation
4381 myUndoList->end();
4382 // restore validation for meanDatas
4383 XMLSubSys::setValidation("auto", "auto", "auto");
4384 // check if clear undoList
4386 myUndoList->clear();
4387 }
4388 update();
4389 }
4390 return 1;
4391}
4392
4393
4394long
4396 // disable validation for meanDatas
4397 XMLSubSys::setValidation("never", "auto", "auto");
4398 // begin undoList operation
4400 // clear meanDatas
4402 // iterate over all data elements
4403 for (const auto& meanDataFileName : myViewNet->getNet()->getSavingFilesHandler()->getMeanDataFilenames()) {
4404 // Create general handler
4405 GNEGeneralHandler generalHandler(myNet, meanDataFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4406 // force overwritte elements
4407 generalHandler.forceOverwriteElements();
4408 // Run parser
4409 if (!generalHandler.parse()) {
4410 WRITE_ERROR(TLF("Reloading of meanData file '%' failed.", meanDataFileName));
4411 } else {
4412 WRITE_MESSAGE(TLF("Reloading of meanData file '%' successfully.", meanDataFileName));
4413 }
4414 }
4415 // end undoList operation and update view
4416 myUndoList->end();
4417 // restore validation for meanDatas
4418 XMLSubSys::setValidation("auto", "auto", "auto");
4419 // check if clear undoList
4421 myUndoList->clear();
4422 }
4423 update();
4424 return 1;
4425}
4426
4427
4428long
4429GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4430 if (myViewNet == nullptr) {
4431 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4432 } else if (myViewNet->getNet()->getSavingFilesHandler()->getMeanDataFilenames().empty()) {
4433 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4434 } else {
4435 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4436 }
4437}
4438
4439
4440long
4441GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4442 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4443 // get option container
4444 auto& neteditOptions = OptionsCont::getOptions();
4445 // check saving conditions
4446 if (myNet->getSavingStatus()->isMeanDatasSaved() && !neteditOptions.getBool("force-saving")) {
4447 // nothing to save
4448 return 1;
4449 }
4450 // check if we have to set the output filename
4451 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getMeanDataFilenames().empty()) {
4452 savingFileHandler->updateMeanDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".dat.add.xml");
4453 }
4454 // check if we have to open save as dialog
4455 if (savingFileHandler->getMeanDataFilenames().empty()) {
4456 return onCmdSaveMeanDataElementsUnified(sender, sel, ptr);
4457 } else {
4458 try {
4459 // compute before saving
4460 myNet->computeNetwork(this);
4461 // save demand elements
4462 const bool savingResult = myNet->saveMeanDatas();
4463 // show info
4464 if (savingResult) {
4465 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4466 return 1;
4467 } else {
4468 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4469 return 0;
4470 }
4471 } catch (IOError& e) {
4472 // open error message box
4473 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4474 }
4475 }
4476 return 0;
4477}
4478
4479
4480long
4481GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4482 // get option container
4483 auto& neteditOptions = OptionsCont::getOptions();
4484 // declare current folder
4485 FXString currentFolder = gCurrentFolder;
4486 // set current folder
4487 if (neteditOptions.getString("configuration-file").size() > 0) {
4488 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4489 } else if (neteditOptions.getString("net-file").size() > 0) {
4490 currentFolder = getFolder(neteditOptions.getString("net-file"));
4491 }
4492 // get meanData file
4493 const auto meanDataFileDialog = GNEFileDialog(this, TL("MeanData elements file"),
4497 // check that file is valid
4498 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4499 // begin undoList operation
4500 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4501 // iterate over all demand elementes and change file
4502 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4503 for (const auto& meanData : meanDataTag.second) {
4504 meanData.second->setAttribute(GNE_ATTR_MEANDATA_FILE, meanDataFileDialog.getFilename(), myUndoList);
4505 }
4506 }
4507 // end undoList operation
4508 myUndoList->end();
4509 // save meanDatas
4510 return onCmdSaveMeanDataElements(sender, sel, ptr);
4511 } else {
4512 return 0;
4513 }
4514}
4515
4516
4517bool
4519 if (myNet) {
4521 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4522 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4523 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4524 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4525 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4526 // first check if abort saving
4527 if (commonResult == GNEDialog::Result::ABORT) {
4528 return false;
4529 }
4530 // save every type of file
4531 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4532 (onCmdSaveNetwork(nullptr, 0, nullptr) != 1)) {
4533 return false;
4534 }
4535 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4536 (onCmdSaveAdditionalElements(nullptr, 0, nullptr) != 1)) {
4537 return false;
4538 }
4539 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4540 (onCmdSaveDemandElements(nullptr, 0, nullptr) != 1)) {
4541 return false;
4542 }
4543 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4544 (onCmdSaveDataElements(nullptr, 0, nullptr) != 1)) {
4545 return false;
4546 }
4547 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4548 (onCmdSaveMeanDataElements(nullptr, 0, nullptr) != 1)) {
4549 return false;
4550 }
4551 // restore focus in viewNet
4552 myViewNet->setFocus();
4553 // clear undo list
4554 clearUndoList();
4555 // all saved, then continue
4556 return true;
4557 } else {
4558 // nothing to do, then continue
4559 return true;
4560 }
4561}
4562
4563
4564void
4565GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4566 // obtain netedit option container
4567 auto& neteditOptions = OptionsCont::getOptions();
4569 // set network
4570 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4571 // set routes
4572 if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4573 mySumoOptions.resetDefault("route-files");
4574 } else {
4575 mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4576 }
4577 // set SumoOptions depending of additionalFiles and meanData files
4578 if (ignoreAdditionals) {
4579 if (neteditOptions.getString("meandata-files").empty()) {
4580 mySumoOptions.resetDefault("additional-files");
4581 } else {
4582 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4583 }
4584 } else {
4585 if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4586 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4587 } else if (neteditOptions.getString("additional-files").size() > 0) {
4588 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4589 } else if (neteditOptions.getString("meandata-files").size() > 0) {
4590 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4591 } else {
4592 mySumoOptions.resetDefault("additional-files");
4593 }
4594 }
4595}
4596
4597
4598FXString
4599GNEApplicationWindow::getFolder(const std::string& folder) const {
4600 // declare folder
4601 std::string newFolder = folder;
4602 // declare stop flag
4603 bool stop = false;
4604 // continue while stop is false
4605 while (!stop) {
4606 if (newFolder.empty()) {
4607 // new folder empty, then stop
4608 stop = true;
4609 } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4610 (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4611 // removed file, then stop
4612 stop = true;
4613 } else {
4614 newFolder.pop_back();
4615 }
4616 }
4617 // if is empty, return gCurrentFolder
4618 if (newFolder.empty()) {
4619 return gCurrentFolder;
4620 }
4621 return FXString(newFolder.c_str());
4622}
4623
4624
4625void
4627 // check that view exists
4628 if (myViewNet) {
4630 }
4631 // update require recomputing
4633}
4634
4635
4636void
4638 // remove lock hotkeys
4640 // check supermode
4641 if (supermode == Supermode::NETWORK) {
4642 // menu commands
4646 // lock
4650 // processing
4655 } else if (supermode == Supermode::DEMAND) {
4656 // menu commands
4660 // lock
4664 // processing
4669 } else if (supermode == Supermode::DATA) {
4670 // menu commands
4674 // lock
4678 // processing
4683 } else {
4684 // menu commands
4689 // lock
4693 // processing
4697 }
4698 // continue depending of view
4699 if (myViewNet) {
4703 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4706 }
4707 }
4708}
4709
4710
4711bool
4715
4716
4717void
4721
4722
4723void
4725 myUndoRedoListEnabled = reason;
4726}
4727
4728
4729const std::string&
4733
4734
4735void
4737 if (myViewNet) {
4738 // destroy Popup (to avoid crashes)
4740 }
4741 // clear undo list and return true to continue with closing/reload
4742 myUndoList->clear();
4743}
4744
4745
4750
4751
4756
4757
4762
4763
4768
4769
4774
4775
4780
4781
4786
4787
4788void
4790 // get option container
4791 auto& neteditOptions = OptionsCont::getOptions();
4792 // get additional files
4793 const auto& additionalFiles = neteditOptions.getStringVector("additional-files");
4794 // check if ignore loading of additional files
4795 const auto ignoreLoadAdditionalFiles = neteditOptions.getBool("ignore.additionalelements");
4796 // check conditions
4797 if (ignoreLoadAdditionalFiles) {
4798 // reset flag
4799 neteditOptions.resetWritable();
4800 neteditOptions.set("ignore.additionalelements", "false");
4801 // also reset route files in both containers
4802 neteditOptions.resetDefault("additional-files");
4803 mySumoOptions.resetDefault("additional-files");
4804 } else if (myNet && (additionalFiles.size() > 0)) {
4805 // update saving files handler
4806 myNet->getSavingFilesHandler()->updateAdditionalEmptyFilenames(additionalFiles.front());
4807 // disable validation for additionals
4808 XMLSubSys::setValidation("never", "auto", "auto");
4809 // begin undolist
4810 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4811 // use this flag for mark all elements as saved after loading, if it was sucessfully
4812 bool setSaved = additionalFiles.size() == 1;
4813 // iterate over every additional file
4814 for (const auto& file : additionalFiles) {
4815 // check if ignore missing inputs
4816 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4817 WRITE_MESSAGE(TLF("loading additionals from '%'.", file));
4818 // declare general handler
4820 // Run parser
4821 if (!handler.parse()) {
4822 WRITE_ERROR(TLF("Loading of '%' failed.", file));
4823 }
4824 setSaved &= !handler.isErrorCreatingElement();
4825 // set additionals in SumoConfig
4826 setInputInSumoOptions(false, false);
4827 }
4828 }
4829 // end undo list
4830 myUndoList->end();
4831 // disable validation for additionals
4832 XMLSubSys::setValidation("auto", "auto", "auto");
4833 if (setSaved) {
4835 }
4836 // check if clear undoList
4838 myUndoList->clear();
4839 }
4840 }
4841}
4842
4843
4844void
4846 // get option container
4847 auto& neteditOptions = OptionsCont::getOptions();
4848 // get demand files
4849 const auto& demandFiles = neteditOptions.getStringVector("route-files");
4850 // check if ignore loading of additional files
4851 const auto ignoreLoadDemandFiles = neteditOptions.getBool("ignore.routeelements");
4852 // check conditions
4853 if (ignoreLoadDemandFiles) {
4854 // reset flag
4855 neteditOptions.resetWritable();
4856 neteditOptions.set("ignore.routeelements", "false");
4857 // also reset route files in both containers
4858 neteditOptions.resetDefault("route-files");
4859 mySumoOptions.resetDefault("route-files");
4860 } else if (myNet && (demandFiles.size() > 0)) {
4861 // update saving files handler
4863 // disable validation for additionals
4864 XMLSubSys::setValidation("never", "auto", "auto");
4865 // begin undolist
4866 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4867 // use this flag for mark all elements as saved after loading, if it was sucessfully
4868 bool setSaved = demandFiles.size() == 1;
4869 // iterate over every demand file
4870 for (const auto& file : demandFiles) {
4871 // check if ignore missing inputs
4872 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4873 WRITE_MESSAGE(TLF("loading demand elements from '%'.", file));
4874 // declare general handler
4876 // Run parser
4877 if (!handler.parse()) {
4878 WRITE_ERROR(TLF("Loading of '%' failed.", file));
4879 }
4880 setSaved &= !handler.isErrorCreatingElement();
4881 // set additionals in SumoConfig
4882 setInputInSumoOptions(false, false);
4883 }
4884 }
4885 // end undo list
4886 myUndoList->end();
4887 // disable validation for additionals
4888 XMLSubSys::setValidation("auto", "auto", "auto");
4889 if (setSaved) {
4891 }
4892 // check if clear undoList
4894 myUndoList->clear();
4895 }
4896 }
4897}
4898
4899
4900void
4902 // get option container
4903 auto& neteditOptions = OptionsCont::getOptions();
4904 // get data files
4905 const auto& dataFiles = neteditOptions.getStringVector("data-files");
4906 if (myNet && (dataFiles.size() > 0)) {
4907 // update saving files handler
4909 // disable validation for additionals
4910 XMLSubSys::setValidation("never", "auto", "auto");
4911 // begin undolist
4912 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading data elements from '") + toString(dataFiles) + "'");
4913 // use this flag for mark all elements as saved after loading, if it was sucessfully
4914 bool setSaved = dataFiles.size() == 1;
4915 // iterate over every data file
4916 for (const auto& file : dataFiles) {
4917 // check if ignore missing inputs
4918 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4919 WRITE_MESSAGE(TLF("loading data elements from '%'.", file));
4920 // declare general handler
4922 // Run parser
4923 if (!handler.parse()) {
4924 WRITE_ERROR(TLF("Loading of % failed.", file));
4925 }
4926 setSaved &= !handler.isErrorCreatingElement();
4927 // set additionals in SumoConfig
4928 setInputInSumoOptions(false, false);
4929 }
4930 }
4931 // end undo list
4932 myUndoList->end();
4933 // disable validation for additionals
4934 XMLSubSys::setValidation("auto", "auto", "auto");
4935 if (setSaved) {
4937 }
4938 // check if clear undoList
4940 myUndoList->clear();
4941 }
4942 }
4943}
4944
4945
4946void
4948 // get option container
4949 auto& neteditOptions = OptionsCont::getOptions();
4950 // get meanData files
4951 const auto& meanDataFiles = neteditOptions.getStringVector("meandata-files");
4952 if (myNet && (meanDataFiles.size() > 0)) {
4953 // update saving files handler
4954 myNet->getSavingFilesHandler()->updateMeanDataEmptyFilenames(meanDataFiles.front());
4955 // disable validation for additionals
4956 XMLSubSys::setValidation("never", "auto", "auto");
4957 // begin undolist
4958 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading meanData elements from '") + toString(meanDataFiles) + "'");
4959 // use this flag for mark all elements as saved after loading, if it was sucessfully
4960 bool setSaved = meanDataFiles.size() == 1;
4961 // iterate over every meanData file
4962 for (const auto& file : meanDataFiles) {
4963 // check if ignore missing inputs
4964 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4965 WRITE_MESSAGE(TLF("loading meanData elements from '%'.", file));
4966 // declare general handler
4968 // Run parser
4969 if (!handler.parse()) {
4970 WRITE_ERROR(TLF("Loading of % failed.", file));
4971 }
4972 setSaved &= !handler.isErrorCreatingElement();
4973 // set additionals in SumoConfig
4974 setInputInSumoOptions(false, false);
4975 }
4976 }
4977 // end undo list
4978 myUndoList->end();
4979 // disable validation for additionals
4980 XMLSubSys::setValidation("auto", "auto", "auto");
4981 if (setSaved) {
4983 }
4984 // check if clear undoList
4986 myUndoList->clear();
4987 }
4988 }
4989}
4990
4991
4992void
4994 // get TLS file
4995 const auto tlsFile = OptionsCont::getOptions().getString("tls-file");
4996 // check if file exist
4997 if (tlsFile.size() > 0) {
4998 // Run parser
4999 if (reloading) {
5000 WRITE_MESSAGE(TL("Reloading TLS programs"));
5001 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("reloading TLS Programs from '%'", tlsFile));
5002 } else {
5003 WRITE_MESSAGE(TLF("Loading TLS programs from '%'", tlsFile));
5004 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("loading TLS Programs from '%'", tlsFile));
5005 }
5006 myNet->computeNetwork(this);
5007 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5008 // Abort undo/redo
5010 } else {
5011 // commit undo/redo operation
5012 myUndoList->end();
5013 update();
5014 }
5015 }
5016}
5017
5018
5019void
5021 // get edgeType file
5022 const auto edgeTypeFile = OptionsCont::getOptions().getString("edgetypes-file");
5023 // check if file exist
5024 if (edgeTypeFile.size() > 0) {
5025 // declare type container
5026 NBTypeCont typeContainerAux;
5027 // declare type handler
5028 NIXMLTypesHandler handler(typeContainerAux);
5029 // load edge types
5030 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5031 // now create GNETypes based on typeContainerAux
5032 if (reloading) {
5033 WRITE_MESSAGE(TL("Reloading edge types"));
5034 myViewNet->getUndoList()->begin(Supermode::NETWORK, GUIIcon::EDGE, TLF("loading edge types from '%'", edgeTypeFile));
5035 } else {
5036 WRITE_MESSAGE(TLF("Loading edge types from '%'", edgeTypeFile));
5037 myViewNet->getUndoList()->begin(Supermode::NETWORK, GUIIcon::EDGE, TLF("reloading edge types from '%'", edgeTypeFile));
5038 }
5039 // iterate over typeContainerAux
5040 for (const auto& auxEdgeType : typeContainerAux) {
5041 // create new edge type
5042 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5043 // add lane types
5044 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5045 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5046 }
5047 // add it using undoList
5048 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5049
5050 }
5051 // end undo list
5053 // refresh edge type selector
5055 }
5056}
5057
5058
5063
5064
5065bool
5067 if (myInternalTest == nullptr) {
5068 return true;
5069 } else if (obj == myInternalTest) {
5070 return true;
5071 } else {
5072 return false;
5073 }
5074}
5075
5076// ---------------------------------------------------------------------------
5077// GNEApplicationWindow - protected methods
5078// ---------------------------------------------------------------------------
5079#ifdef _MSC_VER
5080#pragma warning(push)
5081#pragma warning(disable: 4355) // mask warning about "this" in initializers
5082#endif
5084 myToolbarsGrip(this),
5085 myMenuBarFile(this),
5086 myFileMenuCommands(this),
5087 myModesMenuCommands(this),
5088 myEditMenuCommands(this),
5089 myLockMenuCommands(this),
5090 myProcessingMenuCommands(this),
5091 myLocateMenuCommands(this),
5092 myToolsMenuCommands(this),
5093 myWindowsMenuCommands(this),
5094 myHelpMenuCommands(this),
5095 mySupermodeCommands(this) {
5096}
5097#ifdef _MSC_VER
5098#pragma warning(pop)
5099#endif
5100
5101
5102long
5103GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5104 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5105 if (handled == 0 && myMDIClient->numChildren() > 0) {
5106 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5107 if (w != nullptr) {
5108 w->onKeyPress(nullptr, sel, eventData);
5109 }
5110 }
5111 return 0;
5112}
5113
5114
5115long
5116GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5117 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5118 if (handled == 0 && myMDIClient->numChildren() > 0) {
5119 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5120 if (w != nullptr) {
5121 w->onKeyRelease(nullptr, sel, eventData);
5122 }
5123 }
5124 return 0;
5125}
5126
5127
5128/****************************************************************************/
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
long onCmdToggleFrontElement(FXObject *, FXSelector, void *)
called if the user call toggle front element
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 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 refreshAttributesEditor()
refresh attribute editor
GNEAttributesEditorType * getNeteditAttributesEditor() const
get netedit attributes editor
void abortReparenting()
abort selecting parent
void refreshAttributesEditor()
refresh attribute editor
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:186
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:2820
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:2885
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2839
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:2896
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
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all inspected ACs
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 addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false, const 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 doRegister(const std::string &name, Option *o)
Adds an option under the given name.
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.
FXMenuCommand * toggleFrontElement
FXMenuCommand for toggle front element.
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