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>
71#include <utils/xml/XMLSubSys.h>
72
74#include "GNEEvent_FileLoaded.h"
75#include "GNEInternalTest.h"
76#include "GNELoadThread.h"
77#include "GNENet.h"
78#include "GNEUndoList.h"
79#include "GNEViewParent.h"
80
81#ifdef HAVE_VERSION_H
82#include <version.h>
83#endif
84
85// ===========================================================================
86// FOX-declarations
87// ===========================================================================
88
89FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
90 // quit calls
94 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
95 // toolbar file
102 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
107 // network
122 // NeteditConfig
130 // SumoConfig
138 // TLS
147 // edge types
156 // additionals
169 // demand elements
180 // data elements
191 // meanDatas
202 // other
207 // Toolbar supermode
211 // Toolbar modes
228 // Toolbar edit
237 // Network view options
270 // Demand view options
293 // Data view options
310 // view
327 /* Prepared for #6042
328 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
329 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
330 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
331 */
332 // toolbar lock
364 // Toolbar processing
383 // Toolbar locate
408 // toolbar python tools
413 // toolbar windows
415 // toolbar help
418 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
419 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
420 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
422 // alt + <number>
443 // key events
444 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
445 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
446 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
447 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
448 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
450 // threads events
453 // edge template functions
457 // languages
480 // tools
483 // other
484 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
491 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
492};
493
494// Object implementation
495FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
496
497// ===========================================================================
498// GNEApplicationWindow method definitions
499// ===========================================================================
500#ifdef _MSC_VER
501#pragma warning(push)
502#pragma warning(disable: 4355) // mask warning about "this" in initializers
503#endif
504GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
505 GUIMainWindow(app),
506 myTagPropertiesDatabase(tagPropertiesDatabase),
507 myUndoList(new GNEUndoList(this)),
508 myConfigPattern(configPattern),
509 myToolbarsGrip(this),
510 myMenuBarFile(this),
511 myFileMenuCommands(this),
512 myModesMenuCommands(this),
513 myEditMenuCommands(this),
514 myLockMenuCommands(this),
515 myProcessingMenuCommands(this),
516 myLocateMenuCommands(this),
517 myToolsMenuCommands(this),
518 myWindowsMenuCommands(this),
519 myHelpMenuCommands(this),
520 mySupermodeCommands(this),
521 myFileBucketHandler(new GNEApplicationWindowHelper::FileBucketHandler(this, OptionsCont::getOptions(), mySumoOptions)),
522 myTitlePrefix("netedit " VERSION_STRING),
523 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
524 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
525 // init icons
527 // init Textures
529 // init cursors
531 // set tooltip options
532 app->setTooltipTime(1000000000);
533 app->setTooltipPause(1000000000);
534 // set SUMO Options descriptions
535 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
536 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo " VERSION_STRING);
537 // set default netedit options
540 // parse options
546 // add extra option for automatic closing
547 myNetgenerateOptions.doRegister("close-dialog-automatic", new Option_Bool(true));
548 myNetgenerateOptions.addDescription("close-dialog-automatic", "report", TL("Close dialog automatically"));
549}
550#ifdef _MSC_VER
551#pragma warning(pop)
552#endif
553
554
555void
557 // do this not twice
559 // do not translate debug messages
560 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
561 return;
562 }
563 myHadDependentBuild = true;
564 setTarget(this);
565 setSelector(MID_WINDOW);
566 // build toolbar menu
568 // build the thread - io
571 // build the status bar
572 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
573 // build geo coordinates label
574 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
576 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
577 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
578 // build geo coordinates label
580 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
581 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
582 // build cartesian coordinates label
584 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
585 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
586 // build test coordinates label (only if gui-testing is enabled)
588 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
589 myTestCoordinate->setHelpText(TL("Test coordinate"));
591 myTestFrame->hide();
592 // make the window a mdi-window
593 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
595 myMDIMenu = new FXMDIMenu(this, myMDIClient);
596 // build the message window
598 myMainSplitter->setSplit(1, 65);
599 // fill menu and tool bar
600 fillMenuBar();
601 // build additional threads
603 // check if create internal test system
604 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
605 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
606 }
607 // set the status bar
608 setStatusBarText(TL("Ready."));
609 // set the caption
610 setTitle(myTitlePrefix);
611 // set Netedit ICON
614 // build netedit Accelerators (hotkeys)
615 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
616}
617
618
619void
621 // set windows size and position
623 // set current folder
624 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
625 // Create main window
626 FXMainWindow::create();
627 // get text width
628 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
629 // adjust cartesian and geo frame
630 myCartesianFrame->setWidth(textWidth);
631 myGeoFrame->setWidth(textWidth);
632 // fill online maps
633 if (myOnlineMaps.empty()) {
634 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
635 myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
636 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
637 }
638 // show application windows
639 show(PLACEMENT_DEFAULT);
640 // check if maximice
641 if (!OptionsCont::getOptions().isSet("window-size")) {
642 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
643 maximize();
644 }
645 }
646}
647
648
650 closeAllWindows(true);
651 // Close icons
653 // Close gifs (Textures)
656 // delete visuals
657 delete myGLVisual;
658 // must delete menus to avoid segfault on removing accelerators
659 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
662 delete myFileMenuTLS;
663 delete myFileMenuEdgeTypes;
670 delete myFileMenu;
671 delete myModesMenu;
672 delete myEditMenu;
673 delete myLockMenu;
674 delete myProcessingMenu;
675 delete myLocatorMenu;
676 delete myToolsMenu;
677 delete myToolsDetectorMenu;
678 delete myToolsDistrictMenu;
679 delete myToolsDRTMenu;
681 delete myToolsImportMenu;
684 delete myToolsImportVissim;
685 delete myToolsImportVisum;
686 delete myToolsNetMenu;
687 delete myToolsRouteMenu;
688 delete myToolsOutputMenu;
689 delete myToolsShapes;
690 delete myToolsTLS;
691 delete myToolsTurnDefs;
693 delete myToolsXML;
694 delete myWindowMenu;
695 delete myHelpMenu;
696 delete myLanguageMenu;
697 // Delete load thread
698 delete myLoadThread;
699 if (myInternalTest) {
700 delete myInternalTest;
701 }
702 // drop all events
703 while (!myThreadEvents.empty()) {
704 // get the next event
707 delete e;
708 }
709 // delete undoList and dialog
710 delete myUndoList;
711}
712
713
714long
715GNEApplicationWindow::onCmdQuit(FXObject* sender, FXSelector sel, void* ptr) {
716 if (askSaveElements(sender, sel, ptr)) {
718 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
719 if (isMaximized()) {
720 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
721 } else {
722 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
723 }
724 getApp()->exit(0);
725 }
726 return 1;
727}
728
729
730long
731GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
732 GUIDialog_GLChosenEditor* chooser =
734 chooser->create();
735 chooser->show();
736 return 1;
737}
738
739
740long
741GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
742 // check if close current simulation
743 if (onCmdClose(0, 0, 0) == 1) {
744 // create new network
746 }
747 return 1;
748}
749
750
751long
753 auto& neteditOptions = OptionsCont::getOptions();
754 // get netconvert file dialog
755 const GNEFileDialog netConvertFileDialog(this, TL("netconvert config file"),
760 // continue depending of dialog
761 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
762 // stop test before calling load thread
763 if (myInternalTest) {
765 }
766 // reset netedit options
767 myLoadThread->fillOptions(neteditOptions);
768 myLoadThread->setDefaultOptions(neteditOptions);
769 // set netconvert configuration file to load
770 neteditOptions.resetWritable();
771 neteditOptions.set("netccfg-file", netConvertFileDialog.getFilename());
772 // run load thread
774 // update view
775 update();
776 }
777 return 1;
778}
779
780
781long
782GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
783 // get netconvert filename
784 const GNEFileDialog networkFileDialog(this, TL("network file"),
789 // continue depending of dialog
790 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
791 // load network
792 loadNetwork(networkFileDialog.getFilename());
793 }
794 return 0;
795}
796
797
798long
799GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
800 // get OSM file dilaog
801 const GNEFileDialog OSMFileDialog(this, TL("OpenStreetMap file"),
806 // continue depending of dialog
807 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
808 loadOSM(OSMFileDialog.getFilename());
809 }
810 return 1;
811}
812
813
814long
815GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
816 auto& neteditOptions = OptionsCont::getOptions();
817 // get netconvert filename
818 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
823 // continue depending of dialog
824 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
825 // stop test before calling load thread
826 if (myInternalTest) {
828 }
829 // reset netedit options
830 myLoadThread->fillOptions(neteditOptions);
831 myLoadThread->setDefaultOptions(neteditOptions);
832 // set netedit configuration file to load
833 neteditOptions.resetWritable();
834 neteditOptions.set("netecfg-file", neteditConfigFileDialog.getFilename());
835 // run load thread
837 // update view
838 update();
839 }
840 return 1;
841}
842
843
844long
845GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
846 auto& neteditOptions = OptionsCont::getOptions();
847 // get netconvert filename
848 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
853 // continue depending of dialog
854 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
855 // stop test before calling load thread
856 if (myInternalTest) {
858 }
859 // reset options
860 myLoadThread->fillOptions(neteditOptions);
861 myLoadThread->setDefaultOptions(neteditOptions);
862 // set sumo configuration file to load
863 neteditOptions.resetWritable();
864 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
865 // run load thread
867 // update view
868 update();
869 }
870 return 1;
871}
872
873
874long
876 // get existent configuration file
878 // check if close current simulation
879 if (onCmdClose(0, 0, 0) == 1) {
880 // stop test before calling load thread
881 if (myInternalTest) {
883 }
884 auto& neteditOptions = OptionsCont::getOptions();
885 // reset options
886 myLoadThread->fillOptions(neteditOptions);
887 myLoadThread->setDefaultOptions(neteditOptions);
888 // set netedit configuration file to load
889 neteditOptions.resetWritable();
890 neteditOptions.set("netecfg-file", neteditConfigFile);
891 // run load thread
893 // update view
894 update();
895 }
896 return 1;
897}
898
899
900long
901GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
902 // get existent sumo config file
904 // check if close current simulation
905 if (onCmdClose(0, 0, 0) == 1) {
906 // stop test before calling load thread
907 if (myInternalTest) {
909 }
910 auto& neteditOptions = OptionsCont::getOptions();
911 // reset options
912 myLoadThread->fillOptions(neteditOptions);
913 myLoadThread->setDefaultOptions(neteditOptions);
914 // set configuration file to load
915 neteditOptions.resetWritable();
916 neteditOptions.set("sumocfg-file", sumoConfigFile);
917 // run load thread
919 // update view
920 update();
921 }
922 return 1;
923}
924
925
926long
927GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
928 // check if file exist
930 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
931 } else {
932 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
933 }
934}
935
936
937long
938GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
939 // check if file exist
941 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
942 } else {
943 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
944 }
945}
946
947
948long
949GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
950 // get netconvert filename
951 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
956 // continue depending of dialog
957 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
958 // set tls type in bucket
960 // load traffic lights
961 loadTrafficLights("Loading");
962 }
963 return 1;
964}
965
966
967long
968GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
969 // load traffic lights
970 loadTrafficLights("Reloading");
971 return 1;
972}
973
974
975long
976GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
977 // check if file exist
979 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
980 } else {
981 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
982 }
983}
984
985
986long
987GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
988 // get netconvert filename
989 const GNEFileDialog edgeTypesFileDialog(this, TL("EdgeTypes file"),
994 // continue depending of dialog
995 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
996 // set tls type in bucket
998 // load edge types
999 loadEdgeTypes("Loading");
1000 }
1001 return 1;
1002}
1003
1004
1005long
1006GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1007 // load edge types
1008 loadEdgeTypes("Reloading");
1009 return 0;
1010}
1011
1012
1013long
1014GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1015 // check if file exist
1017 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1018 } else {
1019 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1020 }
1021}
1022
1023
1024long
1025GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector sel, void*) {
1026 auto& neteditOptions = OptionsCont::getOptions();
1027 // check if close current file
1028 if (onCmdClose(0, sel, 0) == 1) {
1029 // stop test before calling load thread
1030 if (myInternalTest) {
1032 }
1033 // store size, position and viewport
1035 // set flag
1036 myAmLoading = true;
1037 // get files
1041 // fill (reset) all options
1042 myLoadThread->fillOptions(neteditOptions);
1043 // set default options defined in GNELoadThread::setDefaultOptions(...)
1044 myLoadThread->setDefaultOptions(neteditOptions);
1045 // set file to load
1046 neteditOptions.resetWritable();
1047 if (neteditConfig.size() > 0) {
1048 // set netedit config
1050 // set status bar
1051 setStatusBarText(TLF("Reloading netedit config file '%'", neteditConfig));
1052 } else if (sumoConfig.size() > 0) {
1053 // set sumo config
1055 // set status bar
1056 setStatusBarText(TLF("Reloading sumo config file '%'", sumoConfig));
1057 } else if (networkFile.size() > 0) {
1058 // set network config
1060 // set status bar
1061 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1062 } else {
1063 // nothing to load
1064 return 0;
1065 }
1066 // load network
1068 }
1069 return 1;
1070}
1071
1072
1073long
1074GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1075 // declare strings
1076 FXString neteditConfig = TL("&Reload Netedit config");
1077 FXString sumoConfig = TL("&Reload Sumo config");
1078 FXString netFile = TL("&Reload Network");
1079 FXString reload = TL("&Reload");
1080 // check options
1081 if (myNet == nullptr) {
1082 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1083 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1085 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1086 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1088 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1089 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1091 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1092 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1093 } else {
1094 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1095 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1096 }
1097 return 1;
1098}
1099
1100
1101long
1102GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector sel, void*) {
1103 auto& neteditOptions = OptionsCont::getOptions();
1104 // check if close current file
1105 if (onCmdClose(0, sel, 0) == 1) {
1106 // stop test before calling load thread
1107 if (myInternalTest) {
1109 }
1110 // store size, position and viewport
1112 // set flag
1113 myAmLoading = true;
1114 // get network
1115 const std::string networkFile = myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK);
1116 // fill (reset) all options
1117 myLoadThread->fillOptions(neteditOptions);
1118 // set default options defined in GNELoadThread::setDefaultOptions(...)
1119 myLoadThread->setDefaultOptions(neteditOptions);
1120 // set file to load
1122 // set status bar
1123 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1124 // loaad network
1126 }
1127 return 1;
1128}
1129
1130
1131long
1132GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1133 if (myNet == nullptr) {
1134 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1135 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1138 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1139 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1140 } else {
1141 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1142 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1143 }
1144 return 1;
1145}
1146
1147
1148long
1149GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1150 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1151 if (myAmLoading) {
1152 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1153 } else if (onCmdClose(0, 0, 0) == 1) {
1154 // get filedata
1155 const std::string recentFile = ((const char*)fileData);
1156 // check if we're loading a network o a config
1157 if ((recentFile.find(".netecfg") != std::string::npos) ||
1158 (recentFile.find(".sumocfg") != std::string::npos) ||
1159 (recentFile.find(".netccfg") != std::string::npos)) {
1160 // load config
1161 loadConfiguration(recentFile);
1162 } else {
1163 // load network
1164 loadNetwork(recentFile);
1165 }
1166 }
1167 return 1;
1168}
1169
1170
1171long
1172GNEApplicationWindow::onCmdClose(FXObject* sender, FXSelector sel, void* ptr) {
1173 if (myViewNet == nullptr) {
1174 return 1;
1175 } else if (askSaveElements(sender, sel, ptr)) {
1176 // check if is reloading
1177 const bool reloading = (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOADNETWORK) || (FXSELID(sel) == MID_HOTKEY_CTRL_R_RELOAD);
1178 // close all windows
1179 closeAllWindows(!reloading);
1180 // add a separator to the log
1182 // hide all menu commands
1186 // hide view options
1190 return 1;
1191 } else {
1192 return 0;
1193 }
1194}
1195
1196
1197long
1198GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1199 if (myMDIClient->numChildren() > 0) {
1200 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1201 if (w != nullptr) {
1202 w->onCmdLocate(nullptr, sel, nullptr);
1203 }
1204 }
1205 return 1;
1206}
1207
1208
1209long
1210GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1211 return myToolsMenuCommands.showTool(obj);
1212}
1213
1214
1215long
1216GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1218}
1219
1220
1221long
1224}
1225
1226
1227long
1228GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1229 // currently always enabled
1230 return 1;
1231}
1232
1233
1234long
1235GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1236 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1237 return 1;
1238}
1239
1240
1241long
1242GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1244 return 1;
1245}
1246
1247
1248long
1250 return 1;
1251}
1252
1253
1254long
1256 return 1;
1257}
1258
1259
1260long
1261GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1262 // create and open about dialog
1263 GNEAboutDialog(this);
1264 return 1;
1265}
1266
1267
1268long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1269 FXEvent* event = (FXEvent*)ptr;
1270 FXString string = GUIUserIO::clipped.c_str();
1271 setDNDData(FROM_CLIPBOARD, event->target, string);
1272 return 1;
1273}
1274
1275
1276long
1277GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1278 eventOccurred();
1279 return 1;
1280}
1281
1282
1283void
1285 // load events
1286 while (!myThreadEvents.empty()) {
1287 // get the next event
1290 // process
1291 switch (e->getOwnType()) {
1294 break;
1301 break;
1302 default:
1303 break;
1304 }
1305 delete e;
1306 }
1307}
1308
1309
1310void
1313 myAmLoading = false;
1314 GNEEvent_FileLoaded* fileLoadedEvent = static_cast<GNEEvent_FileLoaded*>(e);
1315 // check whether the loading was successful
1316 if (fileLoadedEvent->getNet() == nullptr) {
1317 // report failure
1318 std::string failureMessage;
1319 switch (fileLoadedEvent->getType()) {
1321 failureMessage = TLF("Loading of netedit config '%' failed", fileLoadedEvent->getFile());
1322 break;
1324 failureMessage = TLF("Loading of sumo config '%' failed", fileLoadedEvent->getFile());
1325 break;
1327 failureMessage = TLF("Loading of netconvert config '%' failed", fileLoadedEvent->getFile());
1328 break;
1330 failureMessage = TLF("Loading of network '%' failed", fileLoadedEvent->getFile());
1331 break;
1333 failureMessage = TLF("Loading of OSM Network '%' failed", fileLoadedEvent->getFile());
1334 break;
1336 failureMessage = TL("Invalid Options. Nothing loaded");
1337 break;
1339 failureMessage = TL("Could not build projection. Nothing loaded");
1340 break;
1342 failureMessage = TL("Invalid extension for config file. Only .netecfg, .sumocfg or .netccfg are allowed");
1343 break;
1344 default:
1345 failureMessage = TL("Invalid input network option. Load with either sumo/netedit/netconvert config or with --new option");
1346 break;
1347 }
1348 // write info
1349 WRITE_ERROR(failureMessage);
1350 setStatusBarText(failureMessage);
1351 } else {
1352 // report success
1353 std::string successMessage;
1354 switch (fileLoadedEvent->getType()) {
1356 successMessage = TLF("Netedit config '%' loaded", fileLoadedEvent->getFile());
1357 break;
1359 successMessage = TLF("Sumo config '%' loaded", fileLoadedEvent->getFile());
1360 break;
1362 successMessage = TLF("Netconvert config '%' loaded", fileLoadedEvent->getFile());
1363 break;
1365 successMessage = TLF("Network '%' loaded", fileLoadedEvent->getFile());
1366 break;
1368 successMessage = TLF("OSM Network '%' loaded", fileLoadedEvent->getFile());
1369 break;
1371 successMessage = TLF("Network '%' loaded through console", fileLoadedEvent->getFile());
1372 break;
1374 successMessage = TL("New network successfully created");
1375 break;
1376 default:
1377 throw ProcessError("Invalid sucess mesage. Check if all cases were covered");
1378 }
1379 // write info
1380 WRITE_MESSAGE(successMessage);
1381 setStatusBarText(successMessage);
1382 // set new Net
1383 myNet = fileLoadedEvent->getNet();
1384 // set size and pos
1386 // build viewparent toolbar grips before creating view parent
1388 // initialise netedit View
1389 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1390 // create it maximized
1391 viewParent->maximize();
1392 // mark it as Active child
1393 myMDIClient->setActiveChild(viewParent);
1394 // cast pointer myViewNet
1395 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1396 // set settings in view
1397 if (viewParent->getView() && (fileLoadedEvent->getSettingsFile().size() > 0)) {
1398 GUISettingsHandler settings(fileLoadedEvent->getSettingsFile(), true, true);
1399 settings.addSettings(viewParent->getView());
1400 viewParent->getView()->addDecals(settings.getDecals());
1401 settings.applyViewport(viewParent->getView());
1402 settings.setSnapshots(viewParent->getView());
1403 }
1404 // set network name on the caption
1405 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileLoadedEvent->getFile().c_str()));
1406 // force supermode network
1408 // update view port
1409 if (fileLoadedEvent->getViewportFromRegistry()) {
1410 Position off;
1411 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1412 Position p(off.x(), off.y(), 0);
1413 myViewNet->setViewportFromToRot(off, p, 0);
1414 }
1415 // load elements
1416 loadAdditionalElements("Loading");
1417 loadDemandElements("Loading");
1418 loadDataElements("Loading");
1419 loadMeanDataElements("Loading");
1420 // load selection
1421 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1423 }
1425 }
1426 // update app
1427 update();
1428 // restore focus
1429 setFocus();
1430}
1431
1432
1433void
1438
1439// ---------------------------------------------------------------------------
1440// private methods
1441// ---------------------------------------------------------------------------
1442
1443void
1445 // build file menu
1446 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1448 myFileMenuNeteditConfig = new FXMenuPane(this);
1449 myFileMenuSumoConfig = new FXMenuPane(this);
1450 myFileMenuTLS = new FXMenuPane(this);
1451 myFileMenuEdgeTypes = new FXMenuPane(this);
1452 myFileMenuAdditionals = new FXMenuPane(this);
1453 myFileMenuDemandElements = new FXMenuPane(this);
1454 myFileMenuDataElements = new FXMenuPane(this);
1455 myFileMenuMeanDataElements = new FXMenuPane(this);
1456 myFileMenuRecentNetworks = new FXMenuPane(this);
1457 myFileMenuRecentConfigs = new FXMenuPane(this);
1461 // add separator for recent files
1462 new FXMenuSeparator(myFileMenu);
1463 // build recent files
1466 new FXMenuSeparator(myFileMenu);
1467 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1468 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1469 // build modes menu
1470 myModesMenu = new FXMenuPane(this);
1472 myModesMenuTitle->setTarget(this);
1474 // build Supermode commands and hide it
1476 // add separator
1477 new FXSeparator(myModesMenu);
1478 // build modes menu commands
1480 // build edit menu
1481 myEditMenu = new FXMenuPane(this);
1483 // build edit menu commands
1485 // build separator
1486 new FXMenuSeparator(myEditMenu);
1487 // build view options
1491 // hide view options
1495 // build view menu commands
1497 // build separator
1498 new FXMenuSeparator(myEditMenu);
1499 // build front element menu commands
1501 // build separator
1502 new FXMenuSeparator(myEditMenu);
1503 // build open in sumo menu commands
1505 // build lock menu
1506 myLockMenu = new FXMenuPane(this);
1508 myLockMenuTitle->setTarget(this);
1510 // build lock menu commands
1512 // build processing menu (trigger netbuild computations)
1513 myProcessingMenu = new FXMenuPane(this);
1516 // build locate menu
1517 myLocatorMenu = new FXMenuPane(this);
1520 // build tools menu
1521 myToolsMenu = new FXMenuPane(this);
1522 myToolsAssignMenu = new FXMenuPane(this);
1523 myToolsDetectorMenu = new FXMenuPane(this);
1524 myToolsDistrictMenu = new FXMenuPane(this);
1525 myToolsDRTMenu = new FXMenuPane(this);
1526 myToolsEmissionsMenu = new FXMenuPane(this);
1527 myToolsImportMenu = new FXMenuPane(this);
1528 myToolsImportCityBrainMenu = new FXMenuPane(this);
1529 myToolsImportGTFSMenu = new FXMenuPane(this);
1530 myToolsImportVissim = new FXMenuPane(this);
1531 myToolsImportVisum = new FXMenuPane(this);
1532 myToolsNetMenu = new FXMenuPane(this);
1533 myToolsRouteMenu = new FXMenuPane(this);
1534 myToolsOutputMenu = new FXMenuPane(this);
1535 myToolsShapes = new FXMenuPane(this);
1536 myToolsTLS = new FXMenuPane(this);
1537 myToolsTriggerMenu = new FXMenuPane(this);
1538 myToolsTurnDefs = new FXMenuPane(this);
1539 myToolsVisualizationMenu = new FXMenuPane(this);
1540 myToolsXML = new FXMenuPane(this);
1542 // build tools menu cascasde
1543 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1544 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1545 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1547 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1556 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1557 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1558 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1562 // add separators between folders
1563 new FXMenuSeparator(myToolsMenu);
1564 new FXMenuSeparator(myToolsImportMenu);
1565 // create map with tool Menu panes and their associated folder
1572 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1574 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1575 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1582 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1585 // build tools
1587 // build windows menu
1588 myWindowMenu = new FXMenuPane(this);
1591 // build language menu
1593 // build help menu
1594 myHelpMenu = new FXMenuPane(this);
1597}
1598
1599
1600FXGLCanvas*
1602 // netedit uses only a single View, then return nullptr
1603 return nullptr;
1604}
1605
1606
1609 return 0;
1610}
1611
1612
1613double
1615 return 1;
1616}
1617
1618
1623
1624
1629
1630
1635
1636
1641
1642
1643void
1645 if (myViewNet && myViewNet->getNet()) {
1646 // show
1648 // set label depending of recomputing
1650 myRequireRecomputingButton->setText("");
1651 myRequireRecomputingButton->setTipText(TL("Network computed"));
1653 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1654 } else {
1655 myRequireRecomputingButton->setText(TL("Press F5"));
1656 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1658 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1659 }
1660 } else {
1661 // hide
1663 }
1664}
1665
1666
1667void
1668GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1669 // first check if net must be deleted
1670 if (myNet != nullptr) {
1671 delete myNet;
1672 myNet = nullptr;
1674 }
1675 // reset default filenames
1676 if (resetFilenames) {
1678 }
1679 // check if view has to be saved
1680 if (myViewNet) {
1682 // save decals and viewport for persistence (before they are cleared)
1686 // clear decals and release GPU textures
1687 if (myViewNet->makeCurrent()) {
1692 myViewNet->makeNonCurrent();
1693 }
1694 }
1695 // lock tracker
1696 myTrackerLock.lock();
1697 // remove trackers and other external windows
1698 while (!myGLWindows.empty()) {
1699 delete myGLWindows.front();
1700 }
1701 myViewNet = nullptr;
1702 for (FXMainWindow* const window : myTrackerWindows) {
1703 window->destroy();
1704 delete window;
1705 }
1706 myTrackerWindows.clear();
1707 // reset the caption
1708 setTitle(myTitlePrefix);
1709 // unlock tracker
1710 myTrackerLock.unlock();
1711 // remove coordinate information
1712 myGeoCoordinate->setText(TL("N/A"));
1713 myCartesianCoordinate->setText(TL("N/A"));
1714 myTestCoordinate->setText(TL("N/A"));
1715 myTestFrame->hide();
1717}
1718
1719
1720FXCursor*
1722 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1723}
1724
1725
1726void
1728 auto& neteditOptions = OptionsCont::getOptions();
1729 if (neteditOptions.getBool("new")) {
1730 // save output file
1731 const auto outputFile = neteditOptions.getString("output-file");
1732 // create new network reset all options
1734 // check if define network file using this ouput file
1735 if (!outputFile.empty()) {
1737 }
1738 } else {
1739 // set flag
1740 myAmLoading = true;
1741 // set status bar
1742 setStatusBarText(TL("Loading console arguments."));
1743 // load console arguments
1745 // add it into recent networks and configs
1748 }
1751 }
1752 }
1753}
1754
1755
1756void
1758 auto& neteditOptions = OptionsCont::getOptions();
1759 // save windows size and position
1761 // enable loading flag and disable reloading flag
1762 myAmLoading = true;
1763 // recenter view
1764 gSchemeStorage.saveViewport(0, 0, -1, 0);
1765 // fill (reset) all options
1766 GNELoadThread::fillOptions(neteditOptions);
1767 // set default options defined in GNELoadThread::setDefaultOptions(...)
1768 GNELoadThread::setDefaultOptions(neteditOptions);
1769 // update status bar
1770 setStatusBarText(TL("Creating new network."));
1771 // create new network
1773 // update window
1774 update();
1775}
1776
1777
1778void
1779GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1780 if (networkFile.empty()) {
1781 WRITE_ERROR(TL("Trying to load an empty network."));
1782 } else {
1783 auto& neteditOptions = OptionsCont::getOptions();
1784 // stop test before calling load thread
1785 if (myInternalTest) {
1787 }
1788 // store size, position and viewport
1790 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1791 // set flag
1792 myAmLoading = true;
1793 // fill (reset) all options
1794 myLoadThread->fillOptions(neteditOptions);
1795 // set default options defined in GNELoadThread::setDefaultOptions(...)
1796 myLoadThread->setDefaultOptions(neteditOptions);
1797 // update default net file
1799 // set status bar
1800 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1801 // load network
1803 // add it into recent nets
1804 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1805 }
1806}
1807
1808
1809void
1810GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1811 if (configurationFile.empty()) {
1812 WRITE_ERROR(TL("Trying to load an empty configuration."));
1813 } else {
1814 auto& neteditOptions = OptionsCont::getOptions();
1815 // store size, position and viewport
1817 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1818 // set flag
1819 myAmLoading = true;
1820 // fill (reset) all options
1821 myLoadThread->fillOptions(neteditOptions);
1822 // set default options defined in GNELoadThread::setDefaultOptions(...)
1823 myLoadThread->setDefaultOptions(neteditOptions);
1824 // set file to load
1825 neteditOptions.resetWritable();
1826 neteditOptions.set("configuration-file", configurationFile);
1827 // set status bar
1828 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1829 // load config
1831 // add it into recent configs
1832 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1833 }
1834}
1835
1836
1837void
1838GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1839 auto& neteditOptions = OptionsCont::getOptions();
1840 // store size, position and viewport
1842 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1843 // set flag
1844 myAmLoading = true;
1845 // fill (reset) all options
1846 myLoadThread->fillOptions(neteditOptions);
1847 // set default options defined in GNELoadThread::setDefaultOptions(...)
1848 myLoadThread->setDefaultOptions(neteditOptions);
1849 // recommended osm options
1850 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1851 neteditOptions.set("osm-files", OSMFile);
1852 neteditOptions.set("geometry.remove", "true");
1853 neteditOptions.set("ramps.guess", "true");
1854 neteditOptions.set("junctions.join", "true");
1855 neteditOptions.set("tls.guess-signals", "true");
1856 neteditOptions.set("tls.discard-simple", "true");
1857 // open netedit options dialog
1858 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1859 // open wizard dialog
1860 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1861 // needed to set projection parameters
1862 NIFrame::checkOptions(neteditOptions);
1863 // set file to load
1864 neteditOptions.resetWritable();
1865 neteditOptions.set("configuration-file", OSMFile);
1866 // set status bar
1867 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1868 // load config
1870 }
1871}
1872
1873void
1874GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1875 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1876 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1877}
1878
1879
1880long
1881GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
1882 // open question dialog box
1883 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
1884 TL("Recompute with volatile options"),
1885 TL("Changes produced in the net due a recomputing with"),
1886 TL("volatile options cannot be undone. Continue?"));
1887 // check result
1888 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1889 // save all elements
1890 onCmdSaveAdditionalElements(sender, sel, ptr);
1891 onCmdSaveDemandElements(sender, sel, ptr);
1892 onCmdSaveDataElements(sender, sel, ptr);
1893 onCmdSaveMeanDataElements(sender, sel, ptr);
1894 // compute with volatile options
1895 myNet->computeNetwork(this, true, true);
1897 }
1898 return 1;
1899}
1900
1901
1902bool
1905 myConsoleOptionsLoaded = false;
1906 return true;
1907 } else {
1908 return false;
1909 }
1910}
1911
1912
1917
1918
1923
1924
1925void
1929
1930
1931long
1932GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1933 // check that currently there is a View
1934 if (myViewNet) {
1935 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1936 }
1937 return 1;
1938}
1939
1940
1941long
1942GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1943 // check that currently there is a View
1944 if (myViewNet) {
1945 myViewNet->onCmdSetMode(sender, sel, ptr);
1946 }
1947 return 1;
1948}
1949
1950
1951long
1952GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1953 if (myViewNet) {
1954 // check if we're calling the functions using internal test
1955 switch (FXSELID(sel)) {
1958 break;
1959 case MID_GNE_LOCK_EDGE:
1961 break;
1962 case MID_GNE_LOCK_LANE:
1964 break;
1967 break;
1970 break;
1973 break;
1976 break;
1977 case MID_GNE_LOCK_WIRE:
1979 break;
1980 case MID_GNE_LOCK_TAZ:
1982 break;
1985 break;
1986 case MID_GNE_LOCK_POI:
1988 break;
1991 break;
1994 break;
1995 case MID_GNE_LOCK_ROUTE:
1997 break;
2000 break;
2003 break;
2006 break;
2007 case MID_GNE_LOCK_WALK:
2009 break;
2010 case MID_GNE_LOCK_RIDE:
2012 break;
2015 break;
2018 break;
2021 break;
2022 case MID_GNE_LOCK_STOP:
2024 break;
2027 break;
2030 break;
2033 break;
2034 default:
2035 break;
2036 }
2038 }
2039 return 1;
2040}
2041
2042
2043long
2044GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2045 // lock all
2048 return 1;
2049}
2050
2051
2052long
2054 // unlock all
2057 return 1;
2058}
2059
2060
2061long
2063 if (myViewNet) {
2064 myViewNet->update();
2065 }
2066 return 1;
2067}
2068
2069
2070long
2071GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2072 if (myViewNet) {
2074 // supermode network
2080 myLockMenuTitle->enable();
2081 } else {
2082 myLockMenuTitle->disable();
2083 }
2085 // supermode demand
2090 myLockMenuTitle->enable();
2091 } else {
2092 myLockMenuTitle->disable();
2093 }
2095 // supermode data
2099 myLockMenuTitle->enable();
2100 } else {
2101 myLockMenuTitle->disable();
2102 }
2103 } else {
2104 myLockMenuTitle->disable();
2105 }
2106 } else {
2107 myLockMenuTitle->disable();
2108 }
2109 return 1;
2110}
2111
2112
2113long
2114GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2115 // first check if there is a view
2116 if (myViewNet) {
2117 // process depending of supermode
2119 // check what FXMenuCommand was called
2120 switch (FXSELID(sel)) {
2122 myNet->computeNetwork(this, true, false);
2124 break;
2126 computeJunctionWithVolatileOptions(sender, sel, ptr);
2127 break;
2130 break;
2133 break;
2136 break;
2137 default:
2138 break;
2139 }
2141 // check what FXMenuCommand was called
2142 switch (FXSELID(sel)) {
2146 break;
2149 break;
2152 break;
2155 break;
2158 break;
2159 default:
2160 break;
2161 }
2162 }
2163 // refresh to update undo-redo button
2164 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2165 }
2166 return 1;
2167}
2168
2169
2170long
2171GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2172 // get extra arguments
2173 std::string extraArg;
2175 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2176 }
2177 FXRegistry reg("SUMO netedit", "netedit");
2178 std::string netedit = "netedit";
2179 const char* sumoPath = getenv("SUMO_HOME");
2180 if (sumoPath != nullptr) {
2181#ifdef DEBUG
2182 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2183#else
2184 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2185#endif
2186 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2187 netedit = "\"" + newPath + "\"";
2188 }
2189 }
2190 std::string cmd = netedit + extraArg;
2191 // start in background
2192#ifndef WIN32
2193 cmd = cmd + " &";
2194#else
2195 // see "help start" for the parameters
2196 cmd = "start /B \"\" " + cmd;
2197#endif
2198 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2199 // yay! fun with dangerous commands... Never use this over the internet
2201 return 1;
2202}
2203
2204
2205long
2206GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2207 // input parameters
2208 std::string inputParameters;
2209 // if we have only a network, then load directly without creating a SumoConfig
2211 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2212 // force save network
2213 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2214 // network wasn't saved, then stop
2215 return 0;
2216 }
2217 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2218 // write info
2220 } else {
2221 // force save SumoConfig
2222 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2223 // SumoConfig wasn't saved, then stop
2224 return 0;
2225 }
2226 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2227 // write info
2228 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2229 }
2230 // save current viewport in registry
2231 FXRegistry reg("SUMO GUI", "sumo-gui");
2232 reg.read();
2233 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2234 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2235 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2236 reg.write();
2237 // declare executable
2238 std::string sumoGuiExecutable = "sumo-gui";
2239 // if SUMO_HOME is defined, update executable
2240 const char* sumoHome = getenv("SUMO_HOME");
2241 if (sumoHome != nullptr) {
2242 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2243 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2244 sumoGuiExecutable = "\"" + newPath + "\"";
2245 }
2246 }
2247 // declare command
2248 std::string cmd = sumoGuiExecutable + inputParameters;
2249 // start in background
2250#ifndef WIN32
2251 cmd = cmd + " &";
2252#else
2253 // see "help start" for the parameters
2254 cmd = "start /B \"\" " + cmd;
2255#endif
2256 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2257 // yay! fun with dangerous commands... Never use this over the internet
2259 return 1;
2260}
2261
2262
2263long
2264GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2265 // check that view exists
2266 if (myViewNet) {
2267 // first check if we're selecting a subset of edges in TAZ Frame
2269 // clear current selection
2271 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2272 // check if stop select parent
2274 // and stop select paretn
2276 } else {
2277 // clear inspected elements
2279 }
2280 } else {
2281 // abort current operation
2283 }
2284 }
2285 return 1;
2286}
2287
2288
2289long
2290GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2291 // check that view exists
2292 if (myViewNet) {
2294 }
2295 return 1;
2296}
2297
2298
2299long
2300GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2301 // check that view exists
2302 if (myViewNet) {
2304 }
2305 return 1;
2306}
2307
2308
2309long
2310GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2311 // check that view exists
2312 if (myViewNet) {
2314 }
2315 return 1;
2316}
2317
2318
2319long
2320GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2321 // check that view exists
2322 if (myViewNet) {
2324 }
2325 return 1;
2326}
2327
2328
2329long
2331 // check that view exists
2332 if (myViewNet) {
2334 }
2335 return 1;
2336}
2337
2338
2339long
2340GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2341 // check that view exists
2342 if (myViewNet) {
2344 // refresh flow frames
2345 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2347 }
2348 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2350 }
2351 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2353 }
2354 // refresh inspector frame
2355 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2357 }
2358 }
2359 return 1;
2360}
2361
2362
2363long
2364GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2365 // check that view exists
2366 if (myViewNet) {
2368 }
2369 return 1;
2370}
2371
2372
2373long
2374GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2377 }
2378 return 1;
2379}
2380
2381
2382long
2383GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2384 // enable or disable sender element depending of viewNet
2385 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2386}
2387
2388
2389long
2392 return 1;
2393}
2394
2395
2396long
2397GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2398 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2399 return 1;
2400}
2401
2402
2403long
2404GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2406}
2407
2408
2409long
2410GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2411 // check that view exists
2412 if (myViewNet) {
2414 }
2415 return 1;
2416}
2417
2418
2419long
2420GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2421 // check that view exists
2422 if (myViewNet) {
2424 }
2425 return 1;
2426}
2427
2428
2429long
2430GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2431 // check that view exists
2432 if (myViewNet) {
2433 // Call manually toggle grid function
2434 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2435 }
2436 return 1;
2437}
2438
2439
2440long
2441GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2442 // check that view exists
2443 if (myViewNet) {
2444 // Call manually toggle junction shape function
2445 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2446 }
2447 return 1;
2448}
2449
2450
2451long
2453 if (myViewNet) {
2454 // check if all element are front
2455 bool allFront = true;
2456 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2457 if (!AC->isMarkedForDrawingFront()) {
2458 allFront = false;
2459 break;
2460 }
2461 }
2462 // first unfront all elements
2464 // only mark front elements if we have at least one non-front element
2465 if (!allFront) {
2466 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2467 AC->markForDrawingFront();
2468 }
2469 }
2470 myViewNet->update();
2472 }
2473 return 1;
2474}
2475
2476
2477long
2478GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2479 // first check that we have a ViewNet
2480 if (myViewNet) {
2481 // first check what selector was called
2482 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2483 // check that numericalKeyPressed is valid
2484 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2485 return 0;
2486 }
2487 // declare a vector in which save visible menu commands
2488 std::vector<MFXCheckableButton*> visibleMenuCommands;
2489 // get common, network and demand visible menu commands
2493 // now check that numericalKeyPressed isn't greater than visible view options
2494 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2495 return 0;
2496 }
2497 // toggle edit options
2499 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2500 return 1;
2502 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2503 return 1;
2505 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2506 return 1;
2507 }
2508 }
2509 return 0;
2510}
2511
2512
2513long
2514GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2515 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2516 return 1;
2517}
2518
2519
2520long
2521GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2522 // update in every version
2523 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2524 return 1;
2525}
2526
2527
2528long
2529GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2530 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2531 return 1;
2532}
2533
2534
2535long
2538 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2539 } else {
2540 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2541 }
2542}
2543
2544
2545long
2546GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2547 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2548 myAllowUndoRedo = true;
2549 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2550 } else {
2551 myAllowUndoRedo = false;
2552 // drop undo-redo list after changing flag
2553 myUndoList->clear();
2554 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2555 }
2556}
2557
2558
2559long
2561 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2563 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2564 } else {
2565 myAllowUndoRedoLoading = false;
2566 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2567 }
2568}
2569
2570
2571long
2572GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2573 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2574 return 1;
2575}
2576
2577
2578long
2579GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2580 // create and open feedback dialog
2581 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2582 feedback->create();
2583 feedback->show(PLACEMENT_OWNER);
2584 return 1;
2585}
2586
2587
2588long
2590 auto& neteditOptions = OptionsCont::getOptions();
2591 // open netedit option dialog
2592 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2593 // continue depending of result
2594 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2595 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2596 NBFrame::checkOptions(neteditOptions);
2597 NWFrame::checkOptions(neteditOptions);
2598 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2599 // check if mark netedit config as unsaved
2600 if (neteditOptionsDialog.isOptionModified() && myNet) {
2602 // aditionally, check if network requires saving
2603 if (neteditOptionsDialog.requireSaveNetwork()) {
2605 }
2606 }
2607 }
2608 return 1;
2609}
2610
2611
2612long
2614 // open sumo option dialog
2615 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2616 // continue depending of result
2617 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2619 }
2620 return 1;
2621}
2622
2623
2624long
2627 return 1;
2628}
2629
2630
2631long
2633 // open netgenerate options dialog
2635 return 1;
2636}
2637
2638
2639long
2640GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2641 // Check conditions
2642 if (myViewNet == nullptr) {
2643 return 0;
2644 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2645 return 0;
2646 } else {
2647 // check supermode (currently ignore supermode data)
2650 // abort if user doesn't press "yes"
2652 return 0;
2653 }
2654 }
2656 // update current show frame after undo
2659 }
2660 // update file bucket options (needed to maintain integrity)
2662 // update manually undo/redo menu commands (see #6005)
2665 // update toolbar undo-redo buttons
2667 return 1;
2668 }
2669}
2670
2671
2672long
2673GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2674 // Check conditions
2675 if (myViewNet == nullptr) {
2676 return 0;
2677 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2678 return 0;
2679 } else {
2680 // check supermode (currently ignore supermode data)
2683 // abort if user doesn't press "yes"
2685 return 0;
2686 }
2687 }
2689 // update current show frame after redo
2692 }
2693 // update file bucket options (needed to maintain integrity)
2695 // update manually undo/redo menu commands (see #6005)
2698 // update toolbar undo-redo buttons
2700 return 1;
2701 }
2702}
2703
2704
2705long
2707 // open UndoList Dialog
2708 GNEUndoListDialog(this);
2709 return 1;
2710}
2711
2712
2713long
2714GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2715 // check if net exist and there is something to undo/redo
2716 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2717 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2718 } else {
2719 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2720 }
2721 return 1;
2722}
2723
2724
2725long
2727 // first check viewNet
2729 // update demand path calculator
2731 }
2732 return 1;
2733}
2734
2735
2736long
2737GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2738 // Prepared for #6042
2739 return 1;
2740}
2741
2742
2743long
2744GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2745 // Prepared for #6042
2746 return 1;
2747}
2748
2749
2750long
2751GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2752 // Prepared for #6042
2753 return 1;
2754}
2755
2756
2757long
2758GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2759 // first check if myViewNet exist
2760 if (myViewNet) {
2761 // call set template in inspector frame
2763 }
2764 return 1;
2765}
2766
2767
2768long
2769GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2770 // first check if myViewNet exist
2771 if (myViewNet) {
2772 // call copy template in inspector frame
2774 }
2775 return 1;
2776}
2777
2778
2779long
2780GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2781 // first check if myViewNet exist
2782 if (myViewNet) {
2783 // call clear template in inspector frame
2785 }
2786 return 1;
2787}
2788
2789
2790long
2791GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2792 // check if net exist
2793 if (myNet) {
2795 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2796 } else {
2798 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2799 }
2800}
2801
2802
2803long
2804GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2805 // check if at least there is one edge in the network
2806 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2807 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2808 } else {
2809 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2810 }
2811}
2812
2813
2814long
2815GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2816 // check if net, viewnet and front attribute exist
2817 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2818 // check if all element are front
2819 bool allFront = true;
2820 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2821 if (!AC->isMarkedForDrawingFront()) {
2822 allFront = false;
2823 break;
2824 }
2825 }
2826 // set button text depending of all selected
2827 if (allFront) {
2828 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2829 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2830 } else {
2831 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2832 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2833 }
2834 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2835 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2836 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2837 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2838 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2839 } else {
2840 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2841 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2842 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2843 }
2844}
2845
2846
2847long
2848GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2849 if (myNet == nullptr) {
2850 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2851 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2852 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2853 } else {
2854 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2855 }
2856}
2857
2858
2859long
2860GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2861 if (myNet == nullptr) {
2862 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2864 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2865 } else {
2866 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2867 }
2868}
2869
2870
2871long
2873 if (myNet == nullptr) {
2874 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2875 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2876 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2877 } else {
2878 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2879 }
2880}
2881
2882
2883long
2884GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2885 if (myNet == nullptr) {
2886 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2887 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2888 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2889 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2890 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2891 } else {
2892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2893 }
2894}
2895
2896
2897long
2898GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2899 if (myNet == nullptr) {
2900 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2901 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2902 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2903 } else {
2904 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2905 }
2906
2907}
2908
2909
2910long
2911GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2912 if (myNet == nullptr) {
2913 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2915 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2916 } else {
2917 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2918 }
2919}
2920
2921
2922long
2923GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2924 if (myNet == nullptr) {
2925 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2926 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2927 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2928 } else {
2929 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2930 }
2931
2932}
2933
2934
2935long
2936GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2937 if (myNet == nullptr) {
2938 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2939 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2940 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2941 } else {
2942 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2943 }
2944
2945}
2946
2947
2948long
2949GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2950 if (myNet == nullptr) {
2951 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2952 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2953 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2954 } else {
2955 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2956 }
2957}
2958
2959
2960long
2962 if (myNet == nullptr) {
2963 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2964 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2965 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2966 } else {
2967 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2968 }
2969
2970}
2971
2972
2973long
2974GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2975 return myUndoList->onUpdUndo(sender, sel, ptr);
2976}
2977
2978
2979long
2980GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2981 return myUndoList->onUpdRedo(sender, sel, ptr);
2982}
2983
2984
2985long
2986GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2987 // first check viewNet
2988 if (myViewNet) {
2989 // check supermode network
2991 // disable
2992 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2994 // disable
2995 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2996 } else {
2997 // enable
2998 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2999 }
3000 } else {
3001 // disable
3002 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3003 }
3004}
3005
3006
3007long
3008GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3009 // check viewNet
3010 if (myViewNet) {
3011 // continue depending of selector
3012 switch (FXSELID(sel)) {
3013 // Network
3015 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3017 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3019 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3021 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3023 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3025 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3027 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3029 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3031 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3033 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3035 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3037 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3039 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3041 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3043 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3045 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3046 // Demand
3048 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3050 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3052 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3054 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3056 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3058 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3060 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3062 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3064 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3066 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3068 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3069 // Data
3071 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3073 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3075 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3077 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3079 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3081 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3083 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3085 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3086 default:
3087 return 0;
3088 }
3089 } else {
3090 return 0;
3091 }
3092}
3093
3094
3095long
3096GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3097 // get menuCheck
3098 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3099 // check viewNet
3100 if (myViewNet && menuCheck) {
3101 // continue depending of selector
3102 switch (FXSELID(sel)) {
3103 // Network
3106 menuCheck->setCheck(TRUE);
3107 } else {
3108 menuCheck->setCheck(FALSE);
3109 }
3110 break;
3113 menuCheck->setCheck(TRUE);
3114 } else {
3115 menuCheck->setCheck(FALSE);
3116 }
3117 break;
3120 menuCheck->setCheck(TRUE);
3121 } else {
3122 menuCheck->setCheck(FALSE);
3123 }
3124 break;
3127 menuCheck->setCheck(TRUE);
3128 } else {
3129 menuCheck->setCheck(FALSE);
3130 }
3131 break;
3134 menuCheck->setCheck(TRUE);
3135 } else {
3136 menuCheck->setCheck(FALSE);
3137 }
3138 break;
3141 menuCheck->setCheck(TRUE);
3142 } else {
3143 menuCheck->setCheck(FALSE);
3144 }
3145 break;
3148 menuCheck->setCheck(TRUE);
3149 } else {
3150 menuCheck->setCheck(FALSE);
3151 }
3152 break;
3155 menuCheck->setCheck(TRUE);
3156 } else {
3157 menuCheck->setCheck(FALSE);
3158 }
3159 break;
3162 menuCheck->setCheck(TRUE);
3163 } else {
3164 menuCheck->setCheck(FALSE);
3165 }
3166 break;
3169 menuCheck->setCheck(TRUE);
3170 } else {
3171 menuCheck->setCheck(FALSE);
3172 }
3173 break;
3176 menuCheck->setCheck(TRUE);
3177 } else {
3178 menuCheck->setCheck(FALSE);
3179 }
3180 break;
3183 menuCheck->setCheck(TRUE);
3184 } else {
3185 menuCheck->setCheck(FALSE);
3186 }
3187 break;
3190 menuCheck->setCheck(TRUE);
3191 } else {
3192 menuCheck->setCheck(FALSE);
3193 }
3194 break;
3197 menuCheck->setCheck(TRUE);
3198 } else {
3199 menuCheck->setCheck(FALSE);
3200 }
3201 break;
3204 menuCheck->setCheck(TRUE);
3205 } else {
3206 menuCheck->setCheck(FALSE);
3207 }
3208 break;
3211 menuCheck->setCheck(TRUE);
3212 } else {
3213 menuCheck->setCheck(FALSE);
3214 }
3215 break;
3216 // Demand
3219 menuCheck->setCheck(TRUE);
3220 } else {
3221 menuCheck->setCheck(FALSE);
3222 }
3223 break;
3226 menuCheck->setCheck(TRUE);
3227 } else {
3228 menuCheck->setCheck(FALSE);
3229 }
3230 break;
3233 menuCheck->setCheck(TRUE);
3234 } else {
3235 menuCheck->setCheck(FALSE);
3236 }
3237 break;
3240 menuCheck->setCheck(TRUE);
3241 } else {
3242 menuCheck->setCheck(FALSE);
3243 }
3244 break;
3247 menuCheck->setCheck(TRUE);
3248 } else {
3249 menuCheck->setCheck(FALSE);
3250 }
3251 break;
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 // special case for lock persons
3267 menuCheck->enable();
3268 } else {
3269 menuCheck->disable();
3270 }
3271 break;
3274 menuCheck->setCheck(TRUE);
3275 } else {
3276 menuCheck->setCheck(FALSE);
3277 }
3278 break;
3281 menuCheck->setCheck(TRUE);
3282 } else {
3283 menuCheck->setCheck(FALSE);
3284 }
3285 // special case for lock containers
3287 menuCheck->enable();
3288 } else {
3289 menuCheck->disable();
3290 }
3291 break;
3294 menuCheck->setCheck(TRUE);
3295 } else {
3296 menuCheck->setCheck(FALSE);
3297 }
3298 break;
3301 menuCheck->setCheck(TRUE);
3302 } else {
3303 menuCheck->setCheck(FALSE);
3304 }
3305 break;
3306 // Data
3309 menuCheck->setCheck(TRUE);
3310 } else {
3311 menuCheck->setCheck(FALSE);
3312 }
3313 break;
3316 menuCheck->setCheck(TRUE);
3317 } else {
3318 menuCheck->setCheck(FALSE);
3319 }
3320 break;
3323 menuCheck->setCheck(TRUE);
3324 } else {
3325 menuCheck->setCheck(FALSE);
3326 }
3327 break;
3330 menuCheck->setCheck(TRUE);
3331 } else {
3332 menuCheck->setCheck(FALSE);
3333 }
3334 break;
3337 menuCheck->setCheck(TRUE);
3338 } else {
3339 menuCheck->setCheck(FALSE);
3340 }
3341 break;
3344 menuCheck->setCheck(TRUE);
3345 } else {
3346 menuCheck->setCheck(FALSE);
3347 }
3348 break;
3349
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;
3364 default:
3365 break;
3366 }
3367 }
3368 return 0;
3369}
3370
3371
3372long
3373GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3374 auto& neteditOptions = OptionsCont::getOptions();
3375 // check if we're forcing to saving additionals
3377 neteditOptions.getBool("force-saving")) {
3378 WRITE_MESSAGE(TL("Force save network"));
3379 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3380 // nothing to save
3381 return 1;
3382 }
3383 // first check if we have to set the output filename
3386 }
3387 // function onCmdSaveNetworkAs must be executed if this is the first save
3389 return onCmdSaveNetworkAs(sender, sel, ptr);
3390 } else {
3391 // always recompute before saving
3392 myNet->computeNetwork(this);
3393 bool saved = false;
3394 try {
3395 // obtain invalid networkElements (currently only edges or crossings
3396 std::vector<GNENetworkElement*> invalidNetworkElements;
3397 // iterate over crossings and edges
3398 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3399 if (!edge.second->isNetworkElementValid()) {
3400 invalidNetworkElements.push_back(edge.second);
3401 }
3402 }
3403 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3404 if (!crossing.second->isNetworkElementValid()) {
3405 invalidNetworkElements.push_back(crossing.second);
3406 }
3407 }
3408 // if there are invalid network elements, open GNEFixNetworkElements
3409 if (invalidNetworkElements.size() > 0) {
3410 // create fix network elements dialog
3411 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3412 // continue depending of result
3413 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3414 // Save network
3415 myNet->saveNetwork();
3416 saved = true;
3417 } else {
3418 // stop
3419 return 0;
3420 }
3421 } else {
3422 // Save network
3423 myNet->saveNetwork();
3424 saved = true;
3425 }
3426 } catch (IOError& e) {
3427 // open error message box
3428 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3429 }
3430 if (saved) {
3431 // write info
3433 // After saving a net successfully, add it into Recent Nets list.
3436 } else {
3439 return 0;
3440 }
3441 return 1;
3442 }
3443}
3444
3445
3446long
3447GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3448 // get network file file
3449 const GNEFileDialog networkFileDialog(this, TL("network file"),
3454 // continue depending of dialog
3455 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3456 // update default network file
3458 // update netedit title with the network name
3459 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3460 // enable save network
3462 // save network
3463 return onCmdSaveNetwork(sender, sel, ptr);
3464 } else {
3465 return 0;
3466 }
3467}
3468
3469
3470long
3471GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3472 // first check if we have to set the output filename
3475 }
3476 // function onCmdSaveNetworkAs must be executed if this is the first save
3478 return onCmdSavePlainXMLAs(sender, sel, ptr);
3479 } else {
3480 // start saving plain XML
3481 getApp()->beginWaitCursor();
3482 try {
3483 // we use the prefix instead the netconvert config
3485 // save plain xml
3486 myNet->savePlain(plainXMLPrefix, myNetconvertOptions);
3487 // write info
3488 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3489 } catch (IOError& e) {
3490 // open message box
3491 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3492 }
3493 // end saving plain XML
3494 getApp()->endWaitCursor();
3495 // set focus again in viewNet
3496 myViewNet->setFocus();
3497 }
3498 return 1;
3499}
3500
3501
3502long
3503GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3504 // get neteditConfig filename
3505 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3510 // continue depending of dialog
3511 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3512 // update default netconvert file
3514 // save plain xml
3515 return onCmdSavePlainXML(sender, sel, ptr);
3516 }
3517 return 1;
3518}
3519
3520
3521long
3523 // get neteditConfig filename
3524 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3529 // continue depending of dialog
3530 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3531 getApp()->beginWaitCursor();
3532 try {
3533 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3534 // write info
3535 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3536 } catch (IOError& e) {
3537 // opening error message
3538 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3539 }
3540 getApp()->endWaitCursor();
3541 // set focus again in viewNet
3542 myViewNet->setFocus();
3543 }
3544 return 1;
3545}
3546
3547
3548long
3549GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3550 // first check if netedit config is already saved
3552 return 1;
3553 }
3554 // Check if configuration file was already set at start of netedit or with a previous save
3556 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3557 } else {
3558 // save all elements giving automatic names based on patter if their file isn't defined
3559 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3560 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3561 return 0;
3562 }
3563 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3564 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3565 return 0;
3566 }
3567 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3568 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3569 return 0;
3570 }
3571 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3572 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3573 return 0;
3574 }
3575 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3576 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3577 return 0;
3578 }
3579 // get netedit config file
3581 // configuration
3582 std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3583 if (out.good()) {
3584 const auto& neteditOptions = OptionsCont::getOptions();
3585 // write netedit config
3586 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3587 // write info
3588 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3589 // config saved
3591 // After saving a config successfully, add it into recent configs
3592 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3593 // if we have a sumo config defined, save it also
3595 // get SumoConfig file
3597 std::ofstream sumoCfg(StringUtils::transcodeToLocal(sumoConfigFile));
3598 if (sumoCfg.good()) {
3599 // before saving sumo config, check if force enable option junction-taz
3601 mySumoOptions.set("junction-taz", "true");
3602 }
3603 // write SUMO config
3604 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3605 // write info
3606 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3607 // After saving a config successfully, add it into recent configs
3608 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3609 }
3610 }
3611 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3612 if (neteditOptions.getBool("autosave-netconvert-file")) {
3613 onCmdSavePlainXML(sender, sel, ptr);
3614 }
3615 } else {
3616 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3617 }
3618 out.close();
3619 return 1;
3620 }
3621}
3622
3623
3624long
3625GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3626 // get neteditConfig filename
3627 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3632 // continue depending of dialog
3633 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3634 // set file in file bucket handler
3636 // mark netedit config as unsaved
3638 // continue saving netedit config
3639 return onCmdSaveNeteditConfig(sender, sel, ptr);
3640 } else {
3641 return 0;
3642 }
3643}
3644
3645
3646long
3647GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3648 // check if enable or disable save netedit config button
3649 if (myNet == nullptr) {
3650 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3652 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3653 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3654 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3655 } else {
3656 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3657 }
3658 // check if enable/disable save individual files
3659 if (myNet) {
3663 } else {
3665 }
3666 }
3667 return 1;
3668}
3669
3670
3671long
3672GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3673 // first check if netedit config is already saved
3675 return 1;
3676 }
3677 // obtain netedit option container
3678 auto& neteditOptions = OptionsCont::getOptions();
3679 // reset containers
3680 neteditOptions.resetWritable();
3682 // Check if configuration file was already set at start of netedit or with a previous save
3684 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3685 } else {
3686 // save all elements giving automatic names based on patter in their file isn't defined
3687 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3688 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3689 return 0;
3690 }
3691 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3692 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3693 return 0;
3694 }
3695 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3696 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3697 return 0;
3698 }
3699 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3700 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3701 return 0;
3702 }
3703 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3704 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3705 return 0;
3706 }
3707 // get SumoConfig file
3709 // confinguration
3710 std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3711 if (out.good()) {
3712 // before saving sumo config, check if force enable option junction-taz
3714 mySumoOptions.set("junction-taz", "true");
3715 }
3716 // write SUMO config
3717 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3718 // write info
3719 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3720 // After saving a config successfully, add it into recent configs
3721 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3722 // if we have a netedit cong defined, save it also
3724 // get netedit config file
3726 // configuration
3727 std::ofstream neteditCfg(StringUtils::transcodeToLocal(neteditConfigFile));
3728 if (neteditCfg.good()) {
3729 // write netedit config
3730 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3731 // write info
3732 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3733 // config saved
3735 // After saving a config successfully, add it into recent configs
3736 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3737 }
3738 }
3739 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3740 if (neteditOptions.getBool("autosave-netconvert-file")) {
3741 onCmdSavePlainXML(sender, sel, ptr);
3742 }
3744 } else {
3745 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3746 }
3747 out.close();
3748 return 1;
3749 }
3750}
3751
3752
3753long
3754GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3755 // get sumoConfig filename
3756 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3761 // continue depending of dialog
3762 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3763 // set sumo config
3765 // mark netedit config as unsaved
3767 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3769 return onCmdSaveNeteditConfig(sender, sel, ptr);
3770 } else {
3771 return onCmdSaveSumoConfig(sender, sel, ptr);
3772 }
3773 } else {
3774 return 0;
3775 }
3776}
3777
3778
3779long
3780GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3781 if (myNet == nullptr) {
3782 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3784 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3785 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3786 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3787 } else {
3788 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3789 }
3790}
3791
3792
3793long
3794GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3795 // Check if TLS Programs file was already set at start of netedit or with a previous save
3797 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3798 } else {
3799 // Start saving TLS Programs
3800 getApp()->beginWaitCursor();
3801 try {
3802 // compute before saving
3803 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3805 // write info
3807 } catch (IOError& e) {
3808 // open error message box
3809 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3810 }
3812 getApp()->endWaitCursor();
3813 // set focus again in viewNet
3814 myViewNet->setFocus();
3815 }
3816 return 1;
3817}
3818
3819
3820long
3821GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3822 if (myNet == nullptr) {
3823 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3824 } else {
3825 // check if there is at least one TLS
3826 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3827 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3828 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3829 }
3830 }
3831 // no TLS, then disable
3832 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3833 }
3834}
3835
3836
3837long
3838GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3839 // Check if edgeType file was already set at start of netedit or with a previous save
3841 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3842 } else {
3843 // Start saving edgeTypes
3844 getApp()->beginWaitCursor();
3845 try {
3847 // save edge types
3848 myNet->saveEdgeTypes(edgeTypeFile);
3849 // write info
3850 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
3851 } catch (IOError& e) {
3852 // open error message box
3853 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3854 }
3856 getApp()->endWaitCursor();
3857 }
3858 return 1;
3859}
3860
3861
3862long
3863GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3864 // check if net exist and there are edge types
3865 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3866 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3867 } else {
3868 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3869 }
3870 return 1;
3871}
3872
3873
3874long
3875GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
3876 // get TLS file
3877 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
3882 // continue depending of dialog
3883 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3884 // set tls type in bucket
3886 // enable save netedit config
3888 // set focus again in viewNet
3889 myViewNet->setFocus();
3890 // save TLS Programs
3891 return onCmdSaveTLSPrograms(sender, sel, ptr);
3892 } else {
3893 return 1;
3894 }
3895}
3896
3897
3898long
3899GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
3900 // get network file file
3901 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
3906 // continue depending of dialog
3907 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3908 // set tls type in bucket
3910 // enable save netedit config
3912 // set focus again in viewNet
3913 myViewNet->setFocus();
3914 // save edgeTypes
3915 return onCmdSaveEdgeTypes(sender, sel, ptr);
3916 } else {
3917 return 1;
3918 }
3919}
3920
3921
3922long
3924 // get file
3925 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
3930 // continue depending of dialog
3931 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3932 // flag for save current saving status
3933 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3934 // get (or create) bucket for this new file
3935 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
3936 // disable validation for additionals
3937 XMLSubSys::setValidation("never", "auto", "auto");
3938 // Create additional handler
3939 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3940 // begin undoList operation
3941 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
3942 // Run parser
3943 if (!generalHandler.parse()) {
3944 // write error
3945 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
3946 } else {
3947 // write info
3948 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
3949 // enable save if there is errors loading additionals
3950 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3952 }
3953 }
3954 // end undoList operation
3955 myUndoList->end();
3956 // restore validation for additionals
3957 XMLSubSys::setValidation("auto", "auto", "auto");
3958 // check if clear undoList
3960 myUndoList->clear();
3961 }
3962 update();
3963 }
3964 return 1;
3965}
3966
3967
3968long
3970 // disable validation for additionals
3971 XMLSubSys::setValidation("never", "auto", "auto");
3972 // begin undoList operation
3973 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
3974 // clear additionals
3976 // reload additional elements stored in options
3977 loadAdditionalElements("Reloading");
3978 // end undoList operation
3979 myUndoList->end();
3980 // restore validation for additionals
3981 XMLSubSys::setValidation("auto", "auto", "auto");
3982 // check if clear undoList
3984 myUndoList->clear();
3985 }
3986 update();
3987 return 1;
3988}
3989
3990
3991long
3992GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
3993 if (myViewNet == nullptr) {
3994 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3996 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3997 } else {
3998 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3999 }
4000}
4001
4002
4003long
4004GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4005 const auto savingFileHandler = myFileBucketHandler;
4006 // get option container
4007 auto& neteditOptions = OptionsCont::getOptions();
4008 // check if we're forcing to saving additionals
4010 neteditOptions.getBool("force-saving") &&
4012 WRITE_MESSAGE(TL("Force save additional elements"));
4013 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4014 // nothing to save
4015 return 1;
4016 }
4017 // check if we have to define a default filename
4019 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4020 }
4021 // check if we have to open save as dialog
4022 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4023 // choose file to save
4024 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4025 } else {
4026 // always recompute before saving
4027 myNet->computeNetwork(this);
4028 try {
4029 // compute before saving (for detectors positions)
4030 myNet->computeNetwork(this);
4031 // save additionals
4032 const bool savingResult = myNet->saveAdditionals();
4033 // show info
4034 if (savingResult) {
4035 WRITE_MESSAGE(TL("Additionals saved."));
4036 return 1;
4037 } else {
4038 WRITE_MESSAGE(TL("Saving additional aborted."));
4039 return 0;
4040 }
4041 } catch (IOError& e) {
4042 // open error message box
4043 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4044 }
4045 return 0;
4046 }
4047}
4048
4049
4050long
4051GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4052 // get additional file
4053 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4058 // continue depending of dialog
4059 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4060 // update default name
4062 // save additional
4063 return onCmdSaveAdditionalElements(sender, sel, ptr);
4064 } else {
4065 return 0;
4066 }
4067}
4068
4069
4070long
4071GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4072 // get additional file
4073 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4078 // continue depending of dialog
4079 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4080 // use the file as default file
4082 // begin undoList operation
4083 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4084 // iterate over all demand elementes and change file
4085 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4086 for (const auto& additionalElement : additionalElementTag.second) {
4087 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4088 }
4089 }
4090 // end undoList operation
4091 myUndoList->end();
4092 // save additionals
4094 return onCmdSaveAdditionalElements(sender, sel, ptr);
4095 } else {
4096 return 0;
4097 }
4098}
4099
4100
4101long
4103 // get juPedSim file
4104 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4109 // continue depending of dialog
4110 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4111 try {
4112 // save additionals
4113 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4114 // set focus again in viewNet
4115 myViewNet->setFocus();
4116 // show info
4117 if (savingResult) {
4118 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4119 return 1;
4120 } else {
4121 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4122 return 0;
4123 }
4124 } catch (IOError& e) {
4125 // open error message box
4126 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4127 }
4128 }
4129 return 0;
4130}
4131
4132
4133long
4135 // get file
4136 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4141 // continue depending of dialog
4142 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4143 // save previous demand element status saving
4144 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4145 // disable validation for additionals
4146 XMLSubSys::setValidation("never", "auto", "auto");
4147 // get (or create) bucket for this new file
4148 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4149 // Create generic handler
4151 // begin undoList operation
4152 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4153 // Run parser for additionals
4154 if (!handler.parse()) {
4155 // write error
4156 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4157 } else {
4158 // show info
4159 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4160 // enable demand elements if there is an error creating element
4161 if (previouslySaved && !handler.isErrorCreatingElement()) {
4163 }
4164 }
4165 // end undoList operation
4166 myUndoList->end();
4167 // restore validation
4168 XMLSubSys::setValidation("auto", "auto", "auto");
4169 // check if clear undoList
4171 myUndoList->clear();
4172 }
4173 update();
4174 }
4175 return 1;
4176}
4177
4178
4179long
4181 // disable validation for additionals
4182 XMLSubSys::setValidation("never", "auto", "auto");
4183 // begin undoList operation
4184 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4185 // clear demand elements
4187 // reload demand elements stored in options
4188 loadDemandElements("Reloading");
4189 // end undoList operation and update view
4190 myUndoList->end();
4191 // restore validation for demand
4192 XMLSubSys::setValidation("auto", "auto", "auto");
4193 // check if clear undoList
4195 myUndoList->clear();
4196 }
4197 update();
4198 return 1;
4199}
4200
4201
4202long
4203GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4204 if (myViewNet == nullptr) {
4205 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4207 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4208 } else {
4209 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4210 }
4211}
4212
4213
4214long
4215GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4216 const auto savingFileHandler = myFileBucketHandler;
4217 // get option container
4218 auto& neteditOptions = OptionsCont::getOptions();
4219 // check if we're forcing to saving demand elements
4221 neteditOptions.getBool("force-saving") &&
4223 WRITE_MESSAGE(TL("Force save demand elements"));
4224 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4225 // nothing to save
4226 return 1;
4227 }
4228 // check if we have to define a default filename
4230 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4231 }
4232 // check if we have to open save as dialog
4233 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4234 // choose file to save
4235 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4236 } else {
4237 // always recompute before saving
4238 myNet->computeNetwork(this);
4239 try {
4240 // save demand elements
4241 const bool savingResult = myNet->saveDemandElements();
4242 // show info
4243 if (savingResult) {
4244 WRITE_MESSAGE(TL("Demand elements saved."));
4245 return 1;
4246 } else {
4247 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4248 return 0;
4249 }
4250 } catch (IOError& e) {
4251 // open error message box
4252 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4253 }
4254 }
4255 return 0;
4256}
4257
4258
4259long
4260GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4261 // get route file
4262 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4267 // continue depending of dialog
4268 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4269 // update default name
4271 // save demand elements
4272 return onCmdSaveDemandElements(sender, sel, ptr);
4273 } else {
4274 return 0;
4275 }
4276}
4277
4278
4279long
4280GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4281 // get route file
4282 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4287 // continue depending of dialog
4288 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4289 // use the file as default file
4291 // begin undoList operation
4292 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4293 // iterate over all demand elementes and change file
4294 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4295 for (const auto& demandElement : demandElementTag.second) {
4296 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4297 }
4298 }
4299 // end undoList operation
4300 myUndoList->end();
4301 // save demand elements
4303 return onCmdSaveDemandElements(sender, sel, ptr);
4304 } else {
4305 return 0;
4306 }
4307}
4308
4309
4310long
4311GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4312 // get file
4313 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4318 // continue depending of dialog
4319 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4320 // save previous demand element status saving
4321 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4322 // get (or create) bucket for this new file
4323 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4324 // disable update data
4326 // disable validation for data elements
4327 XMLSubSys::setValidation("never", "auto", "auto");
4328 // Create data handler
4329 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4330 // begin undoList operation
4331 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4332 // Run data parser
4333 if (!dataHandler.parse()) {
4334 // write error
4335 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4336 } else {
4337 // show info
4338 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4339 // enable demand elements if there is an error creating element
4340 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4342 }
4343 }
4344 // end undoList operation
4345 myUndoList->end();
4346 // enable update data
4348 // restore validation for data
4349 XMLSubSys::setValidation("auto", "auto", "auto");
4350 // check if clear undoList
4352 myUndoList->clear();
4353 }
4354 update();
4355 }
4356 return 1;
4357}
4358
4359
4360long
4362 // disable update data
4364 // disable validation for additionals
4365 XMLSubSys::setValidation("never", "auto", "auto");
4366 // begin undoList operation
4367 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4368 // clear data elements
4370 // reload data elements stored in options
4371 loadDataElements("Reloading");
4372 // restore validation for data
4373 XMLSubSys::setValidation("auto", "auto", "auto");
4374 // end undoList operation and update view
4375 myUndoList->end();
4376 // enable update data
4378 // check if clear undoList
4380 myUndoList->clear();
4381 }
4382 update();
4383 return 1;
4384}
4385
4386
4387long
4388GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4389 if (myViewNet == nullptr) {
4390 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4392 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4393 } else {
4394 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4395 }
4396}
4397
4398
4399long
4400GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4401 const auto savingFileHandler = myFileBucketHandler;
4402 // get option container
4403 auto& neteditOptions = OptionsCont::getOptions();
4404 // check if we're forcing to saving data elements
4406 neteditOptions.getBool("force-saving") &&
4408 WRITE_MESSAGE(TL("Force save data elements"));
4409 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4410 // nothing to save
4411 return 1;
4412 }
4413 // check if we have to define a default filename
4415 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4416 }
4417 // check if we have to open save as dialog
4418 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4419 return onCmdSaveDataElementsAs(sender, sel, ptr);
4420 } else {
4421 try {
4422 // save data elements
4423 const bool savingResult = myNet->saveDataElements();
4424 // show info
4425 if (savingResult) {
4426 WRITE_MESSAGE(TL("Data elements saved."));
4427 return 1;
4428 } else {
4429 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4430 return 0;
4431 }
4432 } catch (IOError& e) {
4433 // open error message box
4434 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4435 }
4436 }
4437 return 0;
4438}
4439
4440
4441long
4442GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4443 // get data file
4444 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4449 // continue depending of dialog
4450 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4451 // update default name
4453 // save data elements
4454 return onCmdSaveDataElements(sender, sel, ptr);
4455 } else {
4456 return 0;
4457 }
4458}
4459
4460
4461long
4462GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4463 // get data file
4464 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4469 // continue depending of dialog
4470 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4471 // use the file as default file
4473 // begin undoList operation
4474 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4475 // iterate over all demand elementes and change file
4476 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4477 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4478 }
4479 // end undoList operation
4480 myUndoList->end();
4481 // save data elements
4483 return onCmdSaveDataElements(sender, sel, ptr);
4484 } else {
4485 return 0;
4486 }
4487}
4488
4489
4490long
4492 // get file
4493 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4498 // continue depending of dialog
4499 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4500 // save previous demand element status saving
4501 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4502 // get (or create) bucket for this new file
4503 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4504 // disable validation for meanDatas
4505 XMLSubSys::setValidation("never", "auto", "auto");
4506 // Create meanData handler
4507 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4508 // begin undoList operation
4509 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4510 // Run parser
4511 if (!generalHandler.parse()) {
4512 // write error
4513 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4514 } else {
4515 // show info
4516 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4517 // enable demand elements if there is an error creating element
4518 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4520 }
4521 }
4522 // end undoList operation
4523 myUndoList->end();
4524 // restore validation for meanDatas
4525 XMLSubSys::setValidation("auto", "auto", "auto");
4526 // check if clear undoList
4528 myUndoList->clear();
4529 }
4530 update();
4531 }
4532 return 1;
4533}
4534
4535
4536long
4538 // disable validation for meanDatas
4539 XMLSubSys::setValidation("never", "auto", "auto");
4540 // begin undoList operation
4542 // clear meanDatas
4544 // reload meanData elements stored in options
4545 loadMeanDataElements("Reloading");
4546 // end undoList operation and update view
4547 myUndoList->end();
4548 // restore validation for meanDatas
4549 XMLSubSys::setValidation("auto", "auto", "auto");
4550 // check if clear undoList
4552 myUndoList->clear();
4553 }
4554 update();
4555 return 1;
4556}
4557
4558
4559long
4560GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4561 if (myViewNet == nullptr) {
4562 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4564 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4565 } else {
4566 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4567 }
4568}
4569
4570
4571long
4572GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4573 const auto savingFileHandler = myFileBucketHandler;
4574 // get option container
4575 auto& neteditOptions = OptionsCont::getOptions();
4576 // check if we're forcing to saving meandata elements
4578 neteditOptions.getBool("force-saving") &&
4580 WRITE_MESSAGE(TL("Force save meandata elements"));
4581 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4582 // nothing to save
4583 return 1;
4584 }
4585 // check if we have to define a default filename
4587 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4588 }
4589 // check if we have to open save as dialog
4590 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4591 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4592 } else {
4593 try {
4594 // compute before saving
4595 myNet->computeNetwork(this);
4596 // save demand elements
4597 const bool savingResult = myNet->saveMeanDatas();
4598 // show info
4599 if (savingResult) {
4600 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4601 return 1;
4602 } else {
4603 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4604 return 0;
4605 }
4606 } catch (IOError& e) {
4607 // open error message box
4608 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4609 }
4610 }
4611 return 0;
4612}
4613
4614
4615long
4616GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4617 // get meanData file
4618 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4623 // continue depending of dialog
4624 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4625 // update default name
4627 // save meanDatas
4628 return onCmdSaveMeanDataElements(sender, sel, ptr);
4629 } else {
4630 return 0;
4631 }
4632}
4633
4634
4635long
4636GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4637 // get meanData file
4638 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4643 // continue depending of dialog
4644 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4645 // use the file as default file
4647 // begin undoList operation
4648 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4649 // iterate over all demand elementes and change file
4650 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4651 for (const auto& meanData : meanDataTag.second) {
4652 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4653 }
4654 }
4655 // end undoList operation
4656 myUndoList->end();
4657 // save meanDatas
4659 return onCmdSaveMeanDataElements(sender, sel, ptr);
4660 } else {
4661 return 0;
4662 }
4663}
4664
4665
4666bool
4667GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4668 if (myNet) {
4670 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4671 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4672 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4673 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4674 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4675 // first check if abort saving
4676 if (commonResult == GNEDialog::Result::ABORT) {
4677 return false;
4678 }
4679 // save every type of file
4680 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4681 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4682 return false;
4683 }
4684 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4685 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4686 return false;
4687 }
4688 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4689 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4690 return false;
4691 }
4692 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4693 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4694 return false;
4695 }
4696 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4697 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4698 return false;
4699 }
4700 // restore focus in viewNet
4701 myViewNet->setFocus();
4702 // clear undo list
4703 clearUndoList();
4704 // all saved, then continue
4705 return true;
4706 } else {
4707 // nothing to do, then continue
4708 return true;
4709 }
4710}
4711
4712
4713void
4715 // check that view exists
4716 if (myViewNet) {
4718 }
4719 // update require recomputing
4721}
4722
4723
4724void
4726 // remove lock hotkeys
4728 // check supermode
4729 if (supermode == Supermode::NETWORK) {
4730 // menu commands
4734 // lock
4738 // processing
4743 } else if (supermode == Supermode::DEMAND) {
4744 // menu commands
4748 // lock
4752 // processing
4757 } else if (supermode == Supermode::DATA) {
4758 // menu commands
4762 // lock
4766 // processing
4771 } else {
4772 // menu commands
4777 // lock
4781 // processing
4785 }
4786 // continue depending of view
4787 if (myViewNet) {
4791 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4794 }
4795 }
4796}
4797
4798
4799bool
4803
4804
4805void
4809
4810
4811void
4813 myUndoRedoListEnabled = reason;
4814}
4815
4816
4817const std::string&
4821
4822
4823void
4825 if (myViewNet) {
4826 // destroy Popup (to avoid crashes)
4828 }
4829 // clear undo list and return true to continue with closing/reload
4830 myUndoList->clear();
4831}
4832
4833
4838
4839
4844
4845
4850
4851
4856
4857
4862
4863
4868
4869
4874
4875
4876void
4878 // get netedit option container
4879 auto& neteditOptions = OptionsCont::getOptions();
4880 // get additional files (don't use reference because it's modified during loading)
4881 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
4882 // check if we have additionals to load
4883 if (myNet && (additionalFiles.size() > 0)) {
4884 // disable validation for additionals
4885 XMLSubSys::setValidation("never", "auto", "auto");
4886 // begin undolist
4887 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
4888 // use this flag for mark all elements as saved after loading, if it was sucessfully
4889 bool setSaved = additionalFiles.size() == 1;
4890 // iterate over every additional file
4891 for (const auto& file : additionalFiles) {
4892 // check if ignore missing inputs
4893 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4894 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
4895 // get (or create) bucket for this new file
4897 // declare general handler
4898 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4899 // check if force overwritte
4900 if (operation == "reloading") {
4901 generalHandler.forceOverwriteElements();
4902 }
4903 // Run parser
4904 if (!generalHandler.parse()) {
4905 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
4906 }
4907 setSaved &= !generalHandler.isErrorCreatingElement();
4908 }
4909 }
4910 // end undo list
4911 myUndoList->end();
4912 // disable validation for additionals
4913 XMLSubSys::setValidation("auto", "auto", "auto");
4914 if (setSaved) {
4916 }
4917 // check if clear undoList
4919 myUndoList->clear();
4920 }
4921 }
4922}
4923
4924
4925void
4926GNEApplicationWindow::loadDemandElements(const std::string operation) {
4927 // get netedit option container
4928 auto& neteditOptions = OptionsCont::getOptions();
4929 // get demand files (don't use reference because it's modified during loading)
4930 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
4931 // check if we have demand files to load
4932 if (myNet && (demandFiles.size() > 0)) {
4933 // disable validation for additionals
4934 XMLSubSys::setValidation("never", "auto", "auto");
4935 // begin undolist
4936 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
4937 // use this flag for mark all elements as saved after loading, if it was sucessfully
4938 bool setSaved = demandFiles.size() == 1;
4939 // iterate over every demand file
4940 for (const auto& file : demandFiles) {
4941 // check if ignore missing inputs
4942 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4943 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
4944 // get (or create) bucket for this new file
4945 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
4946 // declare general handler
4947 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4948 // check if force overwritte
4949 if (operation == "reloading") {
4950 generalHandler.forceOverwriteElements();
4951 }
4952 // Run parser
4953 if (!generalHandler.parse()) {
4954 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
4955 }
4956 setSaved &= !generalHandler.isErrorCreatingElement();
4957 }
4958 }
4959 // end undo list
4960 myUndoList->end();
4961 // disable validation for additionals
4962 XMLSubSys::setValidation("auto", "auto", "auto");
4963 if (setSaved) {
4965 }
4966 // check if clear undoList
4968 myUndoList->clear();
4969 }
4970 }
4971}
4972
4973
4974void
4975GNEApplicationWindow::loadDataElements(const std::string operation) {
4976 // get option container
4977 auto& neteditOptions = OptionsCont::getOptions();
4978 // get data files (don't use reference because it's modified during loading)
4979 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
4980 if (myNet && (dataFiles.size() > 0)) {
4981 // disable validation for additionals
4982 XMLSubSys::setValidation("never", "auto", "auto");
4983 // begin undolist
4984 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
4985 // use this flag for mark all elements as saved after loading, if it was sucessfully
4986 bool setSaved = dataFiles.size() == 1;
4987 // iterate over every data file
4988 for (const auto& file : dataFiles) {
4989 // check if ignore missing inputs
4990 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4991 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
4992 // get (or create) bucket for this new file
4993 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
4994 // declare general handler
4995 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4996 // check if force overwritte
4997 if (operation == "reloading") {
4998 generalHandler.forceOverwriteElements();
4999 }
5000 // Run parser
5001 if (!generalHandler.parse()) {
5002 WRITE_ERROR(TLF("% of % failed.", operation, file));
5003 }
5004 setSaved &= !generalHandler.isErrorCreatingElement();
5005 }
5006 }
5007 // end undo list
5008 myUndoList->end();
5009 // disable validation for additionals
5010 XMLSubSys::setValidation("auto", "auto", "auto");
5011 if (setSaved) {
5013 }
5014 // check if clear undoList
5016 myUndoList->clear();
5017 }
5018 }
5019}
5020
5021
5022void
5024 // get option container
5025 auto& neteditOptions = OptionsCont::getOptions();
5026 // get meanData files (don't use reference because it's modified during loading)
5027 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5028 if (myNet && (meanDataFiles.size() > 0)) {
5029 // disable validation for additionals
5030 XMLSubSys::setValidation("never", "auto", "auto");
5031 // begin undolist
5032 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5033 // use this flag for mark all elements as saved after loading, if it was sucessfully
5034 bool setSaved = meanDataFiles.size() == 1;
5035 // iterate over every meanData file
5036 for (const auto& file : meanDataFiles) {
5037 // check if ignore missing inputs
5038 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5039 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5040 // get (or create) bucket for this new file
5041 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5042 // declare general handler
5043 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5044 // check if force overwritte
5045 if (operation == "reloading") {
5046 generalHandler.forceOverwriteElements();
5047 }
5048 // Run parser
5049 if (!generalHandler.parse()) {
5050 WRITE_ERROR(TLF("% of % failed.", operation, file));
5051 }
5052 setSaved &= !generalHandler.isErrorCreatingElement();
5053 }
5054 }
5055 // end undo list
5056 myUndoList->end();
5057 // disable validation for additionals
5058 XMLSubSys::setValidation("auto", "auto", "auto");
5059 if (setSaved) {
5061 }
5062 // check if clear undoList
5064 myUndoList->clear();
5065 }
5066 }
5067}
5068
5069
5070void
5071GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5072 // get TLS file
5074 if (tlsFile.size() > 0) {
5075 // show info
5076 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5077 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5078 myNet->computeNetwork(this);
5079 // parse TLS programs
5080 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5081 // Abort undo/redo
5083 } else {
5084 // commit undo/redo operation
5085 myUndoList->end();
5086 update();
5087 }
5088 // requiere save network
5090 // if defined, require save netedit config
5093 }
5094 }
5095}
5096
5097
5098void
5099GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5100 // get edgeType file
5102 if (edgeTypeFile.size() > 0) {
5103 // declare type container
5104 NBTypeCont typeContainerAux;
5105 // declare type handler
5106 NIXMLTypesHandler handler(typeContainerAux);
5107 // load edge types
5108 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5109 // now create GNETypes based on typeContainerAux
5110 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5111 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5112 // iterate over typeContainerAux
5113 for (const auto& auxEdgeType : typeContainerAux) {
5114 // create new edge type
5115 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5116 // add lane types
5117 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5118 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5119 }
5120 // add it using undoList
5121 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5122
5123 }
5124 // end undo list
5126 // refresh edge type selector
5128 // requiere save network
5130 // if defined, require save netedit config
5133 }
5134 }
5135}
5136
5137
5142
5143
5144bool
5146 if (myInternalTest == nullptr) {
5147 return true;
5148 } else if (obj == myInternalTest) {
5149 return true;
5150 } else {
5151 return false;
5152 }
5153}
5154
5155// ---------------------------------------------------------------------------
5156// GNEApplicationWindow - protected methods
5157// ---------------------------------------------------------------------------
5158#ifdef _MSC_VER
5159#pragma warning(push)
5160#pragma warning(disable: 4355) // mask warning about "this" in initializers
5161#endif
5163 myToolbarsGrip(this),
5164 myMenuBarFile(this),
5165 myFileMenuCommands(this),
5166 myModesMenuCommands(this),
5167 myEditMenuCommands(this),
5168 myLockMenuCommands(this),
5169 myProcessingMenuCommands(this),
5170 myLocateMenuCommands(this),
5171 myToolsMenuCommands(this),
5172 myWindowsMenuCommands(this),
5173 myHelpMenuCommands(this),
5174 mySupermodeCommands(this) {
5175}
5176#ifdef _MSC_VER
5177#pragma warning(pop)
5178#endif
5179
5180
5181long
5182GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5183 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5184 if (handled == 0 && myMDIClient->numChildren() > 0) {
5185 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5186 if (w != nullptr) {
5187 w->onKeyPress(nullptr, sel, eventData);
5188 }
5189 }
5190 return 0;
5191}
5192
5193
5194long
5195GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5196 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5197 if (handled == 0 && myMDIClient->numChildren() > 0) {
5198 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5199 if (w != nullptr) {
5200 w->onKeyRelease(nullptr, sel, eventData);
5201 }
5202 }
5203 return 0;
5204}
5205
5206
5207/****************************************************************************/
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:857
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:771
@ 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:739
@ 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:883
@ 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:941
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:919
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:773
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:907
@ 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:965
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:805
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:725
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:899
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:683
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:831
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:909
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:783
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:765
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:853
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:879
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:737
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:839
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:837
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:971
@ 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:917
@ 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:957
@ 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:843
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:943
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:887
@ 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:931
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:921
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:719
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:733
@ 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:751
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:657
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:709
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:811
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:713
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in netedit.
Definition GUIAppEnum.h:85
@ MID_TOOLBAREDIT_LOADDEMAND
load demand in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:685
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:929
@ 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:769
@ 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:855
@ 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:963
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:757
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:755
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:875
@ 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:937
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:807
@ 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:889
@ 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:731
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:959
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:767
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:851
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:743
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:845
@ 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:841
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:893
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:945
@ 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:877
@ 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:867
@ 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:863
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:715
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition GUIAppEnum.h:369
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition GUIAppEnum.h:65
@ MID_TUTORIAL
tutorial button
Definition GUIAppEnum.h:661
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:905
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:809
@ 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:967
@ 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:903
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED
save data elements unified
Definition GUIAppEnum.h:747
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:833
@ 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:735
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:659
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:935
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:871
@ MID_LANGUAGE_DE
change language to german
@ MID_HOTKEY_ALT_F4_CLOSE
Main window closes.
Definition GUIAppEnum.h:163
@ MID_GNE_TOOLBARFILE_RELOADNETWORK
reload only network
Definition GUIAppEnum.h:707
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:849
@ 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:847
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:961
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:785
@ 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:969
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_AS
save additionals element as
Definition GUIAppEnum.h:723
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:891
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:901
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:717
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:869
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:829
@ MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE
open Netconvert file
Definition GUIAppEnum.h:220
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition GUIAppEnum.h:107
@ MID_GNE_TOOLBARFILE_SAVENETWORK_AS
save network as
Definition GUIAppEnum.h:721
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:933
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:949
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_AS
save data elements as
Definition GUIAppEnum.h:745
@ 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:741
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:663
@ MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES
open app setting dialog in SUMO and open edge type files in netedit
Definition GUIAppEnum.h:97
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition GUIAppEnum.h:292
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:222
@ MID_GNE_LOCK_PERSON
lock persons
Definition GUIAppEnum.h:895
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:873
@ 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:749
@ 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:915
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:947
@ 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:897
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:729
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:268
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:835
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:711
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:939
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:827
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_AS
save meanDatas as
Definition GUIAppEnum.h:753
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:727
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:865
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:885
@ 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:913
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:911
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:803
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:881
@ 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
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:49
bool isErrorCreatingElement() const
get flag for mark if a element wasn't created
void forceOverwriteElements()
force overwritte elements (used if we're reloading elements)
bool parse()
parse
void setSelector(FXSelector sel)
set the selector
void setTarget(FXObject *tgt)
set the target
static bool isReadable(std::string path)
Checks whether the given file is readable.
static 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)
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 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
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 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
long onUpdOpen(FXObject *, FXSelector, void *)
called when the command/FXCall on update open executed
long onCmdSetMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-mode hotkey
bool myHadDependentBuild
check if had dependent build
long onCmdBackspace(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits backspace
void updateRecomputingLabel()
update recomputing label
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
OptionsCont myNetconvertOptions
netconvert options container
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
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:2134
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1791
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1631
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2402
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2827
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1441
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:186
void enableUpdateData()
Definition GNENet.cpp:2892
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2846
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2169
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2337
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2147
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:198
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1897
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:1469
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1942
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1807
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:2180
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2903
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2226
void saveNetwork()
save the network
Definition GNENet.cpp:1394
bool saveJuPedSimElements(const std::string &filename)
save JuPedSim elements
Definition GNENet.cpp:2271
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1625
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1749
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1833
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:2288
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1568
bool isOptionModified() const
check if option was modified
bool requireSaveNetwork() const
check if modified network requiere 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)
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
GUISUMOAbstractView * getView() const
return GUISUMOAbstractView
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static void initIcons(FXApp *a)
Initiate GUIIconSubSys.
static void close()
close GUIIconSubSys
void setWindowSizeAndPos()
perform initial window positioning and sizing according to user options / previous call
std::vector< FXMainWindow * > myTrackerWindows
list of tracker windows
FXMenuPane * myLanguageMenu
Language menu common to all applications.
FXLabel * myCartesianCoordinate
Labels for the current cartesian, geo-coordinate and test coordinates.
std::map< std::string, std::string > myOnlineMaps
online mapping services for the context menu
MFXStaticToolTip * myStaticTooltipMenu
static toolTip used in menus
FXMDIClient * myMDIClient
The multi view panel.
void buildLanguageMenu(FXMenuBar *menuBar)
long onCmdChangeLanguage(FXObject *, FXSelector, void *)
FXHorizontalFrame * myGeoFrame
FXHorizontalFrame * myTestFrame
FXHorizontalFrame * myCartesianFrame
FXLabel * myTestCoordinate
FXMutex myTrackerLock
A lock to make the removal and addition of trackers secure.
void storeWindowSizeAndPos()
record window position and size in registry
FXLabel * myGeoCoordinate
FXStatusBar * myStatusbar
The status bar.
FXGLVisual * myGLVisual
The gl-visual used.
std::vector< GUIGlChildWindow * > myGLWindows
list of GLWindows
long onUpdChangeLanguage(FXObject *, FXSelector, void *)
A logging window for the gui.
void addSeparator()
Adds a a separator to this log window.
void unregisterMsgHandlers()
unregister message handlers
void clear()
Clears the window.
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
void registerMsgHandlers()
register message handlers
virtual double 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 setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
void destroyPopup()
destroys the popup
An XML-handler for visualisation schemes.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
static void buildAccelerators(FXAccelTable *accelTable, FXObject *target, const bool sumogui)
build accelerators
static void close()
close GUITextureSubSys
static void resetTextures()
Reset textures.
static void initTextures(FXApp *a)
Initiate GUITextureSubSys for textures.
static std::string clipped
Definition GUIUserIO.h:58
bool parse()
parse
static void resetLoaded()
resets loaded location elements
bool isRunning() const
check if test is running
void stopTests()
stop tests
bool amChecked() const
check if this MFXCheckableButton is checked
void toggleCheck()
Toggle current check state.
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependence to an optional file name.
Definition MFXUtils.cpp:61
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp:776
A storage for available edgeTypes of edges.
Definition NBTypeCont.h:52
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NIFrame.cpp:397
static bool load(SUMOSAXHandler &handler, const std::vector< std::string > &files, const std::string &type, const bool stringParse=false)
Importer for edge type information stored in XML.
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NWFrame.cpp:148
A storage for options typed value containers)
Definition OptionsCont.h:89
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false, const std::string &indent="") const
Writes the configuration.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
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.
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 std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp:69
static bool checkOptions(OptionsCont &oc)
checks shared options and sets StdDefs
static void parseTemplate(OptionsCont &options, const std::string &templateString)
run parser
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition XMLSubSys.cpp:83
@ SEL_THREAD_EVENT
Definition fxexdefs.h:173
@ SEL_THREAD
Definition fxexdefs.h:155
DemandViewOptions demandViewOptions
demand view options
FXMenuCheck * menuCheckAllowUndoRedo
checkBox for allow undo-redo
NetworkViewOptions networkViewOptions
network view options
void buildUndoRedoMenuCommands(FXMenuPane *editMenu)
build undo-redo menu commands
void buildViewMenuCommands(FXMenuPane *editMenu)
build view menu commands
FXMenuCheck * loadAdditionalsInSUMOGUI
menu check for load additionals in SUMO GUI
FXMenuCommand * undoLastChange
FXMenuCommand for undo last change.
FXMenuCommand * toggleFrontElement
FXMenuCommand for toggle front element.
FXMenuCheck * loadDemandInSUMOGUI
menu check for load demand in SUMO GUI
FXMenuCommand * redoLastChange
FXMenuCommand for redo last change.
void buildOpenSUMOMenuCommands(FXMenuPane *editMenu)
build open sumo menu commands
void buildFrontElementMenuCommand(FXMenuPane *editMenu)
build front element commands
void buildFileMenuCommands(FXMenuPane *fileMenu, FXMenuPane *fileMenuNEEDITConfig, FXMenuPane *fileMenuSumoConfig, FXMenuPane *fileMenuTLS, FXMenuPane *fileMenuEdgeTypes, FXMenuPane *fileMenuAdditionals, FXMenuPane *fileMenuDemandElements, FXMenuPane *fileMenuDataElements, FXMenuPane *fileMenuMeanDataElements)
build menu commands
FXMenuCheck * menuCheckAllowUndoRedoLoading
checkBox for allow undo-redo loading
void buildHelpMenuCommands(FXMenuPane *helpMenu)
build menu commands
void buildLocateMenuCommands(FXMenuPane *locateMenu)
build menu commands
void buildLockMenuCommands(FXMenuPane *editMenu)
build menu commands
MFXMenuCheckIcon * menuCheckLockConnections
menu check to lock connections
void hideNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockPersons
menu check to lock persons
MFXMenuCheckIcon * menuCheckLockVehicles
menu check to lock vehicles
MFXMenuCheckIcon * menuCheckLockCrossings
menu check to lock crossings
MFXMenuCheckIcon * menuCheckLockTAZs
menu check to lock TAZs
void hideDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockEdgeTAZRels
menu check to lock edgeTAZRels
void hideDataLockMenuCommands()
show data processing menu commands
void showDataLockMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckLockPersonTrips
menu check to lock personTrips
MFXMenuCheckIcon * menuCheckLockWires
menu check to lock Wires
MFXMenuCheckIcon * menuCheckLockPOIs
menu check to lock POIs
MFXMenuCheckIcon * menuCheckLockPolygons
menu check to lock polygons
MFXMenuCheckIcon * menuCheckLockWalkingAreas
menu check to lock walkingAreas
MFXMenuCheckIcon * menuCheckLockEdges
menu check to lock edges
MFXMenuCheckIcon * menuCheckLockRides
menu check to lock rides
MFXMenuCheckIcon * menuCheckLockContainers
menu check to lock containers
MFXMenuCheckIcon * menuCheckLockJpsWalkableAreas
menu check to lock jps walkableareas
MFXMenuCheckIcon * menuCheckLockEdgeRelDatas
menu check to lock edgeRelDatas
MFXMenuCheckIcon * menuCheckLockStops
menu check to lock stops
MFXMenuCheckIcon * menuCheckLockLanes
menu check to lock lanes
MFXMenuCheckIcon * menuCheckLockAdditionals
menu check to lock additionals
void showNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockWalks
menu check to lock walks
MFXMenuCheckIcon * menuCheckLockJpsObstacles
menu check to lock jps obstacles
void showDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockTranships
menu check to lock tranships
MFXMenuCheckIcon * menuCheckLockTransports
menu check to lock transports
void buildRecentConfigFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentConfigFiles)
build recent config
MFXRecentNetworks myRecentConfigs
List of recent configs.
MFXRecentNetworks myRecentNetworks
List of recent networks.
void buildRecentNetworkFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentNetworkFiles)
build recent network
void buildModesMenuCommands(FXMenuPane *modesMenu)
build modes menu commands
DemandMenuCommands demandMenuCommands
Demand Menu Commands.
void setDefaultView(Supermode supermode)
set default view
void setJuPedSimView(Supermode supermode)
set JuPedSim view
NetworkMenuCommands networkMenuCommands
Network Menu Commands.
void showDataProcessingMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckRecomputeDataMode
checkBox for recomputing when changing data mode
void showDemandProcessingMenuCommands()
show demand processing menu commands
void hideDemandProcessingMenuCommands()
show demand processing menu commands
void hideDataProcessingMenuCommands()
show data processing menu commands
void buildProcessingMenuCommands(FXMenuPane *processingMenu)
build menu commands
void showNetworkProcessingMenuCommands()
show network processing menu commands
void hideNetworkProcessingMenuCommands()
show network processing menu commands
void buildSupermodeCommands(FXMenuPane *editMenu)
build menu commands
FXMenuBar * menu
The application menu bar (for file, edit, processing...)
long postProcessing(FXObject *menuCommand) const
run postprocessing
void buildTools(FXMenuPane *toolsMenu, const std::map< std::string, FXMenuPane * > &menuPaneToolMaps)
build tools (and menu commands)
long runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
static bool toggleEditOptionsDemand(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Demand menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsData(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Data menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckLockContainer
Lock Container.
DataEditMode dataEditMode
the current Data edit mode
bool isDefaultView() const
check if default view is enabled
DemandEditMode demandEditMode
the current Demand edit mode
Supermode currentSupermode
the current supermode
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
MFXCheckableButton * menuCheckSelectEdges
checkable button to select only edges
MFXCheckableButton * menuCheckChainEdges
checkable button to the endpoint for a created edge should be set as the new source
MFXCheckableButton * menuCheckShowDemandElements
checkable button to show Demand Elements
MFXCheckableButton * menuCheckMoveElevation
checkable button to apply movement to elevation
MFXCheckableButton * menuCheckShowTAZElements
checkable button to show TAZ elements
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
MFXCheckableButton * menuCheckAutoOppositeEdge
check checkable to create auto create opposite edge
MFXCheckableButton * menuCheckDrawSpreadVehicles
checkable button to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowConnections
checkable button to show connections
MFXCheckableButton * menuCheckHideConnections
checkable button to hide connections in connect mode
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckToggleGrid
checkable button to show grid button
MFXCheckableButton * menuCheckMergeAutomatically
checkable button to we should't warn about merging junctions
MFXCheckableButton * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
MFXCheckableButton * menuCheckShowAdditionalSubElements
checkable button to show additional sub-elements
MFXCheckableButton * menuCheckChangeAllPhases
checkable button to set change all phases
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label