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 // update checkboxes in edit menu to reflect loaded elements
1451 !OptionsCont::getOptions().getBool("ignore.additionalelements") ? TRUE : FALSE);
1453 !OptionsCont::getOptions().getBool("ignore.routeelements") ? TRUE : FALSE);
1454 // load selection
1455 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1457 }
1459 }
1460 // update app
1461 update();
1462 // restore focus
1463 setFocus();
1464}
1465
1466
1467void
1472
1473// ---------------------------------------------------------------------------
1474// private methods
1475// ---------------------------------------------------------------------------
1476
1477void
1479 // build file menu
1480 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1482 myFileMenuNeteditConfig = new FXMenuPane(this);
1483 myFileMenuSumoConfig = new FXMenuPane(this);
1484 myFileMenuTLS = new FXMenuPane(this);
1485 myFileMenuEdgeTypes = new FXMenuPane(this);
1486 myFileMenuAdditionals = new FXMenuPane(this);
1487 myFileMenuDemandElements = new FXMenuPane(this);
1488 myFileMenuDataElements = new FXMenuPane(this);
1489 myFileMenuMeanDataElements = new FXMenuPane(this);
1490 myFileMenuRecentNetworks = new FXMenuPane(this);
1491 myFileMenuRecentConfigs = new FXMenuPane(this);
1495 // add separator for recent files
1496 new FXMenuSeparator(myFileMenu);
1497 // build recent files
1500 new FXMenuSeparator(myFileMenu);
1501 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1502 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1503 // build modes menu
1504 myModesMenu = new FXMenuPane(this);
1506 myModesMenuTitle->setTarget(this);
1508 // build Supermode commands and hide it
1510 // add separator
1511 new FXSeparator(myModesMenu);
1512 // build modes menu commands
1514 // build edit menu
1515 myEditMenu = new FXMenuPane(this);
1517 // build edit menu commands
1519 // build separator
1520 new FXMenuSeparator(myEditMenu);
1521 // build view options
1525 // hide view options
1529 // build view menu commands
1531 // build separator
1532 new FXMenuSeparator(myEditMenu);
1533 // build front element menu commands
1535 // build separator
1536 new FXMenuSeparator(myEditMenu);
1537 // build open in sumo menu commands
1539 // build lock menu
1540 myLockMenu = new FXMenuPane(this);
1542 myLockMenuTitle->setTarget(this);
1544 // build lock menu commands
1546 // build processing menu (trigger netbuild computations)
1547 myProcessingMenu = new FXMenuPane(this);
1550 // build locate menu
1551 myLocatorMenu = new FXMenuPane(this);
1554 // build tools menu
1555 myToolsMenu = new FXMenuPane(this);
1556 myToolsAssignMenu = new FXMenuPane(this);
1557 myToolsDetectorMenu = new FXMenuPane(this);
1558 myToolsDistrictMenu = new FXMenuPane(this);
1559 myToolsDRTMenu = new FXMenuPane(this);
1560 myToolsEmissionsMenu = new FXMenuPane(this);
1561 myToolsImportMenu = new FXMenuPane(this);
1562 myToolsImportCityBrainMenu = new FXMenuPane(this);
1563 myToolsImportGTFSMenu = new FXMenuPane(this);
1564 myToolsImportVissim = new FXMenuPane(this);
1565 myToolsImportVisum = new FXMenuPane(this);
1566 myToolsNetMenu = new FXMenuPane(this);
1567 myToolsRouteMenu = new FXMenuPane(this);
1568 myToolsOutputMenu = new FXMenuPane(this);
1569 myToolsShapes = new FXMenuPane(this);
1570 myToolsTLS = new FXMenuPane(this);
1571 myToolsTriggerMenu = new FXMenuPane(this);
1572 myToolsTurnDefs = new FXMenuPane(this);
1573 myToolsVisualizationMenu = new FXMenuPane(this);
1574 myToolsXML = new FXMenuPane(this);
1576 // build tools menu cascasde
1577 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1578 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1579 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1581 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1590 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1591 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1592 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1596 // add separators between folders
1597 new FXMenuSeparator(myToolsMenu);
1598 new FXMenuSeparator(myToolsImportMenu);
1599 // create map with tool Menu panes and their associated folder
1606 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1608 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1609 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1616 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1619 // build tools
1621 // build windows menu
1622 myWindowMenu = new FXMenuPane(this);
1625 // build language menu
1627 // build help menu
1628 myHelpMenu = new FXMenuPane(this);
1631}
1632
1633
1634FXGLCanvas*
1636 // netedit uses only a single View, then return nullptr
1637 return nullptr;
1638}
1639
1640
1643 return 0;
1644}
1645
1646
1647double
1649 return 1;
1650}
1651
1652
1657
1658
1663
1664
1669
1670
1673 if (myViewNet && myViewNet->getViewParent()) {
1675 }
1676 return nullptr;
1677}
1678
1679
1682 if (myViewNet && myViewNet->getViewParent()) {
1684 }
1685 return nullptr;
1686}
1687
1688
1693
1694
1695void
1697 if (myViewNet && myViewNet->getNet()) {
1698 // show
1700 // set label depending of recomputing
1702 myRequireRecomputingButton->setText("");
1703 myRequireRecomputingButton->setTipText(TL("Network computed"));
1705 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1706 } else {
1707 myRequireRecomputingButton->setText(TL("Press F5"));
1708 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1710 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1711 }
1712 } else {
1713 // hide
1715 }
1716}
1717
1718
1719void
1720GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1721 // first check if net must be deleted
1722 if (myNet != nullptr) {
1723 delete myNet;
1724 myNet = nullptr;
1726 }
1727 // reset default filenames
1728 if (resetFilenames) {
1730 }
1731 // check if view has to be saved
1732 if (myViewNet) {
1734 // save decals and viewport for persistence (before they are cleared)
1738 // clear decals and release GPU textures
1739 if (myViewNet->makeCurrent()) {
1744 myViewNet->makeNonCurrent();
1745 }
1746 }
1747 // lock tracker
1748 myTrackerLock.lock();
1749 // remove trackers and other external windows
1750 while (!myGLWindows.empty()) {
1751 delete myGLWindows.front();
1752 }
1753 myViewNet = nullptr;
1754 for (FXMainWindow* const window : myTrackerWindows) {
1755 window->destroy();
1756 delete window;
1757 }
1758 myTrackerWindows.clear();
1759 // reset the caption
1760 setTitle(myTitlePrefix);
1761 // unlock tracker
1762 myTrackerLock.unlock();
1763 // remove coordinate information
1764 myGeoCoordinate->setText(TL("N/A"));
1765 myGeoCoordinate->disable();
1766 myGeoCoordinate->setEditable(false);
1767 myCartesianCoordinate->setText(TL("N/A"));
1768 myTestCoordinate->setText(TL("N/A"));
1769 myTestFrame->hide();
1771}
1772
1773
1774FXCursor*
1776 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1777}
1778
1779
1780void
1782 auto& neteditOptions = OptionsCont::getOptions();
1783 if (neteditOptions.getBool("new")) {
1784 // save output file
1785 const auto outputFile = neteditOptions.getString("output-file");
1786 // create new network reset all options
1788 // check if define network file using this output file
1789 if (!outputFile.empty()) {
1791 }
1792 } else {
1793 // set flag
1794 myAmLoading = true;
1795 // set status bar
1796 setStatusBarText(TL("Loading console arguments."));
1797 // load console arguments
1799 // add it into recent networks and configs
1802 }
1805 }
1806 }
1807}
1808
1809
1810void
1812 auto& neteditOptions = OptionsCont::getOptions();
1813 // save windows size and position
1815 // enable loading flag and disable reloading flag
1816 myAmLoading = true;
1817 // recenter view
1818 gSchemeStorage.saveViewport(0, 0, -1, 0);
1819 // fill (reset) all options
1820 GNELoadThread::fillOptions(neteditOptions);
1821 // set default options defined in GNELoadThread::setDefaultOptions(...)
1822 GNELoadThread::setDefaultOptions(neteditOptions);
1823 // update status bar
1824 setStatusBarText(TL("Creating new network."));
1825 // create new network
1827 // update window
1828 update();
1829}
1830
1831
1832void
1833GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1834 if (networkFile.empty()) {
1835 WRITE_ERROR(TL("Trying to load an empty network."));
1836 } else {
1837 auto& neteditOptions = OptionsCont::getOptions();
1838 // stop test before calling load thread
1839 if (myInternalTest) {
1841 }
1842 // store size, position and viewport
1844 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1845 // set flag
1846 myAmLoading = true;
1847 // fill (reset) all options
1848 myLoadThread->fillOptions(neteditOptions);
1849 // set default options defined in GNELoadThread::setDefaultOptions(...)
1850 myLoadThread->setDefaultOptions(neteditOptions);
1851 // update default net file
1853 // set status bar
1854 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1855 // load network
1857 // add it into recent nets
1858 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1859 }
1860}
1861
1862
1863void
1864GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1865 if (configurationFile.empty()) {
1866 WRITE_ERROR(TL("Trying to load an empty configuration."));
1867 } else {
1868 auto& neteditOptions = OptionsCont::getOptions();
1869 // store size, position and viewport
1871 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1872 // set flag
1873 myAmLoading = true;
1874 // fill (reset) all options
1875 myLoadThread->fillOptions(neteditOptions);
1876 // set default options defined in GNELoadThread::setDefaultOptions(...)
1877 myLoadThread->setDefaultOptions(neteditOptions);
1878 // set file to load
1879 neteditOptions.resetWritable();
1880 neteditOptions.set("configuration-file", configurationFile);
1881 // set status bar
1882 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1883 // load config
1885 // add it into recent configs
1886 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1887 }
1888}
1889
1890
1891void
1892GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1893 auto& neteditOptions = OptionsCont::getOptions();
1894 // store size, position and viewport
1896 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1897 // set flag
1898 myAmLoading = true;
1899 // fill (reset) all options
1900 myLoadThread->fillOptions(neteditOptions);
1901 // set default options defined in GNELoadThread::setDefaultOptions(...)
1902 myLoadThread->setDefaultOptions(neteditOptions);
1903 // recommended osm options
1904 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1905 neteditOptions.set("osm-files", OSMFile);
1906 neteditOptions.set("geometry.remove", "true");
1907 neteditOptions.set("ramps.guess", "true");
1908 neteditOptions.set("junctions.join", "true");
1909 neteditOptions.set("tls.guess-signals", "true");
1910 neteditOptions.set("tls.discard-simple", "true");
1911 // open netedit options dialog
1912 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1913 // open wizard dialog
1914 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1915 // needed to set projection parameters
1916 NIFrame::checkOptions(neteditOptions);
1917 // set file to load
1918 neteditOptions.resetWritable();
1919 neteditOptions.set("configuration-file", OSMFile);
1920 // set status bar
1921 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1922 // load config
1924 }
1925}
1926
1927void
1928GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1929 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1930 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1931}
1932
1933
1934long
1935GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
1936 // open question dialog box
1937 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
1938 TL("Recompute with volatile options"),
1939 TL("Changes produced in the net due a recomputing with"),
1940 TL("volatile options cannot be undone. Continue?"));
1941 // check result
1942 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1943 // save all elements
1944 onCmdSaveAdditionalElements(sender, sel, ptr);
1945 onCmdSaveDemandElements(sender, sel, ptr);
1946 onCmdSaveDataElements(sender, sel, ptr);
1947 onCmdSaveMeanDataElements(sender, sel, ptr);
1948 // compute with volatile options
1949 myNet->computeNetwork(this, true, true);
1951 }
1952 return 1;
1953}
1954
1955
1956bool
1959 myConsoleOptionsLoaded = false;
1960 return true;
1961 } else {
1962 return false;
1963 }
1964}
1965
1966
1971
1972
1977
1978
1979void
1983
1984
1985long
1986GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1987 // check that currently there is a View
1988 if (myViewNet) {
1989 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1990 }
1991 return 1;
1992}
1993
1994
1995long
1996GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1997 // check that currently there is a View
1998 if (myViewNet) {
1999 myViewNet->onCmdSetMode(sender, sel, ptr);
2000 }
2001 return 1;
2002}
2003
2004
2005long
2006GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
2007 if (myViewNet) {
2008 // check if we're calling the functions using internal test
2009 switch (FXSELID(sel)) {
2012 break;
2013 case MID_GNE_LOCK_EDGE:
2015 break;
2016 case MID_GNE_LOCK_LANE:
2018 break;
2021 break;
2024 break;
2027 break;
2030 break;
2031 case MID_GNE_LOCK_WIRE:
2033 break;
2034 case MID_GNE_LOCK_TAZ:
2036 break;
2039 break;
2040 case MID_GNE_LOCK_POI:
2042 break;
2045 break;
2048 break;
2049 case MID_GNE_LOCK_ROUTE:
2051 break;
2054 break;
2057 break;
2060 break;
2061 case MID_GNE_LOCK_WALK:
2063 break;
2064 case MID_GNE_LOCK_RIDE:
2066 break;
2069 break;
2072 break;
2075 break;
2076 case MID_GNE_LOCK_STOP:
2078 break;
2081 break;
2084 break;
2087 break;
2088 default:
2089 break;
2090 }
2092 }
2093 return 1;
2094}
2095
2096
2097long
2098GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2099 // lock all
2102 return 1;
2103}
2104
2105
2106long
2108 // unlock all
2111 return 1;
2112}
2113
2114
2115long
2117 if (myViewNet) {
2118 myViewNet->update();
2119 }
2120 return 1;
2121}
2122
2123
2124long
2125GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2126 if (myViewNet) {
2128 // supermode network
2134 myLockMenuTitle->enable();
2135 } else {
2136 myLockMenuTitle->disable();
2137 }
2139 // supermode demand
2144 myLockMenuTitle->enable();
2145 } else {
2146 myLockMenuTitle->disable();
2147 }
2149 // supermode data
2153 myLockMenuTitle->enable();
2154 } else {
2155 myLockMenuTitle->disable();
2156 }
2157 } else {
2158 myLockMenuTitle->disable();
2159 }
2160 } else {
2161 myLockMenuTitle->disable();
2162 }
2163 return 1;
2164}
2165
2166
2167long
2168GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2169 // first check if there is a view
2170 if (myViewNet) {
2171 // process depending of supermode
2173 // check what FXMenuCommand was called
2174 switch (FXSELID(sel)) {
2176 myNet->computeNetwork(this, true, false);
2178 break;
2180 computeJunctionWithVolatileOptions(sender, sel, ptr);
2181 break;
2184 break;
2187 break;
2190 break;
2191 default:
2192 break;
2193 }
2195 // check what FXMenuCommand was called
2196 switch (FXSELID(sel)) {
2200 break;
2203 break;
2206 break;
2209 break;
2212 break;
2213 default:
2214 break;
2215 }
2216 }
2217 // refresh to update undo-redo button
2218 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2219 }
2220 return 1;
2221}
2222
2223
2224long
2225GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2226 // get extra arguments
2227 std::string extraArg;
2229 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2230 }
2231 FXRegistry reg("SUMO netedit", "netedit");
2232 std::string netedit = "netedit";
2233 const char* sumoPath = getenv("SUMO_HOME");
2234 if (sumoPath != nullptr) {
2235#ifdef DEBUG
2236 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2237#else
2238 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2239#endif
2240 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2241 netedit = "\"" + newPath + "\"";
2242 }
2243 }
2244 std::string cmd = netedit + extraArg;
2245 // start in background
2246#ifndef WIN32
2247 cmd = cmd + " &";
2248#else
2249 // see "help start" for the parameters
2250 cmd = "start /B \"\" " + cmd;
2251#endif
2252 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2253 // yay! fun with dangerous commands... Never use this over the internet
2255 return 1;
2256}
2257
2258
2259long
2260GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2261 // input parameters
2262 std::string inputParameters;
2263 // if we have only a network and no SumoConfig defined, then load directly without creating a SumoConfig
2266 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE)))) {
2267 // force save network
2268 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2269 // network wasn't saved, then stop
2270 return 0;
2271 }
2272 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2273 // write info
2275 } else {
2276 // force save SumoConfig
2277 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2278 // SumoConfig wasn't saved, then stop
2279 return 0;
2280 }
2281 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2282 // check if ignore additional or demand elements
2283 if (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) {
2284 inputParameters += " --ignore.additionalelements";
2285 }
2286 if (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) {
2287 inputParameters += " --ignore.routeelements";
2288 }
2289 // write info
2290 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2291 }
2292 // save current viewport in registry
2293 FXRegistry reg("SUMO GUI", "sumo-gui");
2294 reg.read();
2295 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2296 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2297 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2298 reg.write();
2299 // declare executable
2300 std::string sumoGuiExecutable = "sumo-gui";
2301 // if SUMO_HOME is defined, update executable
2302 const char* sumoHome = getenv("SUMO_HOME");
2303 if (sumoHome != nullptr) {
2304 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2305 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2306 sumoGuiExecutable = "\"" + newPath + "\"";
2307 }
2308 }
2309 // declare command
2310 std::string cmd = sumoGuiExecutable + inputParameters;
2311 // start in background
2312#ifndef WIN32
2313 cmd = cmd + " &";
2314#else
2315 // see "help start" for the parameters
2316 cmd = "start /B \"\" " + cmd;
2317#endif
2318 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2319 // yay! fun with dangerous commands... Never use this over the internet
2321 return 1;
2322}
2323
2324
2325long
2326GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2327 // check that view exists
2328 if (myViewNet) {
2329 // first check if we're selecting a subset of edges in TAZ Frame
2331 // clear current selection
2333 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2334 // check if stop select parent
2336 // and stop select paretn
2338 } else {
2339 // clear inspected elements
2341 }
2342 } else {
2343 // abort current operation
2345 }
2346 }
2347 return 1;
2348}
2349
2350
2351long
2352GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2353 // check that view exists
2354 if (myViewNet) {
2356 }
2357 return 1;
2358}
2359
2360
2361long
2362GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2363 // check that view exists
2364 if (myViewNet) {
2366 }
2367 return 1;
2368}
2369
2370
2371long
2372GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2373 // check that view exists
2374 if (myViewNet) {
2376 }
2377 return 1;
2378}
2379
2380
2381long
2382GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2383 // check that view exists
2384 if (myViewNet) {
2386 }
2387 return 1;
2388}
2389
2390
2391long
2393 // check that view exists
2394 if (myViewNet) {
2396 }
2397 return 1;
2398}
2399
2400
2401long
2402GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2403 // check that view exists
2404 if (myViewNet) {
2406 // refresh flow frames
2407 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2409 }
2410 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2412 }
2413 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2415 }
2416 // refresh inspector frame
2417 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2419 }
2420 }
2421 return 1;
2422}
2423
2424
2425long
2426GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2427 // check that view exists
2428 if (myViewNet) {
2430 }
2431 return 1;
2432}
2433
2434
2435long
2436GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2439 }
2440 return 1;
2441}
2442
2443
2444long
2445GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2446 // enable or disable sender element depending of viewNet
2447 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2448}
2449
2450
2451long
2454 return 1;
2455}
2456
2457
2458long
2459GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2460 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2461 return 1;
2462}
2463
2464
2465long
2466GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2468}
2469
2470
2471long
2472GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2473 // check that view exists
2474 if (myViewNet) {
2476 }
2477 return 1;
2478}
2479
2480
2481long
2482GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2483 // check that view exists
2484 if (myViewNet) {
2486 }
2487 return 1;
2488}
2489
2490
2491long
2492GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2493 // check that view exists
2494 if (myViewNet) {
2495 // Call manually toggle grid function
2496 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2497 }
2498 return 1;
2499}
2500
2501
2502long
2503GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2504 // check that view exists
2505 if (myViewNet) {
2506 // Call manually toggle junction shape function
2507 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2508 }
2509 return 1;
2510}
2511
2512
2513long
2515 if (myViewNet) {
2516 // check if all element are front
2517 bool allFront = true;
2518 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2519 if (!AC->isMarkedForDrawingFront()) {
2520 allFront = false;
2521 break;
2522 }
2523 }
2524 // first unfront all elements
2526 // only mark front elements if we have at least one non-front element
2527 if (!allFront) {
2528 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2529 AC->markForDrawingFront();
2530 }
2531 }
2532 myViewNet->update();
2534 }
2535 return 1;
2536}
2537
2538
2539long
2540GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2541 // first check that we have a ViewNet
2542 if (myViewNet) {
2543 // first check what selector was called
2544 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2545 // check that numericalKeyPressed is valid
2546 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2547 return 0;
2548 }
2549 // declare a vector in which save visible menu commands
2550 std::vector<MFXCheckableButton*> visibleMenuCommands;
2551 // get common, network and demand visible menu commands
2555 // now check that numericalKeyPressed isn't greater than visible view options
2556 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2557 return 0;
2558 }
2559 // toggle edit options
2561 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2562 return 1;
2564 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2565 return 1;
2567 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2568 return 1;
2569 }
2570 }
2571 return 0;
2572}
2573
2574
2575long
2576GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2577 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2578 return 1;
2579}
2580
2581
2582long
2583GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2584 // update in every version
2585 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2586 return 1;
2587}
2588
2589
2590long
2591GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2592 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2593 return 1;
2594}
2595
2596
2597long
2600 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2601 } else {
2602 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2603 }
2604}
2605
2606
2607long
2608GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2609 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2610 myAllowUndoRedo = true;
2611 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2612 } else {
2613 myAllowUndoRedo = false;
2614 // drop undo-redo list after changing flag
2615 myUndoList->clear();
2616 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2617 }
2618}
2619
2620
2621long
2623 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2625 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2626 } else {
2627 myAllowUndoRedoLoading = false;
2628 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2629 }
2630}
2631
2632
2633long
2634GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2635 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2636 return 1;
2637}
2638
2639
2640long
2641GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2642 // create and open feedback dialog
2643 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2644 feedback->create();
2645 feedback->show(PLACEMENT_OWNER);
2646 return 1;
2647}
2648
2649
2650long
2652 auto& neteditOptions = OptionsCont::getOptions();
2653 // open netedit option dialog
2654 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2655 // continue depending of result
2656 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2657 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2658 NBFrame::checkOptions(neteditOptions);
2659 NWFrame::checkOptions(neteditOptions);
2660 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2661 // check if mark netedit config as unsaved
2662 if (neteditOptionsDialog.isOptionModified() && myNet) {
2664 // aditionally, check if network requires saving
2665 if (neteditOptionsDialog.requireSaveNetwork()) {
2668 }
2669 }
2670 }
2671 return 1;
2672}
2673
2674
2675long
2677 // open sumo option dialog
2678 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2679 // continue depending of result
2680 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2682 }
2683 return 1;
2684}
2685
2686
2687long
2690 return 1;
2691}
2692
2693
2694long
2696 // open netgenerate options dialog
2698 return 1;
2699}
2700
2701
2702long
2703GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2704 // Check conditions
2705 if (myViewNet == nullptr) {
2706 return 0;
2707 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2708 return 0;
2709 } else {
2710 // check supermode (currently ignore supermode data)
2713 // abort if user doesn't press "yes"
2715 return 0;
2716 }
2717 }
2719 // update current show frame after undo
2722 }
2723 // update file bucket options (needed to maintain integrity)
2725 // update manually undo/redo menu commands (see #6005)
2728 // update toolbar undo-redo buttons
2730 return 1;
2731 }
2732}
2733
2734
2735long
2736GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2737 // Check conditions
2738 if (myViewNet == nullptr) {
2739 return 0;
2740 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2741 return 0;
2742 } else {
2743 // check supermode (currently ignore supermode data)
2746 // abort if user doesn't press "yes"
2748 return 0;
2749 }
2750 }
2752 // update current show frame after redo
2755 }
2756 // update file bucket options (needed to maintain integrity)
2758 // update manually undo/redo menu commands (see #6005)
2761 // update toolbar undo-redo buttons
2763 return 1;
2764 }
2765}
2766
2767
2768long
2770 // open UndoList Dialog
2771 GNEUndoListDialog(this);
2772 return 1;
2773}
2774
2775
2776long
2777GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2778 // check if net exist and there is something to undo/redo
2779 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2780 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2781 } else {
2782 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2783 }
2784 return 1;
2785}
2786
2787
2788long
2790 // first check viewNet
2792 // update demand path calculator
2794 }
2795 return 1;
2796}
2797
2798
2799long
2800GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2801 // Prepared for #6042
2802 return 1;
2803}
2804
2805
2806long
2807GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2808 // Prepared for #6042
2809 return 1;
2810}
2811
2812
2813long
2814GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2815 // Prepared for #6042
2816 return 1;
2817}
2818
2819
2820long
2821GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2822 // first check if myViewNet exist
2823 if (myViewNet) {
2824 // call set template in inspector frame
2826 }
2827 return 1;
2828}
2829
2830
2831long
2832GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2833 // first check if myViewNet exist
2834 if (myViewNet) {
2835 // call copy template in inspector frame
2837 }
2838 return 1;
2839}
2840
2841
2842long
2843GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2844 // first check if myViewNet exist
2845 if (myViewNet) {
2846 // call clear template in inspector frame
2848 }
2849 return 1;
2850}
2851
2852
2853long
2854GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2855 // check if net exist
2856 if (myNet) {
2858 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2859 } else {
2861 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2862 }
2863}
2864
2865
2866long
2867GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2868 // check if at least there is one edge in the network
2869 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2870 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2871 } else {
2872 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2873 }
2874}
2875
2876
2877long
2878GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2879 // check if net, viewnet and front attribute exist
2880 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2881 // check if all element are front
2882 bool allFront = true;
2883 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2884 if (!AC->isMarkedForDrawingFront()) {
2885 allFront = false;
2886 break;
2887 }
2888 }
2889 // set button text depending of all selected
2890 if (allFront) {
2891 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2892 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2893 } else {
2894 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2895 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2896 }
2897 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2898 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2899 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2900 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2901 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2902 } else {
2903 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2904 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2905 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2906 }
2907}
2908
2909
2910long
2911GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2912 if (myNet == nullptr) {
2913 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2914 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2915 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2916 } else {
2917 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2918 }
2919}
2920
2921
2922long
2923GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2924 if (myNet == nullptr) {
2925 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2927 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2928 } else {
2929 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2930 }
2931}
2932
2933
2934long
2936 if (myNet == nullptr) {
2937 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2938 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2939 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2940 } else {
2941 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2942 }
2943}
2944
2945
2946long
2947GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2948 if (myNet == nullptr) {
2949 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2950 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2951 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2952 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2953 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2954 } else {
2955 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2956 }
2957}
2958
2959
2960long
2961GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2962 if (myNet == nullptr) {
2963 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2964 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2965 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2966 } else {
2967 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2968 }
2969
2970}
2971
2972
2973long
2974GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2975 if (myNet == nullptr) {
2976 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2978 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2979 } else {
2980 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2981 }
2982}
2983
2984
2985long
2986GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2987 if (myNet == nullptr) {
2988 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2989 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
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::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
3000 if (myNet == nullptr) {
3001 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3002 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
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
3010
3011long
3012GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
3013 if (myNet == nullptr) {
3014 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3015 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
3016 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3017 } else {
3018 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3019 }
3020}
3021
3022
3023long
3025 if (myNet == nullptr) {
3026 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3027 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
3028 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3029 } else {
3030 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3031 }
3032
3033}
3034
3035
3036long
3037GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
3038 return myUndoList->onUpdUndo(sender, sel, ptr);
3039}
3040
3041
3042long
3043GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
3044 return myUndoList->onUpdRedo(sender, sel, ptr);
3045}
3046
3047
3048long
3049GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
3050 // first check viewNet
3051 if (myViewNet) {
3052 // check supermode network
3054 // disable
3055 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3057 // disable
3058 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3059 } else {
3060 // enable
3061 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3062 }
3063 } else {
3064 // disable
3065 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3066 }
3067}
3068
3069
3070long
3071GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3072 // check viewNet
3073 if (myViewNet) {
3074 // continue depending of selector
3075 switch (FXSELID(sel)) {
3076 // Network
3078 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3080 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3082 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3084 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3086 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3088 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3090 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3092 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3094 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3096 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3098 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3100 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3102 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3104 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3106 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3108 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3110 return myViewNet->onCmdToggleShowPolygonSymbols(sender, sel, ptr);
3112 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3113 // Demand
3115 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3117 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3119 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3121 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3123 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3125 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3127 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3129 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3131 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3133 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3135 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3136 // Data
3138 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3140 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3142 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3144 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3146 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3148 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3150 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3152 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3153 default:
3154 return 0;
3155 }
3156 } else {
3157 return 0;
3158 }
3159}
3160
3161
3162long
3163GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3164 // get menuCheck
3165 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3166 // check viewNet
3167 if (myViewNet && menuCheck) {
3168 // continue depending of selector
3169 switch (FXSELID(sel)) {
3170 // Network
3173 menuCheck->setCheck(TRUE);
3174 } else {
3175 menuCheck->setCheck(FALSE);
3176 }
3177 break;
3180 menuCheck->setCheck(TRUE);
3181 } else {
3182 menuCheck->setCheck(FALSE);
3183 }
3184 break;
3187 menuCheck->setCheck(TRUE);
3188 } else {
3189 menuCheck->setCheck(FALSE);
3190 }
3191 break;
3194 menuCheck->setCheck(TRUE);
3195 } else {
3196 menuCheck->setCheck(FALSE);
3197 }
3198 break;
3201 menuCheck->setCheck(TRUE);
3202 } else {
3203 menuCheck->setCheck(FALSE);
3204 }
3205 break;
3208 menuCheck->setCheck(TRUE);
3209 } else {
3210 menuCheck->setCheck(FALSE);
3211 }
3212 break;
3215 menuCheck->setCheck(TRUE);
3216 } else {
3217 menuCheck->setCheck(FALSE);
3218 }
3219 break;
3222 menuCheck->setCheck(TRUE);
3223 } else {
3224 menuCheck->setCheck(FALSE);
3225 }
3226 break;
3229 menuCheck->setCheck(TRUE);
3230 } else {
3231 menuCheck->setCheck(FALSE);
3232 }
3233 break;
3236 menuCheck->setCheck(TRUE);
3237 } else {
3238 menuCheck->setCheck(FALSE);
3239 }
3240 break;
3243 menuCheck->setCheck(TRUE);
3244 } else {
3245 menuCheck->setCheck(FALSE);
3246 }
3247 break;
3250 menuCheck->setCheck(TRUE);
3251 } else {
3252 menuCheck->setCheck(FALSE);
3253 }
3254 break;
3257 menuCheck->setCheck(TRUE);
3258 } else {
3259 menuCheck->setCheck(FALSE);
3260 }
3261 break;
3264 menuCheck->setCheck(TRUE);
3265 } else {
3266 menuCheck->setCheck(FALSE);
3267 }
3268 break;
3271 menuCheck->setCheck(TRUE);
3272 } else {
3273 menuCheck->setCheck(FALSE);
3274 }
3275 break;
3278 menuCheck->setCheck(TRUE);
3279 } else {
3280 menuCheck->setCheck(FALSE);
3281 }
3282 break;
3285 menuCheck->setCheck(TRUE);
3286 } else {
3287 menuCheck->setCheck(FALSE);
3288 }
3289 break;
3290 // Demand
3293 menuCheck->setCheck(TRUE);
3294 } else {
3295 menuCheck->setCheck(FALSE);
3296 }
3297 break;
3300 menuCheck->setCheck(TRUE);
3301 } else {
3302 menuCheck->setCheck(FALSE);
3303 }
3304 break;
3307 menuCheck->setCheck(TRUE);
3308 } else {
3309 menuCheck->setCheck(FALSE);
3310 }
3311 break;
3314 menuCheck->setCheck(TRUE);
3315 } else {
3316 menuCheck->setCheck(FALSE);
3317 }
3318 break;
3321 menuCheck->setCheck(TRUE);
3322 } else {
3323 menuCheck->setCheck(FALSE);
3324 }
3325 break;
3328 menuCheck->setCheck(TRUE);
3329 } else {
3330 menuCheck->setCheck(FALSE);
3331 }
3332 break;
3335 menuCheck->setCheck(TRUE);
3336 } else {
3337 menuCheck->setCheck(FALSE);
3338 }
3339 // special case for lock persons
3341 menuCheck->enable();
3342 } else {
3343 menuCheck->disable();
3344 }
3345 break;
3348 menuCheck->setCheck(TRUE);
3349 } else {
3350 menuCheck->setCheck(FALSE);
3351 }
3352 break;
3355 menuCheck->setCheck(TRUE);
3356 } else {
3357 menuCheck->setCheck(FALSE);
3358 }
3359 // special case for lock containers
3361 menuCheck->enable();
3362 } else {
3363 menuCheck->disable();
3364 }
3365 break;
3368 menuCheck->setCheck(TRUE);
3369 } else {
3370 menuCheck->setCheck(FALSE);
3371 }
3372 break;
3375 menuCheck->setCheck(TRUE);
3376 } else {
3377 menuCheck->setCheck(FALSE);
3378 }
3379 break;
3380 // Data
3383 menuCheck->setCheck(TRUE);
3384 } else {
3385 menuCheck->setCheck(FALSE);
3386 }
3387 break;
3390 menuCheck->setCheck(TRUE);
3391 } else {
3392 menuCheck->setCheck(FALSE);
3393 }
3394 break;
3397 menuCheck->setCheck(TRUE);
3398 } else {
3399 menuCheck->setCheck(FALSE);
3400 }
3401 break;
3404 menuCheck->setCheck(TRUE);
3405 } else {
3406 menuCheck->setCheck(FALSE);
3407 }
3408 break;
3411 menuCheck->setCheck(TRUE);
3412 } else {
3413 menuCheck->setCheck(FALSE);
3414 }
3415 break;
3418 menuCheck->setCheck(TRUE);
3419 } else {
3420 menuCheck->setCheck(FALSE);
3421 }
3422 break;
3423
3426 menuCheck->setCheck(TRUE);
3427 } else {
3428 menuCheck->setCheck(FALSE);
3429 }
3430 break;
3433 menuCheck->setCheck(TRUE);
3434 } else {
3435 menuCheck->setCheck(FALSE);
3436 }
3437 break;
3438 default:
3439 break;
3440 }
3441 }
3442 return 0;
3443}
3444
3445
3446long
3447GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3448 auto& neteditOptions = OptionsCont::getOptions();
3449 // check if we're forcing to saving additionals
3451 neteditOptions.getBool("force-saving")) {
3452 WRITE_MESSAGE(TL("Force save network"));
3453 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3454 // nothing to save
3455 return 1;
3456 }
3457 // first check if we have to set the output filename
3460 }
3461 // function onCmdSaveNetworkAs must be executed if this is the first save
3463 return onCmdSaveNetworkAs(sender, sel, ptr);
3464 } else {
3465 // always recompute before saving
3466 myNet->computeNetwork(this);
3467 bool saved = false;
3468 try {
3469 // obtain invalid networkElements (currently only edges or crossings
3470 std::vector<GNENetworkElement*> invalidNetworkElements;
3471 // iterate over crossings and edges
3472 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3473 if (!edge.second->isNetworkElementValid()) {
3474 invalidNetworkElements.push_back(edge.second);
3475 }
3476 }
3477 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3478 if (!crossing.second->isNetworkElementValid()) {
3479 invalidNetworkElements.push_back(crossing.second);
3480 }
3481 }
3482 // if there are invalid network elements, open GNEFixNetworkElements
3483 if (invalidNetworkElements.size() > 0) {
3484 // create fix network elements dialog
3485 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3486 // continue depending of result
3487 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3488 // Save network
3489 myNet->saveNetwork();
3490 saved = true;
3491 } else {
3492 // stop
3493 return 0;
3494 }
3495 } else {
3496 // Save network
3497 myNet->saveNetwork();
3498 saved = true;
3499 }
3500 } catch (IOError& e) {
3501 // open error message box
3502 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3503 }
3504 if (saved) {
3505 // write info
3507 // After saving a net successfully, add it into Recent Nets list.
3510 } else {
3513 return 0;
3514 }
3515 return 1;
3516 }
3517}
3518
3519
3520long
3521GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3522 // get network file file
3523 const GNEFileDialog networkFileDialog(this, TL("network file"),
3528 // continue depending of dialog
3529 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3530 // update default network file
3532 // update netedit title with the network name
3533 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3534 // enable save network
3536 // save network
3537 return onCmdSaveNetwork(sender, sel, ptr);
3538 } else {
3539 return 0;
3540 }
3541}
3542
3543
3544long
3545GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3546 // first check if we have to set the output filename
3549 }
3550 // function onCmdSaveNetworkAs must be executed if this is the first save
3552 return onCmdSavePlainXMLAs(sender, sel, ptr);
3553 } else {
3554 // start saving plain XML
3555 getApp()->beginWaitCursor();
3556 try {
3557 // we use the prefix instead the netconvert config
3559 // save plain xml
3560 myNet->savePlain(plainXMLPrefix, myNetconvertOptions);
3561 // write info
3562 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3563 } catch (IOError& e) {
3564 // open message box
3565 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3566 }
3567 // end saving plain XML
3568 getApp()->endWaitCursor();
3569 // set focus again in viewNet
3570 myViewNet->setFocus();
3571 }
3572 return 1;
3573}
3574
3575
3576long
3577GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3578 // get neteditConfig filename
3579 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3584 // continue depending of dialog
3585 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3586 // update default netconvert file
3588 // save plain xml
3589 return onCmdSavePlainXML(sender, sel, ptr);
3590 }
3591 return 1;
3592}
3593
3594
3595long
3597 // get neteditConfig filename
3598 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3603 // continue depending of dialog
3604 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3605 getApp()->beginWaitCursor();
3606 try {
3607 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3608 // write info
3609 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3610 } catch (IOError& e) {
3611 // opening error message
3612 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3613 }
3614 getApp()->endWaitCursor();
3615 // set focus again in viewNet
3616 myViewNet->setFocus();
3617 }
3618 return 1;
3619}
3620
3621
3622long
3623GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3624 // first check if netedit config is already saved
3626 return 1;
3627 }
3628 // Check if configuration file was already set at start of netedit or with a previous save
3630 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3631 } else {
3632 // save all elements giving automatic names based on patter if their file isn't defined
3633 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3634 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3635 return 0;
3636 }
3637 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3638 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3639 return 0;
3640 }
3641 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3642 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3643 return 0;
3644 }
3645 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3646 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3647 return 0;
3648 }
3649 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3650 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3651 return 0;
3652 }
3653 // get netedit config file
3655 // configuration
3656 std::ofstream out(XMLSubSys::transcodeToLocal(neteditConfigFile));
3657 if (out.good()) {
3658 const auto& neteditOptions = OptionsCont::getOptions();
3659 // write netedit config
3660 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3661 // write info
3662 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3663 // config saved
3665 // After saving a config successfully, add it into recent configs
3666 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3667 // if we have a sumo config defined, save it also
3669 // get SumoConfig file
3671 std::ofstream sumoCfg(XMLSubSys::transcodeToLocal(sumoConfigFile));
3672 if (sumoCfg.good()) {
3673 // before saving sumo config, check if force enable option junction-taz
3675 mySumoOptions.set("junction-taz", "true");
3676 }
3677 // write SUMO config
3678 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3679 // write info
3680 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3681 // After saving a config successfully, add it into recent configs
3682 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3683 }
3684 }
3685 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3686 if (neteditOptions.getBool("autosave-netconvert-file")) {
3687 onCmdSavePlainXML(sender, sel, ptr);
3688 }
3689 } else {
3690 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3691 }
3692 out.close();
3693 return 1;
3694 }
3695}
3696
3697
3698long
3699GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3700 // get neteditConfig filename
3701 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3706 // continue depending of dialog
3707 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3708 // set file in file bucket handler
3710 // mark netedit config as unsaved
3712 // continue saving netedit config
3713 return onCmdSaveNeteditConfig(sender, sel, ptr);
3714 } else {
3715 return 0;
3716 }
3717}
3718
3719
3720long
3721GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3722 // check if enable or disable save netedit config button
3723 if (myNet == nullptr) {
3724 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3725 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3726 // a config requires at least ONE edge
3727 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3729 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3730 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3731 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3732 } else {
3733 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3734 }
3735 // check if enable/disable save individual files
3736 if (myNet) {
3740 } else {
3742 }
3743 }
3744 return 1;
3745}
3746
3747
3748long
3749GNEApplicationWindow::onUpdSaveNeteditConfigAs(FXObject* sender, FXSelector, void*) {
3750 // check if enable or disable save netedit config button
3751 if (myNet == nullptr) {
3752 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3753 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3754 // a config requires at least ONE edge
3755 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3756 } else {
3757 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3758 }
3759}
3760
3761
3762long
3763GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3764 // obtain netedit option container
3765 auto& neteditOptions = OptionsCont::getOptions();
3766 // reset containers
3767 neteditOptions.resetWritable();
3769 // Check if configuration file was already set at start of netedit or with a previous save
3771 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3772 } else {
3773 // save all elements giving automatic names based on patter in their file isn't defined
3774 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3775 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3776 return 0;
3777 }
3778 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3779 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3780 return 0;
3781 }
3782 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3783 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3784 return 0;
3785 }
3786 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3787 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3788 return 0;
3789 }
3790 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3791 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3792 return 0;
3793 }
3794 // get SumoConfig file
3796 // confinguration
3797 std::ofstream out(XMLSubSys::transcodeToLocal(sumoConfigFile));
3798 if (out.good()) {
3799 // before saving sumo config, check if force enable option junction-taz
3801 mySumoOptions.set("junction-taz", "true");
3802 }
3803 // write SUMO config
3804 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3805 // write info
3806 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3807 // After saving a config successfully, add it into recent configs
3808 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3809 // if we have a netedit cong defined, save it also
3811 // get netedit config file
3813 // configuration
3814 std::ofstream neteditCfg(XMLSubSys::transcodeToLocal(neteditConfigFile));
3815 if (neteditCfg.good()) {
3816 // write netedit config
3817 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3818 // write info
3819 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3820 // config saved
3822 // After saving a config successfully, add it into recent configs
3823 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3824 }
3825 }
3826 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3827 if (neteditOptions.getBool("autosave-netconvert-file")) {
3828 onCmdSavePlainXML(sender, sel, ptr);
3829 }
3831 } else {
3832 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3833 }
3834 out.close();
3835 return 1;
3836 }
3837}
3838
3839
3840long
3841GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3842 // get sumoConfig filename
3843 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3848 // continue depending of dialog
3849 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3850 // set sumo config
3852 // mark netedit config as unsaved
3854 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3856 return onCmdSaveNeteditConfig(sender, sel, ptr);
3857 } else {
3859 return onCmdSaveSumoConfig(sender, sel, ptr);
3860 }
3861 } else {
3862 return 0;
3863 }
3864}
3865
3866
3867long
3868GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3869 if (myNet == nullptr) {
3870 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3871 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3872 // a config requires at least ONE edge
3873 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3875 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3876 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3877 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3878 } else {
3879 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3880 }
3881}
3882
3883
3884long
3885GNEApplicationWindow::onUpdSaveSumoConfigAs(FXObject* sender, FXSelector, void*) {
3886 if (myNet == nullptr) {
3887 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3888 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3889 // a config requires at least ONE edge
3890 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3891 } else {
3892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3893 }
3894}
3895
3896long
3897GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3898 // Check if TLS Programs file was already set at start of netedit or with a previous save
3900 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3901 } else {
3902 // Start saving TLS Programs
3903 getApp()->beginWaitCursor();
3904 try {
3905 // compute before saving
3906 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3908 // write info
3910 } catch (IOError& e) {
3911 // open error message box
3912 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3913 }
3915 getApp()->endWaitCursor();
3916 // set focus again in viewNet
3917 myViewNet->setFocus();
3918 }
3919 return 1;
3920}
3921
3922
3923long
3924GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3925 if (myNet == nullptr) {
3926 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3927 } else {
3928 // check if there is at least one TLS
3929 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3930 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3931 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3932 }
3933 }
3934 // no TLS, then disable
3935 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3936 }
3937}
3938
3939
3940long
3941GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3942 // Check if edgeType file was already set at start of netedit or with a previous save
3944 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3945 } else {
3946 // Start saving edgeTypes
3947 getApp()->beginWaitCursor();
3948 try {
3950 // save edge types
3951 myNet->saveEdgeTypes(edgeTypeFile);
3952 // write info
3953 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
3954 } catch (IOError& e) {
3955 // open error message box
3956 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3957 }
3959 getApp()->endWaitCursor();
3960 }
3961 return 1;
3962}
3963
3964
3965long
3966GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3967 // check if net exist and there are edge types
3968 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3969 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3970 } else {
3971 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3972 }
3973 return 1;
3974}
3975
3976
3977long
3978GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
3979 // get TLS file
3980 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
3985 // continue depending of dialog
3986 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3987 // set tls type in bucket
3989 // enable save netedit config
3991 // set focus again in viewNet
3992 myViewNet->setFocus();
3993 // save TLS Programs
3994 return onCmdSaveTLSPrograms(sender, sel, ptr);
3995 } else {
3996 return 1;
3997 }
3998}
3999
4000
4001long
4002GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
4003 // get network file file
4004 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
4009 // continue depending of dialog
4010 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4011 // set tls type in bucket
4013 // enable save netedit config
4015 // set focus again in viewNet
4016 myViewNet->setFocus();
4017 // save edgeTypes
4018 return onCmdSaveEdgeTypes(sender, sel, ptr);
4019 } else {
4020 return 1;
4021 }
4022}
4023
4024
4025long
4027 // get file
4028 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
4033 // continue depending of dialog
4034 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4035 // flag for save current saving status
4036 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
4037 // get (or create) bucket for this new file
4038 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
4039 // disable validation for additionals
4040 XMLSubSys::setValidation("never", "auto", "auto");
4041 // Create additional handler
4042 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4043 // begin undoList operation
4044 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
4045 // Run parser
4046 if (!generalHandler.parse()) {
4047 // write error
4048 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
4049 } else {
4050 // write info
4051 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
4052 // enable save if there is errors loading additionals
4053 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4055 }
4056 }
4057 // end undoList operation
4058 myUndoList->end();
4059 // restore validation for additionals
4060 XMLSubSys::setValidation("auto", "auto", "auto");
4061 // check if clear undoList
4063 myUndoList->clear();
4064 }
4065 update();
4066 }
4067 return 1;
4068}
4069
4070
4071long
4073 // disable validation for additionals
4074 XMLSubSys::setValidation("never", "auto", "auto");
4075 // begin undoList operation
4076 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
4077 // clear additionals
4079 // reload additional elements stored in options
4080 loadAdditionalElements("Reloading");
4081 // end undoList operation
4082 myUndoList->end();
4083 // restore validation for additionals
4084 XMLSubSys::setValidation("auto", "auto", "auto");
4085 // check if clear undoList
4087 myUndoList->clear();
4088 }
4089 update();
4090 return 1;
4091}
4092
4093
4094long
4095GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
4096 if (myViewNet == nullptr) {
4097 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4099 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4100 } else {
4101 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4102 }
4103}
4104
4105
4106long
4107GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4108 const auto savingFileHandler = myFileBucketHandler;
4109 // get option container
4110 auto& neteditOptions = OptionsCont::getOptions();
4111 // check if we're forcing to saving additionals
4113 neteditOptions.getBool("force-saving") &&
4115 WRITE_MESSAGE(TL("Force save additional elements"));
4116 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4117 // nothing to save
4118 return 1;
4119 }
4120 // check if we have to define a default filename
4122 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4123 }
4124 // check if we have to open save as dialog
4125 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4126 // choose file to save
4127 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4128 } else {
4129 // always recompute before saving
4130 myNet->computeNetwork(this);
4131 try {
4132 // compute before saving (for detectors positions)
4133 myNet->computeNetwork(this);
4134 // save additionals
4135 const bool savingResult = myNet->saveAdditionals();
4136 // show info
4137 if (savingResult) {
4138 WRITE_MESSAGE(TL("Additionals saved."));
4139 return 1;
4140 } else {
4141 WRITE_MESSAGE(TL("Saving additional aborted."));
4142 return 0;
4143 }
4144 } catch (IOError& e) {
4145 // open error message box
4146 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4147 }
4148 return 0;
4149 }
4150}
4151
4152
4153long
4154GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4155 // get additional file
4156 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4161 // continue depending of dialog
4162 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4163 // update default name
4165 // save additional
4166 return onCmdSaveAdditionalElements(sender, sel, ptr);
4167 } else {
4168 return 0;
4169 }
4170}
4171
4172
4173long
4174GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4175 // get additional file
4176 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4181 // continue depending of dialog
4182 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4183 // use the file as default file
4185 // begin undoList operation
4186 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4187 // iterate over all demand elementes and change file
4188 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4189 for (const auto& additionalElement : additionalElementTag.second) {
4190 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4191 }
4192 }
4193 // end undoList operation
4194 myUndoList->end();
4195 // save additionals
4197 return onCmdSaveAdditionalElements(sender, sel, ptr);
4198 } else {
4199 return 0;
4200 }
4201}
4202
4203
4204long
4206 // get juPedSim file
4207 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4212 // continue depending of dialog
4213 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4214 try {
4215 // save additionals
4216 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4217 // set focus again in viewNet
4218 myViewNet->setFocus();
4219 // show info
4220 if (savingResult) {
4221 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4222 return 1;
4223 } else {
4224 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4225 return 0;
4226 }
4227 } catch (IOError& e) {
4228 // open error message box
4229 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4230 }
4231 }
4232 return 0;
4233}
4234
4235
4236long
4238 // get file
4239 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4244 // continue depending of dialog
4245 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4246 // save previous demand element status saving
4247 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4248 // disable validation for additionals
4249 XMLSubSys::setValidation("never", "auto", "auto");
4250 // get (or create) bucket for this new file
4251 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4252 // Create generic handler
4254 // begin undoList operation
4255 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4256 // Run parser for additionals
4257 if (!handler.parse()) {
4258 // write error
4259 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4260 } else {
4261 // show info
4262 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4263 // enable demand elements if there is an error creating element
4264 if (previouslySaved && !handler.isErrorCreatingElement()) {
4266 }
4267 }
4268 // end undoList operation
4269 myUndoList->end();
4270 // restore validation
4271 XMLSubSys::setValidation("auto", "auto", "auto");
4272 // check if clear undoList
4274 myUndoList->clear();
4275 }
4276 update();
4277 }
4278 return 1;
4279}
4280
4281
4282long
4284 // disable validation for additionals
4285 XMLSubSys::setValidation("never", "auto", "auto");
4286 // begin undoList operation
4287 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4288 // clear demand elements
4290 // reload demand elements stored in options
4291 loadDemandElements("Reloading");
4292 // end undoList operation and update view
4293 myUndoList->end();
4294 // restore validation for demand
4295 XMLSubSys::setValidation("auto", "auto", "auto");
4296 // check if clear undoList
4298 myUndoList->clear();
4299 }
4300 update();
4301 return 1;
4302}
4303
4304
4305long
4306GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4307 if (myViewNet == nullptr) {
4308 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4310 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4311 } else {
4312 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4313 }
4314}
4315
4316
4317long
4318GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4319 const auto savingFileHandler = myFileBucketHandler;
4320 // get option container
4321 auto& neteditOptions = OptionsCont::getOptions();
4322 // check if we're forcing to saving demand elements
4324 neteditOptions.getBool("force-saving") &&
4326 WRITE_MESSAGE(TL("Force save demand elements"));
4327 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4328 // nothing to save
4329 return 1;
4330 }
4331 // check if we have to define a default filename
4333 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4334 }
4335 // check if we have to open save as dialog
4336 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4337 // choose file to save
4338 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4339 } else {
4340 // always recompute before saving
4341 myNet->computeNetwork(this);
4342 try {
4343 // save demand elements
4344 const bool savingResult = myNet->saveDemandElements();
4345 // show info
4346 if (savingResult) {
4347 WRITE_MESSAGE(TL("Demand elements saved."));
4348 return 1;
4349 } else {
4350 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4351 return 0;
4352 }
4353 } catch (IOError& e) {
4354 // open error message box
4355 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4356 }
4357 }
4358 return 0;
4359}
4360
4361
4362long
4363GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4364 // get route file
4365 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4370 // continue depending of dialog
4371 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4372 // update default name
4374 // save demand elements
4375 return onCmdSaveDemandElements(sender, sel, ptr);
4376 } else {
4377 return 0;
4378 }
4379}
4380
4381
4382long
4383GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4384 // get route file
4385 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4390 // continue depending of dialog
4391 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4392 // use the file as default file
4394 // begin undoList operation
4395 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4396 // iterate over all demand elementes and change file
4397 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4398 for (const auto& demandElement : demandElementTag.second) {
4399 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4400 }
4401 }
4402 // end undoList operation
4403 myUndoList->end();
4404 // save demand elements
4406 return onCmdSaveDemandElements(sender, sel, ptr);
4407 } else {
4408 return 0;
4409 }
4410}
4411
4412
4413long
4414GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4415 // get file
4416 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4421 // continue depending of dialog
4422 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4423 // save previous demand element status saving
4424 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4425 // get (or create) bucket for this new file
4426 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4427 // disable update data
4429 // disable validation for data elements
4430 XMLSubSys::setValidation("never", "auto", "auto");
4431 // Create data handler
4432 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4433 // begin undoList operation
4434 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4435 // Run data parser
4436 if (!dataHandler.parse()) {
4437 // write error
4438 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4439 } else {
4440 // show info
4441 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4442 // enable demand elements if there is an error creating element
4443 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4445 }
4446 }
4447 // end undoList operation
4448 myUndoList->end();
4449 // enable update data
4451 // restore validation for data
4452 XMLSubSys::setValidation("auto", "auto", "auto");
4453 // check if clear undoList
4455 myUndoList->clear();
4456 }
4457 update();
4458 }
4459 return 1;
4460}
4461
4462
4463long
4465 // disable update data
4467 // disable validation for additionals
4468 XMLSubSys::setValidation("never", "auto", "auto");
4469 // begin undoList operation
4470 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4471 // clear data elements
4473 // reload data elements stored in options
4474 loadDataElements("Reloading");
4475 // restore validation for data
4476 XMLSubSys::setValidation("auto", "auto", "auto");
4477 // end undoList operation and update view
4478 myUndoList->end();
4479 // enable update data
4481 // check if clear undoList
4483 myUndoList->clear();
4484 }
4485 update();
4486 return 1;
4487}
4488
4489
4490long
4491GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4492 if (myViewNet == nullptr) {
4493 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4495 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4496 } else {
4497 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4498 }
4499}
4500
4501
4502long
4503GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4504 const auto savingFileHandler = myFileBucketHandler;
4505 // get option container
4506 auto& neteditOptions = OptionsCont::getOptions();
4507 // check if we're forcing to saving data elements
4509 neteditOptions.getBool("force-saving") &&
4511 WRITE_MESSAGE(TL("Force save data elements"));
4512 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4513 // nothing to save
4514 return 1;
4515 }
4516 // check if we have to define a default filename
4518 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4519 }
4520 // check if we have to open save as dialog
4521 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4522 return onCmdSaveDataElementsAs(sender, sel, ptr);
4523 } else {
4524 try {
4525 // save data elements
4526 const bool savingResult = myNet->saveDataElements();
4527 // show info
4528 if (savingResult) {
4529 WRITE_MESSAGE(TL("Data elements saved."));
4530 return 1;
4531 } else {
4532 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4533 return 0;
4534 }
4535 } catch (IOError& e) {
4536 // open error message box
4537 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4538 }
4539 }
4540 return 0;
4541}
4542
4543
4544long
4545GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4546 // get data file
4547 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4552 // continue depending of dialog
4553 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4554 // update default name
4556 // save data elements
4557 return onCmdSaveDataElements(sender, sel, ptr);
4558 } else {
4559 return 0;
4560 }
4561}
4562
4563
4564long
4565GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4566 // get data file
4567 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4572 // continue depending of dialog
4573 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4574 // use the file as default file
4576 // begin undoList operation
4577 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4578 // iterate over all demand elementes and change file
4579 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4580 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4581 }
4582 // end undoList operation
4583 myUndoList->end();
4584 // save data elements
4586 return onCmdSaveDataElements(sender, sel, ptr);
4587 } else {
4588 return 0;
4589 }
4590}
4591
4592
4593long
4595 // get file
4596 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4601 // continue depending of dialog
4602 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4603 // save previous demand element status saving
4604 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4605 // get (or create) bucket for this new file
4606 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4607 // disable validation for meanDatas
4608 XMLSubSys::setValidation("never", "auto", "auto");
4609 // Create meanData handler
4610 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4611 // begin undoList operation
4612 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4613 // Run parser
4614 if (!generalHandler.parse()) {
4615 // write error
4616 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4617 } else {
4618 // show info
4619 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4620 // enable demand elements if there is an error creating element
4621 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4623 }
4624 }
4625 // end undoList operation
4626 myUndoList->end();
4627 // restore validation for meanDatas
4628 XMLSubSys::setValidation("auto", "auto", "auto");
4629 // check if clear undoList
4631 myUndoList->clear();
4632 }
4633 update();
4634 }
4635 return 1;
4636}
4637
4638
4639long
4641 // disable validation for meanDatas
4642 XMLSubSys::setValidation("never", "auto", "auto");
4643 // begin undoList operation
4645 // clear meanDatas
4647 // reload meanData elements stored in options
4648 loadMeanDataElements("Reloading");
4649 // end undoList operation and update view
4650 myUndoList->end();
4651 // restore validation for meanDatas
4652 XMLSubSys::setValidation("auto", "auto", "auto");
4653 // check if clear undoList
4655 myUndoList->clear();
4656 }
4657 update();
4658 return 1;
4659}
4660
4661
4662long
4663GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4664 if (myViewNet == nullptr) {
4665 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4667 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4668 } else {
4669 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4670 }
4671}
4672
4673
4674long
4675GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4676 const auto savingFileHandler = myFileBucketHandler;
4677 // get option container
4678 auto& neteditOptions = OptionsCont::getOptions();
4679 // check if we're forcing to saving meandata elements
4681 neteditOptions.getBool("force-saving") &&
4683 WRITE_MESSAGE(TL("Force save meandata elements"));
4684 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4685 // nothing to save
4686 return 1;
4687 }
4688 // check if we have to define a default filename
4690 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4691 }
4692 // check if we have to open save as dialog
4693 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4694 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4695 } else {
4696 try {
4697 // compute before saving
4698 myNet->computeNetwork(this);
4699 // save demand elements
4700 const bool savingResult = myNet->saveMeanDatas();
4701 // show info
4702 if (savingResult) {
4703 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4704 return 1;
4705 } else {
4706 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4707 return 0;
4708 }
4709 } catch (IOError& e) {
4710 // open error message box
4711 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4712 }
4713 }
4714 return 0;
4715}
4716
4717
4718long
4719GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4720 // get meanData file
4721 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4726 // continue depending of dialog
4727 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4728 // update default name
4730 // save meanDatas
4731 return onCmdSaveMeanDataElements(sender, sel, ptr);
4732 } else {
4733 return 0;
4734 }
4735}
4736
4737
4738long
4739GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4740 // get meanData file
4741 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4746 // continue depending of dialog
4747 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4748 // use the file as default file
4750 // begin undoList operation
4751 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4752 // iterate over all demand elementes and change file
4753 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4754 for (const auto& meanData : meanDataTag.second) {
4755 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4756 }
4757 }
4758 // end undoList operation
4759 myUndoList->end();
4760 // save meanDatas
4762 return onCmdSaveMeanDataElements(sender, sel, ptr);
4763 } else {
4764 return 0;
4765 }
4766}
4767
4768
4769bool
4770GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4771 if (myNet) {
4773 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4774 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4775 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4776 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4777 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4778 // first check if abort saving
4779 if (commonResult == GNEDialog::Result::ABORT) {
4780 return false;
4781 }
4782 // save every type of file
4783 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4784 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4785 return false;
4786 }
4787 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4788 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4789 return false;
4790 }
4791 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4792 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4793 return false;
4794 }
4795 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4796 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4797 return false;
4798 }
4799 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4800 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4801 return false;
4802 }
4803 // restore focus in viewNet
4804 myViewNet->setFocus();
4805 // clear undo list
4806 clearUndoList();
4807 // all saved, then continue
4808 return true;
4809 } else {
4810 // nothing to do, then continue
4811 return true;
4812 }
4813}
4814
4815
4816void
4818 // check that view exists
4819 if (myViewNet) {
4821 }
4822 // update require recomputing
4824}
4825
4826
4827void
4829 // remove lock hotkeys
4831 // check supermode
4832 if (supermode == Supermode::NETWORK) {
4833 // menu commands
4837 // lock
4841 // processing
4846 } else if (supermode == Supermode::DEMAND) {
4847 // menu commands
4851 // lock
4855 // processing
4860 } else if (supermode == Supermode::DATA) {
4861 // menu commands
4865 // lock
4869 // processing
4874 } else {
4875 // menu commands
4880 // lock
4884 // processing
4888 }
4889 // continue depending of view
4890 if (myViewNet) {
4894 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4897 }
4898 }
4899}
4900
4901
4902bool
4906
4907
4908void
4912
4913
4914void
4916 myUndoRedoListEnabled = reason;
4917}
4918
4919
4920const std::string&
4924
4925
4926void
4928 if (myViewNet) {
4929 // destroy Popup (to avoid crashes)
4931 }
4932 // clear undo list and return true to continue with closing/reload
4933 myUndoList->clear();
4934}
4935
4936
4941
4942
4947
4948
4953
4954
4959
4960
4965
4966
4971
4972
4977
4978
4979void
4981 // get netedit option container
4982 auto& neteditOptions = OptionsCont::getOptions();
4983 // check if ignore loading of additional files
4984 if ((operation == "Loading") && neteditOptions.getBool("ignore.additionalelements")) {
4985 return;
4986 }
4987 // get additional files (don't use reference because it's modified during loading)
4988 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
4989 // check if we have additionals to load
4990 if (myNet && (additionalFiles.size() > 0)) {
4991 // disable validation for additionals
4992 XMLSubSys::setValidation("never", "auto", "auto");
4993 // begin undolist
4994 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
4995 // use this flag for mark all elements as saved after loading, if it was sucessfully
4996 bool setSaved = additionalFiles.size() == 1;
4997 // iterate over every additional file
4998 for (const auto& file : additionalFiles) {
4999 // check if ignore missing inputs
5000 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5001 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
5002 // get (or create) bucket for this new file
5004 // declare general handler
5005 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5006 // check if force overwritte
5007 if (operation == "reloading") {
5008 generalHandler.forceOverwriteElements();
5009 }
5010 // Run parser
5011 if (!generalHandler.parse()) {
5012 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5013 }
5014 setSaved &= !generalHandler.isErrorCreatingElement();
5015 }
5016 }
5017 // end undo list
5018 myUndoList->end();
5019 // disable validation for additionals
5020 XMLSubSys::setValidation("auto", "auto", "auto");
5021 if (setSaved) {
5023 }
5024 // check if clear undoList
5026 myUndoList->clear();
5027 }
5028 }
5029}
5030
5031
5032void
5033GNEApplicationWindow::loadDemandElements(const std::string operation) {
5034 // get netedit option container
5035 auto& neteditOptions = OptionsCont::getOptions();
5036 // check if ignore loading of demand files
5037 if ((operation == "Loading") && neteditOptions.getBool("ignore.routeelements")) {
5038 return;
5039 }
5040 // get demand files (don't use reference because it's modified during loading)
5041 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
5042 // check if we have demand files to load
5043 if (myNet && (demandFiles.size() > 0)) {
5044 // disable validation for additionals
5045 XMLSubSys::setValidation("never", "auto", "auto");
5046 // begin undolist
5047 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
5048 // use this flag for mark all elements as saved after loading, if it was sucessfully
5049 bool setSaved = demandFiles.size() == 1;
5050 // iterate over every demand file
5051 for (const auto& file : demandFiles) {
5052 // check if ignore missing inputs
5053 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5054 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
5055 // get (or create) bucket for this new file
5056 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
5057 // declare general handler
5058 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5059 // check if force overwritte
5060 if (operation == "reloading") {
5061 generalHandler.forceOverwriteElements();
5062 }
5063 // Run parser
5064 if (!generalHandler.parse()) {
5065 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5066 }
5067 setSaved &= !generalHandler.isErrorCreatingElement();
5068 }
5069 }
5070 // end undo list
5071 myUndoList->end();
5072 // disable validation for additionals
5073 XMLSubSys::setValidation("auto", "auto", "auto");
5074 if (setSaved) {
5076 }
5077 // check if clear undoList
5079 myUndoList->clear();
5080 }
5081 }
5082}
5083
5084
5085void
5086GNEApplicationWindow::loadDataElements(const std::string operation) {
5087 // get option container
5088 auto& neteditOptions = OptionsCont::getOptions();
5089 // get data files (don't use reference because it's modified during loading)
5090 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
5091 if (myNet && (dataFiles.size() > 0)) {
5092 // disable validation for additionals
5093 XMLSubSys::setValidation("never", "auto", "auto");
5094 // begin undolist
5095 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
5096 // use this flag for mark all elements as saved after loading, if it was sucessfully
5097 bool setSaved = dataFiles.size() == 1;
5098 // iterate over every data file
5099 for (const auto& file : dataFiles) {
5100 // check if ignore missing inputs
5101 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5102 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
5103 // get (or create) bucket for this new file
5104 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
5105 // declare general handler
5106 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5107 // check if force overwritte
5108 if (operation == "reloading") {
5109 generalHandler.forceOverwriteElements();
5110 }
5111 // Run parser
5112 if (!generalHandler.parse()) {
5113 WRITE_ERROR(TLF("% of % failed.", operation, file));
5114 }
5115 setSaved &= !generalHandler.isErrorCreatingElement();
5116 }
5117 }
5118 // end undo list
5119 myUndoList->end();
5120 // disable validation for additionals
5121 XMLSubSys::setValidation("auto", "auto", "auto");
5122 if (setSaved) {
5124 }
5125 // check if clear undoList
5127 myUndoList->clear();
5128 }
5129 }
5130}
5131
5132
5133void
5135 // get option container
5136 auto& neteditOptions = OptionsCont::getOptions();
5137 // get meanData files (don't use reference because it's modified during loading)
5138 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5139 if (myNet && (meanDataFiles.size() > 0)) {
5140 // disable validation for additionals
5141 XMLSubSys::setValidation("never", "auto", "auto");
5142 // begin undolist
5143 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5144 // use this flag for mark all elements as saved after loading, if it was sucessfully
5145 bool setSaved = meanDataFiles.size() == 1;
5146 // iterate over every meanData file
5147 for (const auto& file : meanDataFiles) {
5148 // check if ignore missing inputs
5149 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5150 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5151 // get (or create) bucket for this new file
5152 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5153 // declare general handler
5154 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5155 // check if force overwritte
5156 if (operation == "reloading") {
5157 generalHandler.forceOverwriteElements();
5158 }
5159 // Run parser
5160 if (!generalHandler.parse()) {
5161 WRITE_ERROR(TLF("% of % failed.", operation, file));
5162 }
5163 setSaved &= !generalHandler.isErrorCreatingElement();
5164 }
5165 }
5166 // end undo list
5167 myUndoList->end();
5168 // disable validation for additionals
5169 XMLSubSys::setValidation("auto", "auto", "auto");
5170 if (setSaved) {
5172 }
5173 // check if clear undoList
5175 myUndoList->clear();
5176 }
5177 }
5178}
5179
5180
5181void
5182GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5183 // get TLS file
5185 if (tlsFile.size() > 0) {
5186 // show info
5187 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5188 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5189 myNet->computeNetwork(this);
5190 // parse TLS programs
5191 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5192 // Abort undo/redo
5194 } else {
5195 // commit undo/redo operation
5196 myUndoList->end();
5197 update();
5198 }
5199 // require save network
5201 // if defined, require save netedit config
5204 }
5205 }
5206}
5207
5208
5209void
5210GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5211 // get edgeType file
5213 if (edgeTypeFile.size() > 0) {
5214 // declare type container
5215 NBTypeCont typeContainerAux;
5216 // declare type handler
5217 NIXMLTypesHandler handler(typeContainerAux);
5218 // load edge types
5219 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5220 // now create GNETypes based on typeContainerAux
5221 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5222 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5223 // iterate over typeContainerAux
5224 for (const auto& auxEdgeType : typeContainerAux) {
5225 // create new edge type
5226 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5227 // add lane types
5228 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5229 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5230 }
5231 // add it using undoList
5232 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5233
5234 }
5235 // end undo list
5237 // refresh edge type selector
5239 // require save network
5241 // if defined, require save netedit config
5244 }
5245 }
5246}
5247
5248
5253
5254
5255bool
5257 if (myInternalTest == nullptr) {
5258 return true;
5259 } else if (obj == myInternalTest) {
5260 return true;
5261 } else {
5262 return false;
5263 }
5264}
5265
5266// ---------------------------------------------------------------------------
5267// GNEApplicationWindow - protected methods
5268// ---------------------------------------------------------------------------
5269#ifdef _MSC_VER
5270#pragma warning(push)
5271#pragma warning(disable: 4355) // mask warning about "this" in initializers
5272#endif
5274 myToolbarsGrip(this),
5275 myMenuBarFile(this),
5276 myFileMenuCommands(this),
5277 myModesMenuCommands(this),
5278 myEditMenuCommands(this),
5279 myLockMenuCommands(this),
5280 myProcessingMenuCommands(this),
5281 myLocateMenuCommands(this),
5282 myToolsMenuCommands(this),
5283 myWindowsMenuCommands(this),
5284 myHelpMenuCommands(this),
5285 mySupermodeCommands(this) {
5286}
5287#ifdef _MSC_VER
5288#pragma warning(pop)
5289#endif
5290
5291
5292long
5293GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5294 FXEvent* e = (FXEvent*) eventData;
5295 if (e && e->code == KEY_Escape) {
5296 if (myGeoCoordinate && myGeoCoordinate->hasFocus()) {
5297 myGeoCoordinate->killFocus();
5298 if (getActiveView()) {
5300 }
5301 return 1;
5302 }
5303 if (myCartesianCoordinate && myCartesianCoordinate->hasFocus()) {
5304 myCartesianCoordinate->killFocus();
5305 if (getActiveView()) {
5307 }
5308 return 1;
5309 }
5310 }
5311 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5312 if (handled == 0 && myMDIClient->numChildren() > 0) {
5313 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5314 if (w != nullptr) {
5315 w->onKeyPress(nullptr, sel, eventData);
5316 }
5317 }
5318 return 0;
5319}
5320
5321
5322long
5323GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5324 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5325 if (handled == 0 && myMDIClient->numChildren() > 0) {
5326 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5327 if (w != nullptr) {
5328 w->onKeyRelease(nullptr, sel, eventData);
5329 }
5330 }
5331 return 0;
5332}
5333
5334
5335/****************************************************************************/
FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[]
@ DATA_SELECT
mode for selecting data elements
@ DATA_INSPECT
mode for inspecting data elements
@ DATA_DELETE
mode for deleting data elements
Supermode
@brie enum for supermodes
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
@ NETWORK_DELETE
mode for deleting network elements
@ NETWORK_MOVE
mode for moving network elements
@ NETWORK_SELECT
mode for selecting network elements
@ NETWORK_INSPECT
mode for inspecting network elements
@ NETWORK_CONNECT
mode for connecting lanes
@ DEMAND_INSPECT
mode for inspecting demand elements
@ DEMAND_DELETE
mode for deleting demand elements
@ DEMAND_SELECT
mode for selecting demand elements
@ DEMAND_MOVE
mode for moving demand elements
long long int SUMOTime
Definition GUI.h:36
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition GUIAppEnum.h:869
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:783
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition GUIAppEnum.h:274
@ MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_AS
save demand elements as
Definition GUIAppEnum.h:751
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition GUIAppEnum.h:272
@ MID_GNE_LOCK_POLYGON
lock polygons
Definition GUIAppEnum.h:899
@ MID_HOTKEY_CTRL_Q_CLOSE
Main window closes.
Definition GUIAppEnum.h:115
@ MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE
compute junctions with volatile options
Definition GUIAppEnum.h:270
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition GUIAppEnum.h:204
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition GUIAppEnum.h:236
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:957
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:935
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:785
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:923
@ MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO
Open current SUMO simulation/network in netedit, or current netedit simulation/network in SUMO.
Definition GUIAppEnum.h:123
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition GUIAppEnum.h:981
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:817
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:737
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:915
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:695
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:843
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:925
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:795
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:777
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:865
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:895
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:749
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:851
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:849
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:987
@ MID_HOTKEY_CTRL_W_CLOSESIMULATION
Close simulation - ID.
Definition GUIAppEnum.h:129
@ MID_HOTKEY_ALT_2_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:147
@ MID_GNE_LOCK_ALLELEMENTS
lock all element
Definition GUIAppEnum.h:933
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition GUIAppEnum.h:244
@ MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS
Perform a single simulation step in SUMO and open Demand Elements in netedit.
Definition GUIAppEnum.h:89
@ MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND
compute Network in network mode and Demand elements in demand mode
Definition GUIAppEnum.h:240
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:973
@ MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK
Open simulation in SUMO and open network in netedit.
Definition GUIAppEnum.h:111
@ MID_GNE_LOCK_MENUTITLE
selector for LockMenuTitle
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition GUIAppEnum.h:855
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:959
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:903
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition GUIAppEnum.h:75
@ MID_HOTKEY_F9_EDIT_VIEWSCHEME
open edit scheme menu
Definition GUIAppEnum.h:248
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:947
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:937
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:731
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:745
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition GUIAppEnum.h:288
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition GUIAppEnum.h:43
@ MID_GNE_TOOLBARFILE_OPENMEANDATAELEMENTS
open meanData file
Definition GUIAppEnum.h:763
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:669
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:721
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:823
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:725
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in netedit.
Definition GUIAppEnum.h:85
@ MID_TOOLBAREDIT_LOADDEMAND
load demand in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:697
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:945
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:149
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition GUIAppEnum.h:232
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition GUIAppEnum.h:208
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition GUIAppEnum.h:781
@ MID_HOTKEY_CTRL_R_RELOAD
Reload the previously loaded simulation.
Definition GUIAppEnum.h:119
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in netedit.
Definition GUIAppEnum.h:117
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition GUIAppEnum.h:49
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition GUIAppEnum.h:867
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition GUIAppEnum.h:286
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition GUIAppEnum.h:250
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition GUIAppEnum.h:252
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition GUIAppEnum.h:246
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:979
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:769
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:767
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:891
@ MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALELEMENTS
Start the simulation in SUMO and open Additionals Elements in netedit.
Definition GUIAppEnum.h:83
@ MID_HOTKEY_C_MODE_CONNECT_CONTAINER
hotkey for mode connecting lanes AND container
Definition GUIAppEnum.h:45
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition GUIAppEnum.h:53
@ MID_HOTKEY_SHIFT_O_LOCATEPOI
Locate poi - button.
Definition GUIAppEnum.h:182
@ MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION
hotkey for mode editing overhead wires AND route distributions
Definition GUIAppEnum.h:73
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition GUIAppEnum.h:67
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition GUIAppEnum.h:953
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:819
@ MID_LANGUAGE_ZHT
change language to chinese (traditional)
@ MID_LANGUAGE_ES
change language to spanish
@ MID_GNE_LOCK_JPS_OBSTACLE
lock obstacles
Definition GUIAppEnum.h:905
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition GUIAppEnum.h:172
@ MID_HOTKEY_ALT_4_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:151
@ MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS
save TLS Programs as
Definition GUIAppEnum.h:743
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:975
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWFILLEDWALKINGAREAS
draw filled walking areas
Definition GUIAppEnum.h:873
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:779
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:863
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:755
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:857
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition GUIAppEnum.h:99
@ MID_RECENTFILE
Loads a file previously loaded.
Definition GUIAppEnum.h:320
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition GUIAppEnum.h:63
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition GUIAppEnum.h:853
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:909
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:961
@ MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW
open a new window (SUMO AND netedit)
Definition GUIAppEnum.h:218
@ MID_HOTKEY_SHIFT_V_LOCATEVEHICLE
Locate vehicle - button.
Definition GUIAppEnum.h:192
@ MID_GNE_LOCK_ADDITIONALELEMENT
lock additional elements
Definition GUIAppEnum.h:893
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:238
@ MID_HOTKEY_SHIFT_L_LOCATEPOLY
Locate polygons - button.
Definition GUIAppEnum.h:180
@ MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES
clean junctions without edges in network mode and unused routes in demand mode
Definition GUIAppEnum.h:242
@ MID_GNE_LOCK_EDGE
lock edges
Definition GUIAppEnum.h:883
@ MID_HOTKEY_ALT_1_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:145
@ MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS
Load file with TLS Programs.
Definition GUIAppEnum.h:103
@ MID_LANGUAGE_IT
change language to italian
@ MID_GNE_LOCK_ELEMENT
lock element (general, used if we press directly the menuCommand in the toolbar)
Definition GUIAppEnum.h:879
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:727
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition GUIAppEnum.h:369
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition GUIAppEnum.h:65
@ MID_TUTORIAL
tutorial button
Definition GUIAppEnum.h:673
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:921
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:821
@ MID_HOTKEY_CTRL_G_GAMINGMODE_TOGGLEGRID
Toggle Gaming mode in SUMO and grid in netedit.
Definition GUIAppEnum.h:95
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition GUIAppEnum.h:983
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:155
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition GUIAppEnum.h:348
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:57
@ MID_GNE_LOCK_CONTAINER
lock containers
Definition GUIAppEnum.h:919
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_GEO_COORDINATE
enter geo coordinate to center view
Definition GUIAppEnum.h:379
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED
save data elements unified
Definition GUIAppEnum.h:759
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWPOLYGONSYMBOLS
show polygon symbols
Definition GUIAppEnum.h:871
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:845
@ MID_HOTKEY_SHIFT_J_LOCATEJUNCTION
Locate junction - button.
Definition GUIAppEnum.h:178
@ MID_HOTKEY_ALT_0_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:143
@ MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG
save netedit Config
Definition GUIAppEnum.h:210
@ MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS
save edgeTypes as
Definition GUIAppEnum.h:747
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:671
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:951
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:887
@ MID_LANGUAGE_DE
change language to german
@ MID_HOTKEY_ALT_F4_CLOSE
Main window closes.
Definition GUIAppEnum.h:163
@ MID_GNE_TOOLBARFILE_RELOADNETWORK
reload only network
Definition GUIAppEnum.h:719
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:861
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS
save Mean Datas
Definition GUIAppEnum.h:216
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition GUIAppEnum.h:266
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:859
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:977
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:797
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition GUIAppEnum.h:985
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_AS
save additionals element as
Definition GUIAppEnum.h:735
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:907
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:917
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:729
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:885
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:841
@ MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE
open Netconvert file
Definition GUIAppEnum.h:220
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition GUIAppEnum.h:107
@ MID_GNE_TOOLBARFILE_SAVENETWORK_AS
save network as
Definition GUIAppEnum.h:733
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:949
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:965
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_AS
save data elements as
Definition GUIAppEnum.h:757
@ MID_CARTESIAN_COORDINATE
enter cartesian coordinate to center view
Definition GUIAppEnum.h:381
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
@ MID_LANGUAGE_JA
change language to japanese
@ MID_GNE_TOOLBARFILE_SAVEDEMANDELEMENTS_UNIFIED
save demand elements unified
Definition GUIAppEnum.h:753
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:675
@ MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES
open app setting dialog in SUMO and open edge type files in netedit
Definition GUIAppEnum.h:97
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition GUIAppEnum.h:292
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:222
@ MID_GNE_LOCK_PERSON
lock persons
Definition GUIAppEnum.h:911
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:889
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:157
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition GUIAppEnum.h:256
@ MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG
Edit selection in SUMO and load neteditConfig in netedit.
Definition GUIAppEnum.h:91
@ MID_HOTKEY_ENTER
hot key <ENTER> accept current operation
Definition GUIAppEnum.h:290
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition GUIAppEnum.h:761
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition GUIAppEnum.h:214
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition GUIAppEnum.h:264
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition GUIAppEnum.h:190
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition GUIAppEnum.h:234
@ MID_GNE_LOCK_TAZRELDATA
lock TAZRelDatas
Definition GUIAppEnum.h:931
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:963
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition GUIAppEnum.h:276
@ MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK
open network in SUMO and create new empty network in netedit
Definition GUIAppEnum.h:109
@ MID_GNE_LOCK_PERSONTRIP
lock personTrips
Definition GUIAppEnum.h:913
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:741
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:268
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:847
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:723
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:955
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:839
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_AS
save meanDatas as
Definition GUIAppEnum.h:765
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:739
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:881
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:901
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition GUIAppEnum.h:61
@ MID_HOTKEY_CTRL_L_SAVEASPLAINXML
save network as plain XML
Definition GUIAppEnum.h:105
@ MID_GNE_LOCK_EDGERELDATA
lock edgeRelDatas
Definition GUIAppEnum.h:929
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:927
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:815
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:897
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:300
@ MID_LANGUAGE_KO
change language to korean
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition GUIDesigns.h:124
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition GUIDesigns.h:359
#define GUIDesignLabelStatusBar
label used in statusBar
Definition GUIDesigns.h:284
#define GUIDesignSplitter
Definition GUIDesigns.h:505
#define GUIDesignSplitterMDI
MDI Splitter.
Definition GUIDesigns.h:508
#define GUIDesignStatusBar
design used in status bar
Definition GUIDesigns.h:477
@ MESSAGE_OCCURRED
send when a message occurred
@ GLDEBUG_OCCURRED
send when a gldebug occurred
@ ERROR_OCCURRED
send when a error occurred
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occurred
@ WARNING_OCCURRED
send when a warning occurred
GUISelectedStorage gSelected
A global holder of selected objects.
FXString gCurrentFolder
The folder used as last.
@ MODEMEANDATA
@ MODEADDITIONAL
@ SUPERMODEDEMAND
@ NETEDIT_MINI
@ VCLASS_SMALL_TAXI
@ MODECREATEEDGE
@ TOOL_TURNDEFS
@ SUPERMODENETWORK
@ SUPERMODEDATA
@ TOOL_CITYBRAIN
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:288
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:294
std::vector< std::string > StringVector
Definition of a vector of strings.
Definition Option.h:42
@ SUMO_TAG_TYPES
types (edge)
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ GNE_ATTR_SAVEFILE
save file
int GUIDesignHeight
the default height for GUI elements
Definition StdDefs.cpp:41
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:49
bool isErrorCreatingElement() const
get flag for mark if a element wasn't created
void forceOverwriteElements()
force overwritte elements (used if we're reloading elements)
bool parse()
parse
void setSelector(FXSelector sel)
set the selector
void setTarget(FXObject *tgt)
set the target
static bool isReadable(std::string path)
Checks whether the given file is readable.
static void resetFont()
to be called when the font context is invalidated
Definition GLHelper.cpp:666
std::string getConfigDirectory() const
get current config directory (if we defined a netedit, sumo or netconvert config)
void resetDefaultFilenames()
brief set default files for all buckets
std::string getDefaultFilename(const FileBucket::Type type) const
functions related with filenames
bool isFilenameDefined(const FileBucket::Type type) const
check if at least we have an additional file defined
std::string getConfigFilePrefix(const std::string &sufix) const
get current config patter (if we defined a netedit, sumo or netconvert config)
std::string getDefaultFolder(const FileBucket::Type type) const
get default folder associated with the given tipe
FileBucket * getBucket(const FileBucket::Type type, const std::string &filename, const bool create)
get bucket
void setDefaultFilenameFile(const FileBucket::Type type, const std::string &filename)
brief set default additional file
long onCmdOpenNetgenerateDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate" button
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands
Supermode Commands.
long onCmdToggleUndoRedoLoading(FXObject *, FXSelector, void *)
called when toggle checkbox disable undo redo during loading (file)
long onCmdSaveTLSProgramsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms as is executed
FXMenuTitle * myModesMenuTitle
menu title for modes
const std::string & isUndoRedoEnabledTemporally() const
check if undo-redo is enabled temporally
void create()
Creates the main window (required by FOX)
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + J to toggle draw junction shape
GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands
Windows Menu Commands.
GNELoadThread * myLoadThread
the thread that loads the network
void enableUndoRedoTemporally()
enable undo-redo temporally (for example, after creating an edge)
void clearUndoList()
clear undo list
GNENet * myNet
we are responsible for the net
long onCmdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is executed
long onCmdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onCmdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is executed
void handleEvent_Message(GUIEvent *e)
handle event of type message
long onCmdSaveAdditionalElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals as
long onCmdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is executed
long onCmdLoadAdditionalsInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load additionals"
long onCmdOpenTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall open TLS programs is executed
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
long onCmdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
void updateControls()
update control contents after undo/redo or recompute
long onUpdSaveMeanDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas unified is executed
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands
Lock Menu Commands.
const GNETagPropertiesDatabase * myTagPropertiesDatabase
tagProperties database
long onCmdSavePlainXML(FXObject *, FXSelector, void *)
called when the command/FXCall save plain xml is executed
long onCmdFeedback(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->feedback
long onCmdNewNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall new network is executed
long onCmdRunTests(FXObject *, FXSelector, void *)
run tests
long onCmdSavePlainXMLAs(FXObject *, FXSelector, void *)
called when the command/FXCall save as plain xml is executed
long onCmdOpenOptionsDialog(FXObject *, FXSelector, void *)
called when user press "options" button
GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands
Help Menu Commands.
GNEApplicationWindow()
FOX needs this for static members.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
called when the command/FXCall clipboard request is executed
long onCmdToggleUndoRedo(FXObject *, FXSelector, void *)
called when toggle checkbox disable undo redo (processing)
long onCmdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is executed
long onUpdSaveNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall save network is executed
std::string myUndoRedoListEnabled
string to check if undo/redo list is enabled (a String is used to keep the disabling reason)
std::map< std::string, FXMenuPane * > myMenuPaneToolMaps
map with menu pane tools and strings
long onCmdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is executed
long onCmdOpenMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open meanDatas is executed
long onUpdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is updated
long onUpdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as is updated
long onCmdClose(FXObject *, FXSelector, void *)
called when the command/FXCall close is executed
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
long onCmdToggleViewOption(FXObject *, FXSelector, void *)
toggle viewOption
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
OptionsCont myOriginalNetgenerateOptions
original netgenerate options container
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
OptionsCont myOriginalNeteditOptions
original netedit options container
void loadDemandElements(const std::string operation)
load demand elements from netedit options
long onCmdProcessButton(FXObject *sender, FXSelector sel, void *)
called when user press a process button (or a shortcut)
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
GNEApplicationWindowHelper::ModesMenuCommands & getModesMenuCommands()
get modes Menu Commands (needed for show/hide menu commands)
long onCmdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
called if the user press the toggle time format button
long onCmdRunNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
called when run netgenerate is called
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands
Processing Menu Commands.
OptionsCont & getSumoOptions()
get SUMO options container
FXMenuPane * myToolsImportCityBrainMenu
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
get Edit Menu Commands (needed for show/hide menu commands)
void setStatusBarText(const std::string &statusBarText)
set text of the statusBar
GNEUndoList * myUndoList
the one and only undo list
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
FXMenuPane * myFileMenuDemandElements
long onCmdSmartReload(FXObject *, FXSelector, void *)
called when the command/FXCall smart reload is executed
void loadEdgeTypes(const std::string operation)
load meanData elements
long onCmdPaste(FXObject *, FXSelector, void *)
long onUpdPythonTool(FXObject *, FXSelector, void *)
called when the command/FXCall python tool is updated
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall open network is executed
GNEExternalRunner * myExternalRunner
external runner for running external tools
long onCmdComputePathManager(FXObject *, FXSelector, void *)
long onCmdToggleComputeNetworkData(FXObject *, FXSelector, void *)
called when toggle checkbox compute network when switching between supermodes
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
GNEInternalTest * getInternalTest() const
get netedit test system
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread is executed
long onUpdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements unified is executed
long onUpdRequireRecomputing(FXObject *sender, FXSelector sel, void *ptr)
update label for require recomputing
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is executed
long onUpdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onUpdSaveDemandElements(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements is executed
OptionsCont myOriginalSumoOptions
original sumo options container
OptionsCont myNetgenerateOptions
netgenerate options container
SUMOTime getCurrentSimTime() const
get current simulation time (pure virtual but we don't need it)
long onUpdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is updated
long onCmdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is executed
FXMenuPane * myFileMenuMeanDataElements
long onCmdLockAllElements(FXObject *, FXSelector sel, void *)
called when user press lock all elements button
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
long onCmdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
long onCmdClearSelectionShortcut(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for clear selection
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
GNEUndoList * getUndoList()
get pointer to undoList
long onUpdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is updated
long onUpdNeedsFrontElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs front element is executed
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
void loadTrafficLights(const std::string operation)
load traffic lights
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
GNEApplicationWindowHelper::FileBucketHandler * myFileBucketHandler
saving files handler
long onUpdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is updated
void disableUndoRedoTemporally(const std::string &reason)
disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)
long onCmdToggleGrid(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + G to toggle grid
void dependentBuild()
build dependent
long onCmdEditChosen(FXObject *, FXSelector, void *)
called when the command/FXCall edit chosen is executed
long onUpdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is updated
long onCmdOpenSumoOptionsDialog(FXObject *, FXSelector, void *)
called when user press "sumo options" button
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands
Edit Menu Commands.
long onCmdSetSuperMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-supermode hotkey
bool allowInputSignals(FXObject *obj) const
check if ignore input signal (using during netedit tests)
long onCmdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is executed
long onUpdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is updated
void loadMeanDataElements(const std::string operation)
load meanData elements from netedit options
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
GNEViewNet * myViewNet
pointer to current view net
GNEExternalRunner * getExternalRunner() const
get external runner
long onUpdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onUpdNeedsNetworkElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs at least one network element is executed
const FXString myTitlePrefix
the prefix for the window title
long onCmdOpenAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
GNEApplicationWindowHelper::FileBucketHandler * getFileBucketHandler() const
get file bucket handler
long onCmdSaveNetworkAs(FXObject *, FXSelector, void *)
called when the command/FXCall save network as is executed
double getTrackerInterval() const
get current tracker interval (pure virtual but we don't need it)
void fillMenuBar()
Builds the menu bar.
long onCmdFocusFrame(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for focus on frame
long onCmdSaveMeanDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas as is executed
long onCmdToggleFrontElement(FXObject *, FXSelector, void *)
called if the user call toggle front element
void loadConfiguration(const std::string &configurationFile)
starts to load a configuration
GNEApplicationWindowHelper::LockMenuCommands & getLockMenuCommands()
get lock Menu Commands
long onCmdPostprocessingNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
postprocessing netgenerate
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
long onCmdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is executed
long onUpdRequireViewNet(FXObject *sender, FXSelector sel, void *ptr)
enable or disable sender object depending if viewNet exist
long onUpdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is updated
OptionsCont & getNetgenerateOptions()
get netgenerate options container
long onCmdSaveDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements is executed
long onCmdCut(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdNewWindow(FXObject *, FXSelector, void *)
long onCmdSaveJoinedJunctionsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save joined is executed
long onCmdOpenEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall open edgeType is executed
long onCmdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save JuPedSim elements as is executed
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database
void setExternalRunner(GNEExternalRunner *externalRunner)
set external runner
long onCmdLoadDemandInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load demand"
long onUpdLockMenuTitle(FXObject *, FXSelector sel, void *)
enable or disable lock menu title
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onUpdSaveDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements unified is executed
long onCmdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is executed
long onCmdRedo(FXObject *sender, FXSelector, void *)
long onCmdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements as is executed
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
long onCmdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements as is executed
void handleEvent_FileLoaded(GUIEvent *e)
handle event of type Network loaded
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadAdditionalElements(const std::string operation)
load additional elements from netedit options
GNEInternalTest * myInternalTest
internal test system
void loadOSM(const std::string &OSMFile)
starts to load a OSM File
long onUpdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals is executed
long onCmdOpenNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netedit config is executed
bool myAllowUndoRedoLoading
allow undo-redo loading (read from registry)
long onCmdOpenRecent(FXObject *, FXSelector, void *)
called when the command/FXCall open recent is executed
void closeAllWindows(const bool resetFilenames)
this method closes all windows and deletes the current simulation
bool myAllowUndoRedo
allow undo-redo (read from registry)
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
MFXCheckableButton * getShowToolTipsMenu() const
get checkable button for menu tooltips
long onUpdOpen(FXObject *, FXSelector, void *)
called when the command/FXCall on update open executed
long onCmdSetMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-mode hotkey
bool myHadDependentBuild
check if had dependent build
MFXCheckableButton * getShowToolTipsView() const
get checkable button for view tooltips
long onCmdBackspace(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits backspace
void updateRecomputingLabel()
update recomputing label
bool askSaveElements(FXObject *sender, FXSelector sel, void *ptr)
warns about unsaved changes and gives the user the option to abort
long onUpdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
long onCmdCopy(FXObject *, FXSelector, void *)
long onCmdOpenSUMOGUI(FXObject *sender, FXSelector sel, void *ptr)
called if the user hints ctrl + T
long onCmdOpenDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall open demand is executed
FXMenuPane * myToolsVisualizationMenu
void loadNetwork(const std::string &networkFile)
load network
long onUpdToggleViewOption(FXObject *, FXSelector, void *)
update viewOption
GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands
Tools Menu Commands.
long onCmdUnlockAllElements(FXObject *, FXSelector sel, void *)
called when user press unlock all elements button
long onUpdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is updated
long onUpdNeedsNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall needs network is executed
long onUpdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is updated
GNEApplicationWindowHelper::ToolbarsGrip & getToolbarsGrip()
get ToolbarsGrip
long onUpdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save juPedSim as is executed
long onUpdReloadNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall network reload is executed
OptionsCont mySumoOptions
sumo options container
bool consoleOptionsLoaded()
check if console options was already loaded
long onCmdSaveDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements is executed
long onCmdOpenPythonToolDialog(FXObject *obj, FXSelector, void *)
called when user press over a tool dialog button
long onCmdLocate(FXObject *, FXSelector, void *)
called when the command/FXCall locate is executed
long onCmdDel(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits del
long onCmdHotkeys(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Hotkeys
long onCmdOpenDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open data is executed
long onCmdRunPythonTool(FXObject *obj, FXSelector, void *)
called when user run a tool
void updateSuperModeMenuCommands(const Supermode supermode)
update FXMenuCommands depending of supermode
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:789
A storage for available edgeTypes of edges.
Definition NBTypeCont.h:52
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NIFrame.cpp: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
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
void doRegister(const std::string &name, Option *o)
Adds an option under the given name.
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
std::string getValueString(const std::string &name) const
Returns the string-value of the named option (all options)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
void set(double x, double y)
set positions x and y
Definition Position.h:82
double x() const
Returns the x-position.
Definition Position.h:52
double y() const
Returns the y-position.
Definition Position.h:57
static StringBijection< SumoConfigFileExtension > SumoConfigFileExtensions
sumo config file extensions
static StringBijection< AdditionalFileExtension > AdditionalFileExtensions
additional file extensions
static StringBijection< MeanDataFileExtension > MeanDataFileExtensions
mean data file extensions
static StringBijection< TLSFileExtension > TLSFileExtensions
TLS file extensions.
static StringBijection< RouteFileExtension > RouteFileExtensions
route file extensions
static StringBijection< NetconvertConfigFileExtension > NetconvertConfigFileExtensions
netconvert config file extensions
static StringBijection< OSMFileExtension > OSMFileExtensions
OSM file extensions.
static StringBijection< EdgeDataFileExtension > EdgeDataFileExtensions
edgedata file extensions
static StringBijection< NetconvertPlainFileExtension > NetconvertPlainFileExtensions
netconvert config file extensions
static StringBijection< JunctionFileExtension > JunctionFileExtensions
juntion file extensions
static StringBijection< NeteditConfigFileExtension > NeteditConfigFileExtensions
netedit config file extensions
static StringBijection< NetFileExtension > NetFileExtensions
net file extensions
static StringBijection< EdgeTypeFileExtension > EdgeTypeFileExtensions
edge file extensions
static std::string escapeShell(const std::string &orig)
Escape special characters with backslash.
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp: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