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
272 // Demand view options
295 // Data view options
312 // view
329 /* Prepared for #6042
330 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
331 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
332 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
333 */
334 // toolbar lock
366 // Toolbar processing
385 // Toolbar locate
410 // toolbar python tools
415 // toolbar windows
417 // toolbar help
420 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
421 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
422 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
424 // alt + <number>
445 // key events
446 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
447 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
448 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
449 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
450 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
452 // threads events
455 // edge template functions
459 // languages
482 // tools
485 // other
486 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
493 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
494};
495
496// Object implementation
497FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
498
499// ===========================================================================
500// GNEApplicationWindow method definitions
501// ===========================================================================
502#ifdef _MSC_VER
503#pragma warning(push)
504#pragma warning(disable: 4355) // mask warning about "this" in initializers
505#endif
506GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
507 GUIMainWindow(app),
508 myTagPropertiesDatabase(tagPropertiesDatabase),
509 myUndoList(new GNEUndoList(this)),
510 myConfigPattern(configPattern),
511 myToolbarsGrip(this),
512 myMenuBarFile(this),
513 myFileMenuCommands(this),
514 myModesMenuCommands(this),
515 myEditMenuCommands(this),
516 myLockMenuCommands(this),
517 myProcessingMenuCommands(this),
518 myLocateMenuCommands(this),
519 myToolsMenuCommands(this),
520 myWindowsMenuCommands(this),
521 myHelpMenuCommands(this),
522 mySupermodeCommands(this),
523 myFileBucketHandler(new GNEApplicationWindowHelper::FileBucketHandler(this, OptionsCont::getOptions(), mySumoOptions)),
524 myTitlePrefix("netedit " VERSION_STRING),
525 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
526 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
527 // init icons
529 // init Textures
531 // init cursors
533 // set tooltip options
534 app->setTooltipTime(1000000000);
535 app->setTooltipPause(1000000000);
536 // set SUMO Options descriptions
537 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
538 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo " VERSION_STRING);
539 // set default netedit options
542 // parse options
548 // add extra option for automatic closing
549 myNetgenerateOptions.doRegister("close-dialog-automatic", new Option_Bool(true));
550 myNetgenerateOptions.addDescription("close-dialog-automatic", "report", TL("Close dialog automatically"));
551}
552#ifdef _MSC_VER
553#pragma warning(pop)
554#endif
555
556
557void
559 // do this not twice
561 // do not translate debug messages
562 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
563 return;
564 }
565 myHadDependentBuild = true;
566 setTarget(this);
567 setSelector(MID_WINDOW);
568 // build toolbar menu
570 // build the thread - io
573 // build the status bar
574 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
575 // build geo coordinates label
576 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
578 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
579 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
580 // build geo coordinates label
582 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
583 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
584 // build cartesian coordinates label
586 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
587 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
588 // build test coordinates label (only if gui-testing is enabled)
590 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
591 myTestCoordinate->setHelpText(TL("Test coordinate"));
593 myTestFrame->hide();
594 // make the window a mdi-window
595 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
597 myMDIMenu = new FXMDIMenu(this, myMDIClient);
598 // build the message window
600 myMainSplitter->setSplit(1, 65);
601 // fill menu and tool bar
602 fillMenuBar();
603 // build additional threads
605 // check if create internal test system
606 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
607 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
608 }
609 // set the status bar
610 setStatusBarText(TL("Ready."));
611 // set the caption
612 setTitle(myTitlePrefix);
613 // set Netedit ICON
616 // build netedit Accelerators (hotkeys)
617 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
618}
619
620
621void
623 // set windows size and position
625 // set current folder
626 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
627 // Create main window
628 FXMainWindow::create();
629 // get text width
630 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
631 // adjust cartesian and geo frame
632 myCartesianFrame->setWidth(textWidth);
633 myGeoFrame->setWidth(textWidth);
634 // fill online maps
635 if (myOnlineMaps.empty()) {
636 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
637 myOnlineMaps["Google Maps"] = "https://www.google.com/maps/search/?api=1&query=%lat,%lon&zoom=19";
638 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
639 }
640 // show application windows
641 show(PLACEMENT_DEFAULT);
642 // check if maximice
643 if (!OptionsCont::getOptions().isSet("window-size")) {
644 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
645 maximize();
646 }
647 }
648}
649
650
652 closeAllWindows(true);
653 // Close icons
655 // Close gifs (Textures)
658 // delete visuals
659 delete myGLVisual;
660 // must delete menus to avoid segfault on removing accelerators
661 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
664 delete myFileMenuTLS;
665 delete myFileMenuEdgeTypes;
672 delete myFileMenu;
673 delete myModesMenu;
674 delete myEditMenu;
675 delete myLockMenu;
676 delete myProcessingMenu;
677 delete myLocatorMenu;
678 delete myToolsMenu;
679 delete myToolsDetectorMenu;
680 delete myToolsDistrictMenu;
681 delete myToolsDRTMenu;
683 delete myToolsImportMenu;
686 delete myToolsImportVissim;
687 delete myToolsImportVisum;
688 delete myToolsNetMenu;
689 delete myToolsRouteMenu;
690 delete myToolsOutputMenu;
691 delete myToolsShapes;
692 delete myToolsTLS;
693 delete myToolsTurnDefs;
695 delete myToolsXML;
696 delete myWindowMenu;
697 delete myHelpMenu;
698 delete myLanguageMenu;
699 // Delete load thread
700 delete myLoadThread;
701 if (myInternalTest) {
702 delete myInternalTest;
703 }
704 // drop all events
705 while (!myThreadEvents.empty()) {
706 // get the next event
709 delete e;
710 }
711 // delete undoList and dialog
712 delete myUndoList;
713}
714
715
716long
717GNEApplicationWindow::onCmdQuit(FXObject* sender, FXSelector sel, void* ptr) {
718 if (askSaveElements(sender, sel, ptr)) {
720 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
721 if (isMaximized()) {
722 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
723 } else {
724 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
725 }
726 getApp()->exit(0);
727 }
728 return 1;
729}
730
731
732long
733GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
734 GUIDialog_GLChosenEditor* chooser =
736 chooser->create();
737 chooser->show();
738 return 1;
739}
740
741
742long
743GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
744 // check if close current simulation
745 if (onCmdClose(0, 0, 0) == 1) {
746 // create new network
748 }
749 return 1;
750}
751
752
753long
755 auto& neteditOptions = OptionsCont::getOptions();
756 // get netconvert file dialog
757 const GNEFileDialog netConvertFileDialog(this, TL("netconvert config file"),
762 // continue depending of dialog
763 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
764 // stop test before calling load thread
765 if (myInternalTest) {
767 }
768 // reset netedit options
769 myLoadThread->fillOptions(neteditOptions);
770 myLoadThread->setDefaultOptions(neteditOptions);
771 // set netconvert configuration file to load
772 neteditOptions.resetWritable();
773 neteditOptions.set("netccfg-file", netConvertFileDialog.getFilename());
774 // run load thread
776 // update view
777 update();
778 }
779 return 1;
780}
781
782
783long
784GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
785 // get netconvert filename
786 const GNEFileDialog networkFileDialog(this, TL("network file"),
791 // continue depending of dialog
792 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
793 // load network
794 loadNetwork(networkFileDialog.getFilename());
795 }
796 return 0;
797}
798
799
800long
801GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
802 // get OSM file dilaog
803 const GNEFileDialog OSMFileDialog(this, TL("OpenStreetMap file"),
808 // continue depending of dialog
809 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
810 loadOSM(OSMFileDialog.getFilename());
811 }
812 return 1;
813}
814
815
816long
817GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
818 auto& neteditOptions = OptionsCont::getOptions();
819 // get netconvert filename
820 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
825 // continue depending of dialog
826 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
827 // stop test before calling load thread
828 if (myInternalTest) {
830 }
831 // reset netedit options
832 myLoadThread->fillOptions(neteditOptions);
833 myLoadThread->setDefaultOptions(neteditOptions);
834 // set netedit configuration file to load
835 neteditOptions.resetWritable();
836 neteditOptions.set("netecfg-file", neteditConfigFileDialog.getFilename());
837 // run load thread
839 // update view
840 update();
841 }
842 return 1;
843}
844
845
846long
847GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
848 auto& neteditOptions = OptionsCont::getOptions();
849 // get netconvert filename
850 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
855 // continue depending of dialog
856 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
857 // stop test before calling load thread
858 if (myInternalTest) {
860 }
861 // reset options
862 myLoadThread->fillOptions(neteditOptions);
863 myLoadThread->setDefaultOptions(neteditOptions);
864 // set sumo configuration file to load
865 neteditOptions.resetWritable();
866 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
867 // run load thread
869 // update view
870 update();
871 }
872 return 1;
873}
874
875
876long
878 // get existent configuration file
880 // check if close current simulation
881 if (onCmdClose(0, 0, 0) == 1) {
882 // stop test before calling load thread
883 if (myInternalTest) {
885 }
886 auto& neteditOptions = OptionsCont::getOptions();
887 // reset options
888 myLoadThread->fillOptions(neteditOptions);
889 myLoadThread->setDefaultOptions(neteditOptions);
890 // set netedit configuration file to load
891 neteditOptions.resetWritable();
892 neteditOptions.set("netecfg-file", neteditConfigFile);
893 // run load thread
895 // update view
896 update();
897 }
898 return 1;
899}
900
901
902long
903GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
904 // get existent sumo config file
906 // check if close current simulation
907 if (onCmdClose(0, 0, 0) == 1) {
908 // stop test before calling load thread
909 if (myInternalTest) {
911 }
912 auto& neteditOptions = OptionsCont::getOptions();
913 // reset options
914 myLoadThread->fillOptions(neteditOptions);
915 myLoadThread->setDefaultOptions(neteditOptions);
916 // set configuration file to load
917 neteditOptions.resetWritable();
918 neteditOptions.set("sumocfg-file", sumoConfigFile);
919 // run load thread
921 // update view
922 update();
923 }
924 return 1;
925}
926
927
928long
929GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
930 // check if file exist
932 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
933 } else {
934 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
935 }
936}
937
938
939long
940GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
941 // check if file exist
943 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
944 } else {
945 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
946 }
947}
948
949
950long
951GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
952 // get netconvert filename
953 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
958 // continue depending of dialog
959 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
960 // set tls type in bucket
962 // load traffic lights
963 loadTrafficLights("Loading");
964 }
965 return 1;
966}
967
968
969long
970GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
971 // load traffic lights
972 loadTrafficLights("Reloading");
973 return 1;
974}
975
976
977long
978GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
979 // check if file exist
981 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
982 } else {
983 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
984 }
985}
986
987
988long
989GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
990 // get netconvert filename
991 const GNEFileDialog edgeTypesFileDialog(this, TL("EdgeTypes file"),
996 // continue depending of dialog
997 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
998 // set tls type in bucket
1000 // load edge types
1001 loadEdgeTypes("Loading");
1002 }
1003 return 1;
1004}
1005
1006
1007long
1008GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1009 // load edge types
1010 loadEdgeTypes("Reloading");
1011 return 0;
1012}
1013
1014
1015long
1016GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1017 // check if file exist
1019 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1020 } else {
1021 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1022 }
1023}
1024
1025
1026long
1027GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector sel, void*) {
1028 auto& neteditOptions = OptionsCont::getOptions();
1029 // check if close current file
1030 if (onCmdClose(0, sel, 0) == 1) {
1031 // stop test before calling load thread
1032 if (myInternalTest) {
1034 }
1035 // store size, position and viewport
1037 // set flag
1038 myAmLoading = true;
1039 // get files
1043 // fill (reset) all options
1044 myLoadThread->fillOptions(neteditOptions);
1045 // set default options defined in GNELoadThread::setDefaultOptions(...)
1046 myLoadThread->setDefaultOptions(neteditOptions);
1047 // set file to load
1048 neteditOptions.resetWritable();
1049 if (neteditConfig.size() > 0) {
1050 // set netedit config
1052 // set status bar
1053 setStatusBarText(TLF("Reloading netedit config file '%'", neteditConfig));
1054 } else if (sumoConfig.size() > 0) {
1055 // set sumo config
1057 // set status bar
1058 setStatusBarText(TLF("Reloading sumo config file '%'", sumoConfig));
1059 } else if (networkFile.size() > 0) {
1060 // set network config
1062 // set status bar
1063 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1064 } else {
1065 // nothing to load
1066 return 0;
1067 }
1068 // load network
1070 }
1071 return 1;
1072}
1073
1074
1075long
1076GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1077 // declare strings
1078 FXString neteditConfig = TL("&Reload Netedit config");
1079 FXString sumoConfig = TL("&Reload Sumo config");
1080 FXString netFile = TL("&Reload Network");
1081 FXString reload = TL("&Reload");
1082 // check options
1083 if (myNet == nullptr) {
1084 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1085 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1087 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1088 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1090 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1091 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1093 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1094 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1095 } else {
1096 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1097 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1098 }
1099 return 1;
1100}
1101
1102
1103long
1104GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector sel, void*) {
1105 auto& neteditOptions = OptionsCont::getOptions();
1106 // check if close current file
1107 if (onCmdClose(0, sel, 0) == 1) {
1108 // stop test before calling load thread
1109 if (myInternalTest) {
1111 }
1112 // store size, position and viewport
1114 // set flag
1115 myAmLoading = true;
1116 // get network
1117 const std::string networkFile = myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK);
1118 // fill (reset) all options
1119 myLoadThread->fillOptions(neteditOptions);
1120 // set default options defined in GNELoadThread::setDefaultOptions(...)
1121 myLoadThread->setDefaultOptions(neteditOptions);
1122 // set file to load
1124 // set status bar
1125 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1126 // loaad network
1128 }
1129 return 1;
1130}
1131
1132
1133long
1134GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1135 if (myNet == nullptr) {
1136 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1137 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1140 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1141 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1142 } else {
1143 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1144 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1145 }
1146 return 1;
1147}
1148
1149
1150long
1151GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1152 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1153 if (myAmLoading) {
1154 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1155 } else if (onCmdClose(0, 0, 0) == 1) {
1156 // get filedata
1157 const std::string recentFile = ((const char*)fileData);
1158 // check if we're loading a network o a config
1159 if ((recentFile.find(".netecfg") != std::string::npos) ||
1160 (recentFile.find(".sumocfg") != std::string::npos) ||
1161 (recentFile.find(".netccfg") != std::string::npos)) {
1162 // load config
1163 loadConfiguration(recentFile);
1164 } else {
1165 // load network
1166 loadNetwork(recentFile);
1167 }
1168 }
1169 return 1;
1170}
1171
1172
1173long
1174GNEApplicationWindow::onCmdClose(FXObject* sender, FXSelector sel, void* ptr) {
1175 if (myViewNet == nullptr) {
1176 return 1;
1177 } else if (askSaveElements(sender, sel, ptr)) {
1178 // check if is reloading
1179 const bool reloading = (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOADNETWORK) || (FXSELID(sel) == MID_HOTKEY_CTRL_R_RELOAD);
1180 // close all windows
1181 closeAllWindows(!reloading);
1182 // add a separator to the log
1184 // hide all menu commands
1188 // hide view options
1192 return 1;
1193 } else {
1194 return 0;
1195 }
1196}
1197
1198
1199long
1200GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1201 if (myMDIClient->numChildren() > 0) {
1202 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1203 if (w != nullptr) {
1204 w->onCmdLocate(nullptr, sel, nullptr);
1205 }
1206 }
1207 return 1;
1208}
1209
1210
1211long
1212GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1213 return myToolsMenuCommands.showTool(obj);
1214}
1215
1216
1217long
1218GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1220}
1221
1222
1223long
1226}
1227
1228
1229long
1230GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1231 // currently always enabled
1232 return 1;
1233}
1234
1235
1236long
1237GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1238 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1239 return 1;
1240}
1241
1242
1243long
1244GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1246 return 1;
1247}
1248
1249
1250long
1252 return 1;
1253}
1254
1255
1256long
1258 return 1;
1259}
1260
1261
1262long
1263GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1264 // create and open about dialog
1265 GNEAboutDialog(this);
1266 return 1;
1267}
1268
1269
1270long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1271 FXEvent* event = (FXEvent*)ptr;
1272 FXString string = GUIUserIO::clipped.c_str();
1273 setDNDData(FROM_CLIPBOARD, event->target, string);
1274 return 1;
1275}
1276
1277
1278long
1279GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1280 eventOccurred();
1281 return 1;
1282}
1283
1284
1285void
1287 // load events
1288 while (!myThreadEvents.empty()) {
1289 // get the next event
1292 // process
1293 switch (e->getOwnType()) {
1296 break;
1303 break;
1304 default:
1305 break;
1306 }
1307 delete e;
1308 }
1309}
1310
1311
1312void
1315 myAmLoading = false;
1316 GNEEvent_FileLoaded* fileLoadedEvent = static_cast<GNEEvent_FileLoaded*>(e);
1317 // check whether the loading was successful
1318 if (fileLoadedEvent->getNet() == nullptr) {
1319 // report failure
1320 std::string failureMessage;
1321 switch (fileLoadedEvent->getType()) {
1323 failureMessage = TLF("Loading of netedit config '%' failed", fileLoadedEvent->getFile());
1324 break;
1326 failureMessage = TLF("Loading of sumo config '%' failed", fileLoadedEvent->getFile());
1327 break;
1329 failureMessage = TLF("Loading of netconvert config '%' failed", fileLoadedEvent->getFile());
1330 break;
1332 failureMessage = TLF("Loading of network '%' failed", fileLoadedEvent->getFile());
1333 break;
1335 failureMessage = TLF("Loading of OSM Network '%' failed", fileLoadedEvent->getFile());
1336 break;
1338 failureMessage = TL("Invalid Options. Nothing loaded");
1339 break;
1341 failureMessage = TL("Could not build projection. Nothing loaded");
1342 break;
1344 failureMessage = TL("Invalid extension for config file. Only .netecfg, .sumocfg or .netccfg are allowed");
1345 break;
1346 default:
1347 failureMessage = TL("Invalid input network option. Load with either sumo/netedit/netconvert config or with --new option");
1348 break;
1349 }
1350 // write info
1351 WRITE_ERROR(failureMessage);
1352 setStatusBarText(failureMessage);
1353 if (OptionsCont::getOptions().getBool("quit-on-fail")) {
1354 closeAllWindows(true);
1355 getApp()->exit(1);
1356 }
1357 } else {
1358 // report success
1359 std::string successMessage;
1360 switch (fileLoadedEvent->getType()) {
1362 successMessage = TLF("Netedit config '%' loaded", fileLoadedEvent->getFile());
1363 break;
1365 successMessage = TLF("Sumo config '%' loaded", fileLoadedEvent->getFile());
1366 break;
1368 successMessage = TLF("Netconvert config '%' loaded", fileLoadedEvent->getFile());
1369 break;
1371 successMessage = TLF("Network '%' loaded", fileLoadedEvent->getFile());
1372 break;
1374 successMessage = TLF("OSM Network '%' loaded", fileLoadedEvent->getFile());
1375 break;
1377 successMessage = TLF("Network '%' loaded through console", fileLoadedEvent->getFile());
1378 break;
1380 successMessage = TL("New network successfully created");
1381 break;
1382 default:
1383 throw ProcessError("Invalid sucess mesage. Check if all cases were covered");
1384 }
1385 // write info
1386 WRITE_MESSAGE(successMessage);
1387 setStatusBarText(successMessage);
1388 // set new Net
1389 myNet = fileLoadedEvent->getNet();
1390 // set size and pos
1392 // build viewparent toolbar grips before creating view parent
1394 // initialise netedit View
1395 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1396 // create it maximized
1397 viewParent->maximize();
1398 // mark it as Active child
1399 myMDIClient->setActiveChild(viewParent);
1400 // cast pointer myViewNet
1401 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1402 // set settings in view
1403 if (viewParent->getView() && (fileLoadedEvent->getSettingsFile().size() > 0)) {
1404 GUISettingsHandler settings(getApp(), fileLoadedEvent->getSettingsFile(), true, true);
1405 settings.addSettings(viewParent->getView());
1406 viewParent->getView()->addDecals(settings.getDecals());
1407 settings.applyViewport(viewParent->getView());
1408 settings.setSnapshots(viewParent->getView());
1409 }
1410 // set network name on the caption
1411 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileLoadedEvent->getFile().c_str()));
1412 // force supermode network
1414 // update view port
1415 if (fileLoadedEvent->getViewportFromRegistry()) {
1416 Position off;
1417 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1418 Position p(off.x(), off.y(), 0);
1419 myViewNet->setViewportFromToRot(off, p, 0);
1420 }
1421 // load elements
1422 loadAdditionalElements("Loading");
1423 loadDemandElements("Loading");
1424 loadDataElements("Loading");
1425 loadMeanDataElements("Loading");
1426 // load selection
1427 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1429 }
1431 }
1432 // update app
1433 update();
1434 // restore focus
1435 setFocus();
1436}
1437
1438
1439void
1444
1445// ---------------------------------------------------------------------------
1446// private methods
1447// ---------------------------------------------------------------------------
1448
1449void
1451 // build file menu
1452 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1454 myFileMenuNeteditConfig = new FXMenuPane(this);
1455 myFileMenuSumoConfig = new FXMenuPane(this);
1456 myFileMenuTLS = new FXMenuPane(this);
1457 myFileMenuEdgeTypes = new FXMenuPane(this);
1458 myFileMenuAdditionals = new FXMenuPane(this);
1459 myFileMenuDemandElements = new FXMenuPane(this);
1460 myFileMenuDataElements = new FXMenuPane(this);
1461 myFileMenuMeanDataElements = new FXMenuPane(this);
1462 myFileMenuRecentNetworks = new FXMenuPane(this);
1463 myFileMenuRecentConfigs = new FXMenuPane(this);
1467 // add separator for recent files
1468 new FXMenuSeparator(myFileMenu);
1469 // build recent files
1472 new FXMenuSeparator(myFileMenu);
1473 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1474 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1475 // build modes menu
1476 myModesMenu = new FXMenuPane(this);
1478 myModesMenuTitle->setTarget(this);
1480 // build Supermode commands and hide it
1482 // add separator
1483 new FXSeparator(myModesMenu);
1484 // build modes menu commands
1486 // build edit menu
1487 myEditMenu = new FXMenuPane(this);
1489 // build edit menu commands
1491 // build separator
1492 new FXMenuSeparator(myEditMenu);
1493 // build view options
1497 // hide view options
1501 // build view menu commands
1503 // build separator
1504 new FXMenuSeparator(myEditMenu);
1505 // build front element menu commands
1507 // build separator
1508 new FXMenuSeparator(myEditMenu);
1509 // build open in sumo menu commands
1511 // build lock menu
1512 myLockMenu = new FXMenuPane(this);
1514 myLockMenuTitle->setTarget(this);
1516 // build lock menu commands
1518 // build processing menu (trigger netbuild computations)
1519 myProcessingMenu = new FXMenuPane(this);
1522 // build locate menu
1523 myLocatorMenu = new FXMenuPane(this);
1526 // build tools menu
1527 myToolsMenu = new FXMenuPane(this);
1528 myToolsAssignMenu = new FXMenuPane(this);
1529 myToolsDetectorMenu = new FXMenuPane(this);
1530 myToolsDistrictMenu = new FXMenuPane(this);
1531 myToolsDRTMenu = new FXMenuPane(this);
1532 myToolsEmissionsMenu = new FXMenuPane(this);
1533 myToolsImportMenu = new FXMenuPane(this);
1534 myToolsImportCityBrainMenu = new FXMenuPane(this);
1535 myToolsImportGTFSMenu = new FXMenuPane(this);
1536 myToolsImportVissim = new FXMenuPane(this);
1537 myToolsImportVisum = new FXMenuPane(this);
1538 myToolsNetMenu = new FXMenuPane(this);
1539 myToolsRouteMenu = new FXMenuPane(this);
1540 myToolsOutputMenu = new FXMenuPane(this);
1541 myToolsShapes = new FXMenuPane(this);
1542 myToolsTLS = new FXMenuPane(this);
1543 myToolsTriggerMenu = new FXMenuPane(this);
1544 myToolsTurnDefs = new FXMenuPane(this);
1545 myToolsVisualizationMenu = new FXMenuPane(this);
1546 myToolsXML = new FXMenuPane(this);
1548 // build tools menu cascasde
1549 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1550 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1551 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1553 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1562 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1563 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1564 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1568 // add separators between folders
1569 new FXMenuSeparator(myToolsMenu);
1570 new FXMenuSeparator(myToolsImportMenu);
1571 // create map with tool Menu panes and their associated folder
1578 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1580 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1581 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1588 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1591 // build tools
1593 // build windows menu
1594 myWindowMenu = new FXMenuPane(this);
1597 // build language menu
1599 // build help menu
1600 myHelpMenu = new FXMenuPane(this);
1603}
1604
1605
1606FXGLCanvas*
1608 // netedit uses only a single View, then return nullptr
1609 return nullptr;
1610}
1611
1612
1615 return 0;
1616}
1617
1618
1619double
1621 return 1;
1622}
1623
1624
1629
1630
1635
1636
1641
1642
1647
1648
1649void
1651 if (myViewNet && myViewNet->getNet()) {
1652 // show
1654 // set label depending of recomputing
1656 myRequireRecomputingButton->setText("");
1657 myRequireRecomputingButton->setTipText(TL("Network computed"));
1659 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1660 } else {
1661 myRequireRecomputingButton->setText(TL("Press F5"));
1662 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1664 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1665 }
1666 } else {
1667 // hide
1669 }
1670}
1671
1672
1673void
1674GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1675 // first check if net must be deleted
1676 if (myNet != nullptr) {
1677 delete myNet;
1678 myNet = nullptr;
1680 }
1681 // reset default filenames
1682 if (resetFilenames) {
1684 }
1685 // check if view has to be saved
1686 if (myViewNet) {
1688 // save decals and viewport for persistence (before they are cleared)
1692 // clear decals and release GPU textures
1693 if (myViewNet->makeCurrent()) {
1698 myViewNet->makeNonCurrent();
1699 }
1700 }
1701 // lock tracker
1702 myTrackerLock.lock();
1703 // remove trackers and other external windows
1704 while (!myGLWindows.empty()) {
1705 delete myGLWindows.front();
1706 }
1707 myViewNet = nullptr;
1708 for (FXMainWindow* const window : myTrackerWindows) {
1709 window->destroy();
1710 delete window;
1711 }
1712 myTrackerWindows.clear();
1713 // reset the caption
1714 setTitle(myTitlePrefix);
1715 // unlock tracker
1716 myTrackerLock.unlock();
1717 // remove coordinate information
1718 myGeoCoordinate->setText(TL("N/A"));
1719 myCartesianCoordinate->setText(TL("N/A"));
1720 myTestCoordinate->setText(TL("N/A"));
1721 myTestFrame->hide();
1723}
1724
1725
1726FXCursor*
1728 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1729}
1730
1731
1732void
1734 auto& neteditOptions = OptionsCont::getOptions();
1735 if (neteditOptions.getBool("new")) {
1736 // save output file
1737 const auto outputFile = neteditOptions.getString("output-file");
1738 // create new network reset all options
1740 // check if define network file using this ouput file
1741 if (!outputFile.empty()) {
1743 }
1744 } else {
1745 // set flag
1746 myAmLoading = true;
1747 // set status bar
1748 setStatusBarText(TL("Loading console arguments."));
1749 // load console arguments
1751 // add it into recent networks and configs
1754 }
1757 }
1758 }
1759}
1760
1761
1762void
1764 auto& neteditOptions = OptionsCont::getOptions();
1765 // save windows size and position
1767 // enable loading flag and disable reloading flag
1768 myAmLoading = true;
1769 // recenter view
1770 gSchemeStorage.saveViewport(0, 0, -1, 0);
1771 // fill (reset) all options
1772 GNELoadThread::fillOptions(neteditOptions);
1773 // set default options defined in GNELoadThread::setDefaultOptions(...)
1774 GNELoadThread::setDefaultOptions(neteditOptions);
1775 // update status bar
1776 setStatusBarText(TL("Creating new network."));
1777 // create new network
1779 // update window
1780 update();
1781}
1782
1783
1784void
1785GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1786 if (networkFile.empty()) {
1787 WRITE_ERROR(TL("Trying to load an empty network."));
1788 } else {
1789 auto& neteditOptions = OptionsCont::getOptions();
1790 // stop test before calling load thread
1791 if (myInternalTest) {
1793 }
1794 // store size, position and viewport
1796 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1797 // set flag
1798 myAmLoading = true;
1799 // fill (reset) all options
1800 myLoadThread->fillOptions(neteditOptions);
1801 // set default options defined in GNELoadThread::setDefaultOptions(...)
1802 myLoadThread->setDefaultOptions(neteditOptions);
1803 // update default net file
1805 // set status bar
1806 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1807 // load network
1809 // add it into recent nets
1810 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1811 }
1812}
1813
1814
1815void
1816GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1817 if (configurationFile.empty()) {
1818 WRITE_ERROR(TL("Trying to load an empty configuration."));
1819 } else {
1820 auto& neteditOptions = OptionsCont::getOptions();
1821 // store size, position and viewport
1823 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1824 // set flag
1825 myAmLoading = true;
1826 // fill (reset) all options
1827 myLoadThread->fillOptions(neteditOptions);
1828 // set default options defined in GNELoadThread::setDefaultOptions(...)
1829 myLoadThread->setDefaultOptions(neteditOptions);
1830 // set file to load
1831 neteditOptions.resetWritable();
1832 neteditOptions.set("configuration-file", configurationFile);
1833 // set status bar
1834 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1835 // load config
1837 // add it into recent configs
1838 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1839 }
1840}
1841
1842
1843void
1844GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1845 auto& neteditOptions = OptionsCont::getOptions();
1846 // store size, position and viewport
1848 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1849 // set flag
1850 myAmLoading = true;
1851 // fill (reset) all options
1852 myLoadThread->fillOptions(neteditOptions);
1853 // set default options defined in GNELoadThread::setDefaultOptions(...)
1854 myLoadThread->setDefaultOptions(neteditOptions);
1855 // recommended osm options
1856 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1857 neteditOptions.set("osm-files", OSMFile);
1858 neteditOptions.set("geometry.remove", "true");
1859 neteditOptions.set("ramps.guess", "true");
1860 neteditOptions.set("junctions.join", "true");
1861 neteditOptions.set("tls.guess-signals", "true");
1862 neteditOptions.set("tls.discard-simple", "true");
1863 // open netedit options dialog
1864 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1865 // open wizard dialog
1866 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1867 // needed to set projection parameters
1868 NIFrame::checkOptions(neteditOptions);
1869 // set file to load
1870 neteditOptions.resetWritable();
1871 neteditOptions.set("configuration-file", OSMFile);
1872 // set status bar
1873 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1874 // load config
1876 }
1877}
1878
1879void
1880GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1881 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1882 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1883}
1884
1885
1886long
1887GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
1888 // open question dialog box
1889 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
1890 TL("Recompute with volatile options"),
1891 TL("Changes produced in the net due a recomputing with"),
1892 TL("volatile options cannot be undone. Continue?"));
1893 // check result
1894 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1895 // save all elements
1896 onCmdSaveAdditionalElements(sender, sel, ptr);
1897 onCmdSaveDemandElements(sender, sel, ptr);
1898 onCmdSaveDataElements(sender, sel, ptr);
1899 onCmdSaveMeanDataElements(sender, sel, ptr);
1900 // compute with volatile options
1901 myNet->computeNetwork(this, true, true);
1903 }
1904 return 1;
1905}
1906
1907
1908bool
1911 myConsoleOptionsLoaded = false;
1912 return true;
1913 } else {
1914 return false;
1915 }
1916}
1917
1918
1923
1924
1929
1930
1931void
1935
1936
1937long
1938GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1939 // check that currently there is a View
1940 if (myViewNet) {
1941 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1942 }
1943 return 1;
1944}
1945
1946
1947long
1948GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1949 // check that currently there is a View
1950 if (myViewNet) {
1951 myViewNet->onCmdSetMode(sender, sel, ptr);
1952 }
1953 return 1;
1954}
1955
1956
1957long
1958GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1959 if (myViewNet) {
1960 // check if we're calling the functions using internal test
1961 switch (FXSELID(sel)) {
1964 break;
1965 case MID_GNE_LOCK_EDGE:
1967 break;
1968 case MID_GNE_LOCK_LANE:
1970 break;
1973 break;
1976 break;
1979 break;
1982 break;
1983 case MID_GNE_LOCK_WIRE:
1985 break;
1986 case MID_GNE_LOCK_TAZ:
1988 break;
1991 break;
1992 case MID_GNE_LOCK_POI:
1994 break;
1997 break;
2000 break;
2001 case MID_GNE_LOCK_ROUTE:
2003 break;
2006 break;
2009 break;
2012 break;
2013 case MID_GNE_LOCK_WALK:
2015 break;
2016 case MID_GNE_LOCK_RIDE:
2018 break;
2021 break;
2024 break;
2027 break;
2028 case MID_GNE_LOCK_STOP:
2030 break;
2033 break;
2036 break;
2039 break;
2040 default:
2041 break;
2042 }
2044 }
2045 return 1;
2046}
2047
2048
2049long
2050GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2051 // lock all
2054 return 1;
2055}
2056
2057
2058long
2060 // unlock all
2063 return 1;
2064}
2065
2066
2067long
2069 if (myViewNet) {
2070 myViewNet->update();
2071 }
2072 return 1;
2073}
2074
2075
2076long
2077GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2078 if (myViewNet) {
2080 // supermode network
2086 myLockMenuTitle->enable();
2087 } else {
2088 myLockMenuTitle->disable();
2089 }
2091 // supermode demand
2096 myLockMenuTitle->enable();
2097 } else {
2098 myLockMenuTitle->disable();
2099 }
2101 // supermode data
2105 myLockMenuTitle->enable();
2106 } else {
2107 myLockMenuTitle->disable();
2108 }
2109 } else {
2110 myLockMenuTitle->disable();
2111 }
2112 } else {
2113 myLockMenuTitle->disable();
2114 }
2115 return 1;
2116}
2117
2118
2119long
2120GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2121 // first check if there is a view
2122 if (myViewNet) {
2123 // process depending of supermode
2125 // check what FXMenuCommand was called
2126 switch (FXSELID(sel)) {
2128 myNet->computeNetwork(this, true, false);
2130 break;
2132 computeJunctionWithVolatileOptions(sender, sel, ptr);
2133 break;
2136 break;
2139 break;
2142 break;
2143 default:
2144 break;
2145 }
2147 // check what FXMenuCommand was called
2148 switch (FXSELID(sel)) {
2152 break;
2155 break;
2158 break;
2161 break;
2164 break;
2165 default:
2166 break;
2167 }
2168 }
2169 // refresh to update undo-redo button
2170 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2171 }
2172 return 1;
2173}
2174
2175
2176long
2177GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2178 // get extra arguments
2179 std::string extraArg;
2181 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2182 }
2183 FXRegistry reg("SUMO netedit", "netedit");
2184 std::string netedit = "netedit";
2185 const char* sumoPath = getenv("SUMO_HOME");
2186 if (sumoPath != nullptr) {
2187#ifdef DEBUG
2188 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2189#else
2190 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2191#endif
2192 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2193 netedit = "\"" + newPath + "\"";
2194 }
2195 }
2196 std::string cmd = netedit + extraArg;
2197 // start in background
2198#ifndef WIN32
2199 cmd = cmd + " &";
2200#else
2201 // see "help start" for the parameters
2202 cmd = "start /B \"\" " + cmd;
2203#endif
2204 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2205 // yay! fun with dangerous commands... Never use this over the internet
2207 return 1;
2208}
2209
2210
2211long
2212GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2213 // input parameters
2214 std::string inputParameters;
2215 // if we have only a network, then load directly without creating a SumoConfig
2217 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2218 // force save network
2219 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2220 // network wasn't saved, then stop
2221 return 0;
2222 }
2223 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2224 // write info
2226 } else {
2227 // force save SumoConfig
2228 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2229 // SumoConfig wasn't saved, then stop
2230 return 0;
2231 }
2232 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2233 // write info
2234 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2235 }
2236 // save current viewport in registry
2237 FXRegistry reg("SUMO GUI", "sumo-gui");
2238 reg.read();
2239 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2240 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2241 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2242 reg.write();
2243 // declare executable
2244 std::string sumoGuiExecutable = "sumo-gui";
2245 // if SUMO_HOME is defined, update executable
2246 const char* sumoHome = getenv("SUMO_HOME");
2247 if (sumoHome != nullptr) {
2248 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2249 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2250 sumoGuiExecutable = "\"" + newPath + "\"";
2251 }
2252 }
2253 // declare command
2254 std::string cmd = sumoGuiExecutable + inputParameters;
2255 // start in background
2256#ifndef WIN32
2257 cmd = cmd + " &";
2258#else
2259 // see "help start" for the parameters
2260 cmd = "start /B \"\" " + cmd;
2261#endif
2262 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2263 // yay! fun with dangerous commands... Never use this over the internet
2265 return 1;
2266}
2267
2268
2269long
2270GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2271 // check that view exists
2272 if (myViewNet) {
2273 // first check if we're selecting a subset of edges in TAZ Frame
2275 // clear current selection
2277 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2278 // check if stop select parent
2280 // and stop select paretn
2282 } else {
2283 // clear inspected elements
2285 }
2286 } else {
2287 // abort current operation
2289 }
2290 }
2291 return 1;
2292}
2293
2294
2295long
2296GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2297 // check that view exists
2298 if (myViewNet) {
2300 }
2301 return 1;
2302}
2303
2304
2305long
2306GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2307 // check that view exists
2308 if (myViewNet) {
2310 }
2311 return 1;
2312}
2313
2314
2315long
2316GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2317 // check that view exists
2318 if (myViewNet) {
2320 }
2321 return 1;
2322}
2323
2324
2325long
2326GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2327 // check that view exists
2328 if (myViewNet) {
2330 }
2331 return 1;
2332}
2333
2334
2335long
2337 // check that view exists
2338 if (myViewNet) {
2340 }
2341 return 1;
2342}
2343
2344
2345long
2346GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2347 // check that view exists
2348 if (myViewNet) {
2350 // refresh flow frames
2351 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2353 }
2354 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2356 }
2357 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2359 }
2360 // refresh inspector frame
2361 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2363 }
2364 }
2365 return 1;
2366}
2367
2368
2369long
2370GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2371 // check that view exists
2372 if (myViewNet) {
2374 }
2375 return 1;
2376}
2377
2378
2379long
2380GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2383 }
2384 return 1;
2385}
2386
2387
2388long
2389GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2390 // enable or disable sender element depending of viewNet
2391 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2392}
2393
2394
2395long
2398 return 1;
2399}
2400
2401
2402long
2403GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2404 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2405 return 1;
2406}
2407
2408
2409long
2410GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2412}
2413
2414
2415long
2416GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2417 // check that view exists
2418 if (myViewNet) {
2420 }
2421 return 1;
2422}
2423
2424
2425long
2426GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2427 // check that view exists
2428 if (myViewNet) {
2430 }
2431 return 1;
2432}
2433
2434
2435long
2436GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2437 // check that view exists
2438 if (myViewNet) {
2439 // Call manually toggle grid function
2440 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2441 }
2442 return 1;
2443}
2444
2445
2446long
2447GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2448 // check that view exists
2449 if (myViewNet) {
2450 // Call manually toggle junction shape function
2451 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2452 }
2453 return 1;
2454}
2455
2456
2457long
2459 if (myViewNet) {
2460 // check if all element are front
2461 bool allFront = true;
2462 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2463 if (!AC->isMarkedForDrawingFront()) {
2464 allFront = false;
2465 break;
2466 }
2467 }
2468 // first unfront all elements
2470 // only mark front elements if we have at least one non-front element
2471 if (!allFront) {
2472 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2473 AC->markForDrawingFront();
2474 }
2475 }
2476 myViewNet->update();
2478 }
2479 return 1;
2480}
2481
2482
2483long
2484GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2485 // first check that we have a ViewNet
2486 if (myViewNet) {
2487 // first check what selector was called
2488 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2489 // check that numericalKeyPressed is valid
2490 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2491 return 0;
2492 }
2493 // declare a vector in which save visible menu commands
2494 std::vector<MFXCheckableButton*> visibleMenuCommands;
2495 // get common, network and demand visible menu commands
2499 // now check that numericalKeyPressed isn't greater than visible view options
2500 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2501 return 0;
2502 }
2503 // toggle edit options
2505 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2506 return 1;
2508 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2509 return 1;
2511 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2512 return 1;
2513 }
2514 }
2515 return 0;
2516}
2517
2518
2519long
2520GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2521 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2522 return 1;
2523}
2524
2525
2526long
2527GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2528 // update in every version
2529 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2530 return 1;
2531}
2532
2533
2534long
2535GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2536 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2537 return 1;
2538}
2539
2540
2541long
2544 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2545 } else {
2546 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2547 }
2548}
2549
2550
2551long
2552GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2553 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2554 myAllowUndoRedo = true;
2555 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2556 } else {
2557 myAllowUndoRedo = false;
2558 // drop undo-redo list after changing flag
2559 myUndoList->clear();
2560 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2561 }
2562}
2563
2564
2565long
2567 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2569 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2570 } else {
2571 myAllowUndoRedoLoading = false;
2572 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2573 }
2574}
2575
2576
2577long
2578GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2579 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2580 return 1;
2581}
2582
2583
2584long
2585GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2586 // create and open feedback dialog
2587 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2588 feedback->create();
2589 feedback->show(PLACEMENT_OWNER);
2590 return 1;
2591}
2592
2593
2594long
2596 auto& neteditOptions = OptionsCont::getOptions();
2597 // open netedit option dialog
2598 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2599 // continue depending of result
2600 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2601 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2602 NBFrame::checkOptions(neteditOptions);
2603 NWFrame::checkOptions(neteditOptions);
2604 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2605 // check if mark netedit config as unsaved
2606 if (neteditOptionsDialog.isOptionModified() && myNet) {
2608 // aditionally, check if network requires saving
2609 if (neteditOptionsDialog.requireSaveNetwork()) {
2611 }
2612 }
2613 }
2614 return 1;
2615}
2616
2617
2618long
2620 // open sumo option dialog
2621 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2622 // continue depending of result
2623 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2625 }
2626 return 1;
2627}
2628
2629
2630long
2633 return 1;
2634}
2635
2636
2637long
2639 // open netgenerate options dialog
2641 return 1;
2642}
2643
2644
2645long
2646GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2647 // Check conditions
2648 if (myViewNet == nullptr) {
2649 return 0;
2650 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2651 return 0;
2652 } else {
2653 // check supermode (currently ignore supermode data)
2656 // abort if user doesn't press "yes"
2658 return 0;
2659 }
2660 }
2662 // update current show frame after undo
2665 }
2666 // update file bucket options (needed to maintain integrity)
2668 // update manually undo/redo menu commands (see #6005)
2671 // update toolbar undo-redo buttons
2673 return 1;
2674 }
2675}
2676
2677
2678long
2679GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2680 // Check conditions
2681 if (myViewNet == nullptr) {
2682 return 0;
2683 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2684 return 0;
2685 } else {
2686 // check supermode (currently ignore supermode data)
2689 // abort if user doesn't press "yes"
2691 return 0;
2692 }
2693 }
2695 // update current show frame after redo
2698 }
2699 // update file bucket options (needed to maintain integrity)
2701 // update manually undo/redo menu commands (see #6005)
2704 // update toolbar undo-redo buttons
2706 return 1;
2707 }
2708}
2709
2710
2711long
2713 // open UndoList Dialog
2714 GNEUndoListDialog(this);
2715 return 1;
2716}
2717
2718
2719long
2720GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2721 // check if net exist and there is something to undo/redo
2722 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2723 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2724 } else {
2725 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2726 }
2727 return 1;
2728}
2729
2730
2731long
2733 // first check viewNet
2735 // update demand path calculator
2737 }
2738 return 1;
2739}
2740
2741
2742long
2743GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2744 // Prepared for #6042
2745 return 1;
2746}
2747
2748
2749long
2750GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2751 // Prepared for #6042
2752 return 1;
2753}
2754
2755
2756long
2757GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2758 // Prepared for #6042
2759 return 1;
2760}
2761
2762
2763long
2764GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2765 // first check if myViewNet exist
2766 if (myViewNet) {
2767 // call set template in inspector frame
2769 }
2770 return 1;
2771}
2772
2773
2774long
2775GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2776 // first check if myViewNet exist
2777 if (myViewNet) {
2778 // call copy template in inspector frame
2780 }
2781 return 1;
2782}
2783
2784
2785long
2786GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2787 // first check if myViewNet exist
2788 if (myViewNet) {
2789 // call clear template in inspector frame
2791 }
2792 return 1;
2793}
2794
2795
2796long
2797GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2798 // check if net exist
2799 if (myNet) {
2801 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2802 } else {
2804 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2805 }
2806}
2807
2808
2809long
2810GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2811 // check if at least there is one edge in the network
2812 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2813 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2814 } else {
2815 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2816 }
2817}
2818
2819
2820long
2821GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2822 // check if net, viewnet and front attribute exist
2823 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2824 // check if all element are front
2825 bool allFront = true;
2826 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2827 if (!AC->isMarkedForDrawingFront()) {
2828 allFront = false;
2829 break;
2830 }
2831 }
2832 // set button text depending of all selected
2833 if (allFront) {
2834 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2835 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2836 } else {
2837 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2838 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2839 }
2840 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2841 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2842 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2843 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2844 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2845 } else {
2846 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2847 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2848 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2849 }
2850}
2851
2852
2853long
2854GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2855 if (myNet == nullptr) {
2856 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2857 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2858 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2859 } else {
2860 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2861 }
2862}
2863
2864
2865long
2866GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2867 if (myNet == nullptr) {
2868 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2870 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2871 } else {
2872 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2873 }
2874}
2875
2876
2877long
2879 if (myNet == nullptr) {
2880 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2881 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2882 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2883 } else {
2884 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2885 }
2886}
2887
2888
2889long
2890GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2891 if (myNet == nullptr) {
2892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2893 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2894 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2895 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2896 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2897 } else {
2898 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2899 }
2900}
2901
2902
2903long
2904GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2905 if (myNet == nullptr) {
2906 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2907 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2908 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2909 } else {
2910 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2911 }
2912
2913}
2914
2915
2916long
2917GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2918 if (myNet == nullptr) {
2919 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2921 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2922 } else {
2923 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2924 }
2925}
2926
2927
2928long
2929GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2930 if (myNet == nullptr) {
2931 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2932 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2933 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2934 } else {
2935 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2936 }
2937
2938}
2939
2940
2941long
2942GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2943 if (myNet == nullptr) {
2944 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2945 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2946 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2947 } else {
2948 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2949 }
2950
2951}
2952
2953
2954long
2955GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2956 if (myNet == nullptr) {
2957 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2958 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2959 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2960 } else {
2961 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2962 }
2963}
2964
2965
2966long
2968 if (myNet == nullptr) {
2969 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2970 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2971 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2972 } else {
2973 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2974 }
2975
2976}
2977
2978
2979long
2980GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2981 return myUndoList->onUpdUndo(sender, sel, ptr);
2982}
2983
2984
2985long
2986GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2987 return myUndoList->onUpdRedo(sender, sel, ptr);
2988}
2989
2990
2991long
2992GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2993 // first check viewNet
2994 if (myViewNet) {
2995 // check supermode network
2997 // disable
2998 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3000 // disable
3001 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3002 } else {
3003 // enable
3004 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3005 }
3006 } else {
3007 // disable
3008 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3009 }
3010}
3011
3012
3013long
3014GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3015 // check viewNet
3016 if (myViewNet) {
3017 // continue depending of selector
3018 switch (FXSELID(sel)) {
3019 // Network
3021 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3023 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3025 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3027 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3029 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3031 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3033 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3035 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3037 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3039 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3041 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3043 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3045 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3047 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3049 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3051 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3053 return myViewNet->onCmdToggleShowPolygonSymbols(sender, sel, ptr);
3054 // Demand
3056 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3058 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3060 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3062 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3064 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3066 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3068 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3070 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3072 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3074 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3076 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3077 // Data
3079 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3081 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3083 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3085 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3087 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3089 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3091 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3093 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3094 default:
3095 return 0;
3096 }
3097 } else {
3098 return 0;
3099 }
3100}
3101
3102
3103long
3104GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3105 // get menuCheck
3106 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3107 // check viewNet
3108 if (myViewNet && menuCheck) {
3109 // continue depending of selector
3110 switch (FXSELID(sel)) {
3111 // Network
3114 menuCheck->setCheck(TRUE);
3115 } else {
3116 menuCheck->setCheck(FALSE);
3117 }
3118 break;
3121 menuCheck->setCheck(TRUE);
3122 } else {
3123 menuCheck->setCheck(FALSE);
3124 }
3125 break;
3128 menuCheck->setCheck(TRUE);
3129 } else {
3130 menuCheck->setCheck(FALSE);
3131 }
3132 break;
3135 menuCheck->setCheck(TRUE);
3136 } else {
3137 menuCheck->setCheck(FALSE);
3138 }
3139 break;
3142 menuCheck->setCheck(TRUE);
3143 } else {
3144 menuCheck->setCheck(FALSE);
3145 }
3146 break;
3149 menuCheck->setCheck(TRUE);
3150 } else {
3151 menuCheck->setCheck(FALSE);
3152 }
3153 break;
3156 menuCheck->setCheck(TRUE);
3157 } else {
3158 menuCheck->setCheck(FALSE);
3159 }
3160 break;
3163 menuCheck->setCheck(TRUE);
3164 } else {
3165 menuCheck->setCheck(FALSE);
3166 }
3167 break;
3170 menuCheck->setCheck(TRUE);
3171 } else {
3172 menuCheck->setCheck(FALSE);
3173 }
3174 break;
3177 menuCheck->setCheck(TRUE);
3178 } else {
3179 menuCheck->setCheck(FALSE);
3180 }
3181 break;
3184 menuCheck->setCheck(TRUE);
3185 } else {
3186 menuCheck->setCheck(FALSE);
3187 }
3188 break;
3191 menuCheck->setCheck(TRUE);
3192 } else {
3193 menuCheck->setCheck(FALSE);
3194 }
3195 break;
3198 menuCheck->setCheck(TRUE);
3199 } else {
3200 menuCheck->setCheck(FALSE);
3201 }
3202 break;
3205 menuCheck->setCheck(TRUE);
3206 } else {
3207 menuCheck->setCheck(FALSE);
3208 }
3209 break;
3212 menuCheck->setCheck(TRUE);
3213 } else {
3214 menuCheck->setCheck(FALSE);
3215 }
3216 break;
3219 menuCheck->setCheck(TRUE);
3220 } else {
3221 menuCheck->setCheck(FALSE);
3222 }
3223 break;
3226 menuCheck->setCheck(TRUE);
3227 } else {
3228 menuCheck->setCheck(FALSE);
3229 }
3230 break;
3231 // Demand
3234 menuCheck->setCheck(TRUE);
3235 } else {
3236 menuCheck->setCheck(FALSE);
3237 }
3238 break;
3241 menuCheck->setCheck(TRUE);
3242 } else {
3243 menuCheck->setCheck(FALSE);
3244 }
3245 break;
3248 menuCheck->setCheck(TRUE);
3249 } else {
3250 menuCheck->setCheck(FALSE);
3251 }
3252 break;
3255 menuCheck->setCheck(TRUE);
3256 } else {
3257 menuCheck->setCheck(FALSE);
3258 }
3259 break;
3262 menuCheck->setCheck(TRUE);
3263 } else {
3264 menuCheck->setCheck(FALSE);
3265 }
3266 break;
3269 menuCheck->setCheck(TRUE);
3270 } else {
3271 menuCheck->setCheck(FALSE);
3272 }
3273 break;
3276 menuCheck->setCheck(TRUE);
3277 } else {
3278 menuCheck->setCheck(FALSE);
3279 }
3280 // special case for lock persons
3282 menuCheck->enable();
3283 } else {
3284 menuCheck->disable();
3285 }
3286 break;
3289 menuCheck->setCheck(TRUE);
3290 } else {
3291 menuCheck->setCheck(FALSE);
3292 }
3293 break;
3296 menuCheck->setCheck(TRUE);
3297 } else {
3298 menuCheck->setCheck(FALSE);
3299 }
3300 // special case for lock containers
3302 menuCheck->enable();
3303 } else {
3304 menuCheck->disable();
3305 }
3306 break;
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;
3321 // Data
3324 menuCheck->setCheck(TRUE);
3325 } else {
3326 menuCheck->setCheck(FALSE);
3327 }
3328 break;
3331 menuCheck->setCheck(TRUE);
3332 } else {
3333 menuCheck->setCheck(FALSE);
3334 }
3335 break;
3338 menuCheck->setCheck(TRUE);
3339 } else {
3340 menuCheck->setCheck(FALSE);
3341 }
3342 break;
3345 menuCheck->setCheck(TRUE);
3346 } else {
3347 menuCheck->setCheck(FALSE);
3348 }
3349 break;
3352 menuCheck->setCheck(TRUE);
3353 } else {
3354 menuCheck->setCheck(FALSE);
3355 }
3356 break;
3359 menuCheck->setCheck(TRUE);
3360 } else {
3361 menuCheck->setCheck(FALSE);
3362 }
3363 break;
3364
3367 menuCheck->setCheck(TRUE);
3368 } else {
3369 menuCheck->setCheck(FALSE);
3370 }
3371 break;
3374 menuCheck->setCheck(TRUE);
3375 } else {
3376 menuCheck->setCheck(FALSE);
3377 }
3378 break;
3379 default:
3380 break;
3381 }
3382 }
3383 return 0;
3384}
3385
3386
3387long
3388GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3389 auto& neteditOptions = OptionsCont::getOptions();
3390 // check if we're forcing to saving additionals
3392 neteditOptions.getBool("force-saving")) {
3393 WRITE_MESSAGE(TL("Force save network"));
3394 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3395 // nothing to save
3396 return 1;
3397 }
3398 // first check if we have to set the output filename
3401 }
3402 // function onCmdSaveNetworkAs must be executed if this is the first save
3404 return onCmdSaveNetworkAs(sender, sel, ptr);
3405 } else {
3406 // always recompute before saving
3407 myNet->computeNetwork(this);
3408 bool saved = false;
3409 try {
3410 // obtain invalid networkElements (currently only edges or crossings
3411 std::vector<GNENetworkElement*> invalidNetworkElements;
3412 // iterate over crossings and edges
3413 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3414 if (!edge.second->isNetworkElementValid()) {
3415 invalidNetworkElements.push_back(edge.second);
3416 }
3417 }
3418 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3419 if (!crossing.second->isNetworkElementValid()) {
3420 invalidNetworkElements.push_back(crossing.second);
3421 }
3422 }
3423 // if there are invalid network elements, open GNEFixNetworkElements
3424 if (invalidNetworkElements.size() > 0) {
3425 // create fix network elements dialog
3426 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3427 // continue depending of result
3428 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3429 // Save network
3430 myNet->saveNetwork();
3431 saved = true;
3432 } else {
3433 // stop
3434 return 0;
3435 }
3436 } else {
3437 // Save network
3438 myNet->saveNetwork();
3439 saved = true;
3440 }
3441 } catch (IOError& e) {
3442 // open error message box
3443 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3444 }
3445 if (saved) {
3446 // write info
3448 // After saving a net successfully, add it into Recent Nets list.
3451 } else {
3454 return 0;
3455 }
3456 return 1;
3457 }
3458}
3459
3460
3461long
3462GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3463 // get network file file
3464 const GNEFileDialog networkFileDialog(this, TL("network file"),
3469 // continue depending of dialog
3470 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3471 // update default network file
3473 // update netedit title with the network name
3474 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3475 // enable save network
3477 // save network
3478 return onCmdSaveNetwork(sender, sel, ptr);
3479 } else {
3480 return 0;
3481 }
3482}
3483
3484
3485long
3486GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3487 // first check if we have to set the output filename
3490 }
3491 // function onCmdSaveNetworkAs must be executed if this is the first save
3493 return onCmdSavePlainXMLAs(sender, sel, ptr);
3494 } else {
3495 // start saving plain XML
3496 getApp()->beginWaitCursor();
3497 try {
3498 // we use the prefix instead the netconvert config
3500 // save plain xml
3501 myNet->savePlain(plainXMLPrefix, myNetconvertOptions);
3502 // write info
3503 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3504 } catch (IOError& e) {
3505 // open message box
3506 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3507 }
3508 // end saving plain XML
3509 getApp()->endWaitCursor();
3510 // set focus again in viewNet
3511 myViewNet->setFocus();
3512 }
3513 return 1;
3514}
3515
3516
3517long
3518GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3519 // get neteditConfig filename
3520 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3525 // continue depending of dialog
3526 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3527 // update default netconvert file
3529 // save plain xml
3530 return onCmdSavePlainXML(sender, sel, ptr);
3531 }
3532 return 1;
3533}
3534
3535
3536long
3538 // get neteditConfig filename
3539 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3544 // continue depending of dialog
3545 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3546 getApp()->beginWaitCursor();
3547 try {
3548 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3549 // write info
3550 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3551 } catch (IOError& e) {
3552 // opening error message
3553 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3554 }
3555 getApp()->endWaitCursor();
3556 // set focus again in viewNet
3557 myViewNet->setFocus();
3558 }
3559 return 1;
3560}
3561
3562
3563long
3564GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3565 // first check if netedit config is already saved
3567 return 1;
3568 }
3569 // Check if configuration file was already set at start of netedit or with a previous save
3571 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3572 } else {
3573 // save all elements giving automatic names based on patter if their file isn't defined
3574 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3575 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3576 return 0;
3577 }
3578 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3579 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3580 return 0;
3581 }
3582 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3583 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3584 return 0;
3585 }
3586 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3587 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3588 return 0;
3589 }
3590 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3591 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3592 return 0;
3593 }
3594 // get netedit config file
3596 // configuration
3597 std::ofstream out(XMLSubSys::transcodeToLocal(neteditConfigFile));
3598 if (out.good()) {
3599 const auto& neteditOptions = OptionsCont::getOptions();
3600 // write netedit config
3601 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3602 // write info
3603 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3604 // config saved
3606 // After saving a config successfully, add it into recent configs
3607 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3608 // if we have a sumo config defined, save it also
3610 // get SumoConfig file
3612 std::ofstream sumoCfg(XMLSubSys::transcodeToLocal(sumoConfigFile));
3613 if (sumoCfg.good()) {
3614 // before saving sumo config, check if force enable option junction-taz
3616 mySumoOptions.set("junction-taz", "true");
3617 }
3618 // write SUMO config
3619 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3620 // write info
3621 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3622 // After saving a config successfully, add it into recent configs
3623 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3624 }
3625 }
3626 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3627 if (neteditOptions.getBool("autosave-netconvert-file")) {
3628 onCmdSavePlainXML(sender, sel, ptr);
3629 }
3630 } else {
3631 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3632 }
3633 out.close();
3634 return 1;
3635 }
3636}
3637
3638
3639long
3640GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3641 // get neteditConfig filename
3642 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3647 // continue depending of dialog
3648 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3649 // set file in file bucket handler
3651 // mark netedit config as unsaved
3653 // continue saving netedit config
3654 return onCmdSaveNeteditConfig(sender, sel, ptr);
3655 } else {
3656 return 0;
3657 }
3658}
3659
3660
3661long
3662GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3663 // check if enable or disable save netedit config button
3664 if (myNet == nullptr) {
3665 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3666 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3667 // a config requieres at least ONE edge
3668 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3670 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3671 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3672 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3673 } else {
3674 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3675 }
3676 // check if enable/disable save individual files
3677 if (myNet) {
3681 } else {
3683 }
3684 }
3685 return 1;
3686}
3687
3688
3689long
3690GNEApplicationWindow::onUpdSaveNeteditConfigAs(FXObject* sender, FXSelector, void*) {
3691 // check if enable or disable save netedit config button
3692 if (myNet == nullptr) {
3693 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3694 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3695 // a config requieres at least ONE edge
3696 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3697 } else {
3698 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3699 }
3700}
3701
3702
3703long
3704GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3705 // obtain netedit option container
3706 auto& neteditOptions = OptionsCont::getOptions();
3707 // reset containers
3708 neteditOptions.resetWritable();
3710 // Check if configuration file was already set at start of netedit or with a previous save
3712 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3713 } else {
3714 // save all elements giving automatic names based on patter in their file isn't defined
3715 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3716 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3717 return 0;
3718 }
3719 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3720 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3721 return 0;
3722 }
3723 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3724 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3725 return 0;
3726 }
3727 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3728 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3729 return 0;
3730 }
3731 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3732 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3733 return 0;
3734 }
3735 // get SumoConfig file
3737 // confinguration
3738 std::ofstream out(XMLSubSys::transcodeToLocal(sumoConfigFile));
3739 if (out.good()) {
3740 // before saving sumo config, check if force enable option junction-taz
3742 mySumoOptions.set("junction-taz", "true");
3743 }
3744 // write SUMO config
3745 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3746 // write info
3747 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3748 // After saving a config successfully, add it into recent configs
3749 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3750 // if we have a netedit cong defined, save it also
3752 // get netedit config file
3754 // configuration
3755 std::ofstream neteditCfg(XMLSubSys::transcodeToLocal(neteditConfigFile));
3756 if (neteditCfg.good()) {
3757 // write netedit config
3758 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3759 // write info
3760 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3761 // config saved
3763 // After saving a config successfully, add it into recent configs
3764 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3765 }
3766 }
3767 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3768 if (neteditOptions.getBool("autosave-netconvert-file")) {
3769 onCmdSavePlainXML(sender, sel, ptr);
3770 }
3772 } else {
3773 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3774 }
3775 out.close();
3776 return 1;
3777 }
3778}
3779
3780
3781long
3782GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3783 // get sumoConfig filename
3784 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3789 // continue depending of dialog
3790 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3791 // set sumo config
3793 // mark netedit config as unsaved
3795 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3797 return onCmdSaveNeteditConfig(sender, sel, ptr);
3798 } else {
3800 return onCmdSaveSumoConfig(sender, sel, ptr);
3801 }
3802 } else {
3803 return 0;
3804 }
3805}
3806
3807
3808long
3809GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3810 if (myNet == nullptr) {
3811 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3812 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3813 // a config requieres at least ONE edge
3814 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3816 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3817 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3818 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3819 } else {
3820 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3821 }
3822}
3823
3824
3825long
3826GNEApplicationWindow::onUpdSaveSumoConfigAs(FXObject* sender, FXSelector, void*) {
3827 if (myNet == nullptr) {
3828 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3829 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3830 // a config requieres at least ONE edge
3831 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3832 } else {
3833 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3834 }
3835}
3836
3837long
3838GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3839 // Check if TLS Programs file was already set at start of netedit or with a previous save
3841 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3842 } else {
3843 // Start saving TLS Programs
3844 getApp()->beginWaitCursor();
3845 try {
3846 // compute before saving
3847 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3849 // write info
3851 } catch (IOError& e) {
3852 // open error message box
3853 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3854 }
3856 getApp()->endWaitCursor();
3857 // set focus again in viewNet
3858 myViewNet->setFocus();
3859 }
3860 return 1;
3861}
3862
3863
3864long
3865GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3866 if (myNet == nullptr) {
3867 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3868 } else {
3869 // check if there is at least one TLS
3870 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3871 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3872 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3873 }
3874 }
3875 // no TLS, then disable
3876 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3877 }
3878}
3879
3880
3881long
3882GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3883 // Check if edgeType file was already set at start of netedit or with a previous save
3885 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3886 } else {
3887 // Start saving edgeTypes
3888 getApp()->beginWaitCursor();
3889 try {
3891 // save edge types
3892 myNet->saveEdgeTypes(edgeTypeFile);
3893 // write info
3894 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
3895 } catch (IOError& e) {
3896 // open error message box
3897 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3898 }
3900 getApp()->endWaitCursor();
3901 }
3902 return 1;
3903}
3904
3905
3906long
3907GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3908 // check if net exist and there are edge types
3909 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3910 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3911 } else {
3912 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3913 }
3914 return 1;
3915}
3916
3917
3918long
3919GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
3920 // get TLS file
3921 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
3926 // continue depending of dialog
3927 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3928 // set tls type in bucket
3930 // enable save netedit config
3932 // set focus again in viewNet
3933 myViewNet->setFocus();
3934 // save TLS Programs
3935 return onCmdSaveTLSPrograms(sender, sel, ptr);
3936 } else {
3937 return 1;
3938 }
3939}
3940
3941
3942long
3943GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
3944 // get network file file
3945 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
3950 // continue depending of dialog
3951 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3952 // set tls type in bucket
3954 // enable save netedit config
3956 // set focus again in viewNet
3957 myViewNet->setFocus();
3958 // save edgeTypes
3959 return onCmdSaveEdgeTypes(sender, sel, ptr);
3960 } else {
3961 return 1;
3962 }
3963}
3964
3965
3966long
3968 // get file
3969 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
3974 // continue depending of dialog
3975 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3976 // flag for save current saving status
3977 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3978 // get (or create) bucket for this new file
3979 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
3980 // disable validation for additionals
3981 XMLSubSys::setValidation("never", "auto", "auto");
3982 // Create additional handler
3983 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3984 // begin undoList operation
3985 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
3986 // Run parser
3987 if (!generalHandler.parse()) {
3988 // write error
3989 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
3990 } else {
3991 // write info
3992 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
3993 // enable save if there is errors loading additionals
3994 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3996 }
3997 }
3998 // end undoList operation
3999 myUndoList->end();
4000 // restore validation for additionals
4001 XMLSubSys::setValidation("auto", "auto", "auto");
4002 // check if clear undoList
4004 myUndoList->clear();
4005 }
4006 update();
4007 }
4008 return 1;
4009}
4010
4011
4012long
4014 // disable validation for additionals
4015 XMLSubSys::setValidation("never", "auto", "auto");
4016 // begin undoList operation
4017 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
4018 // clear additionals
4020 // reload additional elements stored in options
4021 loadAdditionalElements("Reloading");
4022 // end undoList operation
4023 myUndoList->end();
4024 // restore validation for additionals
4025 XMLSubSys::setValidation("auto", "auto", "auto");
4026 // check if clear undoList
4028 myUndoList->clear();
4029 }
4030 update();
4031 return 1;
4032}
4033
4034
4035long
4036GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
4037 if (myViewNet == nullptr) {
4038 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4040 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4041 } else {
4042 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4043 }
4044}
4045
4046
4047long
4048GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4049 const auto savingFileHandler = myFileBucketHandler;
4050 // get option container
4051 auto& neteditOptions = OptionsCont::getOptions();
4052 // check if we're forcing to saving additionals
4054 neteditOptions.getBool("force-saving") &&
4056 WRITE_MESSAGE(TL("Force save additional elements"));
4057 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4058 // nothing to save
4059 return 1;
4060 }
4061 // check if we have to define a default filename
4063 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4064 }
4065 // check if we have to open save as dialog
4066 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4067 // choose file to save
4068 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4069 } else {
4070 // always recompute before saving
4071 myNet->computeNetwork(this);
4072 try {
4073 // compute before saving (for detectors positions)
4074 myNet->computeNetwork(this);
4075 // save additionals
4076 const bool savingResult = myNet->saveAdditionals();
4077 // show info
4078 if (savingResult) {
4079 WRITE_MESSAGE(TL("Additionals saved."));
4080 return 1;
4081 } else {
4082 WRITE_MESSAGE(TL("Saving additional aborted."));
4083 return 0;
4084 }
4085 } catch (IOError& e) {
4086 // open error message box
4087 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4088 }
4089 return 0;
4090 }
4091}
4092
4093
4094long
4095GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4096 // get additional file
4097 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4102 // continue depending of dialog
4103 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4104 // update default name
4106 // save additional
4107 return onCmdSaveAdditionalElements(sender, sel, ptr);
4108 } else {
4109 return 0;
4110 }
4111}
4112
4113
4114long
4115GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4116 // get additional file
4117 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4122 // continue depending of dialog
4123 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4124 // use the file as default file
4126 // begin undoList operation
4127 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4128 // iterate over all demand elementes and change file
4129 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4130 for (const auto& additionalElement : additionalElementTag.second) {
4131 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4132 }
4133 }
4134 // end undoList operation
4135 myUndoList->end();
4136 // save additionals
4138 return onCmdSaveAdditionalElements(sender, sel, ptr);
4139 } else {
4140 return 0;
4141 }
4142}
4143
4144
4145long
4147 // get juPedSim file
4148 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4153 // continue depending of dialog
4154 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4155 try {
4156 // save additionals
4157 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4158 // set focus again in viewNet
4159 myViewNet->setFocus();
4160 // show info
4161 if (savingResult) {
4162 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4163 return 1;
4164 } else {
4165 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4166 return 0;
4167 }
4168 } catch (IOError& e) {
4169 // open error message box
4170 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4171 }
4172 }
4173 return 0;
4174}
4175
4176
4177long
4179 // get file
4180 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4185 // continue depending of dialog
4186 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4187 // save previous demand element status saving
4188 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4189 // disable validation for additionals
4190 XMLSubSys::setValidation("never", "auto", "auto");
4191 // get (or create) bucket for this new file
4192 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4193 // Create generic handler
4195 // begin undoList operation
4196 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4197 // Run parser for additionals
4198 if (!handler.parse()) {
4199 // write error
4200 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4201 } else {
4202 // show info
4203 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4204 // enable demand elements if there is an error creating element
4205 if (previouslySaved && !handler.isErrorCreatingElement()) {
4207 }
4208 }
4209 // end undoList operation
4210 myUndoList->end();
4211 // restore validation
4212 XMLSubSys::setValidation("auto", "auto", "auto");
4213 // check if clear undoList
4215 myUndoList->clear();
4216 }
4217 update();
4218 }
4219 return 1;
4220}
4221
4222
4223long
4225 // disable validation for additionals
4226 XMLSubSys::setValidation("never", "auto", "auto");
4227 // begin undoList operation
4228 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4229 // clear demand elements
4231 // reload demand elements stored in options
4232 loadDemandElements("Reloading");
4233 // end undoList operation and update view
4234 myUndoList->end();
4235 // restore validation for demand
4236 XMLSubSys::setValidation("auto", "auto", "auto");
4237 // check if clear undoList
4239 myUndoList->clear();
4240 }
4241 update();
4242 return 1;
4243}
4244
4245
4246long
4247GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4248 if (myViewNet == nullptr) {
4249 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4251 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4252 } else {
4253 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4254 }
4255}
4256
4257
4258long
4259GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4260 const auto savingFileHandler = myFileBucketHandler;
4261 // get option container
4262 auto& neteditOptions = OptionsCont::getOptions();
4263 // check if we're forcing to saving demand elements
4265 neteditOptions.getBool("force-saving") &&
4267 WRITE_MESSAGE(TL("Force save demand elements"));
4268 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4269 // nothing to save
4270 return 1;
4271 }
4272 // check if we have to define a default filename
4274 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4275 }
4276 // check if we have to open save as dialog
4277 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4278 // choose file to save
4279 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4280 } else {
4281 // always recompute before saving
4282 myNet->computeNetwork(this);
4283 try {
4284 // save demand elements
4285 const bool savingResult = myNet->saveDemandElements();
4286 // show info
4287 if (savingResult) {
4288 WRITE_MESSAGE(TL("Demand elements saved."));
4289 return 1;
4290 } else {
4291 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4292 return 0;
4293 }
4294 } catch (IOError& e) {
4295 // open error message box
4296 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4297 }
4298 }
4299 return 0;
4300}
4301
4302
4303long
4304GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4305 // get route file
4306 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4311 // continue depending of dialog
4312 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4313 // update default name
4315 // save demand elements
4316 return onCmdSaveDemandElements(sender, sel, ptr);
4317 } else {
4318 return 0;
4319 }
4320}
4321
4322
4323long
4324GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4325 // get route file
4326 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4331 // continue depending of dialog
4332 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4333 // use the file as default file
4335 // begin undoList operation
4336 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4337 // iterate over all demand elementes and change file
4338 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4339 for (const auto& demandElement : demandElementTag.second) {
4340 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4341 }
4342 }
4343 // end undoList operation
4344 myUndoList->end();
4345 // save demand elements
4347 return onCmdSaveDemandElements(sender, sel, ptr);
4348 } else {
4349 return 0;
4350 }
4351}
4352
4353
4354long
4355GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4356 // get file
4357 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4362 // continue depending of dialog
4363 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4364 // save previous demand element status saving
4365 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4366 // get (or create) bucket for this new file
4367 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4368 // disable update data
4370 // disable validation for data elements
4371 XMLSubSys::setValidation("never", "auto", "auto");
4372 // Create data handler
4373 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4374 // begin undoList operation
4375 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4376 // Run data parser
4377 if (!dataHandler.parse()) {
4378 // write error
4379 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4380 } else {
4381 // show info
4382 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4383 // enable demand elements if there is an error creating element
4384 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4386 }
4387 }
4388 // end undoList operation
4389 myUndoList->end();
4390 // enable update data
4392 // restore validation for data
4393 XMLSubSys::setValidation("auto", "auto", "auto");
4394 // check if clear undoList
4396 myUndoList->clear();
4397 }
4398 update();
4399 }
4400 return 1;
4401}
4402
4403
4404long
4406 // disable update data
4408 // disable validation for additionals
4409 XMLSubSys::setValidation("never", "auto", "auto");
4410 // begin undoList operation
4411 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4412 // clear data elements
4414 // reload data elements stored in options
4415 loadDataElements("Reloading");
4416 // restore validation for data
4417 XMLSubSys::setValidation("auto", "auto", "auto");
4418 // end undoList operation and update view
4419 myUndoList->end();
4420 // enable update data
4422 // check if clear undoList
4424 myUndoList->clear();
4425 }
4426 update();
4427 return 1;
4428}
4429
4430
4431long
4432GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4433 if (myViewNet == nullptr) {
4434 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4436 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4437 } else {
4438 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4439 }
4440}
4441
4442
4443long
4444GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4445 const auto savingFileHandler = myFileBucketHandler;
4446 // get option container
4447 auto& neteditOptions = OptionsCont::getOptions();
4448 // check if we're forcing to saving data elements
4450 neteditOptions.getBool("force-saving") &&
4452 WRITE_MESSAGE(TL("Force save data elements"));
4453 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4454 // nothing to save
4455 return 1;
4456 }
4457 // check if we have to define a default filename
4459 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4460 }
4461 // check if we have to open save as dialog
4462 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4463 return onCmdSaveDataElementsAs(sender, sel, ptr);
4464 } else {
4465 try {
4466 // save data elements
4467 const bool savingResult = myNet->saveDataElements();
4468 // show info
4469 if (savingResult) {
4470 WRITE_MESSAGE(TL("Data elements saved."));
4471 return 1;
4472 } else {
4473 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4474 return 0;
4475 }
4476 } catch (IOError& e) {
4477 // open error message box
4478 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4479 }
4480 }
4481 return 0;
4482}
4483
4484
4485long
4486GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4487 // get data file
4488 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4493 // continue depending of dialog
4494 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4495 // update default name
4497 // save data elements
4498 return onCmdSaveDataElements(sender, sel, ptr);
4499 } else {
4500 return 0;
4501 }
4502}
4503
4504
4505long
4506GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4507 // get data file
4508 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4513 // continue depending of dialog
4514 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4515 // use the file as default file
4517 // begin undoList operation
4518 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4519 // iterate over all demand elementes and change file
4520 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4521 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4522 }
4523 // end undoList operation
4524 myUndoList->end();
4525 // save data elements
4527 return onCmdSaveDataElements(sender, sel, ptr);
4528 } else {
4529 return 0;
4530 }
4531}
4532
4533
4534long
4536 // get file
4537 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4542 // continue depending of dialog
4543 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4544 // save previous demand element status saving
4545 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4546 // get (or create) bucket for this new file
4547 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4548 // disable validation for meanDatas
4549 XMLSubSys::setValidation("never", "auto", "auto");
4550 // Create meanData handler
4551 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4552 // begin undoList operation
4553 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4554 // Run parser
4555 if (!generalHandler.parse()) {
4556 // write error
4557 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4558 } else {
4559 // show info
4560 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4561 // enable demand elements if there is an error creating element
4562 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4564 }
4565 }
4566 // end undoList operation
4567 myUndoList->end();
4568 // restore validation for meanDatas
4569 XMLSubSys::setValidation("auto", "auto", "auto");
4570 // check if clear undoList
4572 myUndoList->clear();
4573 }
4574 update();
4575 }
4576 return 1;
4577}
4578
4579
4580long
4582 // disable validation for meanDatas
4583 XMLSubSys::setValidation("never", "auto", "auto");
4584 // begin undoList operation
4586 // clear meanDatas
4588 // reload meanData elements stored in options
4589 loadMeanDataElements("Reloading");
4590 // end undoList operation and update view
4591 myUndoList->end();
4592 // restore validation for meanDatas
4593 XMLSubSys::setValidation("auto", "auto", "auto");
4594 // check if clear undoList
4596 myUndoList->clear();
4597 }
4598 update();
4599 return 1;
4600}
4601
4602
4603long
4604GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4605 if (myViewNet == nullptr) {
4606 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4608 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4609 } else {
4610 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4611 }
4612}
4613
4614
4615long
4616GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4617 const auto savingFileHandler = myFileBucketHandler;
4618 // get option container
4619 auto& neteditOptions = OptionsCont::getOptions();
4620 // check if we're forcing to saving meandata elements
4622 neteditOptions.getBool("force-saving") &&
4624 WRITE_MESSAGE(TL("Force save meandata elements"));
4625 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4626 // nothing to save
4627 return 1;
4628 }
4629 // check if we have to define a default filename
4631 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4632 }
4633 // check if we have to open save as dialog
4634 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4635 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4636 } else {
4637 try {
4638 // compute before saving
4639 myNet->computeNetwork(this);
4640 // save demand elements
4641 const bool savingResult = myNet->saveMeanDatas();
4642 // show info
4643 if (savingResult) {
4644 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4645 return 1;
4646 } else {
4647 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4648 return 0;
4649 }
4650 } catch (IOError& e) {
4651 // open error message box
4652 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4653 }
4654 }
4655 return 0;
4656}
4657
4658
4659long
4660GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4661 // get meanData file
4662 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4667 // continue depending of dialog
4668 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4669 // update default name
4671 // save meanDatas
4672 return onCmdSaveMeanDataElements(sender, sel, ptr);
4673 } else {
4674 return 0;
4675 }
4676}
4677
4678
4679long
4680GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4681 // get meanData file
4682 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4687 // continue depending of dialog
4688 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4689 // use the file as default file
4691 // begin undoList operation
4692 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4693 // iterate over all demand elementes and change file
4694 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4695 for (const auto& meanData : meanDataTag.second) {
4696 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4697 }
4698 }
4699 // end undoList operation
4700 myUndoList->end();
4701 // save meanDatas
4703 return onCmdSaveMeanDataElements(sender, sel, ptr);
4704 } else {
4705 return 0;
4706 }
4707}
4708
4709
4710bool
4711GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4712 if (myNet) {
4714 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4715 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4716 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4717 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4718 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4719 // first check if abort saving
4720 if (commonResult == GNEDialog::Result::ABORT) {
4721 return false;
4722 }
4723 // save every type of file
4724 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4725 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4726 return false;
4727 }
4728 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4729 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4730 return false;
4731 }
4732 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4733 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4734 return false;
4735 }
4736 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4737 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4738 return false;
4739 }
4740 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4741 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4742 return false;
4743 }
4744 // restore focus in viewNet
4745 myViewNet->setFocus();
4746 // clear undo list
4747 clearUndoList();
4748 // all saved, then continue
4749 return true;
4750 } else {
4751 // nothing to do, then continue
4752 return true;
4753 }
4754}
4755
4756
4757void
4759 // check that view exists
4760 if (myViewNet) {
4762 }
4763 // update require recomputing
4765}
4766
4767
4768void
4770 // remove lock hotkeys
4772 // check supermode
4773 if (supermode == Supermode::NETWORK) {
4774 // menu commands
4778 // lock
4782 // processing
4787 } else if (supermode == Supermode::DEMAND) {
4788 // menu commands
4792 // lock
4796 // processing
4801 } else if (supermode == Supermode::DATA) {
4802 // menu commands
4806 // lock
4810 // processing
4815 } else {
4816 // menu commands
4821 // lock
4825 // processing
4829 }
4830 // continue depending of view
4831 if (myViewNet) {
4835 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4838 }
4839 }
4840}
4841
4842
4843bool
4847
4848
4849void
4853
4854
4855void
4857 myUndoRedoListEnabled = reason;
4858}
4859
4860
4861const std::string&
4865
4866
4867void
4869 if (myViewNet) {
4870 // destroy Popup (to avoid crashes)
4872 }
4873 // clear undo list and return true to continue with closing/reload
4874 myUndoList->clear();
4875}
4876
4877
4882
4883
4888
4889
4894
4895
4900
4901
4906
4907
4912
4913
4918
4919
4920void
4922 // get netedit option container
4923 auto& neteditOptions = OptionsCont::getOptions();
4924 // get additional files (don't use reference because it's modified during loading)
4925 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
4926 // check if we have additionals to load
4927 if (myNet && (additionalFiles.size() > 0)) {
4928 // disable validation for additionals
4929 XMLSubSys::setValidation("never", "auto", "auto");
4930 // begin undolist
4931 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
4932 // use this flag for mark all elements as saved after loading, if it was sucessfully
4933 bool setSaved = additionalFiles.size() == 1;
4934 // iterate over every additional file
4935 for (const auto& file : additionalFiles) {
4936 // check if ignore missing inputs
4937 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4938 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
4939 // get (or create) bucket for this new file
4941 // declare general handler
4942 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4943 // check if force overwritte
4944 if (operation == "reloading") {
4945 generalHandler.forceOverwriteElements();
4946 }
4947 // Run parser
4948 if (!generalHandler.parse()) {
4949 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
4950 }
4951 setSaved &= !generalHandler.isErrorCreatingElement();
4952 }
4953 }
4954 // end undo list
4955 myUndoList->end();
4956 // disable validation for additionals
4957 XMLSubSys::setValidation("auto", "auto", "auto");
4958 if (setSaved) {
4960 }
4961 // check if clear undoList
4963 myUndoList->clear();
4964 }
4965 }
4966}
4967
4968
4969void
4970GNEApplicationWindow::loadDemandElements(const std::string operation) {
4971 // get netedit option container
4972 auto& neteditOptions = OptionsCont::getOptions();
4973 // get demand files (don't use reference because it's modified during loading)
4974 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
4975 // check if we have demand files to load
4976 if (myNet && (demandFiles.size() > 0)) {
4977 // disable validation for additionals
4978 XMLSubSys::setValidation("never", "auto", "auto");
4979 // begin undolist
4980 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
4981 // use this flag for mark all elements as saved after loading, if it was sucessfully
4982 bool setSaved = demandFiles.size() == 1;
4983 // iterate over every demand file
4984 for (const auto& file : demandFiles) {
4985 // check if ignore missing inputs
4986 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4987 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
4988 // get (or create) bucket for this new file
4989 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
4990 // declare general handler
4991 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4992 // check if force overwritte
4993 if (operation == "reloading") {
4994 generalHandler.forceOverwriteElements();
4995 }
4996 // Run parser
4997 if (!generalHandler.parse()) {
4998 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
4999 }
5000 setSaved &= !generalHandler.isErrorCreatingElement();
5001 }
5002 }
5003 // end undo list
5004 myUndoList->end();
5005 // disable validation for additionals
5006 XMLSubSys::setValidation("auto", "auto", "auto");
5007 if (setSaved) {
5009 }
5010 // check if clear undoList
5012 myUndoList->clear();
5013 }
5014 }
5015}
5016
5017
5018void
5019GNEApplicationWindow::loadDataElements(const std::string operation) {
5020 // get option container
5021 auto& neteditOptions = OptionsCont::getOptions();
5022 // get data files (don't use reference because it's modified during loading)
5023 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
5024 if (myNet && (dataFiles.size() > 0)) {
5025 // disable validation for additionals
5026 XMLSubSys::setValidation("never", "auto", "auto");
5027 // begin undolist
5028 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
5029 // use this flag for mark all elements as saved after loading, if it was sucessfully
5030 bool setSaved = dataFiles.size() == 1;
5031 // iterate over every data file
5032 for (const auto& file : dataFiles) {
5033 // check if ignore missing inputs
5034 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5035 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
5036 // get (or create) bucket for this new file
5037 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
5038 // declare general handler
5039 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5040 // check if force overwritte
5041 if (operation == "reloading") {
5042 generalHandler.forceOverwriteElements();
5043 }
5044 // Run parser
5045 if (!generalHandler.parse()) {
5046 WRITE_ERROR(TLF("% of % failed.", operation, file));
5047 }
5048 setSaved &= !generalHandler.isErrorCreatingElement();
5049 }
5050 }
5051 // end undo list
5052 myUndoList->end();
5053 // disable validation for additionals
5054 XMLSubSys::setValidation("auto", "auto", "auto");
5055 if (setSaved) {
5057 }
5058 // check if clear undoList
5060 myUndoList->clear();
5061 }
5062 }
5063}
5064
5065
5066void
5068 // get option container
5069 auto& neteditOptions = OptionsCont::getOptions();
5070 // get meanData files (don't use reference because it's modified during loading)
5071 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5072 if (myNet && (meanDataFiles.size() > 0)) {
5073 // disable validation for additionals
5074 XMLSubSys::setValidation("never", "auto", "auto");
5075 // begin undolist
5076 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5077 // use this flag for mark all elements as saved after loading, if it was sucessfully
5078 bool setSaved = meanDataFiles.size() == 1;
5079 // iterate over every meanData file
5080 for (const auto& file : meanDataFiles) {
5081 // check if ignore missing inputs
5082 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5083 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5084 // get (or create) bucket for this new file
5085 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5086 // declare general handler
5087 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5088 // check if force overwritte
5089 if (operation == "reloading") {
5090 generalHandler.forceOverwriteElements();
5091 }
5092 // Run parser
5093 if (!generalHandler.parse()) {
5094 WRITE_ERROR(TLF("% of % failed.", operation, file));
5095 }
5096 setSaved &= !generalHandler.isErrorCreatingElement();
5097 }
5098 }
5099 // end undo list
5100 myUndoList->end();
5101 // disable validation for additionals
5102 XMLSubSys::setValidation("auto", "auto", "auto");
5103 if (setSaved) {
5105 }
5106 // check if clear undoList
5108 myUndoList->clear();
5109 }
5110 }
5111}
5112
5113
5114void
5115GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5116 // get TLS file
5118 if (tlsFile.size() > 0) {
5119 // show info
5120 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5121 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5122 myNet->computeNetwork(this);
5123 // parse TLS programs
5124 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5125 // Abort undo/redo
5127 } else {
5128 // commit undo/redo operation
5129 myUndoList->end();
5130 update();
5131 }
5132 // requiere save network
5134 // if defined, require save netedit config
5137 }
5138 }
5139}
5140
5141
5142void
5143GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5144 // get edgeType file
5146 if (edgeTypeFile.size() > 0) {
5147 // declare type container
5148 NBTypeCont typeContainerAux;
5149 // declare type handler
5150 NIXMLTypesHandler handler(typeContainerAux);
5151 // load edge types
5152 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5153 // now create GNETypes based on typeContainerAux
5154 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5155 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5156 // iterate over typeContainerAux
5157 for (const auto& auxEdgeType : typeContainerAux) {
5158 // create new edge type
5159 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5160 // add lane types
5161 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5162 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5163 }
5164 // add it using undoList
5165 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5166
5167 }
5168 // end undo list
5170 // refresh edge type selector
5172 // requiere save network
5174 // if defined, require save netedit config
5177 }
5178 }
5179}
5180
5181
5186
5187
5188bool
5190 if (myInternalTest == nullptr) {
5191 return true;
5192 } else if (obj == myInternalTest) {
5193 return true;
5194 } else {
5195 return false;
5196 }
5197}
5198
5199// ---------------------------------------------------------------------------
5200// GNEApplicationWindow - protected methods
5201// ---------------------------------------------------------------------------
5202#ifdef _MSC_VER
5203#pragma warning(push)
5204#pragma warning(disable: 4355) // mask warning about "this" in initializers
5205#endif
5207 myToolbarsGrip(this),
5208 myMenuBarFile(this),
5209 myFileMenuCommands(this),
5210 myModesMenuCommands(this),
5211 myEditMenuCommands(this),
5212 myLockMenuCommands(this),
5213 myProcessingMenuCommands(this),
5214 myLocateMenuCommands(this),
5215 myToolsMenuCommands(this),
5216 myWindowsMenuCommands(this),
5217 myHelpMenuCommands(this),
5218 mySupermodeCommands(this) {
5219}
5220#ifdef _MSC_VER
5221#pragma warning(pop)
5222#endif
5223
5224
5225long
5226GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5227 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5228 if (handled == 0 && myMDIClient->numChildren() > 0) {
5229 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5230 if (w != nullptr) {
5231 w->onKeyPress(nullptr, sel, eventData);
5232 }
5233 }
5234 return 0;
5235}
5236
5237
5238long
5239GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5240 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5241 if (handled == 0 && myMDIClient->numChildren() > 0) {
5242 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5243 if (w != nullptr) {
5244 w->onKeyRelease(nullptr, sel, eventData);
5245 }
5246 }
5247 return 0;
5248}
5249
5250
5251/****************************************************************************/
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:885
@ 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:943
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:921
@ 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:909
@ 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:967
@ 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:901
@ 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:911
@ 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:881
@ 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:973
@ 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:919
@ 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:959
@ 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:945
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:889
@ 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:933
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:923
@ 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:931
@ 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:965
@ 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:877
@ 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:939
@ 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:891
@ 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:961
@ 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:895
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:947
@ 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:879
@ 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:869
@ 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:865
@ 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:907
@ 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:969
@ 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:905
@ 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_GNE_NETWORKVIEWOPTIONS_SHOWPOLYGONSYMBOLS
show polygon symbols
Definition GUIAppEnum.h:859
@ 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:937
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:873
@ 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:963
@ 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:971
@ 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:893
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:903
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:717
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:871
@ 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:935
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:951
@ 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:897
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:875
@ 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:917
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:949
@ 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:899
@ 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:941
@ 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:867
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:887
@ 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:915
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:913
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:803
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:883
@ 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 onUpdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as is updated
long onCmdClose(FXObject *, FXSelector, void *)
called when the command/FXCall close is executed
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
long onCmdToggleViewOption(FXObject *, FXSelector, void *)
toggle viewOption
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
OptionsCont myOriginalNetgenerateOptions
original netgenerate options container
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
OptionsCont myOriginalNeteditOptions
original netedit options container
void loadDemandElements(const std::string operation)
load demand elements from netedit options
long onCmdProcessButton(FXObject *sender, FXSelector sel, void *)
called when user press a process button (or a shortcut)
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
GNEApplicationWindowHelper::ModesMenuCommands & getModesMenuCommands()
get modes Menu Commands (needed for show/hide menu commands)
long onCmdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
called if the user press the toggle time format button
long onCmdRunNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
called when run netgenerate is called
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands
Processing Menu Commands.
OptionsCont & getSumoOptions()
get SUMO options container
FXMenuPane * myToolsImportCityBrainMenu
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
get Edit Menu Commands (needed for show/hide menu commands)
void setStatusBarText(const std::string &statusBarText)
set text of the statusBar
GNEUndoList * myUndoList
the one and only undo list
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
FXMenuPane * myFileMenuDemandElements
long onCmdSmartReload(FXObject *, FXSelector, void *)
called when the command/FXCall smart reload is executed
void loadEdgeTypes(const std::string operation)
load meanData elements
long onCmdPaste(FXObject *, FXSelector, void *)
long onUpdPythonTool(FXObject *, FXSelector, void *)
called when the command/FXCall python tool is updated
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall open network is executed
GNEExternalRunner * myExternalRunner
external runner for running external tools
long onCmdComputePathManager(FXObject *, FXSelector, void *)
long onCmdToggleComputeNetworkData(FXObject *, FXSelector, void *)
called when toggle checkbox compute network when switching between supermodes
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
GNEInternalTest * getInternalTest() const
get netedit test system
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread is executed
long onUpdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements unified is executed
long onUpdRequireRecomputing(FXObject *sender, FXSelector sel, void *ptr)
update label for require recomputing
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is executed
long onUpdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onUpdSaveDemandElements(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements is executed
OptionsCont myOriginalSumoOptions
original sumo options container
OptionsCont myNetgenerateOptions
netgenerate options container
SUMOTime getCurrentSimTime() const
get current simulation time (pure virtual but we don't need it)
long onUpdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is updated
long onCmdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is executed
FXMenuPane * myFileMenuMeanDataElements
long onCmdLockAllElements(FXObject *, FXSelector sel, void *)
called when user press lock all elements button
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
long onCmdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
long onCmdClearSelectionShortcut(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for clear selection
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
GNEUndoList * getUndoList()
get pointer to undoList
long onUpdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is updated
long onUpdNeedsFrontElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs front element is executed
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
void loadTrafficLights(const std::string operation)
load traffic lights
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
GNEApplicationWindowHelper::FileBucketHandler * myFileBucketHandler
saving files handler
long onUpdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is updated
void disableUndoRedoTemporally(const std::string &reason)
disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)
long onCmdToggleGrid(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + G to toggle grid
void dependentBuild()
build dependent
long onCmdEditChosen(FXObject *, FXSelector, void *)
called when the command/FXCall edit chosen is executed
long onUpdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is updated
long onCmdOpenSumoOptionsDialog(FXObject *, FXSelector, void *)
called when user press "sumo options" button
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands
Edit Menu Commands.
long onCmdSetSuperMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-supermode hotkey
bool allowInputSignals(FXObject *obj) const
check if ignore input signal (using during netedit tests)
long onCmdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is executed
long onUpdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is updated
void loadMeanDataElements(const std::string operation)
load meanData elements from netedit options
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
GNEViewNet * myViewNet
pointer to current view net
GNEExternalRunner * getExternalRunner() const
get external runner
long onUpdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onUpdNeedsNetworkElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs at least one network element is executed
const FXString myTitlePrefix
the prefix for the window title
long onCmdOpenAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
GNEApplicationWindowHelper::FileBucketHandler * getFileBucketHandler() const
get file bucket handler
long onCmdSaveNetworkAs(FXObject *, FXSelector, void *)
called when the command/FXCall save network as is executed
double getTrackerInterval() const
get current tracker interval (pure virtual but we don't need it)
void fillMenuBar()
Builds the menu bar.
long onCmdFocusFrame(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for focus on frame
long onCmdSaveMeanDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas as is executed
long onCmdToggleFrontElement(FXObject *, FXSelector, void *)
called if the user call toggle front element
void loadConfiguration(const std::string &configurationFile)
starts to load a configuration
GNEApplicationWindowHelper::LockMenuCommands & getLockMenuCommands()
get lock Menu Commands
long onCmdPostprocessingNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
postprocessing netgenerate
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
long onCmdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is executed
long onUpdRequireViewNet(FXObject *sender, FXSelector sel, void *ptr)
enable or disable sender object depending if viewNet exist
long onUpdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is updated
OptionsCont & getNetgenerateOptions()
get netgenerate options container
long onCmdSaveDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements is executed
long onCmdCut(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdNewWindow(FXObject *, FXSelector, void *)
long onCmdSaveJoinedJunctionsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save joined is executed
long onCmdOpenEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall open edgeType is executed
long onCmdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save JuPedSim elements as is executed
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database
void setExternalRunner(GNEExternalRunner *externalRunner)
set external runner
long onCmdLoadDemandInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load demand"
long onUpdLockMenuTitle(FXObject *, FXSelector sel, void *)
enable or disable lock menu title
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onUpdSaveDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements unified is executed
long onCmdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is executed
long onCmdRedo(FXObject *sender, FXSelector, void *)
long onCmdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements as is executed
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
long onCmdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements as is executed
void handleEvent_FileLoaded(GUIEvent *e)
handle event of type Network loaded
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadAdditionalElements(const std::string operation)
load additional elements from netedit options
GNEInternalTest * myInternalTest
internal test system
void loadOSM(const std::string &OSMFile)
starts to load a OSM File
long onUpdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals is executed
long onCmdOpenNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netedit config is executed
bool myAllowUndoRedoLoading
allow undo-redo loading (read from registry)
long onCmdOpenRecent(FXObject *, FXSelector, void *)
called when the command/FXCall open recent is executed
void closeAllWindows(const bool resetFilenames)
this method closes all windows and deletes the current simulation
bool myAllowUndoRedo
allow undo-redo (read from registry)
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
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:2135
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1792
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1632
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2403
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2828
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:2893
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2847
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2170
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2338
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2148
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:198
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1898
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:1943
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1808
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:2181
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2904
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2227
void saveNetwork()
save the network
Definition GNENet.cpp:1394
bool saveJuPedSimElements(const std::string &filename)
save JuPedSim elements
Definition GNENet.cpp:2272
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1626
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1750
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1834
void requireRecompute()
inform the net about the need for recomputation
Definition GNENet.cpp:1619
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:2289
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)
long onCmdToggleShowPolygonSymbols(FXObject *, FXSelector, void *)
toggle show polygon symbols
A single child window which contains a view of the simulation area.
void updateUndoRedoButtons()
update toolbar undo/redo buttons (called when user press Ctrl+Z/Y)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
Called when user press a key.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
void saveDecals(const std::vector< GUISUMOAbstractView::Decal > &decals)
Makes the given decals the default.
static void close()
close GUICursorSubSys
static void initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
static FXMenuCommand * buildFXMenuCommandShortcut(FXComposite *p, const std::string &text, const std::string &shortcut, const std::string &info, FXIcon *icon, FXObject *tgt, FXSelector sel)
build menu command
The application's "Feedback" dialog.
void create()
Creates the widget.
Editor for the list of chosen objects.
const std::string & getMsg() const
Returns the message.
GUIEventType getOwnType() const
returns the event type
Definition GUIEvent.h:89
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:62
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 unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp:70
static bool checkOptions(OptionsCont &oc)
checks shared options and sets StdDefs
static void parseTemplate(OptionsCont &options, const std::string &templateString)
run parser
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition XMLSubSys.cpp:88
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
@ SEL_THREAD_EVENT
Definition fxexdefs.h: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 * menuCheckShowPolygonSymbols
check checkable to show polygon symbols
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label