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 myCartesianCoordinate->disable();
609 myCartesianCoordinate->setEditable(false);
610 // build test coordinates label (only if gui-testing is enabled)
612 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
613 myTestCoordinate->setHelpText(TL("Test coordinate"));
615 myTestFrame->hide();
616 // make the window a mdi-window
617 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
619 myMDIMenu = new FXMDIMenu(this, myMDIClient);
620 // build the message window
622 myMainSplitter->setSplit(1, 65);
623 // fill menu and tool bar
624 fillMenuBar();
625 // build additional threads
627 // check if create internal test system
628 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
629 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
630 }
631 // set the status bar
632 setStatusBarText(TL("Ready."));
633 // set the caption
634 setTitle(myTitlePrefix);
635 // set Netedit ICON
638 // build netedit Accelerators (hotkeys)
639 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
640}
641
642
643void
645 // set windows size and position
647 // set current folder
648 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
649 // Create main window
650 FXMainWindow::create();
651 // get text width
652 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
653 // adjust cartesian and geo frame
654 myCartesianFrame->setWidth(textWidth);
655 myGeoFrame->setWidth(textWidth);
656 // fill online maps
657 if (myOnlineMaps.empty()) {
658 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
659 myOnlineMaps["Google Maps"] = "https://www.google.com/maps/search/?api=1&query=%lat,%lon&zoom=19";
660 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
661 }
662 // show application windows
663 show(PLACEMENT_DEFAULT);
664 // check if maximice
665 if (!OptionsCont::getOptions().isSet("window-size")) {
666 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
667 maximize();
668 }
669 }
670}
671
672
674 closeAllWindows(true);
675 // Close icons
677 // Close gifs (Textures)
680 // delete visuals
681 delete myGLVisual;
682 // must delete menus to avoid segfault on removing accelerators
683 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
686 delete myFileMenuTLS;
687 delete myFileMenuEdgeTypes;
694 delete myFileMenu;
695 delete myModesMenu;
696 delete myEditMenu;
697 delete myLockMenu;
698 delete myProcessingMenu;
699 delete myLocatorMenu;
700 delete myToolsMenu;
701 delete myToolsDetectorMenu;
702 delete myToolsDistrictMenu;
703 delete myToolsDRTMenu;
705 delete myToolsImportMenu;
708 delete myToolsImportVissim;
709 delete myToolsImportVisum;
710 delete myToolsNetMenu;
711 delete myToolsRouteMenu;
712 delete myToolsOutputMenu;
713 delete myToolsShapes;
714 delete myToolsTLS;
715 delete myToolsTurnDefs;
717 delete myToolsXML;
718 delete myWindowMenu;
719 delete myHelpMenu;
720 delete myLanguageMenu;
721 // Delete load thread
722 delete myLoadThread;
723 if (myInternalTest) {
724 delete myInternalTest;
725 }
726 // drop all events
727 while (!myThreadEvents.empty()) {
728 // get the next event
731 delete e;
732 }
733 // delete undoList and dialog
734 delete myUndoList;
735}
736
737
738long
739GNEApplicationWindow::onCmdQuit(FXObject* sender, FXSelector sel, void* ptr) {
740 if (askSaveElements(sender, sel, ptr)) {
742 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
743 if (isMaximized()) {
744 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
745 } else {
746 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
747 }
748 getApp()->exit(0);
749 }
750 return 1;
751}
752
753
754long
755GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
756 GUIDialog_GLChosenEditor* chooser =
758 chooser->create();
759 chooser->show();
760 return 1;
761}
762
763
764long
765GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
766 // check if close current simulation
767 if (onCmdClose(0, 0, 0) == 1) {
768 // set flag
769 myStartedWithNewNet = true;
770 // create new network
772 }
773 return 1;
774}
775
776
777long
779 auto& neteditOptions = OptionsCont::getOptions();
780 // get netconvert file dialog
781 const GNEFileDialog netConvertFileDialog(this, TL("netconvert config file"),
786 // continue depending of dialog
787 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
788 // stop test before calling load thread
789 if (myInternalTest) {
791 }
792 // reset netedit options
793 myLoadThread->fillOptions(neteditOptions);
794 myLoadThread->setDefaultOptions(neteditOptions);
795 // set netconvert configuration file to load
796 neteditOptions.resetWritable();
797 neteditOptions.set("netccfg-file", netConvertFileDialog.getFilename());
798 // run load thread
800 // update view
801 update();
802 }
803 return 1;
804}
805
806
807long
808GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
809 // get netconvert filename
810 const GNEFileDialog networkFileDialog(this, TL("network file"),
815 // continue depending of dialog
816 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
817 // load network
818 loadNetwork(networkFileDialog.getFilename());
819 }
820 return 0;
821}
822
823
824long
825GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
826 // get OSM file dilaog
827 const GNEFileDialog OSMFileDialog(this, TL("OpenStreetMap file"),
832 // continue depending of dialog
833 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
834 loadOSM(OSMFileDialog.getFilename());
835 }
836 return 1;
837}
838
839
840long
841GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
842 auto& neteditOptions = OptionsCont::getOptions();
843 // get netconvert filename
844 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
849 // continue depending of dialog
850 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
851 // stop test before calling load thread
852 if (myInternalTest) {
854 }
855 // reset netedit options
856 myLoadThread->fillOptions(neteditOptions);
857 myLoadThread->setDefaultOptions(neteditOptions);
858 // set netedit configuration file to load
859 neteditOptions.resetWritable();
860 neteditOptions.set("netecfg-file", neteditConfigFileDialog.getFilename());
861 // run load thread
863 // update view
864 update();
865 }
866 return 1;
867}
868
869
870long
871GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
872 auto& neteditOptions = OptionsCont::getOptions();
873 // get netconvert filename
874 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
879 // continue depending of dialog
880 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
881 // stop test before calling load thread
882 if (myInternalTest) {
884 }
885 // reset options
886 myLoadThread->fillOptions(neteditOptions);
887 myLoadThread->setDefaultOptions(neteditOptions);
888 // set sumo configuration file to load
889 neteditOptions.resetWritable();
890 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
891 // run load thread
893 // update view
894 update();
895 }
896 return 1;
897}
898
899
900long
901GNEApplicationWindow::onCmdReloadNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
902 // get existent configuration file
904 auto& neteditOptions = OptionsCont::getOptions();
905 // get ignore flags
906 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
907 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
908 // check if close current simulation
909 if (onCmdClose(sender, sel, ptr) == 1) {
910 // stop test before calling load thread
911 if (myInternalTest) {
913 }
914 // reset options
915 myLoadThread->fillOptions(neteditOptions);
916 myLoadThread->setDefaultOptions(neteditOptions);
917 // restore ignore flags
918 neteditOptions.resetWritable();
919 if (ignoreAdditionals) {
920 neteditOptions.set("ignore.additionalelements", "true");
921 }
922 if (ignoreRoutes) {
923 neteditOptions.set("ignore.routeelements", "true");
924 }
925 // set netedit configuration file to load
926 neteditOptions.set("netecfg-file", neteditConfigFile);
927 // run load thread
929 // update view
930 update();
931 }
932 return 1;
933}
934
935
936long
937GNEApplicationWindow::onCmdReloadSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
938 // get existent sumo config file
940 auto& neteditOptions = OptionsCont::getOptions();
941 // get ignore flags
942 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
943 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
944 // check if close current simulation
945 if (onCmdClose(sender, sel, ptr) == 1) {
946 // stop test before calling load thread
947 if (myInternalTest) {
949 }
950 // reset options
951 myLoadThread->fillOptions(neteditOptions);
952 myLoadThread->setDefaultOptions(neteditOptions);
953 // restore ignore flags
954 neteditOptions.resetWritable();
955 if (ignoreAdditionals) {
956 neteditOptions.set("ignore.additionalelements", "true");
957 }
958 if (ignoreRoutes) {
959 neteditOptions.set("ignore.routeelements", "true");
960 }
961 // set configuration file to load
962 neteditOptions.set("sumocfg-file", sumoConfigFile);
963 // run load thread
965 // update view
966 update();
967 }
968 return 1;
969}
970
971
972long
973GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
974 // check if file exist
976 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
977 } else {
978 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
979 }
980}
981
982
983long
984GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
985 // check if file exist
987 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
988 } else {
989 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
990 }
991}
992
993
994long
995GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
996 // get netconvert filename
997 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
1002 // continue depending of dialog
1003 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
1004 // set tls type in bucket
1006 // load traffic lights
1007 loadTrafficLights("Loading");
1008 }
1009 return 1;
1010}
1011
1012
1013long
1015 // load traffic lights
1016 loadTrafficLights("Reloading");
1017 return 1;
1018}
1019
1020
1021long
1022GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
1023 // check if file exist
1025 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1026 } else {
1027 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1028 }
1029}
1030
1031
1032long
1033GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
1034 // get netconvert filename
1035 const GNEFileDialog edgeTypesFileDialog(this, TL("EdgeTypes file"),
1040 // continue depending of dialog
1041 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
1042 // set tls type in bucket
1044 // load edge types
1045 loadEdgeTypes("Loading");
1046 }
1047 return 1;
1048}
1049
1050
1051long
1052GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1053 // load edge types
1054 loadEdgeTypes("Reloading");
1055 return 0;
1056}
1057
1058
1059long
1060GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1061 // check if file exist
1063 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1064 } else {
1065 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1066 }
1067}
1068
1069
1070long
1071GNEApplicationWindow::onCmdSmartReload(FXObject* sender, FXSelector sel, void* ptr) {
1072 auto& neteditOptions = OptionsCont::getOptions();
1073 // get ignore flags
1074 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
1075 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
1076 // check if close current file
1077 if (onCmdClose(sender, sel, ptr) == 1) {
1078 // stop test before calling load thread
1079 if (myInternalTest) {
1081 }
1082 // store size, position and viewport
1084 // check if started with new net
1085 if (myStartedWithNewNet) {
1086 // preserve output file if defined in bucket
1088 // create new network
1090 // restore ignore flags
1091 neteditOptions.resetWritable();
1092 if (ignoreAdditionals) {
1093 neteditOptions.set("ignore.additionalelements", "true");
1094 }
1095 if (ignoreRoutes) {
1096 neteditOptions.set("ignore.routeelements", "true");
1097 }
1098 // restore output file in bucket if it was defined
1099 if (!outputFile.empty()) {
1101 }
1102 return 1;
1103 }
1104 // set flag
1105 myAmLoading = true;
1106 // get files
1110 // fill (reset) all options
1111 myLoadThread->fillOptions(neteditOptions);
1112 // set default options defined in GNELoadThread::setDefaultOptions(...)
1113 myLoadThread->setDefaultOptions(neteditOptions);
1114 // restore ignore flags
1115 neteditOptions.resetWritable();
1116 if (ignoreAdditionals) {
1117 neteditOptions.set("ignore.additionalelements", "true");
1118 }
1119 if (ignoreRoutes) {
1120 neteditOptions.set("ignore.routeelements", "true");
1121 }
1122 // set file to load
1123 if (neteditConfig.size() > 0) {
1124 // set netedit config
1126 // set status bar
1127 setStatusBarText(TLF("Reloading netedit config file '%'", neteditConfig));
1128 } else if (sumoConfig.size() > 0) {
1129 // set sumo config
1131 // set status bar
1132 setStatusBarText(TLF("Reloading sumo config file '%'", sumoConfig));
1133 } else if (networkFile.size() > 0) {
1134 // set network config
1136 // set status bar
1137 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1138 } else {
1139 // nothing to load
1140 return 0;
1141 }
1142 // load network
1144 }
1145 return 1;
1146}
1147
1148
1149long
1150GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1151 // declare strings
1152 FXString neteditConfig = TL("&Reload Netedit config");
1153 FXString sumoConfig = TL("&Reload Sumo config");
1154 FXString netFile = TL("&Reload Network");
1155 FXString reload = TL("&Reload");
1156 // check options
1157 if (myNet == nullptr) {
1158 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1159 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1160 } else if (myStartedWithNewNet) {
1161 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1162 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1164 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1165 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1167 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1168 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1170 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1171 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1172 } else {
1173 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1174 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1175 }
1176 return 1;
1177}
1178
1179
1180long
1181GNEApplicationWindow::onCmdReloadNetwork(FXObject* sender, FXSelector sel, void* ptr) {
1182 auto& neteditOptions = OptionsCont::getOptions();
1183 // get ignore flags
1184 const bool ignoreAdditionals = neteditOptions.getBool("ignore.additionalelements");
1185 const bool ignoreRoutes = neteditOptions.getBool("ignore.routeelements");
1186 // check if close current file
1187 if (onCmdClose(sender, sel, ptr) == 1) {
1188 // stop test before calling load thread
1189 if (myInternalTest) {
1191 }
1192 // store size, position and viewport
1194 // set flag
1195 myAmLoading = true;
1196 // get network
1197 const std::string networkFile = myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK);
1198 // fill (reset) all options
1199 myLoadThread->fillOptions(neteditOptions);
1200 // set default options defined in GNELoadThread::setDefaultOptions(...)
1201 myLoadThread->setDefaultOptions(neteditOptions);
1202 // restore ignore flags
1203 neteditOptions.resetWritable();
1204 if (ignoreAdditionals) {
1205 neteditOptions.set("ignore.additionalelements", "true");
1206 }
1207 if (ignoreRoutes) {
1208 neteditOptions.set("ignore.routeelements", "true");
1209 }
1210 // set file to load
1212 // set status bar
1213 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1214 // load network
1216 }
1217 return 1;
1218}
1219
1220
1221long
1222GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1223 if (myNet == nullptr) {
1224 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1225 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1228 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1229 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1230 } else {
1231 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1232 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1233 }
1234 return 1;
1235}
1236
1237
1238long
1239GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1240 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1241 if (myAmLoading) {
1242 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1243 } else if (onCmdClose(0, 0, 0) == 1) {
1244 // get filedata
1245 const std::string recentFile = ((const char*)fileData);
1246 // check if we're loading a network o a config
1247 if ((recentFile.find(".netecfg") != std::string::npos) ||
1248 (recentFile.find(".sumocfg") != std::string::npos) ||
1249 (recentFile.find(".netccfg") != std::string::npos)) {
1250 // load config
1251 loadConfiguration(recentFile);
1252 } else {
1253 // load network
1254 loadNetwork(recentFile);
1255 }
1256 }
1257 return 1;
1258}
1259
1260
1261long
1262GNEApplicationWindow::onCmdClose(FXObject* sender, FXSelector sel, void* ptr) {
1263 if (myViewNet == nullptr) {
1264 return 1;
1265 } else if (askSaveElements(sender, sel, ptr)) {
1266 // check if is reloading
1267 const bool reloading = (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOADNETWORK) ||
1268 (FXSELID(sel) == MID_HOTKEY_CTRL_R_RELOAD) ||
1269 (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG) ||
1270 (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG);
1271 // close all windows
1272 closeAllWindows(!reloading);
1273 // add a separator to the log
1275 // hide all menu commands
1279 // hide view options
1283 return 1;
1284 } else {
1285 return 0;
1286 }
1287}
1288
1289
1290long
1291GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1292 if (myMDIClient->numChildren() > 0) {
1293 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1294 if (w != nullptr) {
1295 w->onCmdLocate(nullptr, sel, nullptr);
1296 }
1297 }
1298 return 1;
1299}
1300
1301
1302long
1303GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1304 return myToolsMenuCommands.showTool(obj);
1305}
1306
1307
1308long
1309GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1311}
1312
1313
1314long
1317}
1318
1319
1320long
1321GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1322 // currently always enabled
1323 return 1;
1324}
1325
1326
1327long
1328GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1329 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1330 return 1;
1331}
1332
1333
1334long
1335GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1337 return 1;
1338}
1339
1340
1341long
1343 return 1;
1344}
1345
1346
1347long
1349 return 1;
1350}
1351
1352
1353long
1354GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1355 // create and open about dialog
1356 GNEAboutDialog(this);
1357 return 1;
1358}
1359
1360
1361long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1362 FXEvent* event = (FXEvent*)ptr;
1363 FXString string = GUIUserIO::clipped.c_str();
1364 setDNDData(FROM_CLIPBOARD, event->target, string);
1365 return 1;
1366}
1367
1368
1369long
1370GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1371 eventOccurred();
1372 return 1;
1373}
1374
1375
1376void
1378 // load events
1379 while (!myThreadEvents.empty()) {
1380 // get the next event
1383 // process
1384 switch (e->getOwnType()) {
1387 break;
1394 break;
1395 default:
1396 break;
1397 }
1398 delete e;
1399 }
1400}
1401
1402
1403void
1406 myAmLoading = false;
1407 GNEEvent_FileLoaded* fileLoadedEvent = static_cast<GNEEvent_FileLoaded*>(e);
1408 // check whether the loading was successful
1409 if (fileLoadedEvent->getNet() == nullptr) {
1410 // report failure
1411 std::string failureMessage;
1412 switch (fileLoadedEvent->getType()) {
1414 failureMessage = TLF("Loading of netedit config '%' failed", fileLoadedEvent->getFile());
1415 break;
1417 failureMessage = TLF("Loading of sumo config '%' failed", fileLoadedEvent->getFile());
1418 break;
1420 failureMessage = TLF("Loading of netconvert config '%' failed", fileLoadedEvent->getFile());
1421 break;
1423 failureMessage = TLF("Loading of network '%' failed", fileLoadedEvent->getFile());
1424 break;
1426 failureMessage = TLF("Loading of OSM Network '%' failed", fileLoadedEvent->getFile());
1427 break;
1429 failureMessage = TL("Invalid Options. Nothing loaded");
1430 break;
1432 failureMessage = TL("Could not build projection. Nothing loaded");
1433 break;
1435 failureMessage = TL("Invalid extension for config file. Only .netecfg, .sumocfg or .netccfg are allowed");
1436 break;
1437 default:
1438 failureMessage = TL("Invalid input network option. Load with either sumo/netedit/netconvert config or with --new option");
1439 break;
1440 }
1441 // write info
1442 WRITE_ERROR(failureMessage);
1443 setStatusBarText(failureMessage);
1444 if (OptionsCont::getOptions().getBool("quit-on-fail")) {
1445 closeAllWindows(true);
1446 getApp()->exit(1);
1447 } else {
1449 }
1450 } else {
1451 // report success
1452 std::string successMessage;
1453 switch (fileLoadedEvent->getType()) {
1455 myStartedWithNewNet = false;
1456 successMessage = TLF("Netedit config '%' loaded", fileLoadedEvent->getFile());
1457 break;
1459 myStartedWithNewNet = false;
1460 successMessage = TLF("Sumo config '%' loaded", fileLoadedEvent->getFile());
1461 break;
1463 myStartedWithNewNet = false;
1464 successMessage = TLF("Netconvert config '%' loaded", fileLoadedEvent->getFile());
1465 break;
1467 myStartedWithNewNet = false;
1468 successMessage = TLF("Network '%' loaded", fileLoadedEvent->getFile());
1469 break;
1471 myStartedWithNewNet = false;
1472 successMessage = TLF("OSM Network '%' loaded", fileLoadedEvent->getFile());
1473 break;
1475 myStartedWithNewNet = false;
1476 successMessage = TLF("Network '%' loaded through console", fileLoadedEvent->getFile());
1477 break;
1479 myStartedWithNewNet = true;
1480 successMessage = TL("New network successfully created");
1481 break;
1482 default:
1483 throw ProcessError("Invalid sucess mesage. Check if all cases were covered");
1484 }
1485 // write info
1486 WRITE_MESSAGE(successMessage);
1487 setStatusBarText(successMessage);
1488 // set new Net
1489 myNet = fileLoadedEvent->getNet();
1490 // set size and pos
1492 // build viewparent toolbar grips before creating view parent
1494 // initialise netedit View
1495 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1496 // create it maximized
1497 viewParent->maximize();
1498 // mark it as Active child
1499 myMDIClient->setActiveChild(viewParent);
1500 // cast pointer myViewNet
1501 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1502 // set settings in view
1503 if (viewParent->getView() && (fileLoadedEvent->getSettingsFile().size() > 0)) {
1504 GUISettingsHandler settings(getApp(), fileLoadedEvent->getSettingsFile(), true, true);
1505 settings.addSettings(viewParent->getView());
1506 viewParent->getView()->addDecals(settings.getDecals());
1507 settings.applyViewport(viewParent->getView());
1508 settings.setSnapshots(viewParent->getView());
1509 }
1510 // set network name on the caption
1511 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileLoadedEvent->getFile().c_str()));
1512 // force supermode network
1514 // update view port
1515 if (fileLoadedEvent->getViewportFromRegistry()) {
1516 Position off;
1517 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1518 Position p(off.x(), off.y(), 0);
1519 myViewNet->setViewportFromToRot(off, p, 0);
1520 }
1521 // load elements
1522 loadAdditionalElements("Loading");
1523 loadDemandElements("Loading");
1524 loadDataElements("Loading");
1525 loadMeanDataElements("Loading");
1526 // update checkboxes in edit menu to reflect loaded elements
1528 !OptionsCont::getOptions().getBool("ignore.additionalelements") ? TRUE : FALSE);
1530 !OptionsCont::getOptions().getBool("ignore.routeelements") ? TRUE : FALSE);
1531 // load selection
1532 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1534 }
1536 }
1537 // update app
1538 update();
1539 // restore focus
1540 setFocus();
1541}
1542
1543
1544void
1549
1550// ---------------------------------------------------------------------------
1551// private methods
1552// ---------------------------------------------------------------------------
1553
1554void
1556 // build file menu
1557 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1559 myFileMenuNeteditConfig = new FXMenuPane(this);
1560 myFileMenuSumoConfig = new FXMenuPane(this);
1561 myFileMenuTLS = new FXMenuPane(this);
1562 myFileMenuEdgeTypes = new FXMenuPane(this);
1563 myFileMenuAdditionals = new FXMenuPane(this);
1564 myFileMenuDemandElements = new FXMenuPane(this);
1565 myFileMenuDataElements = new FXMenuPane(this);
1566 myFileMenuMeanDataElements = new FXMenuPane(this);
1567 myFileMenuRecentNetworks = new FXMenuPane(this);
1568 myFileMenuRecentConfigs = new FXMenuPane(this);
1572 // add separator for recent files
1573 new FXMenuSeparator(myFileMenu);
1574 // build recent files
1577 new FXMenuSeparator(myFileMenu);
1578 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1579 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1580 // build modes menu
1581 myModesMenu = new FXMenuPane(this);
1583 myModesMenuTitle->setTarget(this);
1585 // build Supermode commands and hide it
1587 // add separator
1588 new FXSeparator(myModesMenu);
1589 // build modes menu commands
1591 // build edit menu
1592 myEditMenu = new FXMenuPane(this);
1594 // build edit menu commands
1596 // build separator
1597 new FXMenuSeparator(myEditMenu);
1598 // build view options
1602 // hide view options
1606 // build view menu commands
1608 // build separator
1609 new FXMenuSeparator(myEditMenu);
1610 // build front element menu commands
1612 // build separator
1613 new FXMenuSeparator(myEditMenu);
1614 // build open in sumo menu commands
1616 // build lock menu
1617 myLockMenu = new FXMenuPane(this);
1619 myLockMenuTitle->setTarget(this);
1621 // build lock menu commands
1623 // build processing menu (trigger netbuild computations)
1624 myProcessingMenu = new FXMenuPane(this);
1627 // build locate menu
1628 myLocatorMenu = new FXMenuPane(this);
1631 // build tools menu
1632 myToolsMenu = new FXMenuPane(this);
1633 myToolsAssignMenu = new FXMenuPane(this);
1634 myToolsDetectorMenu = new FXMenuPane(this);
1635 myToolsDistrictMenu = new FXMenuPane(this);
1636 myToolsDRTMenu = new FXMenuPane(this);
1637 myToolsEmissionsMenu = new FXMenuPane(this);
1638 myToolsImportMenu = new FXMenuPane(this);
1639 myToolsImportCityBrainMenu = new FXMenuPane(this);
1640 myToolsImportGTFSMenu = new FXMenuPane(this);
1641 myToolsImportVissim = new FXMenuPane(this);
1642 myToolsImportVisum = new FXMenuPane(this);
1643 myToolsNetMenu = new FXMenuPane(this);
1644 myToolsRouteMenu = new FXMenuPane(this);
1645 myToolsOutputMenu = new FXMenuPane(this);
1646 myToolsShapes = new FXMenuPane(this);
1647 myToolsTLS = new FXMenuPane(this);
1648 myToolsTriggerMenu = new FXMenuPane(this);
1649 myToolsTurnDefs = new FXMenuPane(this);
1650 myToolsVisualizationMenu = new FXMenuPane(this);
1651 myToolsXML = new FXMenuPane(this);
1653 // build tools menu cascasde
1654 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1655 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1656 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1658 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1667 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1668 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1669 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1673 // add separators between folders
1674 new FXMenuSeparator(myToolsMenu);
1675 new FXMenuSeparator(myToolsImportMenu);
1676 // create map with tool Menu panes and their associated folder
1683 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1685 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1686 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1693 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1696 // build tools
1698 // build windows menu
1699 myWindowMenu = new FXMenuPane(this);
1702 // build language menu
1704 // build help menu
1705 myHelpMenu = new FXMenuPane(this);
1708}
1709
1710
1711FXGLCanvas*
1713 // netedit uses only a single View, then return nullptr
1714 return nullptr;
1715}
1716
1717
1720 return 0;
1721}
1722
1723
1724double
1726 return 1;
1727}
1728
1729
1734
1735
1740
1741
1746
1747
1750 if (myViewNet && myViewNet->getViewParent()) {
1752 }
1753 return nullptr;
1754}
1755
1756
1759 if (myViewNet && myViewNet->getViewParent()) {
1761 }
1762 return nullptr;
1763}
1764
1765
1770
1771
1772void
1774 if (myViewNet && myViewNet->getNet()) {
1775 // show
1777 // set label depending of recomputing
1779 myRequireRecomputingButton->setText("");
1780 myRequireRecomputingButton->setTipText(TL("Network computed"));
1782 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1783 } else {
1784 myRequireRecomputingButton->setText(TL("Press F5"));
1785 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1787 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1788 }
1789 } else {
1790 // hide
1792 }
1793}
1794
1795
1796void
1797GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1798 // first check if net must be deleted
1799 if (myNet != nullptr) {
1800 delete myNet;
1801 myNet = nullptr;
1803 }
1804 // reset default filenames
1805 if (resetFilenames) {
1807 }
1808 // check if view has to be saved
1809 if (myViewNet) {
1811 // save decals and viewport for persistence (before they are cleared)
1815 // clear decals and release GPU textures
1816 if (myViewNet->makeCurrent()) {
1821 myViewNet->makeNonCurrent();
1822 }
1823 }
1824 // lock tracker
1825 myTrackerLock.lock();
1826 // remove trackers and other external windows
1827 while (!myGLWindows.empty()) {
1828 delete myGLWindows.front();
1829 }
1830 myViewNet = nullptr;
1831 for (FXMainWindow* const window : myTrackerWindows) {
1832 window->destroy();
1833 delete window;
1834 }
1835 myTrackerWindows.clear();
1836 // reset the caption
1837 setTitle(myTitlePrefix);
1838 // unlock tracker
1839 myTrackerLock.unlock();
1840 // remove coordinate information
1841 myGeoCoordinate->setText(TL("N/A"));
1842 myGeoCoordinate->disable();
1843 myGeoCoordinate->setEditable(false);
1844 myCartesianCoordinate->setText(TL("N/A"));
1845 myCartesianCoordinate->disable();
1846 myCartesianCoordinate->setEditable(false);
1847 myTestCoordinate->setText(TL("N/A"));
1848 myTestFrame->hide();
1850}
1851
1852
1853FXCursor*
1855 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1856}
1857
1858
1859void
1861 auto& neteditOptions = OptionsCont::getOptions();
1862 if (neteditOptions.getBool("new")) {
1863 // set flag
1864 myStartedWithNewNet = true;
1865 // save output file
1866 const auto outputFile = neteditOptions.getString("output-file");
1867 // create new network reset all options
1869 // check if define network file using this output file
1870 if (!outputFile.empty()) {
1872 }
1873 } else {
1874 // set flag
1875 myAmLoading = true;
1876 // set status bar
1877 setStatusBarText(TL("Loading console arguments."));
1878 // load console arguments
1880 // add it into recent networks and configs
1883 }
1886 }
1887 }
1888}
1889
1890
1891void
1893 auto& neteditOptions = OptionsCont::getOptions();
1894 // save windows size and position
1896 // enable loading flag and disable reloading flag
1897 myAmLoading = true;
1898 // recenter view
1899 gSchemeStorage.saveViewport(0, 0, -1, 0);
1900 // fill (reset) all options
1901 GNELoadThread::fillOptions(neteditOptions);
1902 // set default options defined in GNELoadThread::setDefaultOptions(...)
1903 GNELoadThread::setDefaultOptions(neteditOptions);
1904 // update status bar
1905 setStatusBarText(TL("Creating new network."));
1906 // create new network
1908 // update window
1909 update();
1910}
1911
1912
1913void
1914GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1915 if (networkFile.empty()) {
1916 WRITE_ERROR(TL("Trying to load an empty network."));
1917 } else {
1918 auto& neteditOptions = OptionsCont::getOptions();
1919 // stop test before calling load thread
1920 if (myInternalTest) {
1922 }
1923 // store size, position and viewport
1925 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1926 // set flag
1927 myAmLoading = true;
1928 // fill (reset) all options
1929 myLoadThread->fillOptions(neteditOptions);
1930 // set default options defined in GNELoadThread::setDefaultOptions(...)
1931 myLoadThread->setDefaultOptions(neteditOptions);
1932 // update default net file
1934 // set status bar
1935 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1936 // load network
1938 // add it into recent nets
1939 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1940 }
1941}
1942
1943
1944void
1945GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1946 if (configurationFile.empty()) {
1947 WRITE_ERROR(TL("Trying to load an empty configuration."));
1948 } else {
1949 auto& neteditOptions = OptionsCont::getOptions();
1950 // store size, position and viewport
1952 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1953 // set flag
1954 myAmLoading = true;
1955 // fill (reset) all options
1956 myLoadThread->fillOptions(neteditOptions);
1957 // set default options defined in GNELoadThread::setDefaultOptions(...)
1958 myLoadThread->setDefaultOptions(neteditOptions);
1959 // set file to load
1960 neteditOptions.resetWritable();
1961 neteditOptions.set("configuration-file", configurationFile);
1962 // set status bar
1963 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1964 // load config
1966 // add it into recent configs
1967 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1968 }
1969}
1970
1971
1972void
1973GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1974 auto& neteditOptions = OptionsCont::getOptions();
1975 // store size, position and viewport
1977 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1978 // set flag
1979 myAmLoading = true;
1980 // fill (reset) all options
1981 myLoadThread->fillOptions(neteditOptions);
1982 // set default options defined in GNELoadThread::setDefaultOptions(...)
1983 myLoadThread->setDefaultOptions(neteditOptions);
1984 // recommended osm options
1985 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1986 neteditOptions.set("osm-files", OSMFile);
1987 neteditOptions.set("geometry.remove", "true");
1988 neteditOptions.set("ramps.guess", "true");
1989 neteditOptions.set("junctions.join", "true");
1990 neteditOptions.set("tls.guess-signals", "true");
1991 neteditOptions.set("tls.discard-simple", "true");
1992 // open netedit options dialog
1993 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1994 // open wizard dialog
1995 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1996 // needed to set projection parameters
1997 NIFrame::checkOptions(neteditOptions);
1998 // set file to load
1999 neteditOptions.resetWritable();
2000 neteditOptions.set("configuration-file", OSMFile);
2001 // set status bar
2002 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
2003 // load config
2005 }
2006}
2007
2008void
2009GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
2010 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
2011 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
2012}
2013
2014
2015long
2016GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
2017 // open question dialog box
2018 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
2019 TL("Recompute with volatile options"),
2020 TL("Changes produced in the net due a recomputing with"),
2021 TL("volatile options cannot be undone. Continue?"));
2022 // check result
2023 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
2024 // save all elements
2025 onCmdSaveAdditionalElements(sender, sel, ptr);
2026 onCmdSaveDemandElements(sender, sel, ptr);
2027 onCmdSaveDataElements(sender, sel, ptr);
2028 onCmdSaveMeanDataElements(sender, sel, ptr);
2029 // compute with volatile options
2030 myNet->computeNetwork(this, true, true);
2032 }
2033 return 1;
2034}
2035
2036
2037bool
2040 myConsoleOptionsLoaded = false;
2041 return true;
2042 } else {
2043 return false;
2044 }
2045}
2046
2047
2052
2053
2058
2059
2060void
2064
2065
2066long
2067GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
2068 // check that currently there is a View
2069 if (myViewNet) {
2070 myViewNet->onCmdSetSupermode(sender, sel, ptr);
2071 }
2072 return 1;
2073}
2074
2075
2076long
2077GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
2078 // check that currently there is a View
2079 if (myViewNet) {
2080 myViewNet->onCmdSetMode(sender, sel, ptr);
2081 }
2082 return 1;
2083}
2084
2085
2086long
2087GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
2088 if (myViewNet) {
2089 // check if we're calling the functions using internal test
2090 switch (FXSELID(sel)) {
2093 break;
2094 case MID_GNE_LOCK_EDGE:
2096 break;
2097 case MID_GNE_LOCK_LANE:
2099 break;
2102 break;
2105 break;
2108 break;
2111 break;
2112 case MID_GNE_LOCK_WIRE:
2114 break;
2115 case MID_GNE_LOCK_TAZ:
2117 break;
2120 break;
2121 case MID_GNE_LOCK_POI:
2123 break;
2126 break;
2129 break;
2130 case MID_GNE_LOCK_ROUTE:
2132 break;
2135 break;
2138 break;
2141 break;
2142 case MID_GNE_LOCK_WALK:
2144 break;
2145 case MID_GNE_LOCK_RIDE:
2147 break;
2150 break;
2153 break;
2156 break;
2157 case MID_GNE_LOCK_STOP:
2159 break;
2162 break;
2165 break;
2168 break;
2169 default:
2170 break;
2171 }
2173 }
2174 return 1;
2175}
2176
2177
2178long
2179GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2180 // lock all
2183 return 1;
2184}
2185
2186
2187long
2189 // unlock all
2192 return 1;
2193}
2194
2195
2196long
2198 if (myViewNet) {
2199 myViewNet->update();
2200 }
2201 return 1;
2202}
2203
2204
2205long
2206GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2207 if (myViewNet) {
2209 // supermode network
2215 myLockMenuTitle->enable();
2216 } else {
2217 myLockMenuTitle->disable();
2218 }
2220 // supermode demand
2225 myLockMenuTitle->enable();
2226 } else {
2227 myLockMenuTitle->disable();
2228 }
2230 // supermode data
2234 myLockMenuTitle->enable();
2235 } else {
2236 myLockMenuTitle->disable();
2237 }
2238 } else {
2239 myLockMenuTitle->disable();
2240 }
2241 } else {
2242 myLockMenuTitle->disable();
2243 }
2244 return 1;
2245}
2246
2247
2248long
2249GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2250 // first check if there is a view
2251 if (myViewNet) {
2252 // process depending of supermode
2254 // check what FXMenuCommand was called
2255 switch (FXSELID(sel)) {
2257 myNet->computeNetwork(this, true, false);
2259 break;
2261 computeJunctionWithVolatileOptions(sender, sel, ptr);
2262 break;
2265 break;
2268 break;
2271 break;
2272 default:
2273 break;
2274 }
2276 // check what FXMenuCommand was called
2277 switch (FXSELID(sel)) {
2281 break;
2284 break;
2287 break;
2290 break;
2293 break;
2294 default:
2295 break;
2296 }
2297 }
2298 // refresh to update undo-redo button
2299 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2300 }
2301 return 1;
2302}
2303
2304
2305long
2306GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2307 // get extra arguments
2308 std::string extraArg;
2310 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2311 }
2312 FXRegistry reg("SUMO netedit", "netedit");
2313 std::string netedit = "netedit";
2314 const char* sumoPath = getenv("SUMO_HOME");
2315 if (sumoPath != nullptr) {
2316#ifdef DEBUG
2317 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2318#else
2319 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2320#endif
2321 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2322 netedit = "\"" + newPath + "\"";
2323 }
2324 }
2325 std::string cmd = netedit + extraArg;
2326 // start in background
2327#ifndef WIN32
2328 cmd = cmd + " &";
2329#else
2330 // see "help start" for the parameters
2331 cmd = "start /B \"\" " + cmd;
2332#endif
2333 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2334 // yay! fun with dangerous commands... Never use this over the internet
2336 return 1;
2337}
2338
2339
2340long
2341GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2342 // input parameters
2343 std::string inputParameters;
2344 // if we have only a network and no SumoConfig defined, then load directly without creating a SumoConfig
2347 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE)))) {
2348 // force save network
2349 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2350 // network wasn't saved, then stop
2351 return 0;
2352 }
2353 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2354 // write info
2356 } else {
2357 // force save SumoConfig
2358 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2359 // SumoConfig wasn't saved, then stop
2360 return 0;
2361 }
2362 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2363 // check if ignore additional or demand elements
2364 if (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) {
2365 inputParameters += " --ignore.additionalelements";
2366 }
2367 if (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) {
2368 inputParameters += " --ignore.routeelements";
2369 }
2370 // write info
2371 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2372 }
2373 // save current viewport in registry
2374 FXRegistry reg("SUMO GUI", "sumo-gui");
2375 reg.read();
2376 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2377 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2378 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2379 reg.write();
2380 // declare executable
2381 std::string sumoGuiExecutable = "sumo-gui";
2382 // if SUMO_HOME is defined, update executable
2383 const char* sumoHome = getenv("SUMO_HOME");
2384 if (sumoHome != nullptr) {
2385 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2386 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2387 sumoGuiExecutable = "\"" + newPath + "\"";
2388 }
2389 }
2390 // declare command
2391 std::string cmd = sumoGuiExecutable + inputParameters;
2392 // start in background
2393#ifndef WIN32
2394 cmd = cmd + " &";
2395#else
2396 // see "help start" for the parameters
2397 cmd = "start /B \"\" " + cmd;
2398#endif
2399 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2400 // yay! fun with dangerous commands... Never use this over the internet
2402 return 1;
2403}
2404
2405
2406long
2407GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2408 // check that view exists
2409 if (myViewNet) {
2410 // first check if we're selecting a subset of edges in TAZ Frame
2412 // clear current selection
2414 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2415 // check if stop select parent
2417 // and stop select paretn
2419 } else {
2420 // clear inspected elements
2422 }
2423 } else {
2424 // abort current operation
2426 }
2427 }
2428 return 1;
2429}
2430
2431
2432long
2433GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2434 // check that view exists
2435 if (myViewNet) {
2437 }
2438 return 1;
2439}
2440
2441
2442long
2443GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2444 // check that view exists
2445 if (myViewNet) {
2447 }
2448 return 1;
2449}
2450
2451
2452long
2453GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2454 // check that view exists
2455 if (myViewNet) {
2457 }
2458 return 1;
2459}
2460
2461
2462long
2463GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2464 // check that view exists
2465 if (myViewNet) {
2467 }
2468 return 1;
2469}
2470
2471
2472long
2474 // check that view exists
2475 if (myViewNet) {
2477 }
2478 return 1;
2479}
2480
2481
2482long
2483GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2484 // check that view exists
2485 if (myViewNet) {
2487 // refresh flow frames
2488 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2490 }
2491 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2493 }
2494 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2496 }
2497 // refresh inspector frame
2498 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2500 }
2501 }
2502 return 1;
2503}
2504
2505
2506long
2507GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2508 // check that view exists
2509 if (myViewNet) {
2511 }
2512 return 1;
2513}
2514
2515
2516long
2517GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2520 }
2521 return 1;
2522}
2523
2524
2525long
2526GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2527 // enable or disable sender element depending of viewNet
2528 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2529}
2530
2531
2532long
2535 return 1;
2536}
2537
2538
2539long
2540GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2541 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2542 return 1;
2543}
2544
2545
2546long
2547GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2549}
2550
2551
2552long
2553GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2554 // check that view exists
2555 if (myViewNet) {
2557 }
2558 return 1;
2559}
2560
2561
2562long
2563GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2564 // check that view exists
2565 if (myViewNet) {
2567 }
2568 return 1;
2569}
2570
2571
2572long
2573GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2574 // check that view exists
2575 if (myViewNet) {
2576 // Call manually toggle grid function
2577 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2578 }
2579 return 1;
2580}
2581
2582
2583long
2584GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2585 // check that view exists
2586 if (myViewNet) {
2587 // Call manually toggle junction shape function
2588 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2589 }
2590 return 1;
2591}
2592
2593
2594long
2596 if (myViewNet) {
2597 // check if all element are front
2598 bool allFront = true;
2599 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2600 if (!AC->isMarkedForDrawingFront()) {
2601 allFront = false;
2602 break;
2603 }
2604 }
2605 // first unfront all elements
2607 // only mark front elements if we have at least one non-front element
2608 if (!allFront) {
2609 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2610 AC->markForDrawingFront();
2611 }
2612 }
2613 myViewNet->update();
2615 }
2616 return 1;
2617}
2618
2619
2620long
2621GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2622 // first check that we have a ViewNet
2623 if (myViewNet) {
2624 // first check what selector was called
2625 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2626 // check that numericalKeyPressed is valid
2627 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2628 return 0;
2629 }
2630 // declare a vector in which save visible menu commands
2631 std::vector<MFXCheckableButton*> visibleMenuCommands;
2632 // get common, network and demand visible menu commands
2636 // now check that numericalKeyPressed isn't greater than visible view options
2637 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2638 return 0;
2639 }
2640 // toggle edit options
2642 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2643 return 1;
2645 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2646 return 1;
2648 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2649 return 1;
2650 }
2651 }
2652 return 0;
2653}
2654
2655
2656long
2657GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2658 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2659 return 1;
2660}
2661
2662
2663long
2664GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2665 // update in every version
2666 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2667 return 1;
2668}
2669
2670
2671long
2672GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2673 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2674 return 1;
2675}
2676
2677
2678long
2681 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2682 } else {
2683 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2684 }
2685}
2686
2687
2688long
2689GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2690 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2691 myAllowUndoRedo = true;
2692 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2693 } else {
2694 myAllowUndoRedo = false;
2695 // drop undo-redo list after changing flag
2696 myUndoList->clear();
2697 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2698 }
2699}
2700
2701
2702long
2704 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2706 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2707 } else {
2708 myAllowUndoRedoLoading = false;
2709 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2710 }
2711}
2712
2713
2714long
2715GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2716 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2717 return 1;
2718}
2719
2720
2721long
2722GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2723 // create and open feedback dialog
2724 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2725 feedback->create();
2726 feedback->show(PLACEMENT_OWNER);
2727 return 1;
2728}
2729
2730
2731long
2733 auto& neteditOptions = OptionsCont::getOptions();
2734 // open netedit option dialog
2735 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2736 // continue depending of result
2737 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2738 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2739 NBFrame::checkOptions(neteditOptions);
2740 NWFrame::checkOptions(neteditOptions);
2741 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2742 // check if mark netedit config as unsaved
2743 if (neteditOptionsDialog.isOptionModified() && myNet) {
2745 // aditionally, check if network requires saving
2746 if (neteditOptionsDialog.requireSaveNetwork()) {
2749 }
2750 }
2751 }
2752 return 1;
2753}
2754
2755
2756long
2758 // open sumo option dialog
2759 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2760 // continue depending of result
2761 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2763 }
2764 return 1;
2765}
2766
2767
2768long
2771 return 1;
2772}
2773
2774
2775long
2777 // open netgenerate options dialog
2779 return 1;
2780}
2781
2782
2783long
2784GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2785 // Check conditions
2786 if (myViewNet == nullptr) {
2787 return 0;
2788 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2789 return 0;
2790 } else {
2791 // check supermode (currently ignore supermode data)
2794 // abort if user doesn't press "yes"
2796 return 0;
2797 }
2798 }
2800 // update current show frame after undo
2803 }
2804 // update file bucket options (needed to maintain integrity)
2806 // update manually undo/redo menu commands (see #6005)
2809 // update toolbar undo-redo buttons
2811 return 1;
2812 }
2813}
2814
2815
2816long
2817GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2818 // Check conditions
2819 if (myViewNet == nullptr) {
2820 return 0;
2821 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2822 return 0;
2823 } else {
2824 // check supermode (currently ignore supermode data)
2827 // abort if user doesn't press "yes"
2829 return 0;
2830 }
2831 }
2833 // update current show frame after redo
2836 }
2837 // update file bucket options (needed to maintain integrity)
2839 // update manually undo/redo menu commands (see #6005)
2842 // update toolbar undo-redo buttons
2844 return 1;
2845 }
2846}
2847
2848
2849long
2851 // open UndoList Dialog
2852 GNEUndoListDialog(this);
2853 return 1;
2854}
2855
2856
2857long
2858GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2859 // check if net exist and there is something to undo/redo
2860 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2861 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2862 } else {
2863 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2864 }
2865 return 1;
2866}
2867
2868
2869long
2871 // first check viewNet
2873 // update demand path calculator
2875 }
2876 return 1;
2877}
2878
2879
2880long
2881GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2882 // Prepared for #6042
2883 return 1;
2884}
2885
2886
2887long
2888GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2889 // Prepared for #6042
2890 return 1;
2891}
2892
2893
2894long
2895GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2896 // Prepared for #6042
2897 return 1;
2898}
2899
2900
2901long
2902GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2903 // first check if myViewNet exist
2904 if (myViewNet) {
2905 // call set template in inspector frame
2907 }
2908 return 1;
2909}
2910
2911
2912long
2913GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2914 // first check if myViewNet exist
2915 if (myViewNet) {
2916 // call copy template in inspector frame
2918 }
2919 return 1;
2920}
2921
2922
2923long
2924GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2925 // first check if myViewNet exist
2926 if (myViewNet) {
2927 // call clear template in inspector frame
2929 }
2930 return 1;
2931}
2932
2933
2934long
2935GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2936 // check if net exist
2937 if (myNet) {
2939 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2940 } else {
2942 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2943 }
2944}
2945
2946
2947long
2948GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2949 // check if at least there is one edge in the network
2950 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2951 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2952 } else {
2953 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2954 }
2955}
2956
2957
2958long
2959GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2960 // check if net, viewnet and front attribute exist
2961 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2962 // check if all element are front
2963 bool allFront = true;
2964 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2965 if (!AC->isMarkedForDrawingFront()) {
2966 allFront = false;
2967 break;
2968 }
2969 }
2970 // set button text depending of all selected
2971 if (allFront) {
2972 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2973 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2974 } else {
2975 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2976 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2977 }
2978 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2979 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2980 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2981 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2982 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2983 } else {
2984 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2985 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2986 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2987 }
2988}
2989
2990
2991long
2992GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2993 if (myNet == nullptr) {
2994 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2995 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2996 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2997 } else {
2998 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2999 }
3000}
3001
3002
3003long
3004GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
3005 if (myNet == nullptr) {
3006 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3008 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3009 } else {
3010 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3011 }
3012}
3013
3014
3015long
3017 if (myNet == nullptr) {
3018 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3019 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
3020 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3021 } else {
3022 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3023 }
3024}
3025
3026
3027long
3028GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
3029 if (myNet == nullptr) {
3030 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3031 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
3032 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3033 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
3034 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3035 } else {
3036 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3037 }
3038}
3039
3040
3041long
3042GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
3043 if (myNet == nullptr) {
3044 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3045 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
3046 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3047 } else {
3048 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3049 }
3050
3051}
3052
3053
3054long
3055GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
3056 if (myNet == nullptr) {
3057 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3059 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3060 } else {
3061 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3062 }
3063}
3064
3065
3066long
3067GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
3068 if (myNet == nullptr) {
3069 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3070 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
3071 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3072 } else {
3073 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3074 }
3075
3076}
3077
3078
3079long
3080GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
3081 if (myNet == nullptr) {
3082 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3083 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
3084 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3085 } else {
3086 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3087 }
3088
3089}
3090
3091
3092long
3093GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
3094 if (myNet == nullptr) {
3095 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3096 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
3097 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3098 } else {
3099 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3100 }
3101}
3102
3103
3104long
3106 if (myNet == nullptr) {
3107 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3108 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
3109 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3110 } else {
3111 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3112 }
3113
3114}
3115
3116
3117long
3118GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
3119 return myUndoList->onUpdUndo(sender, sel, ptr);
3120}
3121
3122
3123long
3124GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
3125 return myUndoList->onUpdRedo(sender, sel, ptr);
3126}
3127
3128
3129long
3130GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
3131 // first check viewNet
3132 if (myViewNet) {
3133 // check supermode network
3135 // disable
3136 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3138 // disable
3139 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3140 } else {
3141 // enable
3142 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3143 }
3144 } else {
3145 // disable
3146 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3147 }
3148}
3149
3150
3151long
3152GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3153 // check viewNet
3154 if (myViewNet) {
3155 // continue depending of selector
3156 switch (FXSELID(sel)) {
3157 // Network
3159 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3161 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3163 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3165 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3167 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3169 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3171 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3173 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3175 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3177 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3179 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3181 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3183 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3185 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3187 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3189 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3191 return myViewNet->onCmdToggleShowPolygonSymbols(sender, sel, ptr);
3193 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3194 // Demand
3196 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3198 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3200 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3202 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3204 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3206 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3208 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3210 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3212 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3214 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3216 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3217 // Data
3219 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3221 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3223 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3225 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3227 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3229 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3231 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3233 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3234 default:
3235 return 0;
3236 }
3237 } else {
3238 return 0;
3239 }
3240}
3241
3242
3243long
3244GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3245 // get menuCheck
3246 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3247 // check viewNet
3248 if (myViewNet && menuCheck) {
3249 // continue depending of selector
3250 switch (FXSELID(sel)) {
3251 // Network
3254 menuCheck->setCheck(TRUE);
3255 } else {
3256 menuCheck->setCheck(FALSE);
3257 }
3258 break;
3261 menuCheck->setCheck(TRUE);
3262 } else {
3263 menuCheck->setCheck(FALSE);
3264 }
3265 break;
3268 menuCheck->setCheck(TRUE);
3269 } else {
3270 menuCheck->setCheck(FALSE);
3271 }
3272 break;
3275 menuCheck->setCheck(TRUE);
3276 } else {
3277 menuCheck->setCheck(FALSE);
3278 }
3279 break;
3282 menuCheck->setCheck(TRUE);
3283 } else {
3284 menuCheck->setCheck(FALSE);
3285 }
3286 break;
3289 menuCheck->setCheck(TRUE);
3290 } else {
3291 menuCheck->setCheck(FALSE);
3292 }
3293 break;
3296 menuCheck->setCheck(TRUE);
3297 } else {
3298 menuCheck->setCheck(FALSE);
3299 }
3300 break;
3303 menuCheck->setCheck(TRUE);
3304 } else {
3305 menuCheck->setCheck(FALSE);
3306 }
3307 break;
3310 menuCheck->setCheck(TRUE);
3311 } else {
3312 menuCheck->setCheck(FALSE);
3313 }
3314 break;
3317 menuCheck->setCheck(TRUE);
3318 } else {
3319 menuCheck->setCheck(FALSE);
3320 }
3321 break;
3324 menuCheck->setCheck(TRUE);
3325 } else {
3326 menuCheck->setCheck(FALSE);
3327 }
3328 break;
3331 menuCheck->setCheck(TRUE);
3332 } else {
3333 menuCheck->setCheck(FALSE);
3334 }
3335 break;
3338 menuCheck->setCheck(TRUE);
3339 } else {
3340 menuCheck->setCheck(FALSE);
3341 }
3342 break;
3345 menuCheck->setCheck(TRUE);
3346 } else {
3347 menuCheck->setCheck(FALSE);
3348 }
3349 break;
3352 menuCheck->setCheck(TRUE);
3353 } else {
3354 menuCheck->setCheck(FALSE);
3355 }
3356 break;
3359 menuCheck->setCheck(TRUE);
3360 } else {
3361 menuCheck->setCheck(FALSE);
3362 }
3363 break;
3366 menuCheck->setCheck(TRUE);
3367 } else {
3368 menuCheck->setCheck(FALSE);
3369 }
3370 break;
3371 // Demand
3374 menuCheck->setCheck(TRUE);
3375 } else {
3376 menuCheck->setCheck(FALSE);
3377 }
3378 break;
3381 menuCheck->setCheck(TRUE);
3382 } else {
3383 menuCheck->setCheck(FALSE);
3384 }
3385 break;
3388 menuCheck->setCheck(TRUE);
3389 } else {
3390 menuCheck->setCheck(FALSE);
3391 }
3392 break;
3395 menuCheck->setCheck(TRUE);
3396 } else {
3397 menuCheck->setCheck(FALSE);
3398 }
3399 break;
3402 menuCheck->setCheck(TRUE);
3403 } else {
3404 menuCheck->setCheck(FALSE);
3405 }
3406 break;
3409 menuCheck->setCheck(TRUE);
3410 } else {
3411 menuCheck->setCheck(FALSE);
3412 }
3413 break;
3416 menuCheck->setCheck(TRUE);
3417 } else {
3418 menuCheck->setCheck(FALSE);
3419 }
3420 // special case for lock persons
3422 menuCheck->enable();
3423 } else {
3424 menuCheck->disable();
3425 }
3426 break;
3429 menuCheck->setCheck(TRUE);
3430 } else {
3431 menuCheck->setCheck(FALSE);
3432 }
3433 break;
3436 menuCheck->setCheck(TRUE);
3437 } else {
3438 menuCheck->setCheck(FALSE);
3439 }
3440 // special case for lock containers
3442 menuCheck->enable();
3443 } else {
3444 menuCheck->disable();
3445 }
3446 break;
3449 menuCheck->setCheck(TRUE);
3450 } else {
3451 menuCheck->setCheck(FALSE);
3452 }
3453 break;
3456 menuCheck->setCheck(TRUE);
3457 } else {
3458 menuCheck->setCheck(FALSE);
3459 }
3460 break;
3461 // Data
3464 menuCheck->setCheck(TRUE);
3465 } else {
3466 menuCheck->setCheck(FALSE);
3467 }
3468 break;
3471 menuCheck->setCheck(TRUE);
3472 } else {
3473 menuCheck->setCheck(FALSE);
3474 }
3475 break;
3478 menuCheck->setCheck(TRUE);
3479 } else {
3480 menuCheck->setCheck(FALSE);
3481 }
3482 break;
3485 menuCheck->setCheck(TRUE);
3486 } else {
3487 menuCheck->setCheck(FALSE);
3488 }
3489 break;
3492 menuCheck->setCheck(TRUE);
3493 } else {
3494 menuCheck->setCheck(FALSE);
3495 }
3496 break;
3499 menuCheck->setCheck(TRUE);
3500 } else {
3501 menuCheck->setCheck(FALSE);
3502 }
3503 break;
3504
3507 menuCheck->setCheck(TRUE);
3508 } else {
3509 menuCheck->setCheck(FALSE);
3510 }
3511 break;
3514 menuCheck->setCheck(TRUE);
3515 } else {
3516 menuCheck->setCheck(FALSE);
3517 }
3518 break;
3519 default:
3520 break;
3521 }
3522 }
3523 return 0;
3524}
3525
3526
3527long
3528GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3529 auto& neteditOptions = OptionsCont::getOptions();
3530 // check if we're forcing to saving additionals
3532 neteditOptions.getBool("force-saving")) {
3533 WRITE_MESSAGE(TL("Force save network"));
3534 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3535 // nothing to save
3536 return 1;
3537 }
3538 // first check if we have to set the output filename
3541 }
3542 // function onCmdSaveNetworkAs must be executed if this is the first save
3544 return onCmdSaveNetworkAs(sender, sel, ptr);
3545 } else {
3546 // always recompute before saving
3547 myNet->computeNetwork(this);
3548 bool saved = false;
3549 try {
3550 // obtain invalid networkElements (currently only edges or crossings
3551 std::vector<GNENetworkElement*> invalidNetworkElements;
3552 // iterate over crossings and edges
3553 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3554 if (!edge.second->isNetworkElementValid()) {
3555 invalidNetworkElements.push_back(edge.second);
3556 }
3557 }
3558 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3559 if (!crossing.second->isNetworkElementValid()) {
3560 invalidNetworkElements.push_back(crossing.second);
3561 }
3562 }
3563 // if there are invalid network elements, open GNEFixNetworkElements
3564 if (invalidNetworkElements.size() > 0) {
3565 // create fix network elements dialog
3566 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3567 // continue depending of result
3568 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3569 // Save network
3570 myNet->saveNetwork();
3571 saved = true;
3572 } else {
3573 // stop
3574 return 0;
3575 }
3576 } else {
3577 // Save network
3578 myNet->saveNetwork();
3579 saved = true;
3580 }
3581 } catch (IOError& e) {
3582 // open error message box
3583 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3584 }
3585 if (saved) {
3586 // write info
3588 // After saving a net successfully, add it into Recent Nets list.
3591 } else {
3594 return 0;
3595 }
3596 return 1;
3597 }
3598}
3599
3600
3601long
3602GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3603 // get network file file
3604 const GNEFileDialog networkFileDialog(this, TL("network file"),
3609 // continue depending of dialog
3610 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3611 // update default network file
3613 // update netedit title with the network name
3614 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3615 // enable save network
3617 // save network
3618 return onCmdSaveNetwork(sender, sel, ptr);
3619 } else {
3620 return 0;
3621 }
3622}
3623
3624
3625long
3626GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3627 // first check if we have to set the output filename
3630 }
3631 // function onCmdSaveNetworkAs must be executed if this is the first save
3633 return onCmdSavePlainXMLAs(sender, sel, ptr);
3634 } else {
3635 // start saving plain XML
3636 getApp()->beginWaitCursor();
3637 try {
3638 // we use the prefix instead the netconvert config
3640 // save plain xml
3641 myNet->savePlain(plainXMLPrefix, OptionsCont::getOptions());
3642 // write info
3643 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3644 } catch (IOError& e) {
3645 // open message box
3646 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3647 }
3648 // end saving plain XML
3649 getApp()->endWaitCursor();
3650 // set focus again in viewNet
3651 myViewNet->setFocus();
3652 }
3653 return 1;
3654}
3655
3656
3657long
3658GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3659 // get neteditConfig filename
3660 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3665 // continue depending of dialog
3666 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3667 // update default netconvert file
3669 // save plain xml
3670 return onCmdSavePlainXML(sender, sel, ptr);
3671 }
3672 return 1;
3673}
3674
3675
3676long
3678 // get neteditConfig filename
3679 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3684 // continue depending of dialog
3685 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3686 getApp()->beginWaitCursor();
3687 try {
3688 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3689 // write info
3690 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3691 } catch (IOError& e) {
3692 // opening error message
3693 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3694 }
3695 getApp()->endWaitCursor();
3696 // set focus again in viewNet
3697 myViewNet->setFocus();
3698 }
3699 return 1;
3700}
3701
3702
3703long
3704GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3705 // first check if netedit config is already saved
3707 return 1;
3708 }
3709 // Check if configuration file was already set at start of netedit or with a previous save
3711 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3712 } else {
3713 // save all elements giving automatic names based on patter if their file isn't defined
3714 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3715 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3716 return 0;
3717 }
3718 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3719 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3720 return 0;
3721 }
3722 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3723 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3724 return 0;
3725 }
3726 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3727 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3728 return 0;
3729 }
3730 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3731 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3732 return 0;
3733 }
3734 // get netedit config file
3736 // configuration
3737 std::ofstream out(XMLSubSys::transcodeToLocal(neteditConfigFile));
3738 if (out.good()) {
3739 const auto& neteditOptions = OptionsCont::getOptions();
3740 // write netedit config
3741 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3742 // write info
3743 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3744 // config saved
3746 // After saving a config successfully, add it into recent configs
3747 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3748 // if we have a sumo config defined, save it also
3750 // get SumoConfig file
3752 std::ofstream sumoCfg(XMLSubSys::transcodeToLocal(sumoConfigFile));
3753 if (sumoCfg.good()) {
3754 // before saving sumo config, check if force enable option junction-taz
3756 mySumoOptions.set("junction-taz", "true");
3757 }
3758 // write SUMO config
3759 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3760 // write info
3761 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3762 // After saving a config successfully, add it into recent configs
3763 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3764 }
3765 }
3766 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3767 if (neteditOptions.getBool("autosave-netconvert-file")) {
3768 onCmdSavePlainXML(sender, sel, ptr);
3769 }
3770 } else {
3771 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3772 }
3773 out.close();
3774 return 1;
3775 }
3776}
3777
3778
3779long
3780GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3781 // get neteditConfig filename
3782 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3787 // continue depending of dialog
3788 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3789 // set file in file bucket handler
3791 // mark netedit config as unsaved
3793 // continue saving netedit config
3794 return onCmdSaveNeteditConfig(sender, sel, ptr);
3795 } else {
3796 return 0;
3797 }
3798}
3799
3800
3801long
3802GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3803 // check if enable or disable save netedit config button
3804 if (myNet == nullptr) {
3805 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3806 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3807 // a config requires at least ONE edge
3808 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3810 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3811 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3812 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3813 } else {
3814 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3815 }
3816 // check if enable/disable save individual files
3817 if (myNet) {
3821 } else {
3823 }
3824 }
3825 return 1;
3826}
3827
3828
3829long
3830GNEApplicationWindow::onUpdSaveNeteditConfigAs(FXObject* sender, FXSelector, void*) {
3831 // check if enable or disable save netedit config button
3832 if (myNet == nullptr) {
3833 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3834 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3835 // a config requires at least ONE edge
3836 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3837 } else {
3838 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3839 }
3840}
3841
3842
3843long
3844GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3845 // obtain netedit option container
3846 auto& neteditOptions = OptionsCont::getOptions();
3847 // reset containers
3848 neteditOptions.resetWritable();
3850 // Check if configuration file was already set at start of netedit or with a previous save
3852 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3853 } else {
3854 // save all elements giving automatic names based on patter in their file isn't defined
3855 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3856 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3857 return 0;
3858 }
3859 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3860 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3861 return 0;
3862 }
3863 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3864 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3865 return 0;
3866 }
3867 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3868 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3869 return 0;
3870 }
3871 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3872 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3873 return 0;
3874 }
3875 // get SumoConfig file
3877 // confinguration
3878 std::ofstream out(XMLSubSys::transcodeToLocal(sumoConfigFile));
3879 if (out.good()) {
3880 // before saving sumo config, check if force enable option junction-taz
3882 mySumoOptions.set("junction-taz", "true");
3883 }
3884 // write SUMO config
3885 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3886 // write info
3887 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3888 // After saving a config successfully, add it into recent configs
3889 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3890 // if we have a netedit cong defined, save it also
3892 // get netedit config file
3894 // configuration
3895 std::ofstream neteditCfg(XMLSubSys::transcodeToLocal(neteditConfigFile));
3896 if (neteditCfg.good()) {
3897 // write netedit config
3898 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3899 // write info
3900 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3901 // config saved
3903 // After saving a config successfully, add it into recent configs
3904 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3905 }
3906 }
3907 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3908 if (neteditOptions.getBool("autosave-netconvert-file")) {
3909 onCmdSavePlainXML(sender, sel, ptr);
3910 }
3912 } else {
3913 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3914 }
3915 out.close();
3916 return 1;
3917 }
3918}
3919
3920
3921long
3922GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3923 // get sumoConfig filename
3924 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3929 // continue depending of dialog
3930 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3931 // set sumo config
3933 // mark netedit config as unsaved
3935 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3937 return onCmdSaveNeteditConfig(sender, sel, ptr);
3938 } else {
3940 return onCmdSaveSumoConfig(sender, sel, ptr);
3941 }
3942 } else {
3943 return 0;
3944 }
3945}
3946
3947
3948long
3949GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3950 if (myNet == nullptr) {
3951 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3952 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3953 // a config requires at least ONE edge
3954 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3956 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3957 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3958 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3959 } else {
3960 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3961 }
3962}
3963
3964
3965long
3966GNEApplicationWindow::onUpdSaveSumoConfigAs(FXObject* sender, FXSelector, void*) {
3967 if (myNet == nullptr) {
3968 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3969 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3970 // a config requires at least ONE edge
3971 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3972 } else {
3973 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3974 }
3975}
3976
3977long
3978GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3979 // Check if TLS Programs file was already set at start of netedit or with a previous save
3981 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3982 } else {
3983 // Start saving TLS Programs
3984 getApp()->beginWaitCursor();
3985 try {
3986 // compute before saving
3987 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3989 // write info
3991 } catch (IOError& e) {
3992 // open error message box
3993 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3994 }
3996 getApp()->endWaitCursor();
3997 // set focus again in viewNet
3998 myViewNet->setFocus();
3999 }
4000 return 1;
4001}
4002
4003
4004long
4005GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
4006 if (myNet == nullptr) {
4007 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4008 } else {
4009 // check if there is at least one TLS
4010 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
4011 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
4012 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4013 }
4014 }
4015 // no TLS, then disable
4016 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4017 }
4018}
4019
4020
4021long
4022GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
4023 // Check if edgeType file was already set at start of netedit or with a previous save
4025 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
4026 } else {
4027 // Start saving edgeTypes
4028 getApp()->beginWaitCursor();
4029 try {
4031 // save edge types
4032 myNet->saveEdgeTypes(edgeTypeFile);
4033 // write info
4034 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
4035 } catch (IOError& e) {
4036 // open error message box
4037 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
4038 }
4040 getApp()->endWaitCursor();
4041 }
4042 return 1;
4043}
4044
4045
4046long
4047GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
4048 // check if net exist and there are edge types
4049 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
4050 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4051 } else {
4052 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4053 }
4054 return 1;
4055}
4056
4057
4058long
4059GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
4060 // get TLS file
4061 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
4066 // continue depending of dialog
4067 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4068 // set tls type in bucket
4070 // enable save netedit config
4072 // set focus again in viewNet
4073 myViewNet->setFocus();
4074 // save TLS Programs
4075 return onCmdSaveTLSPrograms(sender, sel, ptr);
4076 } else {
4077 return 1;
4078 }
4079}
4080
4081
4082long
4083GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
4084 // get network file file
4085 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
4090 // continue depending of dialog
4091 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4092 // set tls type in bucket
4094 // enable save netedit config
4096 // set focus again in viewNet
4097 myViewNet->setFocus();
4098 // save edgeTypes
4099 return onCmdSaveEdgeTypes(sender, sel, ptr);
4100 } else {
4101 return 1;
4102 }
4103}
4104
4105
4106long
4108 // get file
4109 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
4114 // continue depending of dialog
4115 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4116 // flag for save current saving status
4117 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
4118 // get (or create) bucket for this new file
4119 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
4120 // disable validation for additionals
4121 XMLSubSys::setValidation("never", "auto", "auto");
4122 // Create additional handler
4123 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4124 // begin undoList operation
4125 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
4126 // Run parser
4127 if (!generalHandler.parse()) {
4128 // write error
4129 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
4130 } else {
4131 // write info
4132 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
4133 // check if file is meanData
4134 const bool isMeanData = checkMeanDataFileBucket(additionalFileDialog.getFilename(), bucket, generalHandler);
4135 // enable save if there is errors loading additionals
4136 if (!generalHandler.isErrorCreatingElement()) {
4137 if (isMeanData) {
4139 } else if (previouslySaved) {
4141 }
4142 }
4143 }
4144 // end undoList operation
4145 myUndoList->end();
4146 // restore validation for additionals
4147 XMLSubSys::setValidation("auto", "auto", "auto");
4148 // check if clear undoList
4150 myUndoList->clear();
4151 }
4152 update();
4153 }
4154 return 1;
4155}
4156
4157
4158long
4160 // disable validation for additionals
4161 XMLSubSys::setValidation("never", "auto", "auto");
4162 // begin undoList operation
4163 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
4164 // clear additionals
4166 // reload additional elements stored in options
4167 loadAdditionalElements("Reloading");
4168 // end undoList operation
4169 myUndoList->end();
4170 // restore validation for additionals
4171 XMLSubSys::setValidation("auto", "auto", "auto");
4172 // check if clear undoList
4174 myUndoList->clear();
4175 }
4176 update();
4177 return 1;
4178}
4179
4180
4181long
4182GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
4183 if (myViewNet == nullptr) {
4184 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4186 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4187 } else {
4188 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4189 }
4190}
4191
4192
4193long
4194GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4195 const auto savingFileHandler = myFileBucketHandler;
4196 // get option container
4197 auto& neteditOptions = OptionsCont::getOptions();
4198 // check if we're forcing to saving additionals
4200 neteditOptions.getBool("force-saving") &&
4202 WRITE_MESSAGE(TL("Force save additional elements"));
4203 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4204 // nothing to save
4205 return 1;
4206 }
4207 // check if we have to define a default filename
4209 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4210 }
4211 // check if we have to open save as dialog
4212 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4213 // choose file to save
4214 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4215 } else {
4216 // always recompute before saving
4217 myNet->computeNetwork(this);
4218 try {
4219 // compute before saving (for detectors positions)
4220 myNet->computeNetwork(this);
4221 // save additionals
4222 const bool savingResult = myNet->saveAdditionals();
4223 // show info
4224 if (savingResult) {
4225 WRITE_MESSAGE(TL("Additionals saved."));
4226 return 1;
4227 } else {
4228 WRITE_MESSAGE(TL("Saving additional aborted."));
4229 return 0;
4230 }
4231 } catch (IOError& e) {
4232 // open error message box
4233 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4234 }
4235 return 0;
4236 }
4237}
4238
4239
4240long
4241GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4242 // get additional file
4243 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4248 // continue depending of dialog
4249 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4250 // update default name
4252 // save additional
4253 return onCmdSaveAdditionalElements(sender, sel, ptr);
4254 } else {
4255 return 0;
4256 }
4257}
4258
4259
4260long
4261GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4262 // get additional file
4263 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4268 // continue depending of dialog
4269 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4270 // use the file as default file
4272 // begin undoList operation
4273 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4274 // iterate over all demand elementes and change file
4275 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4276 for (const auto& additionalElement : additionalElementTag.second) {
4277 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4278 }
4279 }
4280 // end undoList operation
4281 myUndoList->end();
4282 // save additionals
4284 return onCmdSaveAdditionalElements(sender, sel, ptr);
4285 } else {
4286 return 0;
4287 }
4288}
4289
4290
4291long
4293 // get juPedSim file
4294 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4299 // continue depending of dialog
4300 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4301 try {
4302 // save additionals
4303 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4304 // set focus again in viewNet
4305 myViewNet->setFocus();
4306 // show info
4307 if (savingResult) {
4308 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4309 return 1;
4310 } else {
4311 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4312 return 0;
4313 }
4314 } catch (IOError& e) {
4315 // open error message box
4316 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4317 }
4318 }
4319 return 0;
4320}
4321
4322
4323long
4325 // get file
4326 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4331 // continue depending of dialog
4332 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4333 // save previous demand element status saving
4334 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4335 // disable validation for additionals
4336 XMLSubSys::setValidation("never", "auto", "auto");
4337 // get (or create) bucket for this new file
4338 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4339 // Create generic handler
4341 // begin undoList operation
4342 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4343 // Run parser for additionals
4344 if (!handler.parse()) {
4345 // write error
4346 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4347 } else {
4348 // show info
4349 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4350 // enable demand elements if there is an error creating element
4351 if (previouslySaved && !handler.isErrorCreatingElement()) {
4353 }
4354 }
4355 // end undoList operation
4356 myUndoList->end();
4357 // restore validation
4358 XMLSubSys::setValidation("auto", "auto", "auto");
4359 // check if clear undoList
4361 myUndoList->clear();
4362 }
4363 update();
4364 }
4365 return 1;
4366}
4367
4368
4369long
4371 // disable validation for additionals
4372 XMLSubSys::setValidation("never", "auto", "auto");
4373 // begin undoList operation
4374 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4375 // clear demand elements
4377 // reload demand elements stored in options
4378 loadDemandElements("Reloading");
4379 // end undoList operation and update view
4380 myUndoList->end();
4381 // restore validation for demand
4382 XMLSubSys::setValidation("auto", "auto", "auto");
4383 // check if clear undoList
4385 myUndoList->clear();
4386 }
4387 update();
4388 return 1;
4389}
4390
4391
4392long
4393GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4394 if (myViewNet == nullptr) {
4395 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4397 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4398 } else {
4399 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4400 }
4401}
4402
4403
4404long
4405GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4406 const auto savingFileHandler = myFileBucketHandler;
4407 // get option container
4408 auto& neteditOptions = OptionsCont::getOptions();
4409 // check if we're forcing to saving demand elements
4411 neteditOptions.getBool("force-saving") &&
4413 WRITE_MESSAGE(TL("Force save demand elements"));
4414 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4415 // nothing to save
4416 return 1;
4417 }
4418 // check if we have to define a default filename
4420 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4421 }
4422 // check if we have to open save as dialog
4423 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4424 // choose file to save
4425 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4426 } else {
4427 // always recompute before saving
4428 myNet->computeNetwork(this);
4429 try {
4430 // save demand elements
4431 const bool savingResult = myNet->saveDemandElements();
4432 // show info
4433 if (savingResult) {
4434 WRITE_MESSAGE(TL("Demand elements saved."));
4435 return 1;
4436 } else {
4437 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4438 return 0;
4439 }
4440 } catch (IOError& e) {
4441 // open error message box
4442 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4443 }
4444 }
4445 return 0;
4446}
4447
4448
4449long
4450GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4451 // get route file
4452 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4457 // continue depending of dialog
4458 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4459 // update default name
4461 // save demand elements
4462 return onCmdSaveDemandElements(sender, sel, ptr);
4463 } else {
4464 return 0;
4465 }
4466}
4467
4468
4469long
4470GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4471 // get route file
4472 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4477 // continue depending of dialog
4478 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4479 // use the file as default file
4481 // begin undoList operation
4482 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4483 // iterate over all demand elementes and change file
4484 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4485 for (const auto& demandElement : demandElementTag.second) {
4486 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4487 }
4488 }
4489 // end undoList operation
4490 myUndoList->end();
4491 // save demand elements
4493 return onCmdSaveDemandElements(sender, sel, ptr);
4494 } else {
4495 return 0;
4496 }
4497}
4498
4499
4500long
4501GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4502 // get file
4503 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4508 // continue depending of dialog
4509 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4510 // save previous demand element status saving
4511 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4512 // get (or create) bucket for this new file
4513 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4514 // disable update data
4516 // disable validation for data elements
4517 XMLSubSys::setValidation("never", "auto", "auto");
4518 // Create data handler
4519 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4520 // begin undoList operation
4521 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4522 // Run data parser
4523 if (!dataHandler.parse()) {
4524 // write error
4525 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4526 } else {
4527 // show info
4528 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4529 // enable demand elements if there is an error creating element
4530 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4532 }
4533 }
4534 // end undoList operation
4535 myUndoList->end();
4536 // enable update data
4538 // restore validation for data
4539 XMLSubSys::setValidation("auto", "auto", "auto");
4540 // check if clear undoList
4542 myUndoList->clear();
4543 }
4544 update();
4545 }
4546 return 1;
4547}
4548
4549
4550long
4552 // disable update data
4554 // disable validation for additionals
4555 XMLSubSys::setValidation("never", "auto", "auto");
4556 // begin undoList operation
4557 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4558 // clear data elements
4560 // reload data elements stored in options
4561 loadDataElements("Reloading");
4562 // restore validation for data
4563 XMLSubSys::setValidation("auto", "auto", "auto");
4564 // end undoList operation and update view
4565 myUndoList->end();
4566 // enable update data
4568 // check if clear undoList
4570 myUndoList->clear();
4571 }
4572 update();
4573 return 1;
4574}
4575
4576
4577long
4578GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4579 if (myViewNet == nullptr) {
4580 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4582 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4583 } else {
4584 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4585 }
4586}
4587
4588
4589long
4590GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4591 const auto savingFileHandler = myFileBucketHandler;
4592 // get option container
4593 auto& neteditOptions = OptionsCont::getOptions();
4594 // check if we're forcing to saving data elements
4596 neteditOptions.getBool("force-saving") &&
4598 WRITE_MESSAGE(TL("Force save data elements"));
4599 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4600 // nothing to save
4601 return 1;
4602 }
4603 // check if we have to define a default filename
4605 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4606 }
4607 // check if we have to open save as dialog
4608 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4609 return onCmdSaveDataElementsAs(sender, sel, ptr);
4610 } else {
4611 try {
4612 // save data elements
4613 const bool savingResult = myNet->saveDataElements();
4614 // show info
4615 if (savingResult) {
4616 WRITE_MESSAGE(TL("Data elements saved."));
4617 return 1;
4618 } else {
4619 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4620 return 0;
4621 }
4622 } catch (IOError& e) {
4623 // open error message box
4624 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4625 }
4626 }
4627 return 0;
4628}
4629
4630
4631long
4632GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4633 // get data file
4634 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4639 // continue depending of dialog
4640 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4641 // update default name
4643 // save data elements
4644 return onCmdSaveDataElements(sender, sel, ptr);
4645 } else {
4646 return 0;
4647 }
4648}
4649
4650
4651long
4652GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4653 // get data file
4654 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4659 // continue depending of dialog
4660 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4661 // use the file as default file
4663 // begin undoList operation
4664 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4665 // iterate over all demand elementes and change file
4666 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4667 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4668 }
4669 // end undoList operation
4670 myUndoList->end();
4671 // save data elements
4673 return onCmdSaveDataElements(sender, sel, ptr);
4674 } else {
4675 return 0;
4676 }
4677}
4678
4679
4680long
4682 // get file
4683 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4688 // continue depending of dialog
4689 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4690 // save previous demand element status saving
4691 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4692 // get (or create) bucket for this new file
4693 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4694 // disable validation for meanDatas
4695 XMLSubSys::setValidation("never", "auto", "auto");
4696 // Create meanData handler
4697 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4698 // begin undoList operation
4699 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4700 // Run parser
4701 if (!generalHandler.parse()) {
4702 // write error
4703 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4704 } else {
4705 // show info
4706 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4707 // enable demand elements if there is an error creating element
4708 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4710 }
4711 }
4712 // end undoList operation
4713 myUndoList->end();
4714 // restore validation for meanDatas
4715 XMLSubSys::setValidation("auto", "auto", "auto");
4716 // check if clear undoList
4718 myUndoList->clear();
4719 }
4720 update();
4721 }
4722 return 1;
4723}
4724
4725
4726long
4728 // disable validation for meanDatas
4729 XMLSubSys::setValidation("never", "auto", "auto");
4730 // begin undoList operation
4732 // clear meanDatas
4734 // reload meanData elements stored in options
4735 loadMeanDataElements("Reloading");
4736 // end undoList operation and update view
4737 myUndoList->end();
4738 // restore validation for meanDatas
4739 XMLSubSys::setValidation("auto", "auto", "auto");
4740 // check if clear undoList
4742 myUndoList->clear();
4743 }
4744 update();
4745 return 1;
4746}
4747
4748
4749long
4750GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4751 if (myViewNet == nullptr) {
4752 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4754 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4755 } else {
4756 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4757 }
4758}
4759
4760
4761long
4762GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4763 const auto savingFileHandler = myFileBucketHandler;
4764 // get option container
4765 auto& neteditOptions = OptionsCont::getOptions();
4766 // check if we're forcing to saving meandata elements
4768 neteditOptions.getBool("force-saving") &&
4770 WRITE_MESSAGE(TL("Force save meandata elements"));
4771 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4772 // nothing to save
4773 return 1;
4774 }
4775 // check if we have to define a default filename
4777 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4778 }
4779 // check if we have to open save as dialog
4780 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4781 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4782 } else {
4783 try {
4784 // compute before saving
4785 myNet->computeNetwork(this);
4786 // save demand elements
4787 const bool savingResult = myNet->saveMeanDatas();
4788 // show info
4789 if (savingResult) {
4790 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4791 return 1;
4792 } else {
4793 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4794 return 0;
4795 }
4796 } catch (IOError& e) {
4797 // open error message box
4798 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4799 }
4800 }
4801 return 0;
4802}
4803
4804
4805long
4806GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4807 // get meanData file
4808 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4813 // continue depending of dialog
4814 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4815 // update default name
4817 // save meanDatas
4818 return onCmdSaveMeanDataElements(sender, sel, ptr);
4819 } else {
4820 return 0;
4821 }
4822}
4823
4824
4825long
4826GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4827 // get meanData file
4828 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4833 // continue depending of dialog
4834 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4835 // use the file as default file
4837 // begin undoList operation
4838 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4839 // iterate over all demand elementes and change file
4840 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4841 for (const auto& meanData : meanDataTag.second) {
4842 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4843 }
4844 }
4845 // end undoList operation
4846 myUndoList->end();
4847 // save meanDatas
4849 return onCmdSaveMeanDataElements(sender, sel, ptr);
4850 } else {
4851 return 0;
4852 }
4853}
4854
4855
4856bool
4857GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4858 if (myNet) {
4860 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4861 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4862 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4863 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4864 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4865 // first check if abort saving
4866 if (commonResult == GNEDialog::Result::ABORT) {
4867 return false;
4868 }
4869 // save every type of file
4870 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4871 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4872 return false;
4873 }
4874 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4875 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4876 return false;
4877 }
4878 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4879 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4880 return false;
4881 }
4882 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4883 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4884 return false;
4885 }
4886 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4887 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4888 return false;
4889 }
4890 // restore focus in viewNet
4891 myViewNet->setFocus();
4892 // clear undo list
4893 clearUndoList();
4894 // all saved, then continue
4895 return true;
4896 } else {
4897 // nothing to do, then continue
4898 return true;
4899 }
4900}
4901
4902
4903void
4905 // check that view exists
4906 if (myViewNet) {
4908 }
4909 // update require recomputing
4911}
4912
4913
4914void
4916 // remove lock hotkeys
4918 // check supermode
4919 if (supermode == Supermode::NETWORK) {
4920 // menu commands
4924 // lock
4928 // processing
4933 } else if (supermode == Supermode::DEMAND) {
4934 // menu commands
4938 // lock
4942 // processing
4947 } else if (supermode == Supermode::DATA) {
4948 // menu commands
4952 // lock
4956 // processing
4961 } else {
4962 // menu commands
4967 // lock
4971 // processing
4975 }
4976 // continue depending of view
4977 if (myViewNet) {
4981 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4984 }
4985 }
4986}
4987
4988
4989bool
4993
4994
4995void
4999
5000
5001void
5003 myUndoRedoListEnabled = reason;
5004}
5005
5006
5007const std::string&
5011
5012
5013void
5015 if (myViewNet) {
5016 // destroy Popup (to avoid crashes)
5018 }
5019 // clear undo list and return true to continue with closing/reload
5020 myUndoList->clear();
5021}
5022
5023
5028
5029
5034
5035
5040
5041
5046
5047
5052
5053
5058
5059
5064
5065
5066bool
5067GNEApplicationWindow::checkMeanDataFileBucket(const std::string& file, FileBucket* bucket, const GNEGeneralHandler& generalHandler) {
5068 if (generalHandler.isMeanDataFile() && !generalHandler.isAdditionalFile()) {
5069 auto meanDataBucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5070 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
5071 for (const auto& meanDataPair : meanDataTag.second) {
5072 if (meanDataPair.second->getFileBucket() == bucket) {
5073 bucket->removeElement(false);
5074 meanDataPair.second->setFileBucket(meanDataBucket);
5075 meanDataBucket->addElement(false);
5076 }
5077 }
5078 }
5079 if (bucket->isDefaultBucket()) {
5080 bucket->setFilename("");
5081 }
5084 return true;
5085 }
5086 return false;
5087}
5088
5089
5090void
5092 // get netedit option container
5093 auto& neteditOptions = OptionsCont::getOptions();
5094 // check if ignore loading of additional files
5095 if ((operation == "Loading") && neteditOptions.getBool("ignore.additionalelements")) {
5096 return;
5097 }
5098 // get additional files (don't use reference because it's modified during loading)
5099 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
5100 // check if we have additionals to load
5101 if (myNet && (additionalFiles.size() > 0)) {
5102 // disable validation for additionals
5103 XMLSubSys::setValidation("never", "auto", "auto");
5104 // begin undolist
5105 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
5106 // count actual files
5107 int numAdditionalFiles = 0;
5108 int numMeanDataFiles = 0;
5109 bool additionalErrors = false;
5110 bool meanDataErrors = false;
5111 // iterate over every additional file
5112 for (const auto& file : additionalFiles) {
5113 // check if ignore missing inputs
5114 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5115 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
5116 // get (or create) bucket for this new file
5118 // declare general handler
5119 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5120 // check if force overwritte
5121 if (operation == "reloading") {
5122 generalHandler.forceOverwriteElements();
5123 }
5124 // Run parser
5125 const bool parsed = generalHandler.parse();
5126 if (!parsed) {
5127 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5128 additionalErrors = true;
5129 meanDataErrors = true;
5130 } else if (generalHandler.isErrorCreatingElement()) {
5131 if (generalHandler.isErrorCreatingAdditional() || generalHandler.isAdditionalFile()) {
5132 additionalErrors = true;
5133 }
5134 if (generalHandler.isErrorCreatingMeanData() || generalHandler.isMeanDataFile()) {
5135 meanDataErrors = true;
5136 }
5137 }
5138 if (checkMeanDataFileBucket(file, bucket, generalHandler)) {
5139 numMeanDataFiles++;
5140 } else if (generalHandler.isAdditionalFile()) {
5141 numAdditionalFiles++;
5142 }
5143 }
5144 }
5145 // end undo list
5146 myUndoList->end();
5147 // disable validation for additionals
5148 XMLSubSys::setValidation("auto", "auto", "auto");
5149 if (!additionalErrors && (numAdditionalFiles <= 1)) {
5151 }
5152 if (!meanDataErrors && (numMeanDataFiles <= 1) && (myNet->getAttributeCarriers()->getNumberOfMeanDatas() > 0)) {
5154 }
5155 // check if clear undoList
5157 myUndoList->clear();
5158 }
5159 }
5160}
5161
5162
5163void
5164GNEApplicationWindow::loadDemandElements(const std::string operation) {
5165 // get netedit option container
5166 auto& neteditOptions = OptionsCont::getOptions();
5167 // check if ignore loading of demand files
5168 if ((operation == "Loading") && neteditOptions.getBool("ignore.routeelements")) {
5169 return;
5170 }
5171 // get demand files (don't use reference because it's modified during loading)
5172 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
5173 // check if we have demand files to load
5174 if (myNet && (demandFiles.size() > 0)) {
5175 // disable validation for additionals
5176 XMLSubSys::setValidation("never", "auto", "auto");
5177 // begin undolist
5178 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
5179 // use this flag for mark all elements as saved after loading, if it was sucessfully
5180 bool setSaved = demandFiles.size() == 1;
5181 // iterate over every demand file
5182 for (const auto& file : demandFiles) {
5183 // check if ignore missing inputs
5184 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5185 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
5186 // get (or create) bucket for this new file
5187 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
5188 // declare general handler
5189 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5190 // check if force overwritte
5191 if (operation == "reloading") {
5192 generalHandler.forceOverwriteElements();
5193 }
5194 // Run parser
5195 if (!generalHandler.parse()) {
5196 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5197 }
5198 setSaved &= !generalHandler.isErrorCreatingElement();
5199 }
5200 }
5201 // end undo list
5202 myUndoList->end();
5203 // disable validation for additionals
5204 XMLSubSys::setValidation("auto", "auto", "auto");
5205 if (setSaved) {
5207 }
5208 // check if clear undoList
5210 myUndoList->clear();
5211 }
5212 }
5213}
5214
5215
5216void
5217GNEApplicationWindow::loadDataElements(const std::string operation) {
5218 // get option container
5219 auto& neteditOptions = OptionsCont::getOptions();
5220 // get data files (don't use reference because it's modified during loading)
5221 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
5222 if (myNet && (dataFiles.size() > 0)) {
5223 // disable validation for additionals
5224 XMLSubSys::setValidation("never", "auto", "auto");
5225 // begin undolist
5226 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
5227 // use this flag for mark all elements as saved after loading, if it was sucessfully
5228 bool setSaved = dataFiles.size() == 1;
5229 // iterate over every data file
5230 for (const auto& file : dataFiles) {
5231 // check if ignore missing inputs
5232 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5233 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
5234 // get (or create) bucket for this new file
5235 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
5236 // declare general handler
5237 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5238 // check if force overwritte
5239 if (operation == "reloading") {
5240 generalHandler.forceOverwriteElements();
5241 }
5242 // Run parser
5243 if (!generalHandler.parse()) {
5244 WRITE_ERROR(TLF("% of % failed.", operation, file));
5245 }
5246 setSaved &= !generalHandler.isErrorCreatingElement();
5247 }
5248 }
5249 // end undo list
5250 myUndoList->end();
5251 // disable validation for additionals
5252 XMLSubSys::setValidation("auto", "auto", "auto");
5253 if (setSaved) {
5255 }
5256 // check if clear undoList
5258 myUndoList->clear();
5259 }
5260 }
5261}
5262
5263
5264void
5266 // get option container
5267 auto& neteditOptions = OptionsCont::getOptions();
5268 // get meanData files (don't use reference because it's modified during loading)
5269 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5270 if (myNet && (meanDataFiles.size() > 0)) {
5271 // disable validation for additionals
5272 XMLSubSys::setValidation("never", "auto", "auto");
5273 // begin undolist
5274 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5275 // use this flag for mark all elements as saved after loading, if it was sucessfully
5276 bool setSaved = meanDataFiles.size() == 1;
5277 // iterate over every meanData file
5278 for (const auto& file : meanDataFiles) {
5279 // check if ignore missing inputs
5280 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5281 // get (or create) bucket for this new file
5282 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5283 // check if already loaded in this operation
5284 if ((operation == "Loading") && (bucket->getNumElements() > 0)) {
5285 continue;
5286 }
5287 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5288 // declare general handler
5289 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5290 // check if force overwritte
5291 if (operation == "reloading") {
5292 generalHandler.forceOverwriteElements();
5293 }
5294 // Run parser
5295 if (!generalHandler.parse()) {
5296 WRITE_ERROR(TLF("% of % failed.", operation, file));
5297 }
5298 setSaved &= !generalHandler.isErrorCreatingElement();
5299 }
5300 }
5301 // end undo list
5302 myUndoList->end();
5303 // disable validation for additionals
5304 XMLSubSys::setValidation("auto", "auto", "auto");
5305 if (setSaved) {
5307 }
5308 // check if clear undoList
5310 myUndoList->clear();
5311 }
5312 }
5313}
5314
5315
5316void
5317GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5318 // get TLS file
5320 if (tlsFile.size() > 0) {
5321 // show info
5322 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5323 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5324 myNet->computeNetwork(this);
5325 // parse TLS programs
5326 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5327 // Abort undo/redo
5329 } else {
5330 // commit undo/redo operation
5331 myUndoList->end();
5332 update();
5333 }
5334 // require save network
5336 // if defined, require save netedit config
5339 }
5340 }
5341}
5342
5343
5344void
5345GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5346 // get edgeType file
5348 if (edgeTypeFile.size() > 0) {
5349 // declare type container
5350 NBTypeCont typeContainerAux;
5351 // declare type handler
5352 NIXMLTypesHandler handler(typeContainerAux);
5353 // load edge types
5354 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5355 // now create GNETypes based on typeContainerAux
5356 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5357 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5358 // iterate over typeContainerAux
5359 for (const auto& auxEdgeType : typeContainerAux) {
5360 // create new edge type
5361 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5362 // add lane types
5363 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5364 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5365 }
5366 // add it using undoList
5367 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5368
5369 }
5370 // end undo list
5372 // refresh edge type selector
5374 // require save network
5376 // if defined, require save netedit config
5379 }
5380 }
5381}
5382
5383
5388
5389
5390bool
5392 if (myInternalTest == nullptr) {
5393 return true;
5394 } else if (obj == myInternalTest) {
5395 return true;
5396 } else {
5397 return false;
5398 }
5399}
5400
5401// ---------------------------------------------------------------------------
5402// GNEApplicationWindow - protected methods
5403// ---------------------------------------------------------------------------
5404#ifdef _MSC_VER
5405#pragma warning(push)
5406#pragma warning(disable: 4355) // mask warning about "this" in initializers
5407#endif
5409 myToolbarsGrip(this),
5410 myMenuBarFile(this),
5411 myFileMenuCommands(this),
5412 myModesMenuCommands(this),
5413 myEditMenuCommands(this),
5414 myLockMenuCommands(this),
5415 myProcessingMenuCommands(this),
5416 myLocateMenuCommands(this),
5417 myToolsMenuCommands(this),
5418 myWindowsMenuCommands(this),
5419 myHelpMenuCommands(this),
5420 mySupermodeCommands(this) {
5421}
5422#ifdef _MSC_VER
5423#pragma warning(pop)
5424#endif
5425
5426
5427long
5428GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5429 FXEvent* e = (FXEvent*) eventData;
5430 if (e && e->code == KEY_Escape) {
5431 if (myGeoCoordinate && myGeoCoordinate->hasFocus()) {
5432 myGeoCoordinate->killFocus();
5433 if (getActiveView()) {
5435 }
5436 return 1;
5437 }
5438 if (myCartesianCoordinate && myCartesianCoordinate->hasFocus()) {
5439 myCartesianCoordinate->killFocus();
5440 if (getActiveView()) {
5442 }
5443 return 1;
5444 }
5445 }
5446 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5447 if (handled == 0 && myMDIClient->numChildren() > 0) {
5448 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5449 if (w != nullptr) {
5450 w->onKeyPress(nullptr, sel, eventData);
5451 }
5452 }
5453 return 0;
5454}
5455
5456
5457long
5458GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5459 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5460 if (handled == 0 && myMDIClient->numChildren() > 0) {
5461 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5462 if (w != nullptr) {
5463 w->onKeyRelease(nullptr, sel, eventData);
5464 }
5465 }
5466 return 0;
5467}
5468
5469
5470/****************************************************************************/
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