Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEApplicationWindow.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// Functions from main window of netedit
20/****************************************************************************/
21
23#include <netbuild/NBFrame.h>
51#include <netedit/templates.h>
52#include <netimport/NIFrame.h>
55#include <netwrite/NWFrame.h>
57#include <fxkeys.h>
72#include <utils/xml/XMLSubSys.h>
73
75#include "GNEEvent_FileLoaded.h"
76#include "GNEInternalTest.h"
77#include "GNELoadThread.h"
78#include "GNENet.h"
79#include "GNEUndoList.h"
80#include "GNEViewParent.h"
81
82#ifdef HAVE_VERSION_H
83#include <version.h>
84#endif
85
86// ===========================================================================
87// FOX-declarations
88// ===========================================================================
89
90FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
91 // quit calls
95 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
96 // toolbar file
103 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
108 // network
123 // NeteditConfig
131 // SumoConfig
139 // TLS
148 // edge types
157 // additionals
170 // demand elements
181 // data elements
192 // meanDatas
203 // other
208 // Toolbar supermode
212 // Toolbar modes
229 // Toolbar edit
238 // Network view options
273 // Demand view options
296 // Data view options
313 // view
330 /* Prepared for #6042
331 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
332 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
333 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
334 */
335 // toolbar lock
367 // Toolbar processing
386 // Toolbar locate
411 // toolbar python tools
416 // toolbar windows
418 // toolbar help
421 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
422 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
423 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
425 // alt + <number>
446 // key events
447 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
448 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
449 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
450 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
451 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
453 // threads events
456 // edge template functions
460 // languages
483 // coordinate inputs
490 // tools
493 // other
494 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
501 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
502};
503
504// Object implementation
505FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
506
507// ===========================================================================
508// GNEApplicationWindow method definitions
509// ===========================================================================
510#ifdef _MSC_VER
511#pragma warning(push)
512#pragma warning(disable: 4355) // mask warning about "this" in initializers
513#endif
514GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
515 GUIMainWindow(app),
516 myTagPropertiesDatabase(tagPropertiesDatabase),
517 myUndoList(new GNEUndoList(this)),
518 myConfigPattern(configPattern),
519 myToolbarsGrip(this),
520 myMenuBarFile(this),
521 myFileMenuCommands(this),
522 myModesMenuCommands(this),
523 myEditMenuCommands(this),
524 myLockMenuCommands(this),
525 myProcessingMenuCommands(this),
526 myLocateMenuCommands(this),
527 myToolsMenuCommands(this),
528 myWindowsMenuCommands(this),
529 myHelpMenuCommands(this),
530 mySupermodeCommands(this),
531 myFileBucketHandler(new GNEApplicationWindowHelper::FileBucketHandler(this, OptionsCont::getOptions(), mySumoOptions)),
532 myTitlePrefix("netedit " VERSION_STRING),
533 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
534 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
535 // init icons
537 // init Textures
539 // init cursors
541 // set tooltip options
542 app->setTooltipTime(1000000000);
543 app->setTooltipPause(1000000000);
544 // set SUMO Options descriptions
545 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
546 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo " VERSION_STRING);
547 // set default netedit options
550 // parse options
556 // make certain sumo options non editable
557 mySumoOptions.setOptionEditable("configuration-file", false);
558 mySumoOptions.setOptionEditable("net-file", false);
559 mySumoOptions.setOptionEditable("route-files", false);
560 mySumoOptions.setOptionEditable("additional-files", false);
561 // add extra option for automatic closing
562 myNetgenerateOptions.doRegister("close-dialog-automatic", new Option_Bool(true));
563 myNetgenerateOptions.addDescription("close-dialog-automatic", "report", TL("Close dialog automatically"));
564}
565#ifdef _MSC_VER
566#pragma warning(pop)
567#endif
568
569
570void
572 // do this not twice
574 // do not translate debug messages
575 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
576 return;
577 }
578 myHadDependentBuild = true;
579 setTarget(this);
580 setSelector(MID_WINDOW);
581 // build toolbar menu
583 // build the thread - io
586 // build the status bar
587 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
588 // build geo coordinates label
589 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
591 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
592 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
593 // build geo coordinates label
595 myGeoCoordinate = new FXTextField(myGeoFrame, 26, this, MID_GEO_COORDINATE, FRAME_NONE | LAYOUT_CENTER_Y | TEXTFIELD_ENTER_ONLY, 0, 0, 0, GUIDesignHeight, 2, 2, 1, 1);
596 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert). Enter 'lat, lon' or 'lat:... lon:...' to center view"));
597 myGeoCoordinate->setTipText(TL("Enter 'lat, lon' to center view"));
598 myGeoCoordinate->setBackColor(myGeoFrame->getBackColor());
599 myGeoCoordinate->setText(TL("N/A"));
600 myGeoCoordinate->disable();
601 myGeoCoordinate->setEditable(false);
602 // build cartesian coordinates label
604 myCartesianCoordinate = new FXTextField(myCartesianFrame, 22, this, MID_CARTESIAN_COORDINATE, FRAME_NONE | LAYOUT_CENTER_Y | TEXTFIELD_ENTER_ONLY, 0, 0, 0, GUIDesignHeight, 2, 2, 1, 1);
605 myCartesianCoordinate->setHelpText(TL("Network coordinate. Enter 'x, y' to center view"));
606 myCartesianCoordinate->setTipText(TL("Enter 'x, y' to center view"));
607 myCartesianCoordinate->setBackColor(myCartesianFrame->getBackColor());
608 myCartesianCoordinate->setText(TL("N/A"));
609 // build test coordinates label (only if gui-testing is enabled)
611 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
612 myTestCoordinate->setHelpText(TL("Test coordinate"));
614 myTestFrame->hide();
615 // make the window a mdi-window
616 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
618 myMDIMenu = new FXMDIMenu(this, myMDIClient);
619 // build the message window
621 myMainSplitter->setSplit(1, 65);
622 // fill menu and tool bar
623 fillMenuBar();
624 // build additional threads
626 // check if create internal test system
627 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
628 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
629 }
630 // set the status bar
631 setStatusBarText(TL("Ready."));
632 // set the caption
633 setTitle(myTitlePrefix);
634 // set Netedit ICON
637 // build netedit Accelerators (hotkeys)
638 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
639}
640
641
642void
644 // set windows size and position
646 // set current folder
647 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
648 // Create main window
649 FXMainWindow::create();
650 // get text width
651 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
652 // adjust cartesian and geo frame
653 myCartesianFrame->setWidth(textWidth);
654 myGeoFrame->setWidth(textWidth);
655 // fill online maps
656 if (myOnlineMaps.empty()) {
657 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
658 myOnlineMaps["Google Maps"] = "https://www.google.com/maps/search/?api=1&query=%lat,%lon&zoom=19";
659 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
660 }
661 // show application windows
662 show(PLACEMENT_DEFAULT);
663 // check if maximice
664 if (!OptionsCont::getOptions().isSet("window-size")) {
665 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
666 maximize();
667 }
668 }
669}
670
671
673 closeAllWindows(true);
674 // Close icons
676 // Close gifs (Textures)
679 // delete visuals
680 delete myGLVisual;
681 // must delete menus to avoid segfault on removing accelerators
682 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
685 delete myFileMenuTLS;
686 delete myFileMenuEdgeTypes;
693 delete myFileMenu;
694 delete myModesMenu;
695 delete myEditMenu;
696 delete myLockMenu;
697 delete myProcessingMenu;
698 delete myLocatorMenu;
699 delete myToolsMenu;
700 delete myToolsDetectorMenu;
701 delete myToolsDistrictMenu;
702 delete myToolsDRTMenu;
704 delete myToolsImportMenu;
707 delete myToolsImportVissim;
708 delete myToolsImportVisum;
709 delete myToolsNetMenu;
710 delete myToolsRouteMenu;
711 delete myToolsOutputMenu;
712 delete myToolsShapes;
713 delete myToolsTLS;
714 delete myToolsTurnDefs;
716 delete myToolsXML;
717 delete myWindowMenu;
718 delete myHelpMenu;
719 delete myLanguageMenu;
720 // Delete load thread
721 delete myLoadThread;
722 if (myInternalTest) {
723 delete myInternalTest;
724 }
725 // drop all events
726 while (!myThreadEvents.empty()) {
727 // get the next event
730 delete e;
731 }
732 // delete undoList and dialog
733 delete myUndoList;
734}
735
736
737long
738GNEApplicationWindow::onCmdQuit(FXObject* sender, FXSelector sel, void* ptr) {
739 if (askSaveElements(sender, sel, ptr)) {
741 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
742 if (isMaximized()) {
743 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
744 } else {
745 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
746 }
747 getApp()->exit(0);
748 }
749 return 1;
750}
751
752
753long
754GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
755 GUIDialog_GLChosenEditor* chooser =
757 chooser->create();
758 chooser->show();
759 return 1;
760}
761
762
763long
764GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
765 // check if close current simulation
766 if (onCmdClose(0, 0, 0) == 1) {
767 // create new network
769 }
770 return 1;
771}
772
773
774long
776 auto& neteditOptions = OptionsCont::getOptions();
777 // get netconvert file dialog
778 const GNEFileDialog netConvertFileDialog(this, TL("netconvert config file"),
783 // continue depending of dialog
784 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
785 // stop test before calling load thread
786 if (myInternalTest) {
788 }
789 // reset netedit options
790 myLoadThread->fillOptions(neteditOptions);
791 myLoadThread->setDefaultOptions(neteditOptions);
792 // set netconvert configuration file to load
793 neteditOptions.resetWritable();
794 neteditOptions.set("netccfg-file", netConvertFileDialog.getFilename());
795 // run load thread
797 // update view
798 update();
799 }
800 return 1;
801}
802
803
804long
805GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
806 // get netconvert filename
807 const GNEFileDialog networkFileDialog(this, TL("network file"),
812 // continue depending of dialog
813 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
814 // load network
815 loadNetwork(networkFileDialog.getFilename());
816 }
817 return 0;
818}
819
820
821long
822GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
823 // get OSM file dilaog
824 const GNEFileDialog OSMFileDialog(this, TL("OpenStreetMap file"),
829 // continue depending of dialog
830 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
831 loadOSM(OSMFileDialog.getFilename());
832 }
833 return 1;
834}
835
836
837long
838GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
839 auto& neteditOptions = OptionsCont::getOptions();
840 // get netconvert filename
841 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
846 // continue depending of dialog
847 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
848 // stop test before calling load thread
849 if (myInternalTest) {
851 }
852 // reset netedit options
853 myLoadThread->fillOptions(neteditOptions);
854 myLoadThread->setDefaultOptions(neteditOptions);
855 // set netedit configuration file to load
856 neteditOptions.resetWritable();
857 neteditOptions.set("netecfg-file", neteditConfigFileDialog.getFilename());
858 // run load thread
860 // update view
861 update();
862 }
863 return 1;
864}
865
866
867long
868GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
869 auto& neteditOptions = OptionsCont::getOptions();
870 // get netconvert filename
871 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
876 // continue depending of dialog
877 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
878 // stop test before calling load thread
879 if (myInternalTest) {
881 }
882 // reset options
883 myLoadThread->fillOptions(neteditOptions);
884 myLoadThread->setDefaultOptions(neteditOptions);
885 // set sumo configuration file to load
886 neteditOptions.resetWritable();
887 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
888 // run load thread
890 // update view
891 update();
892 }
893 return 1;
894}
895
896
897long
899 // get existent configuration file
901 // check if close current simulation
902 if (onCmdClose(0, 0, 0) == 1) {
903 // stop test before calling load thread
904 if (myInternalTest) {
906 }
907 auto& neteditOptions = OptionsCont::getOptions();
908 // reset options
909 myLoadThread->fillOptions(neteditOptions);
910 myLoadThread->setDefaultOptions(neteditOptions);
911 // set netedit configuration file to load
912 neteditOptions.resetWritable();
913 neteditOptions.set("netecfg-file", neteditConfigFile);
914 // run load thread
916 // update view
917 update();
918 }
919 return 1;
920}
921
922
923long
924GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
925 // get existent sumo config file
927 // check if close current simulation
928 if (onCmdClose(0, 0, 0) == 1) {
929 // stop test before calling load thread
930 if (myInternalTest) {
932 }
933 auto& neteditOptions = OptionsCont::getOptions();
934 // reset options
935 myLoadThread->fillOptions(neteditOptions);
936 myLoadThread->setDefaultOptions(neteditOptions);
937 // set configuration file to load
938 neteditOptions.resetWritable();
939 neteditOptions.set("sumocfg-file", sumoConfigFile);
940 // run load thread
942 // update view
943 update();
944 }
945 return 1;
946}
947
948
949long
950GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
951 // check if file exist
953 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
954 } else {
955 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
956 }
957}
958
959
960long
961GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
962 // check if file exist
964 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
965 } else {
966 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
967 }
968}
969
970
971long
972GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
973 // get netconvert filename
974 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
979 // continue depending of dialog
980 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
981 // set tls type in bucket
983 // load traffic lights
984 loadTrafficLights("Loading");
985 }
986 return 1;
987}
988
989
990long
991GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
992 // load traffic lights
993 loadTrafficLights("Reloading");
994 return 1;
995}
996
997
998long
999GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
1000 // check if file exist
1002 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1003 } else {
1004 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1005 }
1006}
1007
1008
1009long
1010GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
1011 // get netconvert filename
1012 const GNEFileDialog edgeTypesFileDialog(this, TL("EdgeTypes file"),
1017 // continue depending of dialog
1018 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
1019 // set tls type in bucket
1021 // load edge types
1022 loadEdgeTypes("Loading");
1023 }
1024 return 1;
1025}
1026
1027
1028long
1029GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1030 // load edge types
1031 loadEdgeTypes("Reloading");
1032 return 0;
1033}
1034
1035
1036long
1037GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1038 // check if file exist
1040 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1041 } else {
1042 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1043 }
1044}
1045
1046
1047long
1048GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector sel, void*) {
1049 auto& neteditOptions = OptionsCont::getOptions();
1050 // check if close current file
1051 if (onCmdClose(0, sel, 0) == 1) {
1052 // stop test before calling load thread
1053 if (myInternalTest) {
1055 }
1056 // store size, position and viewport
1058 // set flag
1059 myAmLoading = true;
1060 // get files
1064 // fill (reset) all options
1065 myLoadThread->fillOptions(neteditOptions);
1066 // set default options defined in GNELoadThread::setDefaultOptions(...)
1067 myLoadThread->setDefaultOptions(neteditOptions);
1068 // set file to load
1069 neteditOptions.resetWritable();
1070 if (neteditConfig.size() > 0) {
1071 // set netedit config
1073 // set status bar
1074 setStatusBarText(TLF("Reloading netedit config file '%'", neteditConfig));
1075 } else if (sumoConfig.size() > 0) {
1076 // set sumo config
1078 // set status bar
1079 setStatusBarText(TLF("Reloading sumo config file '%'", sumoConfig));
1080 } else if (networkFile.size() > 0) {
1081 // set network config
1083 // set status bar
1084 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1085 } else {
1086 // nothing to load
1087 return 0;
1088 }
1089 // load network
1091 }
1092 return 1;
1093}
1094
1095
1096long
1097GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1098 // declare strings
1099 FXString neteditConfig = TL("&Reload Netedit config");
1100 FXString sumoConfig = TL("&Reload Sumo config");
1101 FXString netFile = TL("&Reload Network");
1102 FXString reload = TL("&Reload");
1103 // check options
1104 if (myNet == nullptr) {
1105 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1106 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1108 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1109 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1111 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1112 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1114 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1115 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1116 } else {
1117 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1118 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1119 }
1120 return 1;
1121}
1122
1123
1124long
1125GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector sel, void*) {
1126 auto& neteditOptions = OptionsCont::getOptions();
1127 // check if close current file
1128 if (onCmdClose(0, sel, 0) == 1) {
1129 // stop test before calling load thread
1130 if (myInternalTest) {
1132 }
1133 // store size, position and viewport
1135 // set flag
1136 myAmLoading = true;
1137 // get network
1138 const std::string networkFile = myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK);
1139 // fill (reset) all options
1140 myLoadThread->fillOptions(neteditOptions);
1141 // set default options defined in GNELoadThread::setDefaultOptions(...)
1142 myLoadThread->setDefaultOptions(neteditOptions);
1143 // set file to load
1145 // set status bar
1146 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1147 // loaad network
1149 }
1150 return 1;
1151}
1152
1153
1154long
1155GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1156 if (myNet == nullptr) {
1157 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1158 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1161 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1162 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1163 } else {
1164 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1165 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1166 }
1167 return 1;
1168}
1169
1170
1171long
1172GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1173 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1174 if (myAmLoading) {
1175 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1176 } else if (onCmdClose(0, 0, 0) == 1) {
1177 // get filedata
1178 const std::string recentFile = ((const char*)fileData);
1179 // check if we're loading a network o a config
1180 if ((recentFile.find(".netecfg") != std::string::npos) ||
1181 (recentFile.find(".sumocfg") != std::string::npos) ||
1182 (recentFile.find(".netccfg") != std::string::npos)) {
1183 // load config
1184 loadConfiguration(recentFile);
1185 } else {
1186 // load network
1187 loadNetwork(recentFile);
1188 }
1189 }
1190 return 1;
1191}
1192
1193
1194long
1195GNEApplicationWindow::onCmdClose(FXObject* sender, FXSelector sel, void* ptr) {
1196 if (myViewNet == nullptr) {
1197 return 1;
1198 } else if (askSaveElements(sender, sel, ptr)) {
1199 // check if is reloading
1200 const bool reloading = (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOADNETWORK) || (FXSELID(sel) == MID_HOTKEY_CTRL_R_RELOAD);
1201 // close all windows
1202 closeAllWindows(!reloading);
1203 // add a separator to the log
1205 // hide all menu commands
1209 // hide view options
1213 return 1;
1214 } else {
1215 return 0;
1216 }
1217}
1218
1219
1220long
1221GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1222 if (myMDIClient->numChildren() > 0) {
1223 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1224 if (w != nullptr) {
1225 w->onCmdLocate(nullptr, sel, nullptr);
1226 }
1227 }
1228 return 1;
1229}
1230
1231
1232long
1233GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1234 return myToolsMenuCommands.showTool(obj);
1235}
1236
1237
1238long
1239GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1241}
1242
1243
1244long
1247}
1248
1249
1250long
1251GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1252 // currently always enabled
1253 return 1;
1254}
1255
1256
1257long
1258GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1259 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1260 return 1;
1261}
1262
1263
1264long
1265GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1267 return 1;
1268}
1269
1270
1271long
1273 return 1;
1274}
1275
1276
1277long
1279 return 1;
1280}
1281
1282
1283long
1284GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1285 // create and open about dialog
1286 GNEAboutDialog(this);
1287 return 1;
1288}
1289
1290
1291long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1292 FXEvent* event = (FXEvent*)ptr;
1293 FXString string = GUIUserIO::clipped.c_str();
1294 setDNDData(FROM_CLIPBOARD, event->target, string);
1295 return 1;
1296}
1297
1298
1299long
1300GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1301 eventOccurred();
1302 return 1;
1303}
1304
1305
1306void
1308 // load events
1309 while (!myThreadEvents.empty()) {
1310 // get the next event
1313 // process
1314 switch (e->getOwnType()) {
1317 break;
1324 break;
1325 default:
1326 break;
1327 }
1328 delete e;
1329 }
1330}
1331
1332
1333void
1336 myAmLoading = false;
1337 GNEEvent_FileLoaded* fileLoadedEvent = static_cast<GNEEvent_FileLoaded*>(e);
1338 // check whether the loading was successful
1339 if (fileLoadedEvent->getNet() == nullptr) {
1340 // report failure
1341 std::string failureMessage;
1342 switch (fileLoadedEvent->getType()) {
1344 failureMessage = TLF("Loading of netedit config '%' failed", fileLoadedEvent->getFile());
1345 break;
1347 failureMessage = TLF("Loading of sumo config '%' failed", fileLoadedEvent->getFile());
1348 break;
1350 failureMessage = TLF("Loading of netconvert config '%' failed", fileLoadedEvent->getFile());
1351 break;
1353 failureMessage = TLF("Loading of network '%' failed", fileLoadedEvent->getFile());
1354 break;
1356 failureMessage = TLF("Loading of OSM Network '%' failed", fileLoadedEvent->getFile());
1357 break;
1359 failureMessage = TL("Invalid Options. Nothing loaded");
1360 break;
1362 failureMessage = TL("Could not build projection. Nothing loaded");
1363 break;
1365 failureMessage = TL("Invalid extension for config file. Only .netecfg, .sumocfg or .netccfg are allowed");
1366 break;
1367 default:
1368 failureMessage = TL("Invalid input network option. Load with either sumo/netedit/netconvert config or with --new option");
1369 break;
1370 }
1371 // write info
1372 WRITE_ERROR(failureMessage);
1373 setStatusBarText(failureMessage);
1374 if (OptionsCont::getOptions().getBool("quit-on-fail")) {
1375 closeAllWindows(true);
1376 getApp()->exit(1);
1377 } else {
1379 }
1380 } else {
1381 // report success
1382 std::string successMessage;
1383 switch (fileLoadedEvent->getType()) {
1385 successMessage = TLF("Netedit config '%' loaded", fileLoadedEvent->getFile());
1386 break;
1388 successMessage = TLF("Sumo config '%' loaded", fileLoadedEvent->getFile());
1389 break;
1391 successMessage = TLF("Netconvert config '%' loaded", fileLoadedEvent->getFile());
1392 break;
1394 successMessage = TLF("Network '%' loaded", fileLoadedEvent->getFile());
1395 break;
1397 successMessage = TLF("OSM Network '%' loaded", fileLoadedEvent->getFile());
1398 break;
1400 successMessage = TLF("Network '%' loaded through console", fileLoadedEvent->getFile());
1401 break;
1403 successMessage = TL("New network successfully created");
1404 break;
1405 default:
1406 throw ProcessError("Invalid sucess mesage. Check if all cases were covered");
1407 }
1408 // write info
1409 WRITE_MESSAGE(successMessage);
1410 setStatusBarText(successMessage);
1411 // set new Net
1412 myNet = fileLoadedEvent->getNet();
1413 // set size and pos
1415 // build viewparent toolbar grips before creating view parent
1417 // initialise netedit View
1418 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1419 // create it maximized
1420 viewParent->maximize();
1421 // mark it as Active child
1422 myMDIClient->setActiveChild(viewParent);
1423 // cast pointer myViewNet
1424 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1425 // set settings in view
1426 if (viewParent->getView() && (fileLoadedEvent->getSettingsFile().size() > 0)) {
1427 GUISettingsHandler settings(getApp(), fileLoadedEvent->getSettingsFile(), true, true);
1428 settings.addSettings(viewParent->getView());
1429 viewParent->getView()->addDecals(settings.getDecals());
1430 settings.applyViewport(viewParent->getView());
1431 settings.setSnapshots(viewParent->getView());
1432 }
1433 // set network name on the caption
1434 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileLoadedEvent->getFile().c_str()));
1435 // force supermode network
1437 // update view port
1438 if (fileLoadedEvent->getViewportFromRegistry()) {
1439 Position off;
1440 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1441 Position p(off.x(), off.y(), 0);
1442 myViewNet->setViewportFromToRot(off, p, 0);
1443 }
1444 // load elements
1445 loadAdditionalElements("Loading");
1446 loadDemandElements("Loading");
1447 loadDataElements("Loading");
1448 loadMeanDataElements("Loading");
1449 // load selection
1450 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1452 }
1454 }
1455 // update app
1456 update();
1457 // restore focus
1458 setFocus();
1459}
1460
1461
1462void
1467
1468// ---------------------------------------------------------------------------
1469// private methods
1470// ---------------------------------------------------------------------------
1471
1472void
1474 // build file menu
1475 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1477 myFileMenuNeteditConfig = new FXMenuPane(this);
1478 myFileMenuSumoConfig = new FXMenuPane(this);
1479 myFileMenuTLS = new FXMenuPane(this);
1480 myFileMenuEdgeTypes = new FXMenuPane(this);
1481 myFileMenuAdditionals = new FXMenuPane(this);
1482 myFileMenuDemandElements = new FXMenuPane(this);
1483 myFileMenuDataElements = new FXMenuPane(this);
1484 myFileMenuMeanDataElements = new FXMenuPane(this);
1485 myFileMenuRecentNetworks = new FXMenuPane(this);
1486 myFileMenuRecentConfigs = new FXMenuPane(this);
1490 // add separator for recent files
1491 new FXMenuSeparator(myFileMenu);
1492 // build recent files
1495 new FXMenuSeparator(myFileMenu);
1496 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1497 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1498 // build modes menu
1499 myModesMenu = new FXMenuPane(this);
1501 myModesMenuTitle->setTarget(this);
1503 // build Supermode commands and hide it
1505 // add separator
1506 new FXSeparator(myModesMenu);
1507 // build modes menu commands
1509 // build edit menu
1510 myEditMenu = new FXMenuPane(this);
1512 // build edit menu commands
1514 // build separator
1515 new FXMenuSeparator(myEditMenu);
1516 // build view options
1520 // hide view options
1524 // build view menu commands
1526 // build separator
1527 new FXMenuSeparator(myEditMenu);
1528 // build front element menu commands
1530 // build separator
1531 new FXMenuSeparator(myEditMenu);
1532 // build open in sumo menu commands
1534 // build lock menu
1535 myLockMenu = new FXMenuPane(this);
1537 myLockMenuTitle->setTarget(this);
1539 // build lock menu commands
1541 // build processing menu (trigger netbuild computations)
1542 myProcessingMenu = new FXMenuPane(this);
1545 // build locate menu
1546 myLocatorMenu = new FXMenuPane(this);
1549 // build tools menu
1550 myToolsMenu = new FXMenuPane(this);
1551 myToolsAssignMenu = new FXMenuPane(this);
1552 myToolsDetectorMenu = new FXMenuPane(this);
1553 myToolsDistrictMenu = new FXMenuPane(this);
1554 myToolsDRTMenu = new FXMenuPane(this);
1555 myToolsEmissionsMenu = new FXMenuPane(this);
1556 myToolsImportMenu = new FXMenuPane(this);
1557 myToolsImportCityBrainMenu = new FXMenuPane(this);
1558 myToolsImportGTFSMenu = new FXMenuPane(this);
1559 myToolsImportVissim = new FXMenuPane(this);
1560 myToolsImportVisum = new FXMenuPane(this);
1561 myToolsNetMenu = new FXMenuPane(this);
1562 myToolsRouteMenu = new FXMenuPane(this);
1563 myToolsOutputMenu = new FXMenuPane(this);
1564 myToolsShapes = new FXMenuPane(this);
1565 myToolsTLS = new FXMenuPane(this);
1566 myToolsTriggerMenu = new FXMenuPane(this);
1567 myToolsTurnDefs = new FXMenuPane(this);
1568 myToolsVisualizationMenu = new FXMenuPane(this);
1569 myToolsXML = new FXMenuPane(this);
1571 // build tools menu cascasde
1572 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1573 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1574 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1576 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1585 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1586 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1587 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1591 // add separators between folders
1592 new FXMenuSeparator(myToolsMenu);
1593 new FXMenuSeparator(myToolsImportMenu);
1594 // create map with tool Menu panes and their associated folder
1601 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1603 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1604 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1611 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1614 // build tools
1616 // build windows menu
1617 myWindowMenu = new FXMenuPane(this);
1620 // build language menu
1622 // build help menu
1623 myHelpMenu = new FXMenuPane(this);
1626}
1627
1628
1629FXGLCanvas*
1631 // netedit uses only a single View, then return nullptr
1632 return nullptr;
1633}
1634
1635
1638 return 0;
1639}
1640
1641
1642double
1644 return 1;
1645}
1646
1647
1652
1653
1658
1659
1664
1665
1668 if (myViewNet && myViewNet->getViewParent()) {
1670 }
1671 return nullptr;
1672}
1673
1674
1677 if (myViewNet && myViewNet->getViewParent()) {
1679 }
1680 return nullptr;
1681}
1682
1683
1688
1689
1690void
1692 if (myViewNet && myViewNet->getNet()) {
1693 // show
1695 // set label depending of recomputing
1697 myRequireRecomputingButton->setText("");
1698 myRequireRecomputingButton->setTipText(TL("Network computed"));
1700 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1701 } else {
1702 myRequireRecomputingButton->setText(TL("Press F5"));
1703 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1705 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1706 }
1707 } else {
1708 // hide
1710 }
1711}
1712
1713
1714void
1715GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1716 // first check if net must be deleted
1717 if (myNet != nullptr) {
1718 delete myNet;
1719 myNet = nullptr;
1721 }
1722 // reset default filenames
1723 if (resetFilenames) {
1725 }
1726 // check if view has to be saved
1727 if (myViewNet) {
1729 // save decals and viewport for persistence (before they are cleared)
1733 // clear decals and release GPU textures
1734 if (myViewNet->makeCurrent()) {
1739 myViewNet->makeNonCurrent();
1740 }
1741 }
1742 // lock tracker
1743 myTrackerLock.lock();
1744 // remove trackers and other external windows
1745 while (!myGLWindows.empty()) {
1746 delete myGLWindows.front();
1747 }
1748 myViewNet = nullptr;
1749 for (FXMainWindow* const window : myTrackerWindows) {
1750 window->destroy();
1751 delete window;
1752 }
1753 myTrackerWindows.clear();
1754 // reset the caption
1755 setTitle(myTitlePrefix);
1756 // unlock tracker
1757 myTrackerLock.unlock();
1758 // remove coordinate information
1759 myGeoCoordinate->setText(TL("N/A"));
1760 myGeoCoordinate->disable();
1761 myGeoCoordinate->setEditable(false);
1762 myCartesianCoordinate->setText(TL("N/A"));
1763 myTestCoordinate->setText(TL("N/A"));
1764 myTestFrame->hide();
1766}
1767
1768
1769FXCursor*
1771 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1772}
1773
1774
1775void
1777 auto& neteditOptions = OptionsCont::getOptions();
1778 if (neteditOptions.getBool("new")) {
1779 // save output file
1780 const auto outputFile = neteditOptions.getString("output-file");
1781 // create new network reset all options
1783 // check if define network file using this output file
1784 if (!outputFile.empty()) {
1786 }
1787 } else {
1788 // set flag
1789 myAmLoading = true;
1790 // set status bar
1791 setStatusBarText(TL("Loading console arguments."));
1792 // load console arguments
1794 // add it into recent networks and configs
1797 }
1800 }
1801 }
1802}
1803
1804
1805void
1807 auto& neteditOptions = OptionsCont::getOptions();
1808 // save windows size and position
1810 // enable loading flag and disable reloading flag
1811 myAmLoading = true;
1812 // recenter view
1813 gSchemeStorage.saveViewport(0, 0, -1, 0);
1814 // fill (reset) all options
1815 GNELoadThread::fillOptions(neteditOptions);
1816 // set default options defined in GNELoadThread::setDefaultOptions(...)
1817 GNELoadThread::setDefaultOptions(neteditOptions);
1818 // update status bar
1819 setStatusBarText(TL("Creating new network."));
1820 // create new network
1822 // update window
1823 update();
1824}
1825
1826
1827void
1828GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1829 if (networkFile.empty()) {
1830 WRITE_ERROR(TL("Trying to load an empty network."));
1831 } else {
1832 auto& neteditOptions = OptionsCont::getOptions();
1833 // stop test before calling load thread
1834 if (myInternalTest) {
1836 }
1837 // store size, position and viewport
1839 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1840 // set flag
1841 myAmLoading = true;
1842 // fill (reset) all options
1843 myLoadThread->fillOptions(neteditOptions);
1844 // set default options defined in GNELoadThread::setDefaultOptions(...)
1845 myLoadThread->setDefaultOptions(neteditOptions);
1846 // update default net file
1848 // set status bar
1849 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1850 // load network
1852 // add it into recent nets
1853 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1854 }
1855}
1856
1857
1858void
1859GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1860 if (configurationFile.empty()) {
1861 WRITE_ERROR(TL("Trying to load an empty configuration."));
1862 } else {
1863 auto& neteditOptions = OptionsCont::getOptions();
1864 // store size, position and viewport
1866 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1867 // set flag
1868 myAmLoading = true;
1869 // fill (reset) all options
1870 myLoadThread->fillOptions(neteditOptions);
1871 // set default options defined in GNELoadThread::setDefaultOptions(...)
1872 myLoadThread->setDefaultOptions(neteditOptions);
1873 // set file to load
1874 neteditOptions.resetWritable();
1875 neteditOptions.set("configuration-file", configurationFile);
1876 // set status bar
1877 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1878 // load config
1880 // add it into recent configs
1881 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1882 }
1883}
1884
1885
1886void
1887GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1888 auto& neteditOptions = OptionsCont::getOptions();
1889 // store size, position and viewport
1891 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1892 // set flag
1893 myAmLoading = true;
1894 // fill (reset) all options
1895 myLoadThread->fillOptions(neteditOptions);
1896 // set default options defined in GNELoadThread::setDefaultOptions(...)
1897 myLoadThread->setDefaultOptions(neteditOptions);
1898 // recommended osm options
1899 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1900 neteditOptions.set("osm-files", OSMFile);
1901 neteditOptions.set("geometry.remove", "true");
1902 neteditOptions.set("ramps.guess", "true");
1903 neteditOptions.set("junctions.join", "true");
1904 neteditOptions.set("tls.guess-signals", "true");
1905 neteditOptions.set("tls.discard-simple", "true");
1906 // open netedit options dialog
1907 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1908 // open wizard dialog
1909 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1910 // needed to set projection parameters
1911 NIFrame::checkOptions(neteditOptions);
1912 // set file to load
1913 neteditOptions.resetWritable();
1914 neteditOptions.set("configuration-file", OSMFile);
1915 // set status bar
1916 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1917 // load config
1919 }
1920}
1921
1922void
1923GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1924 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1925 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1926}
1927
1928
1929long
1930GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
1931 // open question dialog box
1932 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
1933 TL("Recompute with volatile options"),
1934 TL("Changes produced in the net due a recomputing with"),
1935 TL("volatile options cannot be undone. Continue?"));
1936 // check result
1937 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1938 // save all elements
1939 onCmdSaveAdditionalElements(sender, sel, ptr);
1940 onCmdSaveDemandElements(sender, sel, ptr);
1941 onCmdSaveDataElements(sender, sel, ptr);
1942 onCmdSaveMeanDataElements(sender, sel, ptr);
1943 // compute with volatile options
1944 myNet->computeNetwork(this, true, true);
1946 }
1947 return 1;
1948}
1949
1950
1951bool
1954 myConsoleOptionsLoaded = false;
1955 return true;
1956 } else {
1957 return false;
1958 }
1959}
1960
1961
1966
1967
1972
1973
1974void
1978
1979
1980long
1981GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1982 // check that currently there is a View
1983 if (myViewNet) {
1984 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1985 }
1986 return 1;
1987}
1988
1989
1990long
1991GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1992 // check that currently there is a View
1993 if (myViewNet) {
1994 myViewNet->onCmdSetMode(sender, sel, ptr);
1995 }
1996 return 1;
1997}
1998
1999
2000long
2001GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
2002 if (myViewNet) {
2003 // check if we're calling the functions using internal test
2004 switch (FXSELID(sel)) {
2007 break;
2008 case MID_GNE_LOCK_EDGE:
2010 break;
2011 case MID_GNE_LOCK_LANE:
2013 break;
2016 break;
2019 break;
2022 break;
2025 break;
2026 case MID_GNE_LOCK_WIRE:
2028 break;
2029 case MID_GNE_LOCK_TAZ:
2031 break;
2034 break;
2035 case MID_GNE_LOCK_POI:
2037 break;
2040 break;
2043 break;
2044 case MID_GNE_LOCK_ROUTE:
2046 break;
2049 break;
2052 break;
2055 break;
2056 case MID_GNE_LOCK_WALK:
2058 break;
2059 case MID_GNE_LOCK_RIDE:
2061 break;
2064 break;
2067 break;
2070 break;
2071 case MID_GNE_LOCK_STOP:
2073 break;
2076 break;
2079 break;
2082 break;
2083 default:
2084 break;
2085 }
2087 }
2088 return 1;
2089}
2090
2091
2092long
2093GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2094 // lock all
2097 return 1;
2098}
2099
2100
2101long
2103 // unlock all
2106 return 1;
2107}
2108
2109
2110long
2112 if (myViewNet) {
2113 myViewNet->update();
2114 }
2115 return 1;
2116}
2117
2118
2119long
2120GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2121 if (myViewNet) {
2123 // supermode network
2129 myLockMenuTitle->enable();
2130 } else {
2131 myLockMenuTitle->disable();
2132 }
2134 // supermode demand
2139 myLockMenuTitle->enable();
2140 } else {
2141 myLockMenuTitle->disable();
2142 }
2144 // supermode data
2148 myLockMenuTitle->enable();
2149 } else {
2150 myLockMenuTitle->disable();
2151 }
2152 } else {
2153 myLockMenuTitle->disable();
2154 }
2155 } else {
2156 myLockMenuTitle->disable();
2157 }
2158 return 1;
2159}
2160
2161
2162long
2163GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2164 // first check if there is a view
2165 if (myViewNet) {
2166 // process depending of supermode
2168 // check what FXMenuCommand was called
2169 switch (FXSELID(sel)) {
2171 myNet->computeNetwork(this, true, false);
2173 break;
2175 computeJunctionWithVolatileOptions(sender, sel, ptr);
2176 break;
2179 break;
2182 break;
2185 break;
2186 default:
2187 break;
2188 }
2190 // check what FXMenuCommand was called
2191 switch (FXSELID(sel)) {
2195 break;
2198 break;
2201 break;
2204 break;
2207 break;
2208 default:
2209 break;
2210 }
2211 }
2212 // refresh to update undo-redo button
2213 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2214 }
2215 return 1;
2216}
2217
2218
2219long
2220GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2221 // get extra arguments
2222 std::string extraArg;
2224 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2225 }
2226 FXRegistry reg("SUMO netedit", "netedit");
2227 std::string netedit = "netedit";
2228 const char* sumoPath = getenv("SUMO_HOME");
2229 if (sumoPath != nullptr) {
2230#ifdef DEBUG
2231 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2232#else
2233 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2234#endif
2235 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2236 netedit = "\"" + newPath + "\"";
2237 }
2238 }
2239 std::string cmd = netedit + extraArg;
2240 // start in background
2241#ifndef WIN32
2242 cmd = cmd + " &";
2243#else
2244 // see "help start" for the parameters
2245 cmd = "start /B \"\" " + cmd;
2246#endif
2247 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2248 // yay! fun with dangerous commands... Never use this over the internet
2250 return 1;
2251}
2252
2253
2254long
2255GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2256 // input parameters
2257 std::string inputParameters;
2258 // if we have only a network, then load directly without creating a SumoConfig
2260 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2261 // force save network
2262 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2263 // network wasn't saved, then stop
2264 return 0;
2265 }
2266 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2267 // write info
2269 } else {
2270 // force save SumoConfig
2271 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2272 // SumoConfig wasn't saved, then stop
2273 return 0;
2274 }
2275 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2276 // write info
2277 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2278 }
2279 // save current viewport in registry
2280 FXRegistry reg("SUMO GUI", "sumo-gui");
2281 reg.read();
2282 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2283 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2284 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2285 reg.write();
2286 // declare executable
2287 std::string sumoGuiExecutable = "sumo-gui";
2288 // if SUMO_HOME is defined, update executable
2289 const char* sumoHome = getenv("SUMO_HOME");
2290 if (sumoHome != nullptr) {
2291 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2292 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2293 sumoGuiExecutable = "\"" + newPath + "\"";
2294 }
2295 }
2296 // declare command
2297 std::string cmd = sumoGuiExecutable + inputParameters;
2298 // start in background
2299#ifndef WIN32
2300 cmd = cmd + " &";
2301#else
2302 // see "help start" for the parameters
2303 cmd = "start /B \"\" " + cmd;
2304#endif
2305 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2306 // yay! fun with dangerous commands... Never use this over the internet
2308 return 1;
2309}
2310
2311
2312long
2313GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2314 // check that view exists
2315 if (myViewNet) {
2316 // first check if we're selecting a subset of edges in TAZ Frame
2318 // clear current selection
2320 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2321 // check if stop select parent
2323 // and stop select paretn
2325 } else {
2326 // clear inspected elements
2328 }
2329 } else {
2330 // abort current operation
2332 }
2333 }
2334 return 1;
2335}
2336
2337
2338long
2339GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2340 // check that view exists
2341 if (myViewNet) {
2343 }
2344 return 1;
2345}
2346
2347
2348long
2349GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2350 // check that view exists
2351 if (myViewNet) {
2353 }
2354 return 1;
2355}
2356
2357
2358long
2359GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2360 // check that view exists
2361 if (myViewNet) {
2363 }
2364 return 1;
2365}
2366
2367
2368long
2369GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2370 // check that view exists
2371 if (myViewNet) {
2373 }
2374 return 1;
2375}
2376
2377
2378long
2380 // check that view exists
2381 if (myViewNet) {
2383 }
2384 return 1;
2385}
2386
2387
2388long
2389GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2390 // check that view exists
2391 if (myViewNet) {
2393 // refresh flow frames
2394 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2396 }
2397 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2399 }
2400 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2402 }
2403 // refresh inspector frame
2404 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2406 }
2407 }
2408 return 1;
2409}
2410
2411
2412long
2413GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2414 // check that view exists
2415 if (myViewNet) {
2417 }
2418 return 1;
2419}
2420
2421
2422long
2423GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2426 }
2427 return 1;
2428}
2429
2430
2431long
2432GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2433 // enable or disable sender element depending of viewNet
2434 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2435}
2436
2437
2438long
2441 return 1;
2442}
2443
2444
2445long
2446GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2447 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2448 return 1;
2449}
2450
2451
2452long
2453GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2455}
2456
2457
2458long
2459GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2460 // check that view exists
2461 if (myViewNet) {
2463 }
2464 return 1;
2465}
2466
2467
2468long
2469GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2470 // check that view exists
2471 if (myViewNet) {
2473 }
2474 return 1;
2475}
2476
2477
2478long
2479GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2480 // check that view exists
2481 if (myViewNet) {
2482 // Call manually toggle grid function
2483 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2484 }
2485 return 1;
2486}
2487
2488
2489long
2490GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2491 // check that view exists
2492 if (myViewNet) {
2493 // Call manually toggle junction shape function
2494 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2495 }
2496 return 1;
2497}
2498
2499
2500long
2502 if (myViewNet) {
2503 // check if all element are front
2504 bool allFront = true;
2505 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2506 if (!AC->isMarkedForDrawingFront()) {
2507 allFront = false;
2508 break;
2509 }
2510 }
2511 // first unfront all elements
2513 // only mark front elements if we have at least one non-front element
2514 if (!allFront) {
2515 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2516 AC->markForDrawingFront();
2517 }
2518 }
2519 myViewNet->update();
2521 }
2522 return 1;
2523}
2524
2525
2526long
2527GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2528 // first check that we have a ViewNet
2529 if (myViewNet) {
2530 // first check what selector was called
2531 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2532 // check that numericalKeyPressed is valid
2533 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2534 return 0;
2535 }
2536 // declare a vector in which save visible menu commands
2537 std::vector<MFXCheckableButton*> visibleMenuCommands;
2538 // get common, network and demand visible menu commands
2542 // now check that numericalKeyPressed isn't greater than visible view options
2543 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2544 return 0;
2545 }
2546 // toggle edit options
2548 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2549 return 1;
2551 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2552 return 1;
2554 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2555 return 1;
2556 }
2557 }
2558 return 0;
2559}
2560
2561
2562long
2563GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2564 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2565 return 1;
2566}
2567
2568
2569long
2570GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2571 // update in every version
2572 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2573 return 1;
2574}
2575
2576
2577long
2578GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2579 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2580 return 1;
2581}
2582
2583
2584long
2587 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2588 } else {
2589 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2590 }
2591}
2592
2593
2594long
2595GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2596 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2597 myAllowUndoRedo = true;
2598 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2599 } else {
2600 myAllowUndoRedo = false;
2601 // drop undo-redo list after changing flag
2602 myUndoList->clear();
2603 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2604 }
2605}
2606
2607
2608long
2610 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2612 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2613 } else {
2614 myAllowUndoRedoLoading = false;
2615 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2616 }
2617}
2618
2619
2620long
2621GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2622 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2623 return 1;
2624}
2625
2626
2627long
2628GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2629 // create and open feedback dialog
2630 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2631 feedback->create();
2632 feedback->show(PLACEMENT_OWNER);
2633 return 1;
2634}
2635
2636
2637long
2639 auto& neteditOptions = OptionsCont::getOptions();
2640 // open netedit option dialog
2641 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2642 // continue depending of result
2643 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2644 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2645 NBFrame::checkOptions(neteditOptions);
2646 NWFrame::checkOptions(neteditOptions);
2647 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2648 // check if mark netedit config as unsaved
2649 if (neteditOptionsDialog.isOptionModified() && myNet) {
2651 // aditionally, check if network requires saving
2652 if (neteditOptionsDialog.requireSaveNetwork()) {
2655 }
2656 }
2657 }
2658 return 1;
2659}
2660
2661
2662long
2664 // open sumo option dialog
2665 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2666 // continue depending of result
2667 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2669 }
2670 return 1;
2671}
2672
2673
2674long
2677 return 1;
2678}
2679
2680
2681long
2683 // open netgenerate options dialog
2685 return 1;
2686}
2687
2688
2689long
2690GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2691 // Check conditions
2692 if (myViewNet == nullptr) {
2693 return 0;
2694 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2695 return 0;
2696 } else {
2697 // check supermode (currently ignore supermode data)
2700 // abort if user doesn't press "yes"
2702 return 0;
2703 }
2704 }
2706 // update current show frame after undo
2709 }
2710 // update file bucket options (needed to maintain integrity)
2712 // update manually undo/redo menu commands (see #6005)
2715 // update toolbar undo-redo buttons
2717 return 1;
2718 }
2719}
2720
2721
2722long
2723GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2724 // Check conditions
2725 if (myViewNet == nullptr) {
2726 return 0;
2727 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2728 return 0;
2729 } else {
2730 // check supermode (currently ignore supermode data)
2733 // abort if user doesn't press "yes"
2735 return 0;
2736 }
2737 }
2739 // update current show frame after redo
2742 }
2743 // update file bucket options (needed to maintain integrity)
2745 // update manually undo/redo menu commands (see #6005)
2748 // update toolbar undo-redo buttons
2750 return 1;
2751 }
2752}
2753
2754
2755long
2757 // open UndoList Dialog
2758 GNEUndoListDialog(this);
2759 return 1;
2760}
2761
2762
2763long
2764GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2765 // check if net exist and there is something to undo/redo
2766 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2767 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2768 } else {
2769 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2770 }
2771 return 1;
2772}
2773
2774
2775long
2777 // first check viewNet
2779 // update demand path calculator
2781 }
2782 return 1;
2783}
2784
2785
2786long
2787GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2788 // Prepared for #6042
2789 return 1;
2790}
2791
2792
2793long
2794GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2795 // Prepared for #6042
2796 return 1;
2797}
2798
2799
2800long
2801GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2802 // Prepared for #6042
2803 return 1;
2804}
2805
2806
2807long
2808GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2809 // first check if myViewNet exist
2810 if (myViewNet) {
2811 // call set template in inspector frame
2813 }
2814 return 1;
2815}
2816
2817
2818long
2819GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2820 // first check if myViewNet exist
2821 if (myViewNet) {
2822 // call copy template in inspector frame
2824 }
2825 return 1;
2826}
2827
2828
2829long
2830GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2831 // first check if myViewNet exist
2832 if (myViewNet) {
2833 // call clear template in inspector frame
2835 }
2836 return 1;
2837}
2838
2839
2840long
2841GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2842 // check if net exist
2843 if (myNet) {
2845 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2846 } else {
2848 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2849 }
2850}
2851
2852
2853long
2854GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2855 // check if at least there is one edge in the network
2856 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2857 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2858 } else {
2859 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2860 }
2861}
2862
2863
2864long
2865GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2866 // check if net, viewnet and front attribute exist
2867 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2868 // check if all element are front
2869 bool allFront = true;
2870 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2871 if (!AC->isMarkedForDrawingFront()) {
2872 allFront = false;
2873 break;
2874 }
2875 }
2876 // set button text depending of all selected
2877 if (allFront) {
2878 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2879 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2880 } else {
2881 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2882 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2883 }
2884 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2885 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2886 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2887 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2888 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2889 } else {
2890 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2891 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2893 }
2894}
2895
2896
2897long
2898GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2899 if (myNet == nullptr) {
2900 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2901 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2902 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2903 } else {
2904 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2905 }
2906}
2907
2908
2909long
2910GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2911 if (myNet == nullptr) {
2912 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2914 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2915 } else {
2916 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2917 }
2918}
2919
2920
2921long
2923 if (myNet == nullptr) {
2924 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2925 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2926 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2927 } else {
2928 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2929 }
2930}
2931
2932
2933long
2934GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2935 if (myNet == nullptr) {
2936 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2937 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2938 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2939 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2940 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2941 } else {
2942 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2943 }
2944}
2945
2946
2947long
2948GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2949 if (myNet == nullptr) {
2950 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2951 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2952 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2953 } else {
2954 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2955 }
2956
2957}
2958
2959
2960long
2961GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2962 if (myNet == nullptr) {
2963 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2965 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2966 } else {
2967 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2968 }
2969}
2970
2971
2972long
2973GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2974 if (myNet == nullptr) {
2975 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2976 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2977 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2978 } else {
2979 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2980 }
2981
2982}
2983
2984
2985long
2986GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2987 if (myNet == nullptr) {
2988 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2989 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2990 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2991 } else {
2992 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2993 }
2994
2995}
2996
2997
2998long
2999GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
3000 if (myNet == nullptr) {
3001 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3002 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
3003 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3004 } else {
3005 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3006 }
3007}
3008
3009
3010long
3012 if (myNet == nullptr) {
3013 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3014 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
3015 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3016 } else {
3017 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3018 }
3019
3020}
3021
3022
3023long
3024GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
3025 return myUndoList->onUpdUndo(sender, sel, ptr);
3026}
3027
3028
3029long
3030GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
3031 return myUndoList->onUpdRedo(sender, sel, ptr);
3032}
3033
3034
3035long
3036GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
3037 // first check viewNet
3038 if (myViewNet) {
3039 // check supermode network
3041 // disable
3042 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3044 // disable
3045 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3046 } else {
3047 // enable
3048 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3049 }
3050 } else {
3051 // disable
3052 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3053 }
3054}
3055
3056
3057long
3058GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3059 // check viewNet
3060 if (myViewNet) {
3061 // continue depending of selector
3062 switch (FXSELID(sel)) {
3063 // Network
3065 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3067 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3069 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3071 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3073 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3075 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3077 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3079 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3081 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3083 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3085 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3087 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3089 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3091 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3093 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3095 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3097 return myViewNet->onCmdToggleShowPolygonSymbols(sender, sel, ptr);
3099 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3100 // Demand
3102 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3104 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3106 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3108 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3110 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3112 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3114 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3116 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3118 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3120 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3122 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3123 // Data
3125 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3127 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3129 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3131 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3133 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3135 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3137 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3139 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3140 default:
3141 return 0;
3142 }
3143 } else {
3144 return 0;
3145 }
3146}
3147
3148
3149long
3150GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3151 // get menuCheck
3152 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3153 // check viewNet
3154 if (myViewNet && menuCheck) {
3155 // continue depending of selector
3156 switch (FXSELID(sel)) {
3157 // Network
3160 menuCheck->setCheck(TRUE);
3161 } else {
3162 menuCheck->setCheck(FALSE);
3163 }
3164 break;
3167 menuCheck->setCheck(TRUE);
3168 } else {
3169 menuCheck->setCheck(FALSE);
3170 }
3171 break;
3174 menuCheck->setCheck(TRUE);
3175 } else {
3176 menuCheck->setCheck(FALSE);
3177 }
3178 break;
3181 menuCheck->setCheck(TRUE);
3182 } else {
3183 menuCheck->setCheck(FALSE);
3184 }
3185 break;
3188 menuCheck->setCheck(TRUE);
3189 } else {
3190 menuCheck->setCheck(FALSE);
3191 }
3192 break;
3195 menuCheck->setCheck(TRUE);
3196 } else {
3197 menuCheck->setCheck(FALSE);
3198 }
3199 break;
3202 menuCheck->setCheck(TRUE);
3203 } else {
3204 menuCheck->setCheck(FALSE);
3205 }
3206 break;
3209 menuCheck->setCheck(TRUE);
3210 } else {
3211 menuCheck->setCheck(FALSE);
3212 }
3213 break;
3216 menuCheck->setCheck(TRUE);
3217 } else {
3218 menuCheck->setCheck(FALSE);
3219 }
3220 break;
3223 menuCheck->setCheck(TRUE);
3224 } else {
3225 menuCheck->setCheck(FALSE);
3226 }
3227 break;
3230 menuCheck->setCheck(TRUE);
3231 } else {
3232 menuCheck->setCheck(FALSE);
3233 }
3234 break;
3237 menuCheck->setCheck(TRUE);
3238 } else {
3239 menuCheck->setCheck(FALSE);
3240 }
3241 break;
3244 menuCheck->setCheck(TRUE);
3245 } else {
3246 menuCheck->setCheck(FALSE);
3247 }
3248 break;
3251 menuCheck->setCheck(TRUE);
3252 } else {
3253 menuCheck->setCheck(FALSE);
3254 }
3255 break;
3258 menuCheck->setCheck(TRUE);
3259 } else {
3260 menuCheck->setCheck(FALSE);
3261 }
3262 break;
3265 menuCheck->setCheck(TRUE);
3266 } else {
3267 menuCheck->setCheck(FALSE);
3268 }
3269 break;
3272 menuCheck->setCheck(TRUE);
3273 } else {
3274 menuCheck->setCheck(FALSE);
3275 }
3276 break;
3277 // Demand
3280 menuCheck->setCheck(TRUE);
3281 } else {
3282 menuCheck->setCheck(FALSE);
3283 }
3284 break;
3287 menuCheck->setCheck(TRUE);
3288 } else {
3289 menuCheck->setCheck(FALSE);
3290 }
3291 break;
3294 menuCheck->setCheck(TRUE);
3295 } else {
3296 menuCheck->setCheck(FALSE);
3297 }
3298 break;
3301 menuCheck->setCheck(TRUE);
3302 } else {
3303 menuCheck->setCheck(FALSE);
3304 }
3305 break;
3308 menuCheck->setCheck(TRUE);
3309 } else {
3310 menuCheck->setCheck(FALSE);
3311 }
3312 break;
3315 menuCheck->setCheck(TRUE);
3316 } else {
3317 menuCheck->setCheck(FALSE);
3318 }
3319 break;
3322 menuCheck->setCheck(TRUE);
3323 } else {
3324 menuCheck->setCheck(FALSE);
3325 }
3326 // special case for lock persons
3328 menuCheck->enable();
3329 } else {
3330 menuCheck->disable();
3331 }
3332 break;
3335 menuCheck->setCheck(TRUE);
3336 } else {
3337 menuCheck->setCheck(FALSE);
3338 }
3339 break;
3342 menuCheck->setCheck(TRUE);
3343 } else {
3344 menuCheck->setCheck(FALSE);
3345 }
3346 // special case for lock containers
3348 menuCheck->enable();
3349 } else {
3350 menuCheck->disable();
3351 }
3352 break;
3355 menuCheck->setCheck(TRUE);
3356 } else {
3357 menuCheck->setCheck(FALSE);
3358 }
3359 break;
3362 menuCheck->setCheck(TRUE);
3363 } else {
3364 menuCheck->setCheck(FALSE);
3365 }
3366 break;
3367 // Data
3370 menuCheck->setCheck(TRUE);
3371 } else {
3372 menuCheck->setCheck(FALSE);
3373 }
3374 break;
3377 menuCheck->setCheck(TRUE);
3378 } else {
3379 menuCheck->setCheck(FALSE);
3380 }
3381 break;
3384 menuCheck->setCheck(TRUE);
3385 } else {
3386 menuCheck->setCheck(FALSE);
3387 }
3388 break;
3391 menuCheck->setCheck(TRUE);
3392 } else {
3393 menuCheck->setCheck(FALSE);
3394 }
3395 break;
3398 menuCheck->setCheck(TRUE);
3399 } else {
3400 menuCheck->setCheck(FALSE);
3401 }
3402 break;
3405 menuCheck->setCheck(TRUE);
3406 } else {
3407 menuCheck->setCheck(FALSE);
3408 }
3409 break;
3410
3413 menuCheck->setCheck(TRUE);
3414 } else {
3415 menuCheck->setCheck(FALSE);
3416 }
3417 break;
3420 menuCheck->setCheck(TRUE);
3421 } else {
3422 menuCheck->setCheck(FALSE);
3423 }
3424 break;
3425 default:
3426 break;
3427 }
3428 }
3429 return 0;
3430}
3431
3432
3433long
3434GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3435 auto& neteditOptions = OptionsCont::getOptions();
3436 // check if we're forcing to saving additionals
3438 neteditOptions.getBool("force-saving")) {
3439 WRITE_MESSAGE(TL("Force save network"));
3440 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3441 // nothing to save
3442 return 1;
3443 }
3444 // first check if we have to set the output filename
3447 }
3448 // function onCmdSaveNetworkAs must be executed if this is the first save
3450 return onCmdSaveNetworkAs(sender, sel, ptr);
3451 } else {
3452 // always recompute before saving
3453 myNet->computeNetwork(this);
3454 bool saved = false;
3455 try {
3456 // obtain invalid networkElements (currently only edges or crossings
3457 std::vector<GNENetworkElement*> invalidNetworkElements;
3458 // iterate over crossings and edges
3459 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3460 if (!edge.second->isNetworkElementValid()) {
3461 invalidNetworkElements.push_back(edge.second);
3462 }
3463 }
3464 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3465 if (!crossing.second->isNetworkElementValid()) {
3466 invalidNetworkElements.push_back(crossing.second);
3467 }
3468 }
3469 // if there are invalid network elements, open GNEFixNetworkElements
3470 if (invalidNetworkElements.size() > 0) {
3471 // create fix network elements dialog
3472 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3473 // continue depending of result
3474 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3475 // Save network
3476 myNet->saveNetwork();
3477 saved = true;
3478 } else {
3479 // stop
3480 return 0;
3481 }
3482 } else {
3483 // Save network
3484 myNet->saveNetwork();
3485 saved = true;
3486 }
3487 } catch (IOError& e) {
3488 // open error message box
3489 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3490 }
3491 if (saved) {
3492 // write info
3494 // After saving a net successfully, add it into Recent Nets list.
3497 } else {
3500 return 0;
3501 }
3502 return 1;
3503 }
3504}
3505
3506
3507long
3508GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3509 // get network file file
3510 const GNEFileDialog networkFileDialog(this, TL("network file"),
3515 // continue depending of dialog
3516 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3517 // update default network file
3519 // update netedit title with the network name
3520 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3521 // enable save network
3523 // save network
3524 return onCmdSaveNetwork(sender, sel, ptr);
3525 } else {
3526 return 0;
3527 }
3528}
3529
3530
3531long
3532GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3533 // first check if we have to set the output filename
3536 }
3537 // function onCmdSaveNetworkAs must be executed if this is the first save
3539 return onCmdSavePlainXMLAs(sender, sel, ptr);
3540 } else {
3541 // start saving plain XML
3542 getApp()->beginWaitCursor();
3543 try {
3544 // we use the prefix instead the netconvert config
3546 // save plain xml
3547 myNet->savePlain(plainXMLPrefix, myNetconvertOptions);
3548 // write info
3549 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3550 } catch (IOError& e) {
3551 // open message box
3552 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3553 }
3554 // end saving plain XML
3555 getApp()->endWaitCursor();
3556 // set focus again in viewNet
3557 myViewNet->setFocus();
3558 }
3559 return 1;
3560}
3561
3562
3563long
3564GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3565 // get neteditConfig filename
3566 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3571 // continue depending of dialog
3572 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3573 // update default netconvert file
3575 // save plain xml
3576 return onCmdSavePlainXML(sender, sel, ptr);
3577 }
3578 return 1;
3579}
3580
3581
3582long
3584 // get neteditConfig filename
3585 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3590 // continue depending of dialog
3591 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3592 getApp()->beginWaitCursor();
3593 try {
3594 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3595 // write info
3596 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3597 } catch (IOError& e) {
3598 // opening error message
3599 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3600 }
3601 getApp()->endWaitCursor();
3602 // set focus again in viewNet
3603 myViewNet->setFocus();
3604 }
3605 return 1;
3606}
3607
3608
3609long
3610GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3611 // first check if netedit config is already saved
3613 return 1;
3614 }
3615 // Check if configuration file was already set at start of netedit or with a previous save
3617 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3618 } else {
3619 // save all elements giving automatic names based on patter if their file isn't defined
3620 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3621 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3622 return 0;
3623 }
3624 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3625 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3626 return 0;
3627 }
3628 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3629 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3630 return 0;
3631 }
3632 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3633 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3634 return 0;
3635 }
3636 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3637 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3638 return 0;
3639 }
3640 // get netedit config file
3642 // configuration
3643 std::ofstream out(XMLSubSys::transcodeToLocal(neteditConfigFile));
3644 if (out.good()) {
3645 const auto& neteditOptions = OptionsCont::getOptions();
3646 // write netedit config
3647 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3648 // write info
3649 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3650 // config saved
3652 // After saving a config successfully, add it into recent configs
3653 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3654 // if we have a sumo config defined, save it also
3656 // get SumoConfig file
3658 std::ofstream sumoCfg(XMLSubSys::transcodeToLocal(sumoConfigFile));
3659 if (sumoCfg.good()) {
3660 // before saving sumo config, check if force enable option junction-taz
3662 mySumoOptions.set("junction-taz", "true");
3663 }
3664 // write SUMO config
3665 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3666 // write info
3667 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3668 // After saving a config successfully, add it into recent configs
3669 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3670 }
3671 }
3672 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3673 if (neteditOptions.getBool("autosave-netconvert-file")) {
3674 onCmdSavePlainXML(sender, sel, ptr);
3675 }
3676 } else {
3677 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3678 }
3679 out.close();
3680 return 1;
3681 }
3682}
3683
3684
3685long
3686GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3687 // get neteditConfig filename
3688 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3693 // continue depending of dialog
3694 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3695 // set file in file bucket handler
3697 // mark netedit config as unsaved
3699 // continue saving netedit config
3700 return onCmdSaveNeteditConfig(sender, sel, ptr);
3701 } else {
3702 return 0;
3703 }
3704}
3705
3706
3707long
3708GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3709 // check if enable or disable save netedit config button
3710 if (myNet == nullptr) {
3711 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3712 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3713 // a config requires at least ONE edge
3714 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3716 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3717 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3718 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3719 } else {
3720 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3721 }
3722 // check if enable/disable save individual files
3723 if (myNet) {
3727 } else {
3729 }
3730 }
3731 return 1;
3732}
3733
3734
3735long
3736GNEApplicationWindow::onUpdSaveNeteditConfigAs(FXObject* sender, FXSelector, void*) {
3737 // check if enable or disable save netedit config button
3738 if (myNet == nullptr) {
3739 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3740 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3741 // a config requires at least ONE edge
3742 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3743 } else {
3744 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3745 }
3746}
3747
3748
3749long
3750GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3751 // obtain netedit option container
3752 auto& neteditOptions = OptionsCont::getOptions();
3753 // reset containers
3754 neteditOptions.resetWritable();
3756 // Check if configuration file was already set at start of netedit or with a previous save
3758 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3759 } else {
3760 // save all elements giving automatic names based on patter in their file isn't defined
3761 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3762 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3763 return 0;
3764 }
3765 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3766 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3767 return 0;
3768 }
3769 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3770 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3771 return 0;
3772 }
3773 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3774 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3775 return 0;
3776 }
3777 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3778 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3779 return 0;
3780 }
3781 // get SumoConfig file
3783 // confinguration
3784 std::ofstream out(XMLSubSys::transcodeToLocal(sumoConfigFile));
3785 if (out.good()) {
3786 // before saving sumo config, check if force enable option junction-taz
3788 mySumoOptions.set("junction-taz", "true");
3789 }
3790 // write SUMO config
3791 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3792 // write info
3793 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3794 // After saving a config successfully, add it into recent configs
3795 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3796 // if we have a netedit cong defined, save it also
3798 // get netedit config file
3800 // configuration
3801 std::ofstream neteditCfg(XMLSubSys::transcodeToLocal(neteditConfigFile));
3802 if (neteditCfg.good()) {
3803 // write netedit config
3804 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3805 // write info
3806 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3807 // config saved
3809 // After saving a config successfully, add it into recent configs
3810 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3811 }
3812 }
3813 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3814 if (neteditOptions.getBool("autosave-netconvert-file")) {
3815 onCmdSavePlainXML(sender, sel, ptr);
3816 }
3818 } else {
3819 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3820 }
3821 out.close();
3822 return 1;
3823 }
3824}
3825
3826
3827long
3828GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3829 // get sumoConfig filename
3830 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3835 // continue depending of dialog
3836 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3837 // set sumo config
3839 // mark netedit config as unsaved
3841 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3843 return onCmdSaveNeteditConfig(sender, sel, ptr);
3844 } else {
3846 return onCmdSaveSumoConfig(sender, sel, ptr);
3847 }
3848 } else {
3849 return 0;
3850 }
3851}
3852
3853
3854long
3855GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3856 if (myNet == nullptr) {
3857 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3858 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3859 // a config requires at least ONE edge
3860 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3862 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3863 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3864 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3865 } else {
3866 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3867 }
3868}
3869
3870
3871long
3872GNEApplicationWindow::onUpdSaveSumoConfigAs(FXObject* sender, FXSelector, void*) {
3873 if (myNet == nullptr) {
3874 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3875 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3876 // a config requires at least ONE edge
3877 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3878 } else {
3879 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3880 }
3881}
3882
3883long
3884GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3885 // Check if TLS Programs file was already set at start of netedit or with a previous save
3887 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3888 } else {
3889 // Start saving TLS Programs
3890 getApp()->beginWaitCursor();
3891 try {
3892 // compute before saving
3893 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3895 // write info
3897 } catch (IOError& e) {
3898 // open error message box
3899 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3900 }
3902 getApp()->endWaitCursor();
3903 // set focus again in viewNet
3904 myViewNet->setFocus();
3905 }
3906 return 1;
3907}
3908
3909
3910long
3911GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3912 if (myNet == nullptr) {
3913 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3914 } else {
3915 // check if there is at least one TLS
3916 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3917 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3918 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3919 }
3920 }
3921 // no TLS, then disable
3922 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3923 }
3924}
3925
3926
3927long
3928GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3929 // Check if edgeType file was already set at start of netedit or with a previous save
3931 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3932 } else {
3933 // Start saving edgeTypes
3934 getApp()->beginWaitCursor();
3935 try {
3937 // save edge types
3938 myNet->saveEdgeTypes(edgeTypeFile);
3939 // write info
3940 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
3941 } catch (IOError& e) {
3942 // open error message box
3943 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3944 }
3946 getApp()->endWaitCursor();
3947 }
3948 return 1;
3949}
3950
3951
3952long
3953GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3954 // check if net exist and there are edge types
3955 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3956 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3957 } else {
3958 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3959 }
3960 return 1;
3961}
3962
3963
3964long
3965GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
3966 // get TLS file
3967 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
3972 // continue depending of dialog
3973 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3974 // set tls type in bucket
3976 // enable save netedit config
3978 // set focus again in viewNet
3979 myViewNet->setFocus();
3980 // save TLS Programs
3981 return onCmdSaveTLSPrograms(sender, sel, ptr);
3982 } else {
3983 return 1;
3984 }
3985}
3986
3987
3988long
3989GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
3990 // get network file file
3991 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
3996 // continue depending of dialog
3997 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3998 // set tls type in bucket
4000 // enable save netedit config
4002 // set focus again in viewNet
4003 myViewNet->setFocus();
4004 // save edgeTypes
4005 return onCmdSaveEdgeTypes(sender, sel, ptr);
4006 } else {
4007 return 1;
4008 }
4009}
4010
4011
4012long
4014 // get file
4015 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
4020 // continue depending of dialog
4021 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4022 // flag for save current saving status
4023 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
4024 // get (or create) bucket for this new file
4025 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
4026 // disable validation for additionals
4027 XMLSubSys::setValidation("never", "auto", "auto");
4028 // Create additional handler
4029 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4030 // begin undoList operation
4031 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
4032 // Run parser
4033 if (!generalHandler.parse()) {
4034 // write error
4035 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
4036 } else {
4037 // write info
4038 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
4039 // enable save if there is errors loading additionals
4040 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4042 }
4043 }
4044 // end undoList operation
4045 myUndoList->end();
4046 // restore validation for additionals
4047 XMLSubSys::setValidation("auto", "auto", "auto");
4048 // check if clear undoList
4050 myUndoList->clear();
4051 }
4052 update();
4053 }
4054 return 1;
4055}
4056
4057
4058long
4060 // disable validation for additionals
4061 XMLSubSys::setValidation("never", "auto", "auto");
4062 // begin undoList operation
4063 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
4064 // clear additionals
4066 // reload additional elements stored in options
4067 loadAdditionalElements("Reloading");
4068 // end undoList operation
4069 myUndoList->end();
4070 // restore validation for additionals
4071 XMLSubSys::setValidation("auto", "auto", "auto");
4072 // check if clear undoList
4074 myUndoList->clear();
4075 }
4076 update();
4077 return 1;
4078}
4079
4080
4081long
4082GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
4083 if (myViewNet == nullptr) {
4084 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4086 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4087 } else {
4088 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4089 }
4090}
4091
4092
4093long
4094GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4095 const auto savingFileHandler = myFileBucketHandler;
4096 // get option container
4097 auto& neteditOptions = OptionsCont::getOptions();
4098 // check if we're forcing to saving additionals
4100 neteditOptions.getBool("force-saving") &&
4102 WRITE_MESSAGE(TL("Force save additional elements"));
4103 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4104 // nothing to save
4105 return 1;
4106 }
4107 // check if we have to define a default filename
4109 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4110 }
4111 // check if we have to open save as dialog
4112 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4113 // choose file to save
4114 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4115 } else {
4116 // always recompute before saving
4117 myNet->computeNetwork(this);
4118 try {
4119 // compute before saving (for detectors positions)
4120 myNet->computeNetwork(this);
4121 // save additionals
4122 const bool savingResult = myNet->saveAdditionals();
4123 // show info
4124 if (savingResult) {
4125 WRITE_MESSAGE(TL("Additionals saved."));
4126 return 1;
4127 } else {
4128 WRITE_MESSAGE(TL("Saving additional aborted."));
4129 return 0;
4130 }
4131 } catch (IOError& e) {
4132 // open error message box
4133 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4134 }
4135 return 0;
4136 }
4137}
4138
4139
4140long
4141GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4142 // get additional file
4143 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4148 // continue depending of dialog
4149 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4150 // update default name
4152 // save additional
4153 return onCmdSaveAdditionalElements(sender, sel, ptr);
4154 } else {
4155 return 0;
4156 }
4157}
4158
4159
4160long
4161GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4162 // get additional file
4163 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4168 // continue depending of dialog
4169 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4170 // use the file as default file
4172 // begin undoList operation
4173 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4174 // iterate over all demand elementes and change file
4175 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4176 for (const auto& additionalElement : additionalElementTag.second) {
4177 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4178 }
4179 }
4180 // end undoList operation
4181 myUndoList->end();
4182 // save additionals
4184 return onCmdSaveAdditionalElements(sender, sel, ptr);
4185 } else {
4186 return 0;
4187 }
4188}
4189
4190
4191long
4193 // get juPedSim file
4194 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4199 // continue depending of dialog
4200 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4201 try {
4202 // save additionals
4203 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4204 // set focus again in viewNet
4205 myViewNet->setFocus();
4206 // show info
4207 if (savingResult) {
4208 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4209 return 1;
4210 } else {
4211 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4212 return 0;
4213 }
4214 } catch (IOError& e) {
4215 // open error message box
4216 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4217 }
4218 }
4219 return 0;
4220}
4221
4222
4223long
4225 // get file
4226 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4231 // continue depending of dialog
4232 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4233 // save previous demand element status saving
4234 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4235 // disable validation for additionals
4236 XMLSubSys::setValidation("never", "auto", "auto");
4237 // get (or create) bucket for this new file
4238 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4239 // Create generic handler
4241 // begin undoList operation
4242 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4243 // Run parser for additionals
4244 if (!handler.parse()) {
4245 // write error
4246 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4247 } else {
4248 // show info
4249 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4250 // enable demand elements if there is an error creating element
4251 if (previouslySaved && !handler.isErrorCreatingElement()) {
4253 }
4254 }
4255 // end undoList operation
4256 myUndoList->end();
4257 // restore validation
4258 XMLSubSys::setValidation("auto", "auto", "auto");
4259 // check if clear undoList
4261 myUndoList->clear();
4262 }
4263 update();
4264 }
4265 return 1;
4266}
4267
4268
4269long
4271 // disable validation for additionals
4272 XMLSubSys::setValidation("never", "auto", "auto");
4273 // begin undoList operation
4274 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4275 // clear demand elements
4277 // reload demand elements stored in options
4278 loadDemandElements("Reloading");
4279 // end undoList operation and update view
4280 myUndoList->end();
4281 // restore validation for demand
4282 XMLSubSys::setValidation("auto", "auto", "auto");
4283 // check if clear undoList
4285 myUndoList->clear();
4286 }
4287 update();
4288 return 1;
4289}
4290
4291
4292long
4293GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4294 if (myViewNet == nullptr) {
4295 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4297 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4298 } else {
4299 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4300 }
4301}
4302
4303
4304long
4305GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4306 const auto savingFileHandler = myFileBucketHandler;
4307 // get option container
4308 auto& neteditOptions = OptionsCont::getOptions();
4309 // check if we're forcing to saving demand elements
4311 neteditOptions.getBool("force-saving") &&
4313 WRITE_MESSAGE(TL("Force save demand elements"));
4314 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4315 // nothing to save
4316 return 1;
4317 }
4318 // check if we have to define a default filename
4320 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4321 }
4322 // check if we have to open save as dialog
4323 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4324 // choose file to save
4325 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4326 } else {
4327 // always recompute before saving
4328 myNet->computeNetwork(this);
4329 try {
4330 // save demand elements
4331 const bool savingResult = myNet->saveDemandElements();
4332 // show info
4333 if (savingResult) {
4334 WRITE_MESSAGE(TL("Demand elements saved."));
4335 return 1;
4336 } else {
4337 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4338 return 0;
4339 }
4340 } catch (IOError& e) {
4341 // open error message box
4342 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4343 }
4344 }
4345 return 0;
4346}
4347
4348
4349long
4350GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4351 // get route file
4352 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4357 // continue depending of dialog
4358 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4359 // update default name
4361 // save demand elements
4362 return onCmdSaveDemandElements(sender, sel, ptr);
4363 } else {
4364 return 0;
4365 }
4366}
4367
4368
4369long
4370GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4371 // get route file
4372 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4377 // continue depending of dialog
4378 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4379 // use the file as default file
4381 // begin undoList operation
4382 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4383 // iterate over all demand elementes and change file
4384 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4385 for (const auto& demandElement : demandElementTag.second) {
4386 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4387 }
4388 }
4389 // end undoList operation
4390 myUndoList->end();
4391 // save demand elements
4393 return onCmdSaveDemandElements(sender, sel, ptr);
4394 } else {
4395 return 0;
4396 }
4397}
4398
4399
4400long
4401GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4402 // get file
4403 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4408 // continue depending of dialog
4409 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4410 // save previous demand element status saving
4411 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4412 // get (or create) bucket for this new file
4413 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4414 // disable update data
4416 // disable validation for data elements
4417 XMLSubSys::setValidation("never", "auto", "auto");
4418 // Create data handler
4419 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4420 // begin undoList operation
4421 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4422 // Run data parser
4423 if (!dataHandler.parse()) {
4424 // write error
4425 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4426 } else {
4427 // show info
4428 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4429 // enable demand elements if there is an error creating element
4430 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4432 }
4433 }
4434 // end undoList operation
4435 myUndoList->end();
4436 // enable update data
4438 // restore validation for data
4439 XMLSubSys::setValidation("auto", "auto", "auto");
4440 // check if clear undoList
4442 myUndoList->clear();
4443 }
4444 update();
4445 }
4446 return 1;
4447}
4448
4449
4450long
4452 // disable update data
4454 // disable validation for additionals
4455 XMLSubSys::setValidation("never", "auto", "auto");
4456 // begin undoList operation
4457 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4458 // clear data elements
4460 // reload data elements stored in options
4461 loadDataElements("Reloading");
4462 // restore validation for data
4463 XMLSubSys::setValidation("auto", "auto", "auto");
4464 // end undoList operation and update view
4465 myUndoList->end();
4466 // enable update data
4468 // check if clear undoList
4470 myUndoList->clear();
4471 }
4472 update();
4473 return 1;
4474}
4475
4476
4477long
4478GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4479 if (myViewNet == nullptr) {
4480 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4482 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4483 } else {
4484 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4485 }
4486}
4487
4488
4489long
4490GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4491 const auto savingFileHandler = myFileBucketHandler;
4492 // get option container
4493 auto& neteditOptions = OptionsCont::getOptions();
4494 // check if we're forcing to saving data elements
4496 neteditOptions.getBool("force-saving") &&
4498 WRITE_MESSAGE(TL("Force save data elements"));
4499 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4500 // nothing to save
4501 return 1;
4502 }
4503 // check if we have to define a default filename
4505 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4506 }
4507 // check if we have to open save as dialog
4508 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4509 return onCmdSaveDataElementsAs(sender, sel, ptr);
4510 } else {
4511 try {
4512 // save data elements
4513 const bool savingResult = myNet->saveDataElements();
4514 // show info
4515 if (savingResult) {
4516 WRITE_MESSAGE(TL("Data elements saved."));
4517 return 1;
4518 } else {
4519 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4520 return 0;
4521 }
4522 } catch (IOError& e) {
4523 // open error message box
4524 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4525 }
4526 }
4527 return 0;
4528}
4529
4530
4531long
4532GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4533 // get data file
4534 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4539 // continue depending of dialog
4540 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4541 // update default name
4543 // save data elements
4544 return onCmdSaveDataElements(sender, sel, ptr);
4545 } else {
4546 return 0;
4547 }
4548}
4549
4550
4551long
4552GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4553 // get data file
4554 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4559 // continue depending of dialog
4560 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4561 // use the file as default file
4563 // begin undoList operation
4564 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4565 // iterate over all demand elementes and change file
4566 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4567 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4568 }
4569 // end undoList operation
4570 myUndoList->end();
4571 // save data elements
4573 return onCmdSaveDataElements(sender, sel, ptr);
4574 } else {
4575 return 0;
4576 }
4577}
4578
4579
4580long
4582 // get file
4583 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4588 // continue depending of dialog
4589 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4590 // save previous demand element status saving
4591 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4592 // get (or create) bucket for this new file
4593 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4594 // disable validation for meanDatas
4595 XMLSubSys::setValidation("never", "auto", "auto");
4596 // Create meanData handler
4597 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4598 // begin undoList operation
4599 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4600 // Run parser
4601 if (!generalHandler.parse()) {
4602 // write error
4603 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4604 } else {
4605 // show info
4606 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4607 // enable demand elements if there is an error creating element
4608 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4610 }
4611 }
4612 // end undoList operation
4613 myUndoList->end();
4614 // restore validation for meanDatas
4615 XMLSubSys::setValidation("auto", "auto", "auto");
4616 // check if clear undoList
4618 myUndoList->clear();
4619 }
4620 update();
4621 }
4622 return 1;
4623}
4624
4625
4626long
4628 // disable validation for meanDatas
4629 XMLSubSys::setValidation("never", "auto", "auto");
4630 // begin undoList operation
4632 // clear meanDatas
4634 // reload meanData elements stored in options
4635 loadMeanDataElements("Reloading");
4636 // end undoList operation and update view
4637 myUndoList->end();
4638 // restore validation for meanDatas
4639 XMLSubSys::setValidation("auto", "auto", "auto");
4640 // check if clear undoList
4642 myUndoList->clear();
4643 }
4644 update();
4645 return 1;
4646}
4647
4648
4649long
4650GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4651 if (myViewNet == nullptr) {
4652 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4654 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4655 } else {
4656 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4657 }
4658}
4659
4660
4661long
4662GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4663 const auto savingFileHandler = myFileBucketHandler;
4664 // get option container
4665 auto& neteditOptions = OptionsCont::getOptions();
4666 // check if we're forcing to saving meandata elements
4668 neteditOptions.getBool("force-saving") &&
4670 WRITE_MESSAGE(TL("Force save meandata elements"));
4671 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4672 // nothing to save
4673 return 1;
4674 }
4675 // check if we have to define a default filename
4677 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4678 }
4679 // check if we have to open save as dialog
4680 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4681 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4682 } else {
4683 try {
4684 // compute before saving
4685 myNet->computeNetwork(this);
4686 // save demand elements
4687 const bool savingResult = myNet->saveMeanDatas();
4688 // show info
4689 if (savingResult) {
4690 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4691 return 1;
4692 } else {
4693 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4694 return 0;
4695 }
4696 } catch (IOError& e) {
4697 // open error message box
4698 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4699 }
4700 }
4701 return 0;
4702}
4703
4704
4705long
4706GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4707 // get meanData file
4708 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4713 // continue depending of dialog
4714 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4715 // update default name
4717 // save meanDatas
4718 return onCmdSaveMeanDataElements(sender, sel, ptr);
4719 } else {
4720 return 0;
4721 }
4722}
4723
4724
4725long
4726GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4727 // get meanData file
4728 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4733 // continue depending of dialog
4734 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4735 // use the file as default file
4737 // begin undoList operation
4738 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4739 // iterate over all demand elementes and change file
4740 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4741 for (const auto& meanData : meanDataTag.second) {
4742 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4743 }
4744 }
4745 // end undoList operation
4746 myUndoList->end();
4747 // save meanDatas
4749 return onCmdSaveMeanDataElements(sender, sel, ptr);
4750 } else {
4751 return 0;
4752 }
4753}
4754
4755
4756bool
4757GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4758 if (myNet) {
4760 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4761 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4762 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4763 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4764 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4765 // first check if abort saving
4766 if (commonResult == GNEDialog::Result::ABORT) {
4767 return false;
4768 }
4769 // save every type of file
4770 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4771 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4772 return false;
4773 }
4774 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4775 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4776 return false;
4777 }
4778 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4779 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4780 return false;
4781 }
4782 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4783 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4784 return false;
4785 }
4786 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4787 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4788 return false;
4789 }
4790 // restore focus in viewNet
4791 myViewNet->setFocus();
4792 // clear undo list
4793 clearUndoList();
4794 // all saved, then continue
4795 return true;
4796 } else {
4797 // nothing to do, then continue
4798 return true;
4799 }
4800}
4801
4802
4803void
4805 // check that view exists
4806 if (myViewNet) {
4808 }
4809 // update require recomputing
4811}
4812
4813
4814void
4816 // remove lock hotkeys
4818 // check supermode
4819 if (supermode == Supermode::NETWORK) {
4820 // menu commands
4824 // lock
4828 // processing
4833 } else if (supermode == Supermode::DEMAND) {
4834 // menu commands
4838 // lock
4842 // processing
4847 } else if (supermode == Supermode::DATA) {
4848 // menu commands
4852 // lock
4856 // processing
4861 } else {
4862 // menu commands
4867 // lock
4871 // processing
4875 }
4876 // continue depending of view
4877 if (myViewNet) {
4881 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4884 }
4885 }
4886}
4887
4888
4889bool
4893
4894
4895void
4899
4900
4901void
4903 myUndoRedoListEnabled = reason;
4904}
4905
4906
4907const std::string&
4911
4912
4913void
4915 if (myViewNet) {
4916 // destroy Popup (to avoid crashes)
4918 }
4919 // clear undo list and return true to continue with closing/reload
4920 myUndoList->clear();
4921}
4922
4923
4928
4929
4934
4935
4940
4941
4946
4947
4952
4953
4958
4959
4964
4965
4966void
4968 // get netedit option container
4969 auto& neteditOptions = OptionsCont::getOptions();
4970 // get additional files (don't use reference because it's modified during loading)
4971 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
4972 // check if we have additionals to load
4973 if (myNet && (additionalFiles.size() > 0)) {
4974 // disable validation for additionals
4975 XMLSubSys::setValidation("never", "auto", "auto");
4976 // begin undolist
4977 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
4978 // use this flag for mark all elements as saved after loading, if it was sucessfully
4979 bool setSaved = additionalFiles.size() == 1;
4980 // iterate over every additional file
4981 for (const auto& file : additionalFiles) {
4982 // check if ignore missing inputs
4983 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4984 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
4985 // get (or create) bucket for this new file
4987 // declare general handler
4988 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4989 // check if force overwritte
4990 if (operation == "reloading") {
4991 generalHandler.forceOverwriteElements();
4992 }
4993 // Run parser
4994 if (!generalHandler.parse()) {
4995 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
4996 }
4997 setSaved &= !generalHandler.isErrorCreatingElement();
4998 }
4999 }
5000 // end undo list
5001 myUndoList->end();
5002 // disable validation for additionals
5003 XMLSubSys::setValidation("auto", "auto", "auto");
5004 if (setSaved) {
5006 }
5007 // check if clear undoList
5009 myUndoList->clear();
5010 }
5011 }
5012}
5013
5014
5015void
5016GNEApplicationWindow::loadDemandElements(const std::string operation) {
5017 // get netedit option container
5018 auto& neteditOptions = OptionsCont::getOptions();
5019 // get demand files (don't use reference because it's modified during loading)
5020 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
5021 // check if we have demand files to load
5022 if (myNet && (demandFiles.size() > 0)) {
5023 // disable validation for additionals
5024 XMLSubSys::setValidation("never", "auto", "auto");
5025 // begin undolist
5026 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
5027 // use this flag for mark all elements as saved after loading, if it was sucessfully
5028 bool setSaved = demandFiles.size() == 1;
5029 // iterate over every demand file
5030 for (const auto& file : demandFiles) {
5031 // check if ignore missing inputs
5032 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5033 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
5034 // get (or create) bucket for this new file
5035 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
5036 // declare general handler
5037 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5038 // check if force overwritte
5039 if (operation == "reloading") {
5040 generalHandler.forceOverwriteElements();
5041 }
5042 // Run parser
5043 if (!generalHandler.parse()) {
5044 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5045 }
5046 setSaved &= !generalHandler.isErrorCreatingElement();
5047 }
5048 }
5049 // end undo list
5050 myUndoList->end();
5051 // disable validation for additionals
5052 XMLSubSys::setValidation("auto", "auto", "auto");
5053 if (setSaved) {
5055 }
5056 // check if clear undoList
5058 myUndoList->clear();
5059 }
5060 }
5061}
5062
5063
5064void
5065GNEApplicationWindow::loadDataElements(const std::string operation) {
5066 // get option container
5067 auto& neteditOptions = OptionsCont::getOptions();
5068 // get data files (don't use reference because it's modified during loading)
5069 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
5070 if (myNet && (dataFiles.size() > 0)) {
5071 // disable validation for additionals
5072 XMLSubSys::setValidation("never", "auto", "auto");
5073 // begin undolist
5074 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
5075 // use this flag for mark all elements as saved after loading, if it was sucessfully
5076 bool setSaved = dataFiles.size() == 1;
5077 // iterate over every data file
5078 for (const auto& file : dataFiles) {
5079 // check if ignore missing inputs
5080 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5081 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
5082 // get (or create) bucket for this new file
5083 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
5084 // declare general handler
5085 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5086 // check if force overwritte
5087 if (operation == "reloading") {
5088 generalHandler.forceOverwriteElements();
5089 }
5090 // Run parser
5091 if (!generalHandler.parse()) {
5092 WRITE_ERROR(TLF("% of % failed.", operation, file));
5093 }
5094 setSaved &= !generalHandler.isErrorCreatingElement();
5095 }
5096 }
5097 // end undo list
5098 myUndoList->end();
5099 // disable validation for additionals
5100 XMLSubSys::setValidation("auto", "auto", "auto");
5101 if (setSaved) {
5103 }
5104 // check if clear undoList
5106 myUndoList->clear();
5107 }
5108 }
5109}
5110
5111
5112void
5114 // get option container
5115 auto& neteditOptions = OptionsCont::getOptions();
5116 // get meanData files (don't use reference because it's modified during loading)
5117 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5118 if (myNet && (meanDataFiles.size() > 0)) {
5119 // disable validation for additionals
5120 XMLSubSys::setValidation("never", "auto", "auto");
5121 // begin undolist
5122 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5123 // use this flag for mark all elements as saved after loading, if it was sucessfully
5124 bool setSaved = meanDataFiles.size() == 1;
5125 // iterate over every meanData file
5126 for (const auto& file : meanDataFiles) {
5127 // check if ignore missing inputs
5128 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5129 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5130 // get (or create) bucket for this new file
5131 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5132 // declare general handler
5133 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5134 // check if force overwritte
5135 if (operation == "reloading") {
5136 generalHandler.forceOverwriteElements();
5137 }
5138 // Run parser
5139 if (!generalHandler.parse()) {
5140 WRITE_ERROR(TLF("% of % failed.", operation, file));
5141 }
5142 setSaved &= !generalHandler.isErrorCreatingElement();
5143 }
5144 }
5145 // end undo list
5146 myUndoList->end();
5147 // disable validation for additionals
5148 XMLSubSys::setValidation("auto", "auto", "auto");
5149 if (setSaved) {
5151 }
5152 // check if clear undoList
5154 myUndoList->clear();
5155 }
5156 }
5157}
5158
5159
5160void
5161GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5162 // get TLS file
5164 if (tlsFile.size() > 0) {
5165 // show info
5166 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5167 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5168 myNet->computeNetwork(this);
5169 // parse TLS programs
5170 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5171 // Abort undo/redo
5173 } else {
5174 // commit undo/redo operation
5175 myUndoList->end();
5176 update();
5177 }
5178 // require save network
5180 // if defined, require save netedit config
5183 }
5184 }
5185}
5186
5187
5188void
5189GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5190 // get edgeType file
5192 if (edgeTypeFile.size() > 0) {
5193 // declare type container
5194 NBTypeCont typeContainerAux;
5195 // declare type handler
5196 NIXMLTypesHandler handler(typeContainerAux);
5197 // load edge types
5198 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5199 // now create GNETypes based on typeContainerAux
5200 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5201 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5202 // iterate over typeContainerAux
5203 for (const auto& auxEdgeType : typeContainerAux) {
5204 // create new edge type
5205 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5206 // add lane types
5207 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5208 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5209 }
5210 // add it using undoList
5211 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5212
5213 }
5214 // end undo list
5216 // refresh edge type selector
5218 // require save network
5220 // if defined, require save netedit config
5223 }
5224 }
5225}
5226
5227
5232
5233
5234bool
5236 if (myInternalTest == nullptr) {
5237 return true;
5238 } else if (obj == myInternalTest) {
5239 return true;
5240 } else {
5241 return false;
5242 }
5243}
5244
5245// ---------------------------------------------------------------------------
5246// GNEApplicationWindow - protected methods
5247// ---------------------------------------------------------------------------
5248#ifdef _MSC_VER
5249#pragma warning(push)
5250#pragma warning(disable: 4355) // mask warning about "this" in initializers
5251#endif
5253 myToolbarsGrip(this),
5254 myMenuBarFile(this),
5255 myFileMenuCommands(this),
5256 myModesMenuCommands(this),
5257 myEditMenuCommands(this),
5258 myLockMenuCommands(this),
5259 myProcessingMenuCommands(this),
5260 myLocateMenuCommands(this),
5261 myToolsMenuCommands(this),
5262 myWindowsMenuCommands(this),
5263 myHelpMenuCommands(this),
5264 mySupermodeCommands(this) {
5265}
5266#ifdef _MSC_VER
5267#pragma warning(pop)
5268#endif
5269
5270
5271long
5272GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5273 FXEvent* e = (FXEvent*) eventData;
5274 if (e && e->code == KEY_Escape) {
5275 if (myGeoCoordinate && myGeoCoordinate->hasFocus()) {
5276 myGeoCoordinate->killFocus();
5277 if (getActiveView()) {
5279 }
5280 return 1;
5281 }
5282 if (myCartesianCoordinate && myCartesianCoordinate->hasFocus()) {
5283 myCartesianCoordinate->killFocus();
5284 if (getActiveView()) {
5286 }
5287 return 1;
5288 }
5289 }
5290 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5291 if (handled == 0 && myMDIClient->numChildren() > 0) {
5292 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5293 if (w != nullptr) {
5294 w->onKeyPress(nullptr, sel, eventData);
5295 }
5296 }
5297 return 0;
5298}
5299
5300
5301long
5302GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5303 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5304 if (handled == 0 && myMDIClient->numChildren() > 0) {
5305 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5306 if (w != nullptr) {
5307 w->onKeyRelease(nullptr, sel, eventData);
5308 }
5309 }
5310 return 0;
5311}
5312
5313
5314/****************************************************************************/
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:865
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:779
@ 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:747
@ 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:895
@ 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:953
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:931
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:781
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:919
@ 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:977
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:813
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:733
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:911
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:691
@ 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:839
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:921
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:791
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:773
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:861
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:891
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:745
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:847
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:845
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:983
@ 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:929
@ 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:969
@ 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:851
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:955
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:899
@ 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:943
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:933
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:727
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:741
@ 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:759
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:665
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:717
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:819
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:721
@ 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:693
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:941
@ 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:777
@ 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:863
@ 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:975
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:765
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:763
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:887
@ 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:949
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:815
@ 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:901
@ 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:739
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:971
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWFILLEDWALKINGAREAS
draw filled walking areas
Definition GUIAppEnum.h:869
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:775
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:859
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:751
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:853
@ 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:849
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:905
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:957
@ 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:889
@ 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:879
@ 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:875
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:723
@ 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:669
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:917
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:817
@ 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:979
@ 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:915
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_GEO_COORDINATE
enter geo coordinate to center view
Definition GUIAppEnum.h:379
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED
save data elements unified
Definition GUIAppEnum.h:755
@ 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:867
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:841
@ 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:743
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:667
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:947
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:883
@ 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:715
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:857
@ 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:855
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:973
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:793
@ 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:981
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_AS
save additionals element as
Definition GUIAppEnum.h:731
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:903
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:913
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:725
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:881
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:837
@ 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:729
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:945
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:961
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_AS
save data elements as
Definition GUIAppEnum.h:753
@ MID_CARTESIAN_COORDINATE
enter cartesian coordinate to center view
Definition GUIAppEnum.h:381
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
@ MID_LANGUAGE_JA
change language to japanese
@ MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_UNIFIED
save demand elements unified
Definition GUIAppEnum.h:749
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:671
@ 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:907
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:885
@ 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:757
@ 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:927
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:959
@ 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:909
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:737
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:268
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:843
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:719
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:951
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:835
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_AS
save meanDatas as
Definition GUIAppEnum.h:761
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:735
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:877
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:897
@ 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:925
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:923
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:811
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:893
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:300
@ MID_LANGUAGE_KO
change language to korean
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition GUIDesigns.h:124
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition GUIDesigns.h:359
#define GUIDesignLabelStatusBar
label used in statusBar
Definition GUIDesigns.h:284
#define GUIDesignSplitter
Definition GUIDesigns.h:505
#define GUIDesignSplitterMDI
MDI Splitter.
Definition GUIDesigns.h:508
#define GUIDesignStatusBar
design used in status bar
Definition GUIDesigns.h:477
@ MESSAGE_OCCURRED
send when a message occurred
@ GLDEBUG_OCCURRED
send when a gldebug occurred
@ ERROR_OCCURRED
send when a error occurred
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occurred
@ WARNING_OCCURRED
send when a warning occurred
GUISelectedStorage gSelected
A global holder of selected objects.
FXString gCurrentFolder
The folder used as last.
@ MODEMEANDATA
@ MODEADDITIONAL
@ SUPERMODEDEMAND
@ NETEDIT_MINI
@ VCLASS_SMALL_TAXI
@ MODECREATEEDGE
@ TOOL_TURNDEFS
@ SUPERMODENETWORK
@ SUPERMODEDATA
@ TOOL_CITYBRAIN
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:288
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:294
std::vector< std::string > StringVector
Definition of a vector of strings.
Definition Option.h:42
@ SUMO_TAG_TYPES
types (edge)
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ GNE_ATTR_SAVEFILE
save file
int GUIDesignHeight
the default height for GUI elements
Definition StdDefs.cpp:41
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h: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
MFXCheckableButton * getShowToolTipsView() const override
get checkable button for view tooltips
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
MFXCheckableButton * getShowToolTipsMenu() const override
get checkable button for menu tooltips
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 require save network
void updatePathCalculator()
update DijkstraRouter (needed a good calculation of dijkstra path after modifying network)
bool isPathCalculatorUpdated() const
check if pathCalculator is updated
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
GNEAttributesEditor * getPersonAttributesEditor() const
get attributes creator
void loadFromFile(const std::string &file) const
load from file
void clearCurrentSelection() const
clear current selection with possibility of undo/redo
GNESelectorFrame::SelectionOperation * getSelectionOperationModul() const
get selection operation modul
bool isOptionModified() const
check if option was modified
bool isChangesPending() const
return true if there is changes to save
const std::vector< CurrentTAZ::TAZEdgeColor > & getEdgeAndTAZChildrenSelected() const
get map with edge and TAZChildren
void clearSelectedEdges()
clear current TAZ children
TAZSelectionStatistics * getTAZSelectionStatisticsModule() const
get TAZ Selection Statistics module
TAZSaveChanges * getTAZSaveChangesModule() const
get TAZ Save Changes module
bool parseTLSPrograms(const std::string &file)
parse TLS Programs from a file
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void undo()
undo the last command group
long onUpdUndo(FXObject *, FXSelector, void *)
event after Undo
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
void abortAllChangeGroups()
reverts and discards ALL active chained change groups
Supermode getRedoSupermode() const
get redo supermode
long onUpdRedo(FXObject *, FXSelector, void *)
event after Redo
Supermode getUndoSupermode() const
get undo supermode
void redo()
redo the last command group
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
GNEAttributesEditor * getVehicleAttributesEditor() const
get attributes creator
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all inspected ACs
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all fronted ACs
long onCmdToggleShowDemandElementsNetwork(FXObject *, FXSelector, void *)
toggle show demand elements (network)
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
GNENet * getNet() const
get the net object
void hotkeyBackSpace()
handle backspace keypress
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
long onCmdToggleShowDemandElementsData(FXObject *, FXSelector, void *)
toggle show demand elements (data)
void abortOperation(bool clearSelection=true)
abort current edition operation
GNEViewNetHelper::InspectedElements & getInspectedElements()
get inspected elements
long onCmdToggleDrawSpreadVehicles(FXObject *, FXSelector, void *)
toggle draw vehicles in begin position or spread in lane
long onCmdToggleShowConnections(FXObject *, FXSelector, void *)
toggle show connections
long onCmdToggleShowTAZElements(FXObject *, FXSelector, void *)
toggle show TAZ elements
long onCmdToggleMoveElevation(FXObject *, FXSelector, void *)
toggle move elevation
long onCmdToggleShowAllPersonPlans(FXObject *, FXSelector, void *)
toggle show all person plans in super mode demand
long onCmdToggleTAZRelOnlyTo(FXObject *, FXSelector, void *)
toggle TAZRez only to
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
void hotkeyFocusFrame()
handle focus frame keypress
long onCmdToggleChainEdges(FXObject *, FXSelector, void *)
toggle chain edges
long onCmdToggleLockContainer(FXObject *, FXSelector, void *)
toggle lock container in super mode demand
long onCmdToggleShowGrid(FXObject *, FXSelector, void *)
toggle show grid
GNEViewNetHelper::MarkFrontElements & getMarkFrontElements()
get marked for drawing front elements
long onCmdToggleHideNonInspecteDemandElements(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
GNEViewParent * getViewParent() const
get the net object
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
toggle draw junction shape
long onCmdToggleShowShapes(FXObject *, FXSelector, void *)
toggle show shapes in super mode data
long onCmdToggleMergeAutomatically(FXObject *, FXSelector, void *)
toggle warn for merge
GNEViewNetHelper::SaveElements & getSaveElements()
get variable used to save elements
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
long onCmdSetSupermode(FXObject *, FXSelector sel, void *)
long onCmdToggleExtendSelection(FXObject *, FXSelector, void *)
toggle extend selection
bool aksChangeSupermode(const std::string &operation, Supermode expectedSupermode)
ask about change supermode
long onCmdSetMode(FXObject *, FXSelector sel, void *)
called when user press a mode button (Network or demand)
void hotkeyEnter()
handle enter keypress
long onCmdToggleShowOverlappedRoutes(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
long onCmdToggleAutoOppositeEdge(FXObject *, FXSelector, void *)
toggle autoOpposite edge
GNEViewNetHelper::LockManager & getLockManager()
get lock manager
void updateControls()
update control contents after undo/redo or recompute
void hotkeyDel()
handle del keypress
long onCmdToggleChangeAllPhases(FXObject *, FXSelector, void *)
toggle change all phases
long onCmdToggleTAZRelDrawing(FXObject *, FXSelector, void *)
toggle TAZRel drawing
long onCmdToggleShowJunctionBubbles(FXObject *, FXSelector, void *)
toggle show junction bubbles
long onCmdToggleShowAdditionalSubElements(FXObject *, FXSelector, void *)
toggle show additional sub-elements
long onCmdToggleShowAllContainerPlans(FXObject *, FXSelector, void *)
toggle show all container plans in super mode demand
long onCmdToggleTAZRelOnlyFrom(FXObject *, FXSelector, void *)
toggle TAZRez only from
long onCmdToggleShowAdditionals(FXObject *, FXSelector, void *)
toggle show additionals in super mode data
long onCmdToggleLockPerson(FXObject *, FXSelector, void *)
toggle lock person in super mode demand
GNEViewNetHelper::TimeFormat & getTimeFormat()
get variable used to switch between time formats
long onCmdToggleSelectEdges(FXObject *, FXSelector, void *)
toggle select edges
long onCmdToggleShowTrips(FXObject *, FXSelector, void *)
toggle show all trips in super mode demand
long onCmdToggleHideShapes(FXObject *, FXSelector, void *)
toggle hide shapes in super mode demand
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
long onCmdToggleShowPolygonSymbols(FXObject *, FXSelector, void *)
toggle show polygon symbols
A single child window which contains a view of the simulation area.
void updateUndoRedoButtons()
update toolbar undo/redo buttons (called when user press Ctrl+Z/Y)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
Called when user press a key.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
void saveDecals(const std::vector< GUISUMOAbstractView::Decal > &decals)
Makes the given decals the default.
static void close()
close GUICursorSubSys
static void initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
static FXMenuCommand * buildFXMenuCommandShortcut(FXComposite *p, const std::string &text, const std::string &shortcut, const std::string &info, FXIcon *icon, FXObject *tgt, FXSelector sel)
build menu command
The application's "Feedback" dialog.
void create()
Creates the widget.
Editor for the list of chosen objects.
const std::string & getMsg() const
Returns the message.
GUIEventType getOwnType() const
returns the event type
Definition GUIEvent.h:89
MFXCheckableButton * getShowToolTipsMenu() const
get menu for tooltips menu
MFXCheckableButton * getShowToolTipsView() const
get menu for tooltips view
GUISUMOAbstractView * getView() const
return GUISUMOAbstractView
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static void initIcons(FXApp *a)
Initiate GUIIconSubSys.
static void close()
close GUIIconSubSys
void setWindowSizeAndPos()
perform initial window positioning and sizing according to user options / previous call
long onCmdUnfocusCoordinate(FXObject *, FXSelector, void *)
called when a coordinate field in the status bar loses focus
std::vector< FXMainWindow * > myTrackerWindows
list of tracker windows
FXMenuPane * myLanguageMenu
Language menu common to all applications.
GUISUMOAbstractView * getActiveView() const
get the active view or 0
long onCmdSetGeoCoordinate(FXObject *, FXSelector, void *)
called when user enters a geo coordinate in the status bar
std::map< std::string, std::string > myOnlineMaps
online mapping services for the context menu
MFXStaticToolTip * myStaticTooltipMenu
static toolTip used in menus
FXMDIClient * myMDIClient
The multi view panel.
long onCmdSetCartesianCoordinate(FXObject *, FXSelector, void *)
called when user enters a cartesian coordinate in the status bar
void buildLanguageMenu(FXMenuBar *menuBar)
long onCmdChangeLanguage(FXObject *, FXSelector, void *)
FXHorizontalFrame * myGeoFrame
FXTextField * myCartesianCoordinate
Coordinate fields for the current cartesian, geo-coordinate and test coordinates.
FXHorizontalFrame * myTestFrame
FXHorizontalFrame * myCartesianFrame
FXLabel * myTestCoordinate
FXMutex myTrackerLock
A lock to make the removal and addition of trackers secure.
void storeWindowSizeAndPos()
record window position and size in registry
long onCmdFocusCoordinate(FXObject *, FXSelector, void *)
called when user focuses a coordinate field in the status bar
FXStatusBar * myStatusbar
The status bar.
FXTextField * myGeoCoordinate
FXGLVisual * myGLVisual
The gl-visual used.
std::vector< GUIGlChildWindow * > myGLWindows
list of GLWindows
long onUpdChangeLanguage(FXObject *, FXSelector, void *)
A logging window for the gui.
void addSeparator()
Adds a a separator to this log window.
void unregisterMsgHandlers()
unregister message handlers
void clear()
Clears the window.
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
void registerMsgHandlers()
register message handlers
virtual double getRotation() const =0
Returns the rotation of the canvas stored in this changer.
virtual double getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
virtual double getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
virtual double getZPos() const =0
Returns the camera height corresponding to the current zoom factor.
void addDecals(const std::vector< Decal > &decals)
add decals
void showViewschemeEditor()
show viewsscheme editor
void processPendingTextureDeletes()
process pending texture deletions
FXbool makeCurrent()
A reimplementation due to some internal reasons.
virtual void showViewportEditor()
show viewport editor
GUIPerspectiveChanger & getChanger() const
get changer
std::vector< Decal > & getDecals()
The list of decals to show.
void clearDecals()
clear all decals
virtual void updatePositionInformationLabel() const
update position information labels
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
void destroyPopup()
destroys the popup
An XML-handler for visualisation schemes.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
static void buildAccelerators(FXAccelTable *accelTable, FXObject *target, const bool sumogui)
build accelerators
static void close()
close GUITextureSubSys
static void resetTextures()
Reset textures.
static void initTextures(FXApp *a)
Initiate GUITextureSubSys for textures.
static std::string clipped
Definition GUIUserIO.h:58
bool parse()
parse
static void resetLoaded()
resets loaded location elements
bool isRunning() const
check if test is running
void stopTests()
stop tests
bool amChecked() const
check if this MFXCheckableButton is checked
void toggleCheck()
Toggle current check state.
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependence to an optional file name.
Definition MFXUtils.cpp:62
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp: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:151
A storage for options typed value containers)
Definition OptionsCont.h:89
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false, const std::string &indent="") const
Writes the configuration.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
void setOptionEditable(const std::string &name, const bool value)
set option editable
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