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-2026 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>
57#include <fxkeys.h>
72#include <utils/xml/XMLSubSys.h>
73
75#include "GNEEvent_FileLoaded.h"
76#include "GNEInternalTest.h"
77#include "GNELoadThread.h"
78#include "GNENet.h"
79#include "GNEUndoList.h"
80#include "GNEViewParent.h"
81
82#ifdef HAVE_VERSION_H
83#include <version.h>
84#endif
85
86// ===========================================================================
87// FOX-declarations
88// ===========================================================================
89
90FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
91 // quit calls
95 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
96 // toolbar file
103 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
108 // network
123 // NeteditConfig
131 // SumoConfig
139 // TLS
148 // edge types
157 // additionals
170 // demand elements
181 // data elements
192 // meanDatas
203 // other
208 // Toolbar supermode
212 // Toolbar modes
229 // Toolbar edit
238 // Network view options
273 // Demand view options
296 // Data view options
313 // view
330 /* Prepared for #6042
331 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
332 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
333 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
334 */
335 // toolbar lock
367 // Toolbar processing
386 // Toolbar locate
411 // toolbar python tools
416 // toolbar windows
418 // toolbar help
421 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
422 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
423 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
425 // alt + <number>
446 // key events
447 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
448 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
449 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
450 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
451 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
453 // threads events
456 // edge template functions
460 // languages
483 // coordinate inputs
490 // tools
493 // other
494 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
501 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
502};
503
504// Object implementation
505FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
506
507// ===========================================================================
508// GNEApplicationWindow method definitions
509// ===========================================================================
510#ifdef _MSC_VER
511#pragma warning(push)
512#pragma warning(disable: 4355) // mask warning about "this" in initializers
513#endif
514GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
515 GUIMainWindow(app),
516 myTagPropertiesDatabase(tagPropertiesDatabase),
517 myUndoList(new GNEUndoList(this)),
518 myConfigPattern(configPattern),
519 myToolbarsGrip(this),
520 myMenuBarFile(this),
521 myFileMenuCommands(this),
522 myModesMenuCommands(this),
523 myEditMenuCommands(this),
524 myLockMenuCommands(this),
525 myProcessingMenuCommands(this),
526 myLocateMenuCommands(this),
527 myToolsMenuCommands(this),
528 myWindowsMenuCommands(this),
529 myHelpMenuCommands(this),
530 mySupermodeCommands(this),
531 myFileBucketHandler(new GNEApplicationWindowHelper::FileBucketHandler(this, OptionsCont::getOptions(), mySumoOptions)),
532 myTitlePrefix("netedit " VERSION_STRING),
533 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
534 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
535 // init icons
537 // init Textures
539 // init cursors
541 // set tooltip options
542 app->setTooltipTime(1000000000);
543 app->setTooltipPause(1000000000);
544 // set SUMO Options descriptions
545 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
546 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo " VERSION_STRING);
547 // set default netedit options
550 // parse options
555 // make certain sumo options non editable
556 mySumoOptions.setOptionEditable("configuration-file", false);
557 mySumoOptions.setOptionEditable("net-file", false);
558 mySumoOptions.setOptionEditable("route-files", false);
559 mySumoOptions.setOptionEditable("additional-files", false);
560 // add extra option for automatic closing
561 myNetgenerateOptions.doRegister("close-dialog-automatic", new Option_Bool(true));
562 myNetgenerateOptions.addDescription("close-dialog-automatic", "report", TL("Close dialog automatically"));
563}
564#ifdef _MSC_VER
565#pragma warning(pop)
566#endif
567
568
569void
571 // do this not twice
573 // do not translate debug messages
574 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
575 return;
576 }
577 myHadDependentBuild = true;
578 setTarget(this);
579 setSelector(MID_WINDOW);
580 // build toolbar menu
582 // build the thread - io
585 // build the status bar
586 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
587 // build geo coordinates label
588 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
590 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
591 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
592 // build geo coordinates label
594 myGeoCoordinate = new FXTextField(myGeoFrame, 26, this, MID_GEO_COORDINATE, FRAME_NONE | LAYOUT_CENTER_Y | TEXTFIELD_ENTER_ONLY, 0, 0, 0, GUIDesignHeight, 2, 2, 1, 1);
595 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert). Enter 'lat, lon' or 'lat:... lon:...' to center view"));
596 myGeoCoordinate->setTipText(TL("Enter 'lat, lon' to center view"));
597 myGeoCoordinate->setBackColor(myGeoFrame->getBackColor());
598 myGeoCoordinate->setText(TL("N/A"));
599 myGeoCoordinate->disable();
600 myGeoCoordinate->setEditable(false);
601 // build cartesian coordinates label
603 myCartesianCoordinate = new FXTextField(myCartesianFrame, 22, this, MID_CARTESIAN_COORDINATE, FRAME_NONE | LAYOUT_CENTER_Y | TEXTFIELD_ENTER_ONLY, 0, 0, 0, GUIDesignHeight, 2, 2, 1, 1);
604 myCartesianCoordinate->setHelpText(TL("Network coordinate. Enter 'x, y' to center view"));
605 myCartesianCoordinate->setTipText(TL("Enter 'x, y' to center view"));
606 myCartesianCoordinate->setBackColor(myCartesianFrame->getBackColor());
607 myCartesianCoordinate->setText(TL("N/A"));
608 // build test coordinates label (only if gui-testing is enabled)
610 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
611 myTestCoordinate->setHelpText(TL("Test coordinate"));
613 myTestFrame->hide();
614 // make the window a mdi-window
615 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
617 myMDIMenu = new FXMDIMenu(this, myMDIClient);
618 // build the message window
620 myMainSplitter->setSplit(1, 65);
621 // fill menu and tool bar
622 fillMenuBar();
623 // build additional threads
625 // check if create internal test system
626 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
627 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
628 }
629 // set the status bar
630 setStatusBarText(TL("Ready."));
631 // set the caption
632 setTitle(myTitlePrefix);
633 // set Netedit ICON
636 // build netedit Accelerators (hotkeys)
637 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
638}
639
640
641void
643 // set windows size and position
645 // set current folder
646 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
647 // Create main window
648 FXMainWindow::create();
649 // get text width
650 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
651 // adjust cartesian and geo frame
652 myCartesianFrame->setWidth(textWidth);
653 myGeoFrame->setWidth(textWidth);
654 // fill online maps
655 if (myOnlineMaps.empty()) {
656 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
657 myOnlineMaps["Google Maps"] = "https://www.google.com/maps/search/?api=1&query=%lat,%lon&zoom=19";
658 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
659 }
660 // show application windows
661 show(PLACEMENT_DEFAULT);
662 // check if maximice
663 if (!OptionsCont::getOptions().isSet("window-size")) {
664 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
665 maximize();
666 }
667 }
668}
669
670
672 closeAllWindows(true);
673 // Close icons
675 // Close gifs (Textures)
678 // delete visuals
679 delete myGLVisual;
680 // must delete menus to avoid segfault on removing accelerators
681 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
684 delete myFileMenuTLS;
685 delete myFileMenuEdgeTypes;
692 delete myFileMenu;
693 delete myModesMenu;
694 delete myEditMenu;
695 delete myLockMenu;
696 delete myProcessingMenu;
697 delete myLocatorMenu;
698 delete myToolsMenu;
699 delete myToolsDetectorMenu;
700 delete myToolsDistrictMenu;
701 delete myToolsDRTMenu;
703 delete myToolsImportMenu;
706 delete myToolsImportVissim;
707 delete myToolsImportVisum;
708 delete myToolsNetMenu;
709 delete myToolsRouteMenu;
710 delete myToolsOutputMenu;
711 delete myToolsShapes;
712 delete myToolsTLS;
713 delete myToolsTurnDefs;
715 delete myToolsXML;
716 delete myWindowMenu;
717 delete myHelpMenu;
718 delete myLanguageMenu;
719 // Delete load thread
720 delete myLoadThread;
721 if (myInternalTest) {
722 delete myInternalTest;
723 }
724 // drop all events
725 while (!myThreadEvents.empty()) {
726 // get the next event
729 delete e;
730 }
731 // delete undoList and dialog
732 delete myUndoList;
733}
734
735
736long
737GNEApplicationWindow::onCmdQuit(FXObject* sender, FXSelector sel, void* ptr) {
738 if (askSaveElements(sender, sel, ptr)) {
740 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
741 if (isMaximized()) {
742 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
743 } else {
744 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
745 }
746 getApp()->exit(0);
747 }
748 return 1;
749}
750
751
752long
753GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
754 GUIDialog_GLChosenEditor* chooser =
756 chooser->create();
757 chooser->show();
758 return 1;
759}
760
761
762long
763GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
764 // check if close current simulation
765 if (onCmdClose(0, 0, 0) == 1) {
766 // set flag
767 myStartedWithNewNet = true;
768 // create new network
770 }
771 return 1;
772}
773
774
775long
777 auto& neteditOptions = OptionsCont::getOptions();
778 // get netconvert file dialog
779 const GNEFileDialog netConvertFileDialog(this, TL("netconvert config file"),
784 // continue depending of dialog
785 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
786 // stop test before calling load thread
787 if (myInternalTest) {
789 }
790 // reset netedit options
791 myLoadThread->fillOptions(neteditOptions);
792 myLoadThread->setDefaultOptions(neteditOptions);
793 // set netconvert configuration file to load
794 neteditOptions.resetWritable();
795 neteditOptions.set("netccfg-file", netConvertFileDialog.getFilename());
796 // run load thread
798 // update view
799 update();
800 }
801 return 1;
802}
803
804
805long
806GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
807 // get netconvert filename
808 const GNEFileDialog networkFileDialog(this, TL("network file"),
813 // continue depending of dialog
814 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
815 // load network
816 loadNetwork(networkFileDialog.getFilename());
817 }
818 return 0;
819}
820
821
822long
823GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
824 // get OSM file dilaog
825 const GNEFileDialog OSMFileDialog(this, TL("OpenStreetMap file"),
830 // continue depending of dialog
831 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
832 loadOSM(OSMFileDialog.getFilename());
833 }
834 return 1;
835}
836
837
838long
839GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
840 auto& neteditOptions = OptionsCont::getOptions();
841 // get netconvert filename
842 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
847 // continue depending of dialog
848 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
849 // stop test before calling load thread
850 if (myInternalTest) {
852 }
853 // reset netedit options
854 myLoadThread->fillOptions(neteditOptions);
855 myLoadThread->setDefaultOptions(neteditOptions);
856 // set netedit configuration file to load
857 neteditOptions.resetWritable();
858 neteditOptions.set("netecfg-file", neteditConfigFileDialog.getFilename());
859 // run load thread
861 // update view
862 update();
863 }
864 return 1;
865}
866
867
868long
869GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
870 auto& neteditOptions = OptionsCont::getOptions();
871 // get netconvert filename
872 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
877 // continue depending of dialog
878 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
879 // stop test before calling load thread
880 if (myInternalTest) {
882 }
883 // reset options
884 myLoadThread->fillOptions(neteditOptions);
885 myLoadThread->setDefaultOptions(neteditOptions);
886 // set sumo configuration file to load
887 neteditOptions.resetWritable();
888 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
889 // run load thread
891 // update view
892 update();
893 }
894 return 1;
895}
896
897
898long
899GNEApplicationWindow::onCmdReloadNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
900 // get existent configuration file
902 auto& neteditOptions = OptionsCont::getOptions();
903 // get ignore flags
904 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
905 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
906 // check if close current simulation
907 if (onCmdClose(sender, sel, ptr) == 1) {
908 // stop test before calling load thread
909 if (myInternalTest) {
911 }
912 // reset options
913 myLoadThread->fillOptions(neteditOptions);
914 myLoadThread->setDefaultOptions(neteditOptions);
915 // restore ignore flags
916 neteditOptions.resetWritable();
917 if (ignoreAdditionals) {
918 neteditOptions.set("ignore.additionalelements", "true");
919 }
920 if (ignoreRoutes) {
921 neteditOptions.set("ignore.routeelements", "true");
922 }
923 // set netedit configuration file to load
924 neteditOptions.set("netecfg-file", neteditConfigFile);
925 // run load thread
927 // update view
928 update();
929 }
930 return 1;
931}
932
933
934long
935GNEApplicationWindow::onCmdReloadSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
936 // get existent sumo config file
938 auto& neteditOptions = OptionsCont::getOptions();
939 // get ignore flags
940 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
941 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
942 // check if close current simulation
943 if (onCmdClose(sender, sel, ptr) == 1) {
944 // stop test before calling load thread
945 if (myInternalTest) {
947 }
948 // reset options
949 myLoadThread->fillOptions(neteditOptions);
950 myLoadThread->setDefaultOptions(neteditOptions);
951 // restore ignore flags
952 neteditOptions.resetWritable();
953 if (ignoreAdditionals) {
954 neteditOptions.set("ignore.additionalelements", "true");
955 }
956 if (ignoreRoutes) {
957 neteditOptions.set("ignore.routeelements", "true");
958 }
959 // set configuration file to load
960 neteditOptions.set("sumocfg-file", sumoConfigFile);
961 // run load thread
963 // update view
964 update();
965 }
966 return 1;
967}
968
969
970long
971GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
972 // check if file exist
974 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
975 } else {
976 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
977 }
978}
979
980
981long
982GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
983 // check if file exist
985 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
986 } else {
987 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
988 }
989}
990
991
992long
993GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
994 // get netconvert filename
995 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
1000 // continue depending of dialog
1001 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
1002 // set tls type in bucket
1004 // load traffic lights
1005 loadTrafficLights("Loading");
1006 }
1007 return 1;
1008}
1009
1010
1011long
1013 // load traffic lights
1014 loadTrafficLights("Reloading");
1015 return 1;
1016}
1017
1018
1019long
1020GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
1021 // check if file exist
1023 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1024 } else {
1025 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1026 }
1027}
1028
1029
1030long
1031GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
1032 // get netconvert filename
1033 const GNEFileDialog edgeTypesFileDialog(this, TL("EdgeTypes file"),
1038 // continue depending of dialog
1039 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
1040 // set tls type in bucket
1042 // load edge types
1043 loadEdgeTypes("Loading");
1044 }
1045 return 1;
1046}
1047
1048
1049long
1050GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1051 // load edge types
1052 loadEdgeTypes("Reloading");
1053 return 0;
1054}
1055
1056
1057long
1058GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1059 // check if file exist
1061 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1062 } else {
1063 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1064 }
1065}
1066
1067
1068long
1069GNEApplicationWindow::onCmdSmartReload(FXObject* sender, FXSelector sel, void* ptr) {
1070 auto& neteditOptions = OptionsCont::getOptions();
1071 // get ignore flags
1072 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
1073 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
1074 // check if close current file
1075 if (onCmdClose(sender, sel, ptr) == 1) {
1076 // stop test before calling load thread
1077 if (myInternalTest) {
1079 }
1080 // store size, position and viewport
1082 // check if started with new net
1083 if (myStartedWithNewNet) {
1084 // preserve output file if defined in bucket
1086 // create new network
1088 // restore ignore flags
1089 neteditOptions.resetWritable();
1090 if (ignoreAdditionals) {
1091 neteditOptions.set("ignore.additionalelements", "true");
1092 }
1093 if (ignoreRoutes) {
1094 neteditOptions.set("ignore.routeelements", "true");
1095 }
1096 // restore output file in bucket if it was defined
1097 if (!outputFile.empty()) {
1099 }
1100 return 1;
1101 }
1102 // set flag
1103 myAmLoading = true;
1104 // get files
1108 // fill (reset) all options
1109 myLoadThread->fillOptions(neteditOptions);
1110 // set default options defined in GNELoadThread::setDefaultOptions(...)
1111 myLoadThread->setDefaultOptions(neteditOptions);
1112 // restore ignore flags
1113 neteditOptions.resetWritable();
1114 if (ignoreAdditionals) {
1115 neteditOptions.set("ignore.additionalelements", "true");
1116 }
1117 if (ignoreRoutes) {
1118 neteditOptions.set("ignore.routeelements", "true");
1119 }
1120 // set file to load
1121 if (neteditConfig.size() > 0) {
1122 // set netedit config
1124 // set status bar
1125 setStatusBarText(TLF("Reloading netedit config file '%'", neteditConfig));
1126 } else if (sumoConfig.size() > 0) {
1127 // set sumo config
1129 // set status bar
1130 setStatusBarText(TLF("Reloading sumo config file '%'", sumoConfig));
1131 } else if (networkFile.size() > 0) {
1132 // set network config
1134 // set status bar
1135 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1136 } else {
1137 // nothing to load
1138 return 0;
1139 }
1140 // load network
1142 }
1143 return 1;
1144}
1145
1146
1147long
1148GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1149 // declare strings
1150 FXString neteditConfig = TL("&Reload Netedit config");
1151 FXString sumoConfig = TL("&Reload Sumo config");
1152 FXString netFile = TL("&Reload Network");
1153 FXString reload = TL("&Reload");
1154 // check options
1155 if (myNet == nullptr) {
1156 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1157 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1158 } else if (myStartedWithNewNet) {
1159 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1160 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1162 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1163 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1165 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1166 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1168 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1169 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1170 } else {
1171 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1172 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1173 }
1174 return 1;
1175}
1176
1177
1178long
1179GNEApplicationWindow::onCmdReloadNetwork(FXObject* sender, FXSelector sel, void* ptr) {
1180 auto& neteditOptions = OptionsCont::getOptions();
1181 // get ignore flags
1182 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
1183 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
1184 // check if close current file
1185 if (onCmdClose(sender, sel, ptr) == 1) {
1186 // stop test before calling load thread
1187 if (myInternalTest) {
1189 }
1190 // store size, position and viewport
1192 // set flag
1193 myAmLoading = true;
1194 // get network
1195 const std::string networkFile = myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK);
1196 // fill (reset) all options
1197 myLoadThread->fillOptions(neteditOptions);
1198 // set default options defined in GNELoadThread::setDefaultOptions(...)
1199 myLoadThread->setDefaultOptions(neteditOptions);
1200 // restore ignore flags
1201 neteditOptions.resetWritable();
1202 if (ignoreAdditionals) {
1203 neteditOptions.set("ignore.additionalelements", "true");
1204 }
1205 if (ignoreRoutes) {
1206 neteditOptions.set("ignore.routeelements", "true");
1207 }
1208 // set file to load
1210 // set status bar
1211 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1212 // load network
1214 }
1215 return 1;
1216}
1217
1218
1219long
1220GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1221 if (myNet == nullptr) {
1222 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1223 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1226 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1227 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1228 } else {
1229 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1230 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1231 }
1232 return 1;
1233}
1234
1235
1236long
1237GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1238 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1239 if (myAmLoading) {
1240 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1241 } else if (onCmdClose(0, 0, 0) == 1) {
1242 // get filedata
1243 const std::string recentFile = ((const char*)fileData);
1244 // check if we're loading a network o a config
1245 if ((recentFile.find(".netecfg") != std::string::npos) ||
1246 (recentFile.find(".sumocfg") != std::string::npos) ||
1247 (recentFile.find(".netccfg") != std::string::npos)) {
1248 // load config
1249 loadConfiguration(recentFile);
1250 } else {
1251 // load network
1252 loadNetwork(recentFile);
1253 }
1254 }
1255 return 1;
1256}
1257
1258
1259long
1260GNEApplicationWindow::onCmdClose(FXObject* sender, FXSelector sel, void* ptr) {
1261 if (myViewNet == nullptr) {
1262 return 1;
1263 } else if (askSaveElements(sender, sel, ptr)) {
1264 // check if is reloading
1265 const bool reloading = (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOADNETWORK) ||
1266 (FXSELID(sel) == MID_HOTKEY_CTRL_R_RELOAD) ||
1267 (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG) ||
1268 (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG);
1269 // close all windows
1270 closeAllWindows(!reloading);
1271 // add a separator to the log
1273 // hide all menu commands
1277 // hide view options
1281 return 1;
1282 } else {
1283 return 0;
1284 }
1285}
1286
1287
1288long
1289GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1290 if (myMDIClient->numChildren() > 0) {
1291 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1292 if (w != nullptr) {
1293 w->onCmdLocate(nullptr, sel, nullptr);
1294 }
1295 }
1296 return 1;
1297}
1298
1299
1300long
1301GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1302 return myToolsMenuCommands.showTool(obj);
1303}
1304
1305
1306long
1307GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1309}
1310
1311
1312long
1315}
1316
1317
1318long
1319GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1320 // currently always enabled
1321 return 1;
1322}
1323
1324
1325long
1326GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1327 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1328 return 1;
1329}
1330
1331
1332long
1333GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1335 return 1;
1336}
1337
1338
1339long
1341 return 1;
1342}
1343
1344
1345long
1347 return 1;
1348}
1349
1350
1351long
1352GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1353 // create and open about dialog
1354 GNEAboutDialog(this);
1355 return 1;
1356}
1357
1358
1359long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1360 FXEvent* event = (FXEvent*)ptr;
1361 FXString string = GUIUserIO::clipped.c_str();
1362 setDNDData(FROM_CLIPBOARD, event->target, string);
1363 return 1;
1364}
1365
1366
1367long
1368GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1369 eventOccurred();
1370 return 1;
1371}
1372
1373
1374void
1376 // load events
1377 while (!myThreadEvents.empty()) {
1378 // get the next event
1381 // process
1382 switch (e->getOwnType()) {
1385 break;
1392 break;
1393 default:
1394 break;
1395 }
1396 delete e;
1397 }
1398}
1399
1400
1401void
1404 myAmLoading = false;
1405 GNEEvent_FileLoaded* fileLoadedEvent = static_cast<GNEEvent_FileLoaded*>(e);
1406 // check whether the loading was successful
1407 if (fileLoadedEvent->getNet() == nullptr) {
1408 // report failure
1409 std::string failureMessage;
1410 switch (fileLoadedEvent->getType()) {
1412 failureMessage = TLF("Loading of netedit config '%' failed", fileLoadedEvent->getFile());
1413 break;
1415 failureMessage = TLF("Loading of sumo config '%' failed", fileLoadedEvent->getFile());
1416 break;
1418 failureMessage = TLF("Loading of netconvert config '%' failed", fileLoadedEvent->getFile());
1419 break;
1421 failureMessage = TLF("Loading of network '%' failed", fileLoadedEvent->getFile());
1422 break;
1424 failureMessage = TLF("Loading of OSM Network '%' failed", fileLoadedEvent->getFile());
1425 break;
1427 failureMessage = TL("Invalid Options. Nothing loaded");
1428 break;
1430 failureMessage = TL("Could not build projection. Nothing loaded");
1431 break;
1433 failureMessage = TL("Invalid extension for config file. Only .netecfg, .sumocfg or .netccfg are allowed");
1434 break;
1435 default:
1436 failureMessage = TL("Invalid input network option. Load with either sumo/netedit/netconvert config or with --new option");
1437 break;
1438 }
1439 // write info
1440 WRITE_ERROR(failureMessage);
1441 setStatusBarText(failureMessage);
1442 if (OptionsCont::getOptions().getBool("quit-on-fail")) {
1443 closeAllWindows(true);
1444 getApp()->exit(1);
1445 } else {
1447 }
1448 } else {
1449 // report success
1450 std::string successMessage;
1451 switch (fileLoadedEvent->getType()) {
1453 myStartedWithNewNet = false;
1454 successMessage = TLF("Netedit config '%' loaded", fileLoadedEvent->getFile());
1455 break;
1457 myStartedWithNewNet = false;
1458 successMessage = TLF("Sumo config '%' loaded", fileLoadedEvent->getFile());
1459 break;
1461 myStartedWithNewNet = false;
1462 successMessage = TLF("Netconvert config '%' loaded", fileLoadedEvent->getFile());
1463 break;
1465 myStartedWithNewNet = false;
1466 successMessage = TLF("Network '%' loaded", fileLoadedEvent->getFile());
1467 break;
1469 myStartedWithNewNet = false;
1470 successMessage = TLF("OSM Network '%' loaded", fileLoadedEvent->getFile());
1471 break;
1473 myStartedWithNewNet = false;
1474 successMessage = TLF("Network '%' loaded through console", fileLoadedEvent->getFile());
1475 break;
1477 myStartedWithNewNet = true;
1478 successMessage = TL("New network successfully created");
1479 break;
1480 default:
1481 throw ProcessError("Invalid sucess mesage. Check if all cases were covered");
1482 }
1483 // write info
1484 WRITE_MESSAGE(successMessage);
1485 setStatusBarText(successMessage);
1486 // set new Net
1487 myNet = fileLoadedEvent->getNet();
1488 // set size and pos
1490 // build viewparent toolbar grips before creating view parent
1492 // initialise netedit View
1493 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1494 // create it maximized
1495 viewParent->maximize();
1496 // mark it as Active child
1497 myMDIClient->setActiveChild(viewParent);
1498 // cast pointer myViewNet
1499 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1500 // set settings in view
1501 if (viewParent->getView() && (fileLoadedEvent->getSettingsFile().size() > 0)) {
1502 GUISettingsHandler settings(getApp(), fileLoadedEvent->getSettingsFile(), true, true);
1503 settings.addSettings(viewParent->getView());
1504 viewParent->getView()->addDecals(settings.getDecals());
1505 settings.applyViewport(viewParent->getView());
1506 settings.setSnapshots(viewParent->getView());
1507 }
1508 // set network name on the caption
1509 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileLoadedEvent->getFile().c_str()));
1510 // force supermode network
1512 // update view port
1513 if (fileLoadedEvent->getViewportFromRegistry()) {
1514 Position off;
1515 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1516 Position p(off.x(), off.y(), 0);
1517 myViewNet->setViewportFromToRot(off, p, 0);
1518 }
1519 // load elements
1520 loadAdditionalElements("Loading");
1521 loadDemandElements("Loading");
1522 loadDataElements("Loading");
1523 loadMeanDataElements("Loading");
1524 // update checkboxes in edit menu to reflect loaded elements
1526 !OptionsCont::getOptions().getBool("ignore.additionalelements") ? TRUE : FALSE);
1528 !OptionsCont::getOptions().getBool("ignore.routeelements") ? TRUE : FALSE);
1529 // load selection
1530 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1532 }
1534 }
1535 // update app
1536 update();
1537 // restore focus
1538 setFocus();
1539}
1540
1541
1542void
1547
1548// ---------------------------------------------------------------------------
1549// private methods
1550// ---------------------------------------------------------------------------
1551
1552void
1554 // build file menu
1555 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1557 myFileMenuNeteditConfig = new FXMenuPane(this);
1558 myFileMenuSumoConfig = new FXMenuPane(this);
1559 myFileMenuTLS = new FXMenuPane(this);
1560 myFileMenuEdgeTypes = new FXMenuPane(this);
1561 myFileMenuAdditionals = new FXMenuPane(this);
1562 myFileMenuDemandElements = new FXMenuPane(this);
1563 myFileMenuDataElements = new FXMenuPane(this);
1564 myFileMenuMeanDataElements = new FXMenuPane(this);
1565 myFileMenuRecentNetworks = new FXMenuPane(this);
1566 myFileMenuRecentConfigs = new FXMenuPane(this);
1570 // add separator for recent files
1571 new FXMenuSeparator(myFileMenu);
1572 // build recent files
1575 new FXMenuSeparator(myFileMenu);
1576 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1577 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1578 // build modes menu
1579 myModesMenu = new FXMenuPane(this);
1581 myModesMenuTitle->setTarget(this);
1583 // build Supermode commands and hide it
1585 // add separator
1586 new FXSeparator(myModesMenu);
1587 // build modes menu commands
1589 // build edit menu
1590 myEditMenu = new FXMenuPane(this);
1592 // build edit menu commands
1594 // build separator
1595 new FXMenuSeparator(myEditMenu);
1596 // build view options
1600 // hide view options
1604 // build view menu commands
1606 // build separator
1607 new FXMenuSeparator(myEditMenu);
1608 // build front element menu commands
1610 // build separator
1611 new FXMenuSeparator(myEditMenu);
1612 // build open in sumo menu commands
1614 // build lock menu
1615 myLockMenu = new FXMenuPane(this);
1617 myLockMenuTitle->setTarget(this);
1619 // build lock menu commands
1621 // build processing menu (trigger netbuild computations)
1622 myProcessingMenu = new FXMenuPane(this);
1625 // build locate menu
1626 myLocatorMenu = new FXMenuPane(this);
1629 // build tools menu
1630 myToolsMenu = new FXMenuPane(this);
1631 myToolsAssignMenu = new FXMenuPane(this);
1632 myToolsDetectorMenu = new FXMenuPane(this);
1633 myToolsDistrictMenu = new FXMenuPane(this);
1634 myToolsDRTMenu = new FXMenuPane(this);
1635 myToolsEmissionsMenu = new FXMenuPane(this);
1636 myToolsImportMenu = new FXMenuPane(this);
1637 myToolsImportCityBrainMenu = new FXMenuPane(this);
1638 myToolsImportGTFSMenu = new FXMenuPane(this);
1639 myToolsImportVissim = new FXMenuPane(this);
1640 myToolsImportVisum = new FXMenuPane(this);
1641 myToolsNetMenu = new FXMenuPane(this);
1642 myToolsRouteMenu = new FXMenuPane(this);
1643 myToolsOutputMenu = new FXMenuPane(this);
1644 myToolsShapes = new FXMenuPane(this);
1645 myToolsTLS = new FXMenuPane(this);
1646 myToolsTriggerMenu = new FXMenuPane(this);
1647 myToolsTurnDefs = new FXMenuPane(this);
1648 myToolsVisualizationMenu = new FXMenuPane(this);
1649 myToolsXML = new FXMenuPane(this);
1651 // build tools menu cascasde
1652 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1653 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1654 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1656 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1665 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1666 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1667 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1671 // add separators between folders
1672 new FXMenuSeparator(myToolsMenu);
1673 new FXMenuSeparator(myToolsImportMenu);
1674 // create map with tool Menu panes and their associated folder
1681 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1683 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1684 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1691 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1694 // build tools
1696 // build windows menu
1697 myWindowMenu = new FXMenuPane(this);
1700 // build language menu
1702 // build help menu
1703 myHelpMenu = new FXMenuPane(this);
1706}
1707
1708
1709FXGLCanvas*
1711 // netedit uses only a single View, then return nullptr
1712 return nullptr;
1713}
1714
1715
1718 return 0;
1719}
1720
1721
1722double
1724 return 1;
1725}
1726
1727
1732
1733
1738
1739
1744
1745
1748 if (myViewNet && myViewNet->getViewParent()) {
1750 }
1751 return nullptr;
1752}
1753
1754
1757 if (myViewNet && myViewNet->getViewParent()) {
1759 }
1760 return nullptr;
1761}
1762
1763
1768
1769
1770void
1772 if (myViewNet && myViewNet->getNet()) {
1773 // show
1775 // set label depending of recomputing
1777 myRequireRecomputingButton->setText("");
1778 myRequireRecomputingButton->setTipText(TL("Network computed"));
1780 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1781 } else {
1782 myRequireRecomputingButton->setText(TL("Press F5"));
1783 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1785 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1786 }
1787 } else {
1788 // hide
1790 }
1791}
1792
1793
1794void
1795GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1796 // first check if net must be deleted
1797 if (myNet != nullptr) {
1798 delete myNet;
1799 myNet = nullptr;
1801 }
1802 // reset default filenames
1803 if (resetFilenames) {
1805 }
1806 // check if view has to be saved
1807 if (myViewNet) {
1809 // save decals and viewport for persistence (before they are cleared)
1813 // clear decals and release GPU textures
1814 if (myViewNet->makeCurrent()) {
1819 myViewNet->makeNonCurrent();
1820 }
1821 }
1822 // lock tracker
1823 myTrackerLock.lock();
1824 // remove trackers and other external windows
1825 while (!myGLWindows.empty()) {
1826 delete myGLWindows.front();
1827 }
1828 myViewNet = nullptr;
1829 for (FXMainWindow* const window : myTrackerWindows) {
1830 window->destroy();
1831 delete window;
1832 }
1833 myTrackerWindows.clear();
1834 // reset the caption
1835 setTitle(myTitlePrefix);
1836 // unlock tracker
1837 myTrackerLock.unlock();
1838 // remove coordinate information
1839 myGeoCoordinate->setText(TL("N/A"));
1840 myGeoCoordinate->disable();
1841 myGeoCoordinate->setEditable(false);
1842 myCartesianCoordinate->setText(TL("N/A"));
1843 myTestCoordinate->setText(TL("N/A"));
1844 myTestFrame->hide();
1846}
1847
1848
1849FXCursor*
1851 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1852}
1853
1854
1855void
1857 auto& neteditOptions = OptionsCont::getOptions();
1858 if (neteditOptions.getBool("new")) {
1859 // set flag
1860 myStartedWithNewNet = true;
1861 // save output file
1862 const auto outputFile = neteditOptions.getString("output-file");
1863 // create new network reset all options
1865 // check if define network file using this output file
1866 if (!outputFile.empty()) {
1868 }
1869 } else {
1870 // set flag
1871 myAmLoading = true;
1872 // set status bar
1873 setStatusBarText(TL("Loading console arguments."));
1874 // load console arguments
1876 // add it into recent networks and configs
1879 }
1882 }
1883 }
1884}
1885
1886
1887void
1889 auto& neteditOptions = OptionsCont::getOptions();
1890 // save windows size and position
1892 // enable loading flag and disable reloading flag
1893 myAmLoading = true;
1894 // recenter view
1895 gSchemeStorage.saveViewport(0, 0, -1, 0);
1896 // fill (reset) all options
1897 GNELoadThread::fillOptions(neteditOptions);
1898 // set default options defined in GNELoadThread::setDefaultOptions(...)
1899 GNELoadThread::setDefaultOptions(neteditOptions);
1900 // update status bar
1901 setStatusBarText(TL("Creating new network."));
1902 // create new network
1904 // update window
1905 update();
1906}
1907
1908
1909void
1910GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1911 if (networkFile.empty()) {
1912 WRITE_ERROR(TL("Trying to load an empty network."));
1913 } else {
1914 auto& neteditOptions = OptionsCont::getOptions();
1915 // stop test before calling load thread
1916 if (myInternalTest) {
1918 }
1919 // store size, position and viewport
1921 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1922 // set flag
1923 myAmLoading = true;
1924 // fill (reset) all options
1925 myLoadThread->fillOptions(neteditOptions);
1926 // set default options defined in GNELoadThread::setDefaultOptions(...)
1927 myLoadThread->setDefaultOptions(neteditOptions);
1928 // update default net file
1930 // set status bar
1931 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1932 // load network
1934 // add it into recent nets
1935 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1936 }
1937}
1938
1939
1940void
1941GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1942 if (configurationFile.empty()) {
1943 WRITE_ERROR(TL("Trying to load an empty configuration."));
1944 } else {
1945 auto& neteditOptions = OptionsCont::getOptions();
1946 // store size, position and viewport
1948 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1949 // set flag
1950 myAmLoading = true;
1951 // fill (reset) all options
1952 myLoadThread->fillOptions(neteditOptions);
1953 // set default options defined in GNELoadThread::setDefaultOptions(...)
1954 myLoadThread->setDefaultOptions(neteditOptions);
1955 // set file to load
1956 neteditOptions.resetWritable();
1957 neteditOptions.set("configuration-file", configurationFile);
1958 // set status bar
1959 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1960 // load config
1962 // add it into recent configs
1963 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1964 }
1965}
1966
1967
1968void
1969GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1970 auto& neteditOptions = OptionsCont::getOptions();
1971 // store size, position and viewport
1973 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1974 // set flag
1975 myAmLoading = true;
1976 // fill (reset) all options
1977 myLoadThread->fillOptions(neteditOptions);
1978 // set default options defined in GNELoadThread::setDefaultOptions(...)
1979 myLoadThread->setDefaultOptions(neteditOptions);
1980 // recommended osm options
1981 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1982 neteditOptions.set("osm-files", OSMFile);
1983 neteditOptions.set("geometry.remove", "true");
1984 neteditOptions.set("ramps.guess", "true");
1985 neteditOptions.set("junctions.join", "true");
1986 neteditOptions.set("tls.guess-signals", "true");
1987 neteditOptions.set("tls.discard-simple", "true");
1988 // open netedit options dialog
1989 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1990 // open wizard dialog
1991 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1992 // needed to set projection parameters
1993 NIFrame::checkOptions(neteditOptions);
1994 // set file to load
1995 neteditOptions.resetWritable();
1996 neteditOptions.set("configuration-file", OSMFile);
1997 // set status bar
1998 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1999 // load config
2001 }
2002}
2003
2004void
2005GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
2006 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
2007 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
2008}
2009
2010
2011long
2012GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
2013 // open question dialog box
2014 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
2015 TL("Recompute with volatile options"),
2016 TL("Changes produced in the net due a recomputing with"),
2017 TL("volatile options cannot be undone. Continue?"));
2018 // check result
2019 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
2020 // save all elements
2021 onCmdSaveAdditionalElements(sender, sel, ptr);
2022 onCmdSaveDemandElements(sender, sel, ptr);
2023 onCmdSaveDataElements(sender, sel, ptr);
2024 onCmdSaveMeanDataElements(sender, sel, ptr);
2025 // compute with volatile options
2026 myNet->computeNetwork(this, true, true);
2028 }
2029 return 1;
2030}
2031
2032
2033bool
2036 myConsoleOptionsLoaded = false;
2037 return true;
2038 } else {
2039 return false;
2040 }
2041}
2042
2043
2048
2049
2054
2055
2056void
2060
2061
2062long
2063GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
2064 // check that currently there is a View
2065 if (myViewNet) {
2066 myViewNet->onCmdSetSupermode(sender, sel, ptr);
2067 }
2068 return 1;
2069}
2070
2071
2072long
2073GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
2074 // check that currently there is a View
2075 if (myViewNet) {
2076 myViewNet->onCmdSetMode(sender, sel, ptr);
2077 }
2078 return 1;
2079}
2080
2081
2082long
2083GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
2084 if (myViewNet) {
2085 // check if we're calling the functions using internal test
2086 switch (FXSELID(sel)) {
2089 break;
2090 case MID_GNE_LOCK_EDGE:
2092 break;
2093 case MID_GNE_LOCK_LANE:
2095 break;
2098 break;
2101 break;
2104 break;
2107 break;
2108 case MID_GNE_LOCK_WIRE:
2110 break;
2111 case MID_GNE_LOCK_TAZ:
2113 break;
2116 break;
2117 case MID_GNE_LOCK_POI:
2119 break;
2122 break;
2125 break;
2126 case MID_GNE_LOCK_ROUTE:
2128 break;
2131 break;
2134 break;
2137 break;
2138 case MID_GNE_LOCK_WALK:
2140 break;
2141 case MID_GNE_LOCK_RIDE:
2143 break;
2146 break;
2149 break;
2152 break;
2153 case MID_GNE_LOCK_STOP:
2155 break;
2158 break;
2161 break;
2164 break;
2165 default:
2166 break;
2167 }
2169 }
2170 return 1;
2171}
2172
2173
2174long
2175GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2176 // lock all
2179 return 1;
2180}
2181
2182
2183long
2185 // unlock all
2188 return 1;
2189}
2190
2191
2192long
2194 if (myViewNet) {
2195 myViewNet->update();
2196 }
2197 return 1;
2198}
2199
2200
2201long
2202GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2203 if (myViewNet) {
2205 // supermode network
2211 myLockMenuTitle->enable();
2212 } else {
2213 myLockMenuTitle->disable();
2214 }
2216 // supermode demand
2221 myLockMenuTitle->enable();
2222 } else {
2223 myLockMenuTitle->disable();
2224 }
2226 // supermode data
2230 myLockMenuTitle->enable();
2231 } else {
2232 myLockMenuTitle->disable();
2233 }
2234 } else {
2235 myLockMenuTitle->disable();
2236 }
2237 } else {
2238 myLockMenuTitle->disable();
2239 }
2240 return 1;
2241}
2242
2243
2244long
2245GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2246 // first check if there is a view
2247 if (myViewNet) {
2248 // process depending of supermode
2250 // check what FXMenuCommand was called
2251 switch (FXSELID(sel)) {
2253 myNet->computeNetwork(this, true, false);
2255 break;
2257 computeJunctionWithVolatileOptions(sender, sel, ptr);
2258 break;
2261 break;
2264 break;
2267 break;
2268 default:
2269 break;
2270 }
2272 // check what FXMenuCommand was called
2273 switch (FXSELID(sel)) {
2277 break;
2280 break;
2283 break;
2286 break;
2289 break;
2290 default:
2291 break;
2292 }
2293 }
2294 // refresh to update undo-redo button
2295 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2296 }
2297 return 1;
2298}
2299
2300
2301long
2302GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2303 // get extra arguments
2304 std::string extraArg;
2306 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2307 }
2308 FXRegistry reg("SUMO netedit", "netedit");
2309 std::string netedit = "netedit";
2310 const char* sumoPath = getenv("SUMO_HOME");
2311 if (sumoPath != nullptr) {
2312#ifdef DEBUG
2313 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2314#else
2315 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2316#endif
2317 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2318 netedit = "\"" + newPath + "\"";
2319 }
2320 }
2321 std::string cmd = netedit + extraArg;
2322 // start in background
2323#ifndef WIN32
2324 cmd = cmd + " &";
2325#else
2326 // see "help start" for the parameters
2327 cmd = "start /B \"\" " + cmd;
2328#endif
2329 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2330 // yay! fun with dangerous commands... Never use this over the internet
2332 return 1;
2333}
2334
2335
2336long
2337GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2338 // input parameters
2339 std::string inputParameters;
2340 // if we have only a network and no SumoConfig defined, then load directly without creating a SumoConfig
2343 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE)))) {
2344 // force save network
2345 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2346 // network wasn't saved, then stop
2347 return 0;
2348 }
2349 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2350 // write info
2352 } else {
2353 // force save SumoConfig
2354 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2355 // SumoConfig wasn't saved, then stop
2356 return 0;
2357 }
2358 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2359 // check if ignore additional or demand elements
2360 if (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) {
2361 inputParameters += " --ignore.additionalelements";
2362 }
2363 if (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) {
2364 inputParameters += " --ignore.routeelements";
2365 }
2366 // write info
2367 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2368 }
2369 // save current viewport in registry
2370 FXRegistry reg("SUMO GUI", "sumo-gui");
2371 reg.read();
2372 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2373 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2374 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2375 reg.write();
2376 // declare executable
2377 std::string sumoGuiExecutable = "sumo-gui";
2378 // if SUMO_HOME is defined, update executable
2379 const char* sumoHome = getenv("SUMO_HOME");
2380 if (sumoHome != nullptr) {
2381 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2382 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2383 sumoGuiExecutable = "\"" + newPath + "\"";
2384 }
2385 }
2386 // declare command
2387 std::string cmd = sumoGuiExecutable + inputParameters;
2388 // start in background
2389#ifndef WIN32
2390 cmd = cmd + " &";
2391#else
2392 // see "help start" for the parameters
2393 cmd = "start /B \"\" " + cmd;
2394#endif
2395 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2396 // yay! fun with dangerous commands... Never use this over the internet
2398 return 1;
2399}
2400
2401
2402long
2403GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2404 // check that view exists
2405 if (myViewNet) {
2406 // first check if we're selecting a subset of edges in TAZ Frame
2408 // clear current selection
2410 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2411 // check if stop select parent
2413 // and stop select paretn
2415 } else {
2416 // clear inspected elements
2418 }
2419 } else {
2420 // abort current operation
2422 }
2423 }
2424 return 1;
2425}
2426
2427
2428long
2429GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2430 // check that view exists
2431 if (myViewNet) {
2433 }
2434 return 1;
2435}
2436
2437
2438long
2439GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2440 // check that view exists
2441 if (myViewNet) {
2443 }
2444 return 1;
2445}
2446
2447
2448long
2449GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2450 // check that view exists
2451 if (myViewNet) {
2453 }
2454 return 1;
2455}
2456
2457
2458long
2459GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2460 // check that view exists
2461 if (myViewNet) {
2463 }
2464 return 1;
2465}
2466
2467
2468long
2470 // check that view exists
2471 if (myViewNet) {
2473 }
2474 return 1;
2475}
2476
2477
2478long
2479GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2480 // check that view exists
2481 if (myViewNet) {
2483 // refresh flow frames
2484 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2486 }
2487 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2489 }
2490 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2492 }
2493 // refresh inspector frame
2494 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2496 }
2497 }
2498 return 1;
2499}
2500
2501
2502long
2503GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2504 // check that view exists
2505 if (myViewNet) {
2507 }
2508 return 1;
2509}
2510
2511
2512long
2513GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2516 }
2517 return 1;
2518}
2519
2520
2521long
2522GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2523 // enable or disable sender element depending of viewNet
2524 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2525}
2526
2527
2528long
2531 return 1;
2532}
2533
2534
2535long
2536GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2537 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2538 return 1;
2539}
2540
2541
2542long
2543GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2545}
2546
2547
2548long
2549GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2550 // check that view exists
2551 if (myViewNet) {
2553 }
2554 return 1;
2555}
2556
2557
2558long
2559GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2560 // check that view exists
2561 if (myViewNet) {
2563 }
2564 return 1;
2565}
2566
2567
2568long
2569GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2570 // check that view exists
2571 if (myViewNet) {
2572 // Call manually toggle grid function
2573 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2574 }
2575 return 1;
2576}
2577
2578
2579long
2580GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2581 // check that view exists
2582 if (myViewNet) {
2583 // Call manually toggle junction shape function
2584 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2585 }
2586 return 1;
2587}
2588
2589
2590long
2592 if (myViewNet) {
2593 // check if all element are front
2594 bool allFront = true;
2595 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2596 if (!AC->isMarkedForDrawingFront()) {
2597 allFront = false;
2598 break;
2599 }
2600 }
2601 // first unfront all elements
2603 // only mark front elements if we have at least one non-front element
2604 if (!allFront) {
2605 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2606 AC->markForDrawingFront();
2607 }
2608 }
2609 myViewNet->update();
2611 }
2612 return 1;
2613}
2614
2615
2616long
2617GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2618 // first check that we have a ViewNet
2619 if (myViewNet) {
2620 // first check what selector was called
2621 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2622 // check that numericalKeyPressed is valid
2623 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2624 return 0;
2625 }
2626 // declare a vector in which save visible menu commands
2627 std::vector<MFXCheckableButton*> visibleMenuCommands;
2628 // get common, network and demand visible menu commands
2632 // now check that numericalKeyPressed isn't greater than visible view options
2633 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2634 return 0;
2635 }
2636 // toggle edit options
2638 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2639 return 1;
2641 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2642 return 1;
2644 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2645 return 1;
2646 }
2647 }
2648 return 0;
2649}
2650
2651
2652long
2653GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2654 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2655 return 1;
2656}
2657
2658
2659long
2660GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2661 // update in every version
2662 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2663 return 1;
2664}
2665
2666
2667long
2668GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2669 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2670 return 1;
2671}
2672
2673
2674long
2677 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2678 } else {
2679 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2680 }
2681}
2682
2683
2684long
2685GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2686 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2687 myAllowUndoRedo = true;
2688 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2689 } else {
2690 myAllowUndoRedo = false;
2691 // drop undo-redo list after changing flag
2692 myUndoList->clear();
2693 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2694 }
2695}
2696
2697
2698long
2700 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2702 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2703 } else {
2704 myAllowUndoRedoLoading = false;
2705 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2706 }
2707}
2708
2709
2710long
2711GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2712 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2713 return 1;
2714}
2715
2716
2717long
2718GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2719 // create and open feedback dialog
2720 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2721 feedback->create();
2722 feedback->show(PLACEMENT_OWNER);
2723 return 1;
2724}
2725
2726
2727long
2729 auto& neteditOptions = OptionsCont::getOptions();
2730 // open netedit option dialog
2731 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2732 // continue depending of result
2733 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2734 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2735 NBFrame::checkOptions(neteditOptions);
2736 NWFrame::checkOptions(neteditOptions);
2737 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2738 // check if mark netedit config as unsaved
2739 if (neteditOptionsDialog.isOptionModified() && myNet) {
2741 // aditionally, check if network requires saving
2742 if (neteditOptionsDialog.requireSaveNetwork()) {
2745 }
2746 }
2747 }
2748 return 1;
2749}
2750
2751
2752long
2754 // open sumo option dialog
2755 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2756 // continue depending of result
2757 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2759 }
2760 return 1;
2761}
2762
2763
2764long
2767 return 1;
2768}
2769
2770
2771long
2773 // open netgenerate options dialog
2775 return 1;
2776}
2777
2778
2779long
2780GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2781 // Check conditions
2782 if (myViewNet == nullptr) {
2783 return 0;
2784 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2785 return 0;
2786 } else {
2787 // check supermode (currently ignore supermode data)
2790 // abort if user doesn't press "yes"
2792 return 0;
2793 }
2794 }
2796 // update current show frame after undo
2799 }
2800 // update file bucket options (needed to maintain integrity)
2802 // update manually undo/redo menu commands (see #6005)
2805 // update toolbar undo-redo buttons
2807 return 1;
2808 }
2809}
2810
2811
2812long
2813GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2814 // Check conditions
2815 if (myViewNet == nullptr) {
2816 return 0;
2817 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2818 return 0;
2819 } else {
2820 // check supermode (currently ignore supermode data)
2823 // abort if user doesn't press "yes"
2825 return 0;
2826 }
2827 }
2829 // update current show frame after redo
2832 }
2833 // update file bucket options (needed to maintain integrity)
2835 // update manually undo/redo menu commands (see #6005)
2838 // update toolbar undo-redo buttons
2840 return 1;
2841 }
2842}
2843
2844
2845long
2847 // open UndoList Dialog
2848 GNEUndoListDialog(this);
2849 return 1;
2850}
2851
2852
2853long
2854GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2855 // check if net exist and there is something to undo/redo
2856 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2857 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2858 } else {
2859 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2860 }
2861 return 1;
2862}
2863
2864
2865long
2867 // first check viewNet
2869 // update demand path calculator
2871 }
2872 return 1;
2873}
2874
2875
2876long
2877GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2878 // Prepared for #6042
2879 return 1;
2880}
2881
2882
2883long
2884GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2885 // Prepared for #6042
2886 return 1;
2887}
2888
2889
2890long
2891GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2892 // Prepared for #6042
2893 return 1;
2894}
2895
2896
2897long
2898GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2899 // first check if myViewNet exist
2900 if (myViewNet) {
2901 // call set template in inspector frame
2903 }
2904 return 1;
2905}
2906
2907
2908long
2909GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2910 // first check if myViewNet exist
2911 if (myViewNet) {
2912 // call copy template in inspector frame
2914 }
2915 return 1;
2916}
2917
2918
2919long
2920GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2921 // first check if myViewNet exist
2922 if (myViewNet) {
2923 // call clear template in inspector frame
2925 }
2926 return 1;
2927}
2928
2929
2930long
2931GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2932 // check if net exist
2933 if (myNet) {
2935 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2936 } else {
2938 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2939 }
2940}
2941
2942
2943long
2944GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2945 // check if at least there is one edge in the network
2946 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2947 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2948 } else {
2949 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2950 }
2951}
2952
2953
2954long
2955GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2956 // check if net, viewnet and front attribute exist
2957 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2958 // check if all element are front
2959 bool allFront = true;
2960 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2961 if (!AC->isMarkedForDrawingFront()) {
2962 allFront = false;
2963 break;
2964 }
2965 }
2966 // set button text depending of all selected
2967 if (allFront) {
2968 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2969 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2970 } else {
2971 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2972 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2973 }
2974 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2975 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2976 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2977 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2978 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2979 } else {
2980 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2981 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2982 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2983 }
2984}
2985
2986
2987long
2988GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2989 if (myNet == nullptr) {
2990 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2991 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2992 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2993 } else {
2994 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2995 }
2996}
2997
2998
2999long
3000GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
3001 if (myNet == nullptr) {
3002 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3004 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3005 } else {
3006 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3007 }
3008}
3009
3010
3011long
3013 if (myNet == nullptr) {
3014 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3015 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
3016 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3017 } else {
3018 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3019 }
3020}
3021
3022
3023long
3024GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
3025 if (myNet == nullptr) {
3026 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3027 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
3028 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3029 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
3030 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3031 } else {
3032 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3033 }
3034}
3035
3036
3037long
3038GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
3039 if (myNet == nullptr) {
3040 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3041 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
3042 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3043 } else {
3044 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3045 }
3046
3047}
3048
3049
3050long
3051GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
3052 if (myNet == nullptr) {
3053 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3055 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3056 } else {
3057 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3058 }
3059}
3060
3061
3062long
3063GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
3064 if (myNet == nullptr) {
3065 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3066 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
3067 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3068 } else {
3069 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3070 }
3071
3072}
3073
3074
3075long
3076GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
3077 if (myNet == nullptr) {
3078 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3079 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
3080 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3081 } else {
3082 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3083 }
3084
3085}
3086
3087
3088long
3089GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
3090 if (myNet == nullptr) {
3091 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3092 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
3093 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3094 } else {
3095 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3096 }
3097}
3098
3099
3100long
3102 if (myNet == nullptr) {
3103 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3104 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
3105 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3106 } else {
3107 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3108 }
3109
3110}
3111
3112
3113long
3114GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
3115 return myUndoList->onUpdUndo(sender, sel, ptr);
3116}
3117
3118
3119long
3120GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
3121 return myUndoList->onUpdRedo(sender, sel, ptr);
3122}
3123
3124
3125long
3126GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
3127 // first check viewNet
3128 if (myViewNet) {
3129 // check supermode network
3131 // disable
3132 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3134 // disable
3135 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3136 } else {
3137 // enable
3138 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3139 }
3140 } else {
3141 // disable
3142 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3143 }
3144}
3145
3146
3147long
3148GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3149 // check viewNet
3150 if (myViewNet) {
3151 // continue depending of selector
3152 switch (FXSELID(sel)) {
3153 // Network
3155 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3157 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3159 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3161 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3163 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3165 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3167 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3169 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3171 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3173 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3175 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3177 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3179 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3181 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3183 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3185 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3187 return myViewNet->onCmdToggleShowPolygonSymbols(sender, sel, ptr);
3189 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3190 // Demand
3192 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3194 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3196 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3198 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3200 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3202 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3204 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3206 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3208 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3210 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3212 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3213 // Data
3215 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3217 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3219 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3221 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3223 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3225 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3227 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3229 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3230 default:
3231 return 0;
3232 }
3233 } else {
3234 return 0;
3235 }
3236}
3237
3238
3239long
3240GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3241 // get menuCheck
3242 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3243 // check viewNet
3244 if (myViewNet && menuCheck) {
3245 // continue depending of selector
3246 switch (FXSELID(sel)) {
3247 // Network
3250 menuCheck->setCheck(TRUE);
3251 } else {
3252 menuCheck->setCheck(FALSE);
3253 }
3254 break;
3257 menuCheck->setCheck(TRUE);
3258 } else {
3259 menuCheck->setCheck(FALSE);
3260 }
3261 break;
3264 menuCheck->setCheck(TRUE);
3265 } else {
3266 menuCheck->setCheck(FALSE);
3267 }
3268 break;
3271 menuCheck->setCheck(TRUE);
3272 } else {
3273 menuCheck->setCheck(FALSE);
3274 }
3275 break;
3278 menuCheck->setCheck(TRUE);
3279 } else {
3280 menuCheck->setCheck(FALSE);
3281 }
3282 break;
3285 menuCheck->setCheck(TRUE);
3286 } else {
3287 menuCheck->setCheck(FALSE);
3288 }
3289 break;
3292 menuCheck->setCheck(TRUE);
3293 } else {
3294 menuCheck->setCheck(FALSE);
3295 }
3296 break;
3299 menuCheck->setCheck(TRUE);
3300 } else {
3301 menuCheck->setCheck(FALSE);
3302 }
3303 break;
3306 menuCheck->setCheck(TRUE);
3307 } else {
3308 menuCheck->setCheck(FALSE);
3309 }
3310 break;
3313 menuCheck->setCheck(TRUE);
3314 } else {
3315 menuCheck->setCheck(FALSE);
3316 }
3317 break;
3320 menuCheck->setCheck(TRUE);
3321 } else {
3322 menuCheck->setCheck(FALSE);
3323 }
3324 break;
3327 menuCheck->setCheck(TRUE);
3328 } else {
3329 menuCheck->setCheck(FALSE);
3330 }
3331 break;
3334 menuCheck->setCheck(TRUE);
3335 } else {
3336 menuCheck->setCheck(FALSE);
3337 }
3338 break;
3341 menuCheck->setCheck(TRUE);
3342 } else {
3343 menuCheck->setCheck(FALSE);
3344 }
3345 break;
3348 menuCheck->setCheck(TRUE);
3349 } else {
3350 menuCheck->setCheck(FALSE);
3351 }
3352 break;
3355 menuCheck->setCheck(TRUE);
3356 } else {
3357 menuCheck->setCheck(FALSE);
3358 }
3359 break;
3362 menuCheck->setCheck(TRUE);
3363 } else {
3364 menuCheck->setCheck(FALSE);
3365 }
3366 break;
3367 // Demand
3370 menuCheck->setCheck(TRUE);
3371 } else {
3372 menuCheck->setCheck(FALSE);
3373 }
3374 break;
3377 menuCheck->setCheck(TRUE);
3378 } else {
3379 menuCheck->setCheck(FALSE);
3380 }
3381 break;
3384 menuCheck->setCheck(TRUE);
3385 } else {
3386 menuCheck->setCheck(FALSE);
3387 }
3388 break;
3391 menuCheck->setCheck(TRUE);
3392 } else {
3393 menuCheck->setCheck(FALSE);
3394 }
3395 break;
3398 menuCheck->setCheck(TRUE);
3399 } else {
3400 menuCheck->setCheck(FALSE);
3401 }
3402 break;
3405 menuCheck->setCheck(TRUE);
3406 } else {
3407 menuCheck->setCheck(FALSE);
3408 }
3409 break;
3412 menuCheck->setCheck(TRUE);
3413 } else {
3414 menuCheck->setCheck(FALSE);
3415 }
3416 // special case for lock persons
3418 menuCheck->enable();
3419 } else {
3420 menuCheck->disable();
3421 }
3422 break;
3425 menuCheck->setCheck(TRUE);
3426 } else {
3427 menuCheck->setCheck(FALSE);
3428 }
3429 break;
3432 menuCheck->setCheck(TRUE);
3433 } else {
3434 menuCheck->setCheck(FALSE);
3435 }
3436 // special case for lock containers
3438 menuCheck->enable();
3439 } else {
3440 menuCheck->disable();
3441 }
3442 break;
3445 menuCheck->setCheck(TRUE);
3446 } else {
3447 menuCheck->setCheck(FALSE);
3448 }
3449 break;
3452 menuCheck->setCheck(TRUE);
3453 } else {
3454 menuCheck->setCheck(FALSE);
3455 }
3456 break;
3457 // Data
3460 menuCheck->setCheck(TRUE);
3461 } else {
3462 menuCheck->setCheck(FALSE);
3463 }
3464 break;
3467 menuCheck->setCheck(TRUE);
3468 } else {
3469 menuCheck->setCheck(FALSE);
3470 }
3471 break;
3474 menuCheck->setCheck(TRUE);
3475 } else {
3476 menuCheck->setCheck(FALSE);
3477 }
3478 break;
3481 menuCheck->setCheck(TRUE);
3482 } else {
3483 menuCheck->setCheck(FALSE);
3484 }
3485 break;
3488 menuCheck->setCheck(TRUE);
3489 } else {
3490 menuCheck->setCheck(FALSE);
3491 }
3492 break;
3495 menuCheck->setCheck(TRUE);
3496 } else {
3497 menuCheck->setCheck(FALSE);
3498 }
3499 break;
3500
3503 menuCheck->setCheck(TRUE);
3504 } else {
3505 menuCheck->setCheck(FALSE);
3506 }
3507 break;
3510 menuCheck->setCheck(TRUE);
3511 } else {
3512 menuCheck->setCheck(FALSE);
3513 }
3514 break;
3515 default:
3516 break;
3517 }
3518 }
3519 return 0;
3520}
3521
3522
3523long
3524GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3525 auto& neteditOptions = OptionsCont::getOptions();
3526 // check if we're forcing to saving additionals
3528 neteditOptions.getBool("force-saving")) {
3529 WRITE_MESSAGE(TL("Force save network"));
3530 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3531 // nothing to save
3532 return 1;
3533 }
3534 // first check if we have to set the output filename
3537 }
3538 // function onCmdSaveNetworkAs must be executed if this is the first save
3540 return onCmdSaveNetworkAs(sender, sel, ptr);
3541 } else {
3542 // always recompute before saving
3543 myNet->computeNetwork(this);
3544 bool saved = false;
3545 try {
3546 // obtain invalid networkElements (currently only edges or crossings
3547 std::vector<GNENetworkElement*> invalidNetworkElements;
3548 // iterate over crossings and edges
3549 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3550 if (!edge.second->isNetworkElementValid()) {
3551 invalidNetworkElements.push_back(edge.second);
3552 }
3553 }
3554 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3555 if (!crossing.second->isNetworkElementValid()) {
3556 invalidNetworkElements.push_back(crossing.second);
3557 }
3558 }
3559 // if there are invalid network elements, open GNEFixNetworkElements
3560 if (invalidNetworkElements.size() > 0) {
3561 // create fix network elements dialog
3562 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3563 // continue depending of result
3564 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3565 // Save network
3566 myNet->saveNetwork();
3567 saved = true;
3568 } else {
3569 // stop
3570 return 0;
3571 }
3572 } else {
3573 // Save network
3574 myNet->saveNetwork();
3575 saved = true;
3576 }
3577 } catch (IOError& e) {
3578 // open error message box
3579 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3580 }
3581 if (saved) {
3582 // write info
3584 // After saving a net successfully, add it into Recent Nets list.
3587 } else {
3590 return 0;
3591 }
3592 return 1;
3593 }
3594}
3595
3596
3597long
3598GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3599 // get network file file
3600 const GNEFileDialog networkFileDialog(this, TL("network file"),
3605 // continue depending of dialog
3606 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3607 // update default network file
3609 // update netedit title with the network name
3610 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3611 // enable save network
3613 // save network
3614 return onCmdSaveNetwork(sender, sel, ptr);
3615 } else {
3616 return 0;
3617 }
3618}
3619
3620
3621long
3622GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3623 // first check if we have to set the output filename
3626 }
3627 // function onCmdSaveNetworkAs must be executed if this is the first save
3629 return onCmdSavePlainXMLAs(sender, sel, ptr);
3630 } else {
3631 // start saving plain XML
3632 getApp()->beginWaitCursor();
3633 try {
3634 // we use the prefix instead the netconvert config
3636 // save plain xml
3637 myNet->savePlain(plainXMLPrefix, OptionsCont::getOptions());
3638 // write info
3639 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3640 } catch (IOError& e) {
3641 // open message box
3642 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3643 }
3644 // end saving plain XML
3645 getApp()->endWaitCursor();
3646 // set focus again in viewNet
3647 myViewNet->setFocus();
3648 }
3649 return 1;
3650}
3651
3652
3653long
3654GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3655 // get neteditConfig filename
3656 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3661 // continue depending of dialog
3662 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3663 // update default netconvert file
3665 // save plain xml
3666 return onCmdSavePlainXML(sender, sel, ptr);
3667 }
3668 return 1;
3669}
3670
3671
3672long
3674 // get neteditConfig filename
3675 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3680 // continue depending of dialog
3681 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3682 getApp()->beginWaitCursor();
3683 try {
3684 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3685 // write info
3686 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3687 } catch (IOError& e) {
3688 // opening error message
3689 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3690 }
3691 getApp()->endWaitCursor();
3692 // set focus again in viewNet
3693 myViewNet->setFocus();
3694 }
3695 return 1;
3696}
3697
3698
3699long
3700GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3701 // first check if netedit config is already saved
3703 return 1;
3704 }
3705 // Check if configuration file was already set at start of netedit or with a previous save
3707 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3708 } else {
3709 // save all elements giving automatic names based on patter if their file isn't defined
3710 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3711 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3712 return 0;
3713 }
3714 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3715 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3716 return 0;
3717 }
3718 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3719 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3720 return 0;
3721 }
3722 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3723 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3724 return 0;
3725 }
3726 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3727 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3728 return 0;
3729 }
3730 // get netedit config file
3732 // configuration
3733 std::ofstream out(XMLSubSys::transcodeToLocal(neteditConfigFile));
3734 if (out.good()) {
3735 const auto& neteditOptions = OptionsCont::getOptions();
3736 // write netedit config
3737 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3738 // write info
3739 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3740 // config saved
3742 // After saving a config successfully, add it into recent configs
3743 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3744 // if we have a sumo config defined, save it also
3746 // get SumoConfig file
3748 std::ofstream sumoCfg(XMLSubSys::transcodeToLocal(sumoConfigFile));
3749 if (sumoCfg.good()) {
3750 // before saving sumo config, check if force enable option junction-taz
3752 mySumoOptions.set("junction-taz", "true");
3753 }
3754 // write SUMO config
3755 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3756 // write info
3757 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3758 // After saving a config successfully, add it into recent configs
3759 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3760 }
3761 }
3762 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3763 if (neteditOptions.getBool("autosave-netconvert-file")) {
3764 onCmdSavePlainXML(sender, sel, ptr);
3765 }
3766 } else {
3767 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3768 }
3769 out.close();
3770 return 1;
3771 }
3772}
3773
3774
3775long
3776GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3777 // get neteditConfig filename
3778 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3783 // continue depending of dialog
3784 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3785 // set file in file bucket handler
3787 // mark netedit config as unsaved
3789 // continue saving netedit config
3790 return onCmdSaveNeteditConfig(sender, sel, ptr);
3791 } else {
3792 return 0;
3793 }
3794}
3795
3796
3797long
3798GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3799 // check if enable or disable save netedit config button
3800 if (myNet == nullptr) {
3801 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3802 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3803 // a config requires at least ONE edge
3804 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3806 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3807 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3808 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3809 } else {
3810 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3811 }
3812 // check if enable/disable save individual files
3813 if (myNet) {
3817 } else {
3819 }
3820 }
3821 return 1;
3822}
3823
3824
3825long
3826GNEApplicationWindow::onUpdSaveNeteditConfigAs(FXObject* sender, FXSelector, void*) {
3827 // check if enable or disable save netedit config button
3828 if (myNet == nullptr) {
3829 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3830 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3831 // a config requires at least ONE edge
3832 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3833 } else {
3834 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3835 }
3836}
3837
3838
3839long
3840GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3841 // obtain netedit option container
3842 auto& neteditOptions = OptionsCont::getOptions();
3843 // reset containers
3844 neteditOptions.resetWritable();
3846 // Check if configuration file was already set at start of netedit or with a previous save
3848 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3849 } else {
3850 // save all elements giving automatic names based on patter in their file isn't defined
3851 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3852 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3853 return 0;
3854 }
3855 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3856 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3857 return 0;
3858 }
3859 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3860 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3861 return 0;
3862 }
3863 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3864 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3865 return 0;
3866 }
3867 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3868 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3869 return 0;
3870 }
3871 // get SumoConfig file
3873 // confinguration
3874 std::ofstream out(XMLSubSys::transcodeToLocal(sumoConfigFile));
3875 if (out.good()) {
3876 // before saving sumo config, check if force enable option junction-taz
3878 mySumoOptions.set("junction-taz", "true");
3879 }
3880 // write SUMO config
3881 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3882 // write info
3883 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3884 // After saving a config successfully, add it into recent configs
3885 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3886 // if we have a netedit cong defined, save it also
3888 // get netedit config file
3890 // configuration
3891 std::ofstream neteditCfg(XMLSubSys::transcodeToLocal(neteditConfigFile));
3892 if (neteditCfg.good()) {
3893 // write netedit config
3894 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3895 // write info
3896 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3897 // config saved
3899 // After saving a config successfully, add it into recent configs
3900 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3901 }
3902 }
3903 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3904 if (neteditOptions.getBool("autosave-netconvert-file")) {
3905 onCmdSavePlainXML(sender, sel, ptr);
3906 }
3908 } else {
3909 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3910 }
3911 out.close();
3912 return 1;
3913 }
3914}
3915
3916
3917long
3918GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3919 // get sumoConfig filename
3920 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3925 // continue depending of dialog
3926 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3927 // set sumo config
3929 // mark netedit config as unsaved
3931 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3933 return onCmdSaveNeteditConfig(sender, sel, ptr);
3934 } else {
3936 return onCmdSaveSumoConfig(sender, sel, ptr);
3937 }
3938 } else {
3939 return 0;
3940 }
3941}
3942
3943
3944long
3945GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3946 if (myNet == nullptr) {
3947 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3948 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3949 // a config requires at least ONE edge
3950 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3952 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3953 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3954 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3955 } else {
3956 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3957 }
3958}
3959
3960
3961long
3962GNEApplicationWindow::onUpdSaveSumoConfigAs(FXObject* sender, FXSelector, void*) {
3963 if (myNet == nullptr) {
3964 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3965 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3966 // a config requires at least ONE edge
3967 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3968 } else {
3969 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3970 }
3971}
3972
3973long
3974GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3975 // Check if TLS Programs file was already set at start of netedit or with a previous save
3977 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3978 } else {
3979 // Start saving TLS Programs
3980 getApp()->beginWaitCursor();
3981 try {
3982 // compute before saving
3983 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3985 // write info
3987 } catch (IOError& e) {
3988 // open error message box
3989 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3990 }
3992 getApp()->endWaitCursor();
3993 // set focus again in viewNet
3994 myViewNet->setFocus();
3995 }
3996 return 1;
3997}
3998
3999
4000long
4001GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
4002 if (myNet == nullptr) {
4003 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4004 } else {
4005 // check if there is at least one TLS
4006 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
4007 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
4008 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4009 }
4010 }
4011 // no TLS, then disable
4012 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4013 }
4014}
4015
4016
4017long
4018GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
4019 // Check if edgeType file was already set at start of netedit or with a previous save
4021 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
4022 } else {
4023 // Start saving edgeTypes
4024 getApp()->beginWaitCursor();
4025 try {
4027 // save edge types
4028 myNet->saveEdgeTypes(edgeTypeFile);
4029 // write info
4030 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
4031 } catch (IOError& e) {
4032 // open error message box
4033 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
4034 }
4036 getApp()->endWaitCursor();
4037 }
4038 return 1;
4039}
4040
4041
4042long
4043GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
4044 // check if net exist and there are edge types
4045 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
4046 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4047 } else {
4048 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4049 }
4050 return 1;
4051}
4052
4053
4054long
4055GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
4056 // get TLS file
4057 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
4062 // continue depending of dialog
4063 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4064 // set tls type in bucket
4066 // enable save netedit config
4068 // set focus again in viewNet
4069 myViewNet->setFocus();
4070 // save TLS Programs
4071 return onCmdSaveTLSPrograms(sender, sel, ptr);
4072 } else {
4073 return 1;
4074 }
4075}
4076
4077
4078long
4079GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
4080 // get network file file
4081 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
4086 // continue depending of dialog
4087 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4088 // set tls type in bucket
4090 // enable save netedit config
4092 // set focus again in viewNet
4093 myViewNet->setFocus();
4094 // save edgeTypes
4095 return onCmdSaveEdgeTypes(sender, sel, ptr);
4096 } else {
4097 return 1;
4098 }
4099}
4100
4101
4102long
4104 // get file
4105 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
4110 // continue depending of dialog
4111 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4112 // flag for save current saving status
4113 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
4114 // get (or create) bucket for this new file
4115 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
4116 // disable validation for additionals
4117 XMLSubSys::setValidation("never", "auto", "auto");
4118 // Create additional handler
4119 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4120 // begin undoList operation
4121 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
4122 // Run parser
4123 if (!generalHandler.parse()) {
4124 // write error
4125 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
4126 } else {
4127 // write info
4128 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
4129 // check if file is meanData
4130 const bool isMeanData = checkMeanDataFileBucket(additionalFileDialog.getFilename(), bucket, generalHandler);
4131 // enable save if there is errors loading additionals
4132 if (!generalHandler.isErrorCreatingElement()) {
4133 if (isMeanData) {
4135 } else if (previouslySaved) {
4137 }
4138 }
4139 }
4140 // end undoList operation
4141 myUndoList->end();
4142 // restore validation for additionals
4143 XMLSubSys::setValidation("auto", "auto", "auto");
4144 // check if clear undoList
4146 myUndoList->clear();
4147 }
4148 update();
4149 }
4150 return 1;
4151}
4152
4153
4154long
4156 // disable validation for additionals
4157 XMLSubSys::setValidation("never", "auto", "auto");
4158 // begin undoList operation
4159 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
4160 // clear additionals
4162 // reload additional elements stored in options
4163 loadAdditionalElements("Reloading");
4164 // end undoList operation
4165 myUndoList->end();
4166 // restore validation for additionals
4167 XMLSubSys::setValidation("auto", "auto", "auto");
4168 // check if clear undoList
4170 myUndoList->clear();
4171 }
4172 update();
4173 return 1;
4174}
4175
4176
4177long
4178GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
4179 if (myViewNet == nullptr) {
4180 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4182 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4183 } else {
4184 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4185 }
4186}
4187
4188
4189long
4190GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4191 const auto savingFileHandler = myFileBucketHandler;
4192 // get option container
4193 auto& neteditOptions = OptionsCont::getOptions();
4194 // check if we're forcing to saving additionals
4196 neteditOptions.getBool("force-saving") &&
4198 WRITE_MESSAGE(TL("Force save additional elements"));
4199 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4200 // nothing to save
4201 return 1;
4202 }
4203 // check if we have to define a default filename
4205 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4206 }
4207 // check if we have to open save as dialog
4208 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4209 // choose file to save
4210 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4211 } else {
4212 // always recompute before saving
4213 myNet->computeNetwork(this);
4214 try {
4215 // compute before saving (for detectors positions)
4216 myNet->computeNetwork(this);
4217 // save additionals
4218 const bool savingResult = myNet->saveAdditionals();
4219 // show info
4220 if (savingResult) {
4221 WRITE_MESSAGE(TL("Additionals saved."));
4222 return 1;
4223 } else {
4224 WRITE_MESSAGE(TL("Saving additional aborted."));
4225 return 0;
4226 }
4227 } catch (IOError& e) {
4228 // open error message box
4229 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4230 }
4231 return 0;
4232 }
4233}
4234
4235
4236long
4237GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4238 // get additional file
4239 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4244 // continue depending of dialog
4245 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4246 // update default name
4248 // save additional
4249 return onCmdSaveAdditionalElements(sender, sel, ptr);
4250 } else {
4251 return 0;
4252 }
4253}
4254
4255
4256long
4257GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4258 // get additional file
4259 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4264 // continue depending of dialog
4265 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4266 // use the file as default file
4268 // begin undoList operation
4269 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4270 // iterate over all demand elementes and change file
4271 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4272 for (const auto& additionalElement : additionalElementTag.second) {
4273 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4274 }
4275 }
4276 // end undoList operation
4277 myUndoList->end();
4278 // save additionals
4280 return onCmdSaveAdditionalElements(sender, sel, ptr);
4281 } else {
4282 return 0;
4283 }
4284}
4285
4286
4287long
4289 // get juPedSim file
4290 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4295 // continue depending of dialog
4296 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4297 try {
4298 // save additionals
4299 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4300 // set focus again in viewNet
4301 myViewNet->setFocus();
4302 // show info
4303 if (savingResult) {
4304 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4305 return 1;
4306 } else {
4307 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4308 return 0;
4309 }
4310 } catch (IOError& e) {
4311 // open error message box
4312 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4313 }
4314 }
4315 return 0;
4316}
4317
4318
4319long
4321 // get file
4322 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4327 // continue depending of dialog
4328 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4329 // save previous demand element status saving
4330 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4331 // disable validation for additionals
4332 XMLSubSys::setValidation("never", "auto", "auto");
4333 // get (or create) bucket for this new file
4334 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4335 // Create generic handler
4337 // begin undoList operation
4338 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4339 // Run parser for additionals
4340 if (!handler.parse()) {
4341 // write error
4342 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4343 } else {
4344 // show info
4345 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4346 // enable demand elements if there is an error creating element
4347 if (previouslySaved && !handler.isErrorCreatingElement()) {
4349 }
4350 }
4351 // end undoList operation
4352 myUndoList->end();
4353 // restore validation
4354 XMLSubSys::setValidation("auto", "auto", "auto");
4355 // check if clear undoList
4357 myUndoList->clear();
4358 }
4359 update();
4360 }
4361 return 1;
4362}
4363
4364
4365long
4367 // disable validation for additionals
4368 XMLSubSys::setValidation("never", "auto", "auto");
4369 // begin undoList operation
4370 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4371 // clear demand elements
4373 // reload demand elements stored in options
4374 loadDemandElements("Reloading");
4375 // end undoList operation and update view
4376 myUndoList->end();
4377 // restore validation for demand
4378 XMLSubSys::setValidation("auto", "auto", "auto");
4379 // check if clear undoList
4381 myUndoList->clear();
4382 }
4383 update();
4384 return 1;
4385}
4386
4387
4388long
4389GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4390 if (myViewNet == nullptr) {
4391 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4393 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4394 } else {
4395 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4396 }
4397}
4398
4399
4400long
4401GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4402 const auto savingFileHandler = myFileBucketHandler;
4403 // get option container
4404 auto& neteditOptions = OptionsCont::getOptions();
4405 // check if we're forcing to saving demand elements
4407 neteditOptions.getBool("force-saving") &&
4409 WRITE_MESSAGE(TL("Force save demand elements"));
4410 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4411 // nothing to save
4412 return 1;
4413 }
4414 // check if we have to define a default filename
4416 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4417 }
4418 // check if we have to open save as dialog
4419 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4420 // choose file to save
4421 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4422 } else {
4423 // always recompute before saving
4424 myNet->computeNetwork(this);
4425 try {
4426 // save demand elements
4427 const bool savingResult = myNet->saveDemandElements();
4428 // show info
4429 if (savingResult) {
4430 WRITE_MESSAGE(TL("Demand elements saved."));
4431 return 1;
4432 } else {
4433 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4434 return 0;
4435 }
4436 } catch (IOError& e) {
4437 // open error message box
4438 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4439 }
4440 }
4441 return 0;
4442}
4443
4444
4445long
4446GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4447 // get route file
4448 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4453 // continue depending of dialog
4454 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4455 // update default name
4457 // save demand elements
4458 return onCmdSaveDemandElements(sender, sel, ptr);
4459 } else {
4460 return 0;
4461 }
4462}
4463
4464
4465long
4466GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4467 // get route file
4468 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4473 // continue depending of dialog
4474 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4475 // use the file as default file
4477 // begin undoList operation
4478 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4479 // iterate over all demand elementes and change file
4480 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4481 for (const auto& demandElement : demandElementTag.second) {
4482 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4483 }
4484 }
4485 // end undoList operation
4486 myUndoList->end();
4487 // save demand elements
4489 return onCmdSaveDemandElements(sender, sel, ptr);
4490 } else {
4491 return 0;
4492 }
4493}
4494
4495
4496long
4497GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4498 // get file
4499 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4504 // continue depending of dialog
4505 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4506 // save previous demand element status saving
4507 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4508 // get (or create) bucket for this new file
4509 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4510 // disable update data
4512 // disable validation for data elements
4513 XMLSubSys::setValidation("never", "auto", "auto");
4514 // Create data handler
4515 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4516 // begin undoList operation
4517 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4518 // Run data parser
4519 if (!dataHandler.parse()) {
4520 // write error
4521 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4522 } else {
4523 // show info
4524 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4525 // enable demand elements if there is an error creating element
4526 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4528 }
4529 }
4530 // end undoList operation
4531 myUndoList->end();
4532 // enable update data
4534 // restore validation for data
4535 XMLSubSys::setValidation("auto", "auto", "auto");
4536 // check if clear undoList
4538 myUndoList->clear();
4539 }
4540 update();
4541 }
4542 return 1;
4543}
4544
4545
4546long
4548 // disable update data
4550 // disable validation for additionals
4551 XMLSubSys::setValidation("never", "auto", "auto");
4552 // begin undoList operation
4553 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4554 // clear data elements
4556 // reload data elements stored in options
4557 loadDataElements("Reloading");
4558 // restore validation for data
4559 XMLSubSys::setValidation("auto", "auto", "auto");
4560 // end undoList operation and update view
4561 myUndoList->end();
4562 // enable update data
4564 // check if clear undoList
4566 myUndoList->clear();
4567 }
4568 update();
4569 return 1;
4570}
4571
4572
4573long
4574GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4575 if (myViewNet == nullptr) {
4576 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4578 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4579 } else {
4580 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4581 }
4582}
4583
4584
4585long
4586GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4587 const auto savingFileHandler = myFileBucketHandler;
4588 // get option container
4589 auto& neteditOptions = OptionsCont::getOptions();
4590 // check if we're forcing to saving data elements
4592 neteditOptions.getBool("force-saving") &&
4594 WRITE_MESSAGE(TL("Force save data elements"));
4595 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4596 // nothing to save
4597 return 1;
4598 }
4599 // check if we have to define a default filename
4601 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4602 }
4603 // check if we have to open save as dialog
4604 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4605 return onCmdSaveDataElementsAs(sender, sel, ptr);
4606 } else {
4607 try {
4608 // save data elements
4609 const bool savingResult = myNet->saveDataElements();
4610 // show info
4611 if (savingResult) {
4612 WRITE_MESSAGE(TL("Data elements saved."));
4613 return 1;
4614 } else {
4615 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4616 return 0;
4617 }
4618 } catch (IOError& e) {
4619 // open error message box
4620 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4621 }
4622 }
4623 return 0;
4624}
4625
4626
4627long
4628GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4629 // get data file
4630 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4635 // continue depending of dialog
4636 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4637 // update default name
4639 // save data elements
4640 return onCmdSaveDataElements(sender, sel, ptr);
4641 } else {
4642 return 0;
4643 }
4644}
4645
4646
4647long
4648GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4649 // get data file
4650 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4655 // continue depending of dialog
4656 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4657 // use the file as default file
4659 // begin undoList operation
4660 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4661 // iterate over all demand elementes and change file
4662 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4663 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4664 }
4665 // end undoList operation
4666 myUndoList->end();
4667 // save data elements
4669 return onCmdSaveDataElements(sender, sel, ptr);
4670 } else {
4671 return 0;
4672 }
4673}
4674
4675
4676long
4678 // get file
4679 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4684 // continue depending of dialog
4685 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4686 // save previous demand element status saving
4687 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4688 // get (or create) bucket for this new file
4689 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4690 // disable validation for meanDatas
4691 XMLSubSys::setValidation("never", "auto", "auto");
4692 // Create meanData handler
4693 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4694 // begin undoList operation
4695 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4696 // Run parser
4697 if (!generalHandler.parse()) {
4698 // write error
4699 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4700 } else {
4701 // show info
4702 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4703 // enable demand elements if there is an error creating element
4704 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4706 }
4707 }
4708 // end undoList operation
4709 myUndoList->end();
4710 // restore validation for meanDatas
4711 XMLSubSys::setValidation("auto", "auto", "auto");
4712 // check if clear undoList
4714 myUndoList->clear();
4715 }
4716 update();
4717 }
4718 return 1;
4719}
4720
4721
4722long
4724 // disable validation for meanDatas
4725 XMLSubSys::setValidation("never", "auto", "auto");
4726 // begin undoList operation
4728 // clear meanDatas
4730 // reload meanData elements stored in options
4731 loadMeanDataElements("Reloading");
4732 // end undoList operation and update view
4733 myUndoList->end();
4734 // restore validation for meanDatas
4735 XMLSubSys::setValidation("auto", "auto", "auto");
4736 // check if clear undoList
4738 myUndoList->clear();
4739 }
4740 update();
4741 return 1;
4742}
4743
4744
4745long
4746GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4747 if (myViewNet == nullptr) {
4748 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4750 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4751 } else {
4752 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4753 }
4754}
4755
4756
4757long
4758GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4759 const auto savingFileHandler = myFileBucketHandler;
4760 // get option container
4761 auto& neteditOptions = OptionsCont::getOptions();
4762 // check if we're forcing to saving meandata elements
4764 neteditOptions.getBool("force-saving") &&
4766 WRITE_MESSAGE(TL("Force save meandata elements"));
4767 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4768 // nothing to save
4769 return 1;
4770 }
4771 // check if we have to define a default filename
4773 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4774 }
4775 // check if we have to open save as dialog
4776 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4777 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4778 } else {
4779 try {
4780 // compute before saving
4781 myNet->computeNetwork(this);
4782 // save demand elements
4783 const bool savingResult = myNet->saveMeanDatas();
4784 // show info
4785 if (savingResult) {
4786 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4787 return 1;
4788 } else {
4789 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4790 return 0;
4791 }
4792 } catch (IOError& e) {
4793 // open error message box
4794 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4795 }
4796 }
4797 return 0;
4798}
4799
4800
4801long
4802GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4803 // get meanData file
4804 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4809 // continue depending of dialog
4810 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4811 // update default name
4813 // save meanDatas
4814 return onCmdSaveMeanDataElements(sender, sel, ptr);
4815 } else {
4816 return 0;
4817 }
4818}
4819
4820
4821long
4822GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4823 // get meanData file
4824 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4829 // continue depending of dialog
4830 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4831 // use the file as default file
4833 // begin undoList operation
4834 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4835 // iterate over all demand elementes and change file
4836 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4837 for (const auto& meanData : meanDataTag.second) {
4838 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4839 }
4840 }
4841 // end undoList operation
4842 myUndoList->end();
4843 // save meanDatas
4845 return onCmdSaveMeanDataElements(sender, sel, ptr);
4846 } else {
4847 return 0;
4848 }
4849}
4850
4851
4852bool
4853GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4854 if (myNet) {
4856 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4857 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4858 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4859 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4860 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4861 // first check if abort saving
4862 if (commonResult == GNEDialog::Result::ABORT) {
4863 return false;
4864 }
4865 // save every type of file
4866 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4867 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4868 return false;
4869 }
4870 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4871 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4872 return false;
4873 }
4874 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4875 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4876 return false;
4877 }
4878 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4879 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4880 return false;
4881 }
4882 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4883 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4884 return false;
4885 }
4886 // restore focus in viewNet
4887 myViewNet->setFocus();
4888 // clear undo list
4889 clearUndoList();
4890 // all saved, then continue
4891 return true;
4892 } else {
4893 // nothing to do, then continue
4894 return true;
4895 }
4896}
4897
4898
4899void
4901 // check that view exists
4902 if (myViewNet) {
4904 }
4905 // update require recomputing
4907}
4908
4909
4910void
4912 // remove lock hotkeys
4914 // check supermode
4915 if (supermode == Supermode::NETWORK) {
4916 // menu commands
4920 // lock
4924 // processing
4929 } else if (supermode == Supermode::DEMAND) {
4930 // menu commands
4934 // lock
4938 // processing
4943 } else if (supermode == Supermode::DATA) {
4944 // menu commands
4948 // lock
4952 // processing
4957 } else {
4958 // menu commands
4963 // lock
4967 // processing
4971 }
4972 // continue depending of view
4973 if (myViewNet) {
4977 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4980 }
4981 }
4982}
4983
4984
4985bool
4989
4990
4991void
4995
4996
4997void
4999 myUndoRedoListEnabled = reason;
5000}
5001
5002
5003const std::string&
5007
5008
5009void
5011 if (myViewNet) {
5012 // destroy Popup (to avoid crashes)
5014 }
5015 // clear undo list and return true to continue with closing/reload
5016 myUndoList->clear();
5017}
5018
5019
5024
5025
5030
5031
5036
5037
5042
5043
5048
5049
5054
5055
5060
5061
5062bool
5063GNEApplicationWindow::checkMeanDataFileBucket(const std::string& file, FileBucket* bucket, const GNEGeneralHandler& generalHandler) {
5064 if (generalHandler.isMeanDataFile() && !generalHandler.isAdditionalFile()) {
5065 auto meanDataBucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5066 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
5067 for (const auto& meanDataPair : meanDataTag.second) {
5068 if (meanDataPair.second->getFileBucket() == bucket) {
5069 bucket->removeElement(false);
5070 meanDataPair.second->setFileBucket(meanDataBucket);
5071 meanDataBucket->addElement(false);
5072 }
5073 }
5074 }
5075 if (bucket->isDefaultBucket()) {
5076 bucket->setFilename("");
5077 }
5080 return true;
5081 }
5082 return false;
5083}
5084
5085
5086void
5088 // get netedit option container
5089 auto& neteditOptions = OptionsCont::getOptions();
5090 // check if ignore loading of additional files
5091 if ((operation == "Loading") && neteditOptions.getBool("ignore.additionalelements")) {
5092 return;
5093 }
5094 // get additional files (don't use reference because it's modified during loading)
5095 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
5096 // check if we have additionals to load
5097 if (myNet && (additionalFiles.size() > 0)) {
5098 // disable validation for additionals
5099 XMLSubSys::setValidation("never", "auto", "auto");
5100 // begin undolist
5101 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
5102 // count actual files
5103 int numAdditionalFiles = 0;
5104 int numMeanDataFiles = 0;
5105 bool additionalErrors = false;
5106 bool meanDataErrors = false;
5107 // iterate over every additional file
5108 for (const auto& file : additionalFiles) {
5109 // check if ignore missing inputs
5110 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5111 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
5112 // get (or create) bucket for this new file
5114 // declare general handler
5115 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5116 // check if force overwritte
5117 if (operation == "reloading") {
5118 generalHandler.forceOverwriteElements();
5119 }
5120 // Run parser
5121 const bool parsed = generalHandler.parse();
5122 if (!parsed) {
5123 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5124 additionalErrors = true;
5125 meanDataErrors = true;
5126 } else if (generalHandler.isErrorCreatingElement()) {
5127 if (generalHandler.isErrorCreatingAdditional() || generalHandler.isAdditionalFile()) {
5128 additionalErrors = true;
5129 }
5130 if (generalHandler.isErrorCreatingMeanData() || generalHandler.isMeanDataFile()) {
5131 meanDataErrors = true;
5132 }
5133 }
5134 if (checkMeanDataFileBucket(file, bucket, generalHandler)) {
5135 numMeanDataFiles++;
5136 } else if (generalHandler.isAdditionalFile()) {
5137 numAdditionalFiles++;
5138 }
5139 }
5140 }
5141 // end undo list
5142 myUndoList->end();
5143 // disable validation for additionals
5144 XMLSubSys::setValidation("auto", "auto", "auto");
5145 if (!additionalErrors && (numAdditionalFiles <= 1)) {
5147 }
5148 if (!meanDataErrors && (numMeanDataFiles <= 1) && (myNet->getAttributeCarriers()->getNumberOfMeanDatas() > 0)) {
5150 }
5151 // check if clear undoList
5153 myUndoList->clear();
5154 }
5155 }
5156}
5157
5158
5159void
5160GNEApplicationWindow::loadDemandElements(const std::string operation) {
5161 // get netedit option container
5162 auto& neteditOptions = OptionsCont::getOptions();
5163 // check if ignore loading of demand files
5164 if ((operation == "Loading") && neteditOptions.getBool("ignore.routeelements")) {
5165 return;
5166 }
5167 // get demand files (don't use reference because it's modified during loading)
5168 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
5169 // check if we have demand files to load
5170 if (myNet && (demandFiles.size() > 0)) {
5171 // disable validation for additionals
5172 XMLSubSys::setValidation("never", "auto", "auto");
5173 // begin undolist
5174 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
5175 // use this flag for mark all elements as saved after loading, if it was sucessfully
5176 bool setSaved = demandFiles.size() == 1;
5177 // iterate over every demand file
5178 for (const auto& file : demandFiles) {
5179 // check if ignore missing inputs
5180 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5181 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
5182 // get (or create) bucket for this new file
5183 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
5184 // declare general handler
5185 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5186 // check if force overwritte
5187 if (operation == "reloading") {
5188 generalHandler.forceOverwriteElements();
5189 }
5190 // Run parser
5191 if (!generalHandler.parse()) {
5192 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5193 }
5194 setSaved &= !generalHandler.isErrorCreatingElement();
5195 }
5196 }
5197 // end undo list
5198 myUndoList->end();
5199 // disable validation for additionals
5200 XMLSubSys::setValidation("auto", "auto", "auto");
5201 if (setSaved) {
5203 }
5204 // check if clear undoList
5206 myUndoList->clear();
5207 }
5208 }
5209}
5210
5211
5212void
5213GNEApplicationWindow::loadDataElements(const std::string operation) {
5214 // get option container
5215 auto& neteditOptions = OptionsCont::getOptions();
5216 // get data files (don't use reference because it's modified during loading)
5217 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
5218 if (myNet && (dataFiles.size() > 0)) {
5219 // disable validation for additionals
5220 XMLSubSys::setValidation("never", "auto", "auto");
5221 // begin undolist
5222 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
5223 // use this flag for mark all elements as saved after loading, if it was sucessfully
5224 bool setSaved = dataFiles.size() == 1;
5225 // iterate over every data file
5226 for (const auto& file : dataFiles) {
5227 // check if ignore missing inputs
5228 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5229 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
5230 // get (or create) bucket for this new file
5231 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
5232 // declare general handler
5233 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5234 // check if force overwritte
5235 if (operation == "reloading") {
5236 generalHandler.forceOverwriteElements();
5237 }
5238 // Run parser
5239 if (!generalHandler.parse()) {
5240 WRITE_ERROR(TLF("% of % failed.", operation, file));
5241 }
5242 setSaved &= !generalHandler.isErrorCreatingElement();
5243 }
5244 }
5245 // end undo list
5246 myUndoList->end();
5247 // disable validation for additionals
5248 XMLSubSys::setValidation("auto", "auto", "auto");
5249 if (setSaved) {
5251 }
5252 // check if clear undoList
5254 myUndoList->clear();
5255 }
5256 }
5257}
5258
5259
5260void
5262 // get option container
5263 auto& neteditOptions = OptionsCont::getOptions();
5264 // get meanData files (don't use reference because it's modified during loading)
5265 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5266 if (myNet && (meanDataFiles.size() > 0)) {
5267 // disable validation for additionals
5268 XMLSubSys::setValidation("never", "auto", "auto");
5269 // begin undolist
5270 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5271 // use this flag for mark all elements as saved after loading, if it was sucessfully
5272 bool setSaved = meanDataFiles.size() == 1;
5273 // iterate over every meanData file
5274 for (const auto& file : meanDataFiles) {
5275 // check if ignore missing inputs
5276 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5277 // get (or create) bucket for this new file
5278 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5279 // check if already loaded in this operation
5280 if ((operation == "Loading") && (bucket->getNumElements() > 0)) {
5281 continue;
5282 }
5283 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5284 // declare general handler
5285 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5286 // check if force overwritte
5287 if (operation == "reloading") {
5288 generalHandler.forceOverwriteElements();
5289 }
5290 // Run parser
5291 if (!generalHandler.parse()) {
5292 WRITE_ERROR(TLF("% of % failed.", operation, file));
5293 }
5294 setSaved &= !generalHandler.isErrorCreatingElement();
5295 }
5296 }
5297 // end undo list
5298 myUndoList->end();
5299 // disable validation for additionals
5300 XMLSubSys::setValidation("auto", "auto", "auto");
5301 if (setSaved) {
5303 }
5304 // check if clear undoList
5306 myUndoList->clear();
5307 }
5308 }
5309}
5310
5311
5312void
5313GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5314 // get TLS file
5316 if (tlsFile.size() > 0) {
5317 // show info
5318 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5319 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5320 myNet->computeNetwork(this);
5321 // parse TLS programs
5322 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5323 // Abort undo/redo
5325 } else {
5326 // commit undo/redo operation
5327 myUndoList->end();
5328 update();
5329 }
5330 // require save network
5332 // if defined, require save netedit config
5335 }
5336 }
5337}
5338
5339
5340void
5341GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5342 // get edgeType file
5344 if (edgeTypeFile.size() > 0) {
5345 // declare type container
5346 NBTypeCont typeContainerAux;
5347 // declare type handler
5348 NIXMLTypesHandler handler(typeContainerAux);
5349 // load edge types
5350 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5351 // now create GNETypes based on typeContainerAux
5352 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5353 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5354 // iterate over typeContainerAux
5355 for (const auto& auxEdgeType : typeContainerAux) {
5356 // create new edge type
5357 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5358 // add lane types
5359 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5360 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5361 }
5362 // add it using undoList
5363 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5364
5365 }
5366 // end undo list
5368 // refresh edge type selector
5370 // require save network
5372 // if defined, require save netedit config
5375 }
5376 }
5377}
5378
5379
5384
5385
5386bool
5388 if (myInternalTest == nullptr) {
5389 return true;
5390 } else if (obj == myInternalTest) {
5391 return true;
5392 } else {
5393 return false;
5394 }
5395}
5396
5397// ---------------------------------------------------------------------------
5398// GNEApplicationWindow - protected methods
5399// ---------------------------------------------------------------------------
5400#ifdef _MSC_VER
5401#pragma warning(push)
5402#pragma warning(disable: 4355) // mask warning about "this" in initializers
5403#endif
5405 myToolbarsGrip(this),
5406 myMenuBarFile(this),
5407 myFileMenuCommands(this),
5408 myModesMenuCommands(this),
5409 myEditMenuCommands(this),
5410 myLockMenuCommands(this),
5411 myProcessingMenuCommands(this),
5412 myLocateMenuCommands(this),
5413 myToolsMenuCommands(this),
5414 myWindowsMenuCommands(this),
5415 myHelpMenuCommands(this),
5416 mySupermodeCommands(this) {
5417}
5418#ifdef _MSC_VER
5419#pragma warning(pop)
5420#endif
5421
5422
5423long
5424GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5425 FXEvent* e = (FXEvent*) eventData;
5426 if (e && e->code == KEY_Escape) {
5427 if (myGeoCoordinate && myGeoCoordinate->hasFocus()) {
5428 myGeoCoordinate->killFocus();
5429 if (getActiveView()) {
5431 }
5432 return 1;
5433 }
5434 if (myCartesianCoordinate && myCartesianCoordinate->hasFocus()) {
5435 myCartesianCoordinate->killFocus();
5436 if (getActiveView()) {
5438 }
5439 return 1;
5440 }
5441 }
5442 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5443 if (handled == 0 && myMDIClient->numChildren() > 0) {
5444 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5445 if (w != nullptr) {
5446 w->onKeyPress(nullptr, sel, eventData);
5447 }
5448 }
5449 return 0;
5450}
5451
5452
5453long
5454GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5455 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5456 if (handled == 0 && myMDIClient->numChildren() > 0) {
5457 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5458 if (w != nullptr) {
5459 w->onKeyRelease(nullptr, sel, eventData);
5460 }
5461 }
5462 return 0;
5463}
5464
5465
5466/****************************************************************************/
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:869
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:783
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition GUIAppEnum.h:274
@ MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_AS
save demand elements as
Definition GUIAppEnum.h:751
@ 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:899
@ 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:957
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:935
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:785
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:923
@ 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:981
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:817
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:737
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:915
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:695
@ 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:843
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:925
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:795
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:777
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:865
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:895
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:749
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:851
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:849
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:987
@ 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:933
@ 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:973
@ 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:855
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:959
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:903
@ 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:947
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:937
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:731
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:745
@ 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:763
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:669
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:721
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:823
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:725
@ 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:697
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:945
@ 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:781
@ 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:867
@ 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:979
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:769
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:767
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:891
@ 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:953
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:819
@ 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:905
@ 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:743
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:975
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWFILLEDWALKINGAREAS
draw filled walking areas
Definition GUIAppEnum.h:873
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:779
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:863
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:755
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:857
@ 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:853
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:909
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:961
@ 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:893
@ 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:883
@ 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:879
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:727
@ 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:673
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:921
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:821
@ 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:983
@ 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:919
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_GEO_COORDINATE
enter geo coordinate to center view
Definition GUIAppEnum.h:379
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED
save data elements unified
Definition GUIAppEnum.h:759
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWPOLYGONSYMBOLS
show polygon symbols
Definition GUIAppEnum.h:871
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:845
@ 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:747
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:671
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:951
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:887
@ 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:719
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:861
@ 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:859
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:977
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:797
@ 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:985
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_AS
save additionals element as
Definition GUIAppEnum.h:735
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:907
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:917
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:729
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:885
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:841
@ 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:733
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:949
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:965
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_AS
save data elements as
Definition GUIAppEnum.h:757
@ MID_CARTESIAN_COORDINATE
enter cartesian coordinate to center view
Definition GUIAppEnum.h:381
@ 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:753
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:675
@ 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:911
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:889
@ 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:761
@ 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:931
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:963
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition GUIAppEnum.h:276
@ 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:913
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:741
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:268
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:847
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:723
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:955
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:839
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_AS
save meanDatas as
Definition GUIAppEnum.h:765
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:739
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:881
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:901
@ 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:929
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:927
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:815
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:897
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:300
@ MID_LANGUAGE_KO
change language to korean
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
std::vector< std::string > StringVector
Definition of a vector of strings.
Definition Option.h:42
@ 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_SAVEFILE
save file
int GUIDesignHeight
the default height for GUI elements
Definition StdDefs.cpp:41
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:57
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
void removeElement(const bool isTemplate)
remove element
bool isDefaultBucket() const
check if this is a default bucket
void setFilename(const std::string &filename)
set filename
static bool isReadable(std::string path)
Checks whether the given file is readable.
static void resetFont()
to be called when the font context is invalidated
Definition GLHelper.cpp:666
std::string getConfigDirectory() const
get current config directory (if we defined a netedit, sumo or netconvert config)
void resetDefaultFilenames()
brief set default files for all buckets
std::string getDefaultFilename(const FileBucket::Type type) const
functions related with filenames
bool isFilenameDefined(const FileBucket::Type type) const
check if at least we have an additional file defined
std::string getConfigFilePrefix(const std::string &sufix) const
get current config patter (if we defined a netedit, sumo or netconvert config)
std::string getDefaultFolder(const FileBucket::Type type) const
get default folder associated with the given tipe
FileBucket * getBucket(const FileBucket::Type type, const std::string &filename, const bool create)
get bucket
void setDefaultFilenameFile(const FileBucket::Type type, const std::string &filename)
brief set default additional file
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)
bool checkMeanDataFileBucket(const std::string &file, FileBucket *bucket, const GNEGeneralHandler &generalHandler)
check if loaded additional file is a meanData file and update buckets accordingly
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
long onCmdSaveAdditionalElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals as
long onCmdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is executed
long onCmdLoadAdditionalsInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load additionals"
long onCmdOpenTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall open TLS programs is executed
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
long onCmdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
void updateControls()
update control contents after undo/redo or recompute
long onUpdSaveMeanDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas unified is executed
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands
Lock Menu Commands.
const GNETagPropertiesDatabase * myTagPropertiesDatabase
tagProperties database
long onCmdSavePlainXML(FXObject *, FXSelector, void *)
called when the command/FXCall save plain xml is executed
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 onUpdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as 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
void loadDemandElements(const std::string operation)
load demand elements from netedit options
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
void loadEdgeTypes(const std::string operation)
load meanData elements
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
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
bool myStartedWithNewNet
flag for checking if netedit was started with a new network
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
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 onUpdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is updated
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.
void loadTrafficLights(const std::string operation)
load traffic lights
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
GNEApplicationWindowHelper::FileBucketHandler * myFileBucketHandler
saving files handler
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 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
void loadMeanDataElements(const std::string operation)
load meanData elements from netedit options
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
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
GNEApplicationWindowHelper::FileBucketHandler * getFileBucketHandler() const
get file bucket handler
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 onCmdSaveMeanDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas as is executed
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 onCmdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements as is executed
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
long onCmdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements as is executed
void handleEvent_FileLoaded(GUIEvent *e)
handle event of type Network loaded
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadAdditionalElements(const std::string operation)
load additional elements from netedit options
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
void closeAllWindows(const bool resetFilenames)
this method closes all windows and deletes the current simulation
bool myAllowUndoRedo
allow undo-redo (read from registry)
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
MFXCheckableButton * getShowToolTipsMenu() const
get checkable button for menu tooltips
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
MFXCheckableButton * getShowToolTipsView() const
get checkable button for view tooltips
long onCmdBackspace(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits backspace
void updateRecomputingLabel()
update recomputing label
bool askSaveElements(FXObject *sender, FXSelector sel, void *ptr)
warns about unsaved changes and gives the user the option to abort
long onUpdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
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
long computeJunctionWithVolatileOptions(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects Processing->compute junctions with volatile options
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
void loadDataElements(const std::string operation)
load data elements from netedit options
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 getResult() const
get result to indicate if this dialog was closed accepting or rejecting changes
Result
list of possible results when closing the dialog
Definition GNEDialog.h:70
void addLaneType(GNELaneType *laneType)
add laneType
GNENet * getNet() const
get the loaded net
const std::string & getSettingsFile() const
get the name of the settings file to load
bool getViewportFromRegistry() const
get whether loading viewport from registry
const std::string & getFile() const
get the name of the loaded file
GNEEvent_FileLoaded::Type getType() const
get event type
std::string getFilename() const
Return file name, if any.
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition GNEFrame.cpp:187
bool isErrorCreatingMeanData() const
check if error creating meanData element
bool isErrorCreatingAdditional() const
check if error creating additional element
bool isAdditionalFile() const
check if the parser file is a additional file
bool isMeanDataFile() const
check if the parser file is a meanData file
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
bool requireJunctionTazOption() const
check if we have elements that requires the option junction-taz
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
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 requireSaveMeanDatas()
inform that mean data elements has to be 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
void requireSaveAdditionals()
inform that additionals has to be saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be 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
void requireSaveDemandElements()
inform that demand elements has to be 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:2164
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1821
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1661
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2432
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2857
void requireRecompute(const bool requireSaving=true)
inform the net about the need for recomputation
Definition GNENet.cpp:1646
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1468
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:186
void enableUpdateData()
Definition GNENet.cpp:2922
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2876
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2199
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2367
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2177
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:198
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1927
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:1496
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1972
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1837
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:174
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition GNENet.cpp:2210
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2933
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2256
void saveNetwork()
save the network
Definition GNENet.cpp:1394
bool saveJuPedSimElements(const std::string &filename)
save JuPedSim elements
Definition GNENet.cpp:2301
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1655
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1779
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1863
GNEViewParent * getViewParent() const
get view parent (used for simplify code)
Definition GNENet.cpp:150
void savePlain(const std::string &prefix, const OptionsCont &netconvertOptions)
save plain xml representation of the network (and nothing else)
Definition GNENet.cpp:1432
bool saveDemandElements()
save demand element elements of the network
Definition GNENet.cpp:2318
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1595
bool isOptionModified() const
check if option was modified
bool requireSaveNetwork() const
check if modified network require save network
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 isOptionModified() const
check if option was modified
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
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)
long onCmdToggleShowPolygonSymbols(FXObject *, FXSelector, void *)
toggle show polygon symbols
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.
void saveDecals(const std::vector< GUISUMOAbstractView::Decal > &decals)
Makes the given decals 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
MFXCheckableButton * getShowToolTipsMenu() const
get menu for tooltips menu
MFXCheckableButton * getShowToolTipsView() const
get menu for tooltips view
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
long onCmdUnfocusCoordinate(FXObject *, FXSelector, void *)
called when a coordinate field in the status bar loses focus
std::vector< FXMainWindow * > myTrackerWindows
list of tracker windows
FXMenuPane * myLanguageMenu
Language menu common to all applications.
GUISUMOAbstractView * getActiveView() const
get the active view or 0
long onCmdSetGeoCoordinate(FXObject *, FXSelector, void *)
called when user enters a geo coordinate in the status bar
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.
long onCmdSetCartesianCoordinate(FXObject *, FXSelector, void *)
called when user enters a cartesian coordinate in the status bar
void buildLanguageMenu(FXMenuBar *menuBar)
long onCmdChangeLanguage(FXObject *, FXSelector, void *)
FXHorizontalFrame * myGeoFrame
FXTextField * myCartesianCoordinate
Coordinate fields for the current cartesian, geo-coordinate and test coordinates.
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
long onCmdFocusCoordinate(FXObject *, FXSelector, void *)
called when user focuses a coordinate field in the status bar
FXStatusBar * myStatusbar
The status bar.
FXTextField * myGeoCoordinate
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 getRotation() const =0
Returns the rotation of the canvas stored in this changer.
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
void processPendingTextureDeletes()
process pending texture deletions
FXbool makeCurrent()
A reimplementation due to some internal reasons.
virtual void showViewportEditor()
show viewport editor
GUIPerspectiveChanger & getChanger() const
get changer
std::vector< Decal > & getDecals()
The list of decals to show.
void clearDecals()
clear all decals
virtual void updatePositionInformationLabel() const
update position information labels
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:62
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp:789
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:400
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:151
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 setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
void setOptionEditable(const std::string &name, const bool value)
set option editable
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
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.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
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< NetconvertConfigFileExtension > NetconvertConfigFileExtensions
netconvert config file extensions
static StringBijection< OSMFileExtension > OSMFileExtensions
OSM file extensions.
static StringBijection< EdgeDataFileExtension > EdgeDataFileExtensions
edgedata file extensions
static StringBijection< NetconvertPlainFileExtension > NetconvertPlainFileExtensions
netconvert config 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 unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp:68
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:88
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
@ SEL_THREAD_EVENT
Definition fxexdefs.h:171
@ SEL_THREAD
Definition fxexdefs.h:153
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 * menuCheckShowPolygonSymbols
check checkable to show polygon symbols
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