Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEApplicationWindow.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
19// Functions from main window of netedit
20/****************************************************************************/
21
23#include <netbuild/NBFrame.h>
51#include <netedit/templates.h>
52#include <netimport/NIFrame.h>
55#include <netwrite/NWFrame.h>
71#include <utils/xml/XMLSubSys.h>
72
74#include "GNEEvent_FileLoaded.h"
75#include "GNEInternalTest.h"
76#include "GNELoadThread.h"
77#include "GNENet.h"
78#include "GNEUndoList.h"
79#include "GNEViewParent.h"
80
81#ifdef HAVE_VERSION_H
82#include <version.h>
83#endif
84
85// ===========================================================================
86// FOX-declarations
87// ===========================================================================
88
89FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
90 // quit calls
94 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
95 // toolbar file
102 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
107 // network
122 // NeteditConfig
130 // SumoConfig
138 // TLS
147 // edge types
156 // additionals
169 // demand elements
180 // data elements
191 // meanDatas
202 // other
207 // Toolbar supermode
211 // Toolbar modes
228 // Toolbar edit
237 // Network view options
272 // Demand view options
295 // Data view options
312 // view
329 /* Prepared for #6042
330 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
331 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
332 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
333 */
334 // toolbar lock
366 // Toolbar processing
385 // Toolbar locate
410 // toolbar python tools
415 // toolbar windows
417 // toolbar help
420 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
421 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
422 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
424 // alt + <number>
445 // key events
446 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
447 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
448 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
449 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
450 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
452 // threads events
455 // edge template functions
459 // languages
482 // tools
485 // other
486 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
493 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
494};
495
496// Object implementation
497FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
498
499// ===========================================================================
500// GNEApplicationWindow method definitions
501// ===========================================================================
502#ifdef _MSC_VER
503#pragma warning(push)
504#pragma warning(disable: 4355) // mask warning about "this" in initializers
505#endif
506GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
507 GUIMainWindow(app),
508 myTagPropertiesDatabase(tagPropertiesDatabase),
509 myUndoList(new GNEUndoList(this)),
510 myConfigPattern(configPattern),
511 myToolbarsGrip(this),
512 myMenuBarFile(this),
513 myFileMenuCommands(this),
514 myModesMenuCommands(this),
515 myEditMenuCommands(this),
516 myLockMenuCommands(this),
517 myProcessingMenuCommands(this),
518 myLocateMenuCommands(this),
519 myToolsMenuCommands(this),
520 myWindowsMenuCommands(this),
521 myHelpMenuCommands(this),
522 mySupermodeCommands(this),
523 myFileBucketHandler(new GNEApplicationWindowHelper::FileBucketHandler(this, OptionsCont::getOptions(), mySumoOptions)),
524 myTitlePrefix("netedit " VERSION_STRING),
525 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
526 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
527 // init icons
529 // init Textures
531 // init cursors
533 // set tooltip options
534 app->setTooltipTime(1000000000);
535 app->setTooltipPause(1000000000);
536 // set SUMO Options descriptions
537 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
538 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo " VERSION_STRING);
539 // set default netedit options
542 // parse options
548 // make certain sumo options non editable
549 mySumoOptions.setOptionEditable("configuration-file", false);
550 mySumoOptions.setOptionEditable("net-file", false);
551 mySumoOptions.setOptionEditable("route-files", false);
552 mySumoOptions.setOptionEditable("additional-files", false);
553 // add extra option for automatic closing
554 myNetgenerateOptions.doRegister("close-dialog-automatic", new Option_Bool(true));
555 myNetgenerateOptions.addDescription("close-dialog-automatic", "report", TL("Close dialog automatically"));
556}
557#ifdef _MSC_VER
558#pragma warning(pop)
559#endif
560
561
562void
564 // do this not twice
566 // do not translate debug messages
567 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
568 return;
569 }
570 myHadDependentBuild = true;
571 setTarget(this);
572 setSelector(MID_WINDOW);
573 // build toolbar menu
575 // build the thread - io
578 // build the status bar
579 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
580 // build geo coordinates label
581 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
583 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
584 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
585 // build geo coordinates label
587 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
588 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
589 // build cartesian coordinates label
591 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
592 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
593 // build test coordinates label (only if gui-testing is enabled)
595 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
596 myTestCoordinate->setHelpText(TL("Test coordinate"));
598 myTestFrame->hide();
599 // make the window a mdi-window
600 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
602 myMDIMenu = new FXMDIMenu(this, myMDIClient);
603 // build the message window
605 myMainSplitter->setSplit(1, 65);
606 // fill menu and tool bar
607 fillMenuBar();
608 // build additional threads
610 // check if create internal test system
611 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
612 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
613 }
614 // set the status bar
615 setStatusBarText(TL("Ready."));
616 // set the caption
617 setTitle(myTitlePrefix);
618 // set Netedit ICON
621 // build netedit Accelerators (hotkeys)
622 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
623}
624
625
626void
628 // set windows size and position
630 // set current folder
631 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
632 // Create main window
633 FXMainWindow::create();
634 // get text width
635 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
636 // adjust cartesian and geo frame
637 myCartesianFrame->setWidth(textWidth);
638 myGeoFrame->setWidth(textWidth);
639 // fill online maps
640 if (myOnlineMaps.empty()) {
641 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
642 myOnlineMaps["Google Maps"] = "https://www.google.com/maps/search/?api=1&query=%lat,%lon&zoom=19";
643 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
644 }
645 // show application windows
646 show(PLACEMENT_DEFAULT);
647 // check if maximice
648 if (!OptionsCont::getOptions().isSet("window-size")) {
649 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
650 maximize();
651 }
652 }
653}
654
655
657 closeAllWindows(true);
658 // Close icons
660 // Close gifs (Textures)
663 // delete visuals
664 delete myGLVisual;
665 // must delete menus to avoid segfault on removing accelerators
666 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
669 delete myFileMenuTLS;
670 delete myFileMenuEdgeTypes;
677 delete myFileMenu;
678 delete myModesMenu;
679 delete myEditMenu;
680 delete myLockMenu;
681 delete myProcessingMenu;
682 delete myLocatorMenu;
683 delete myToolsMenu;
684 delete myToolsDetectorMenu;
685 delete myToolsDistrictMenu;
686 delete myToolsDRTMenu;
688 delete myToolsImportMenu;
691 delete myToolsImportVissim;
692 delete myToolsImportVisum;
693 delete myToolsNetMenu;
694 delete myToolsRouteMenu;
695 delete myToolsOutputMenu;
696 delete myToolsShapes;
697 delete myToolsTLS;
698 delete myToolsTurnDefs;
700 delete myToolsXML;
701 delete myWindowMenu;
702 delete myHelpMenu;
703 delete myLanguageMenu;
704 // Delete load thread
705 delete myLoadThread;
706 if (myInternalTest) {
707 delete myInternalTest;
708 }
709 // drop all events
710 while (!myThreadEvents.empty()) {
711 // get the next event
714 delete e;
715 }
716 // delete undoList and dialog
717 delete myUndoList;
718}
719
720
721long
722GNEApplicationWindow::onCmdQuit(FXObject* sender, FXSelector sel, void* ptr) {
723 if (askSaveElements(sender, sel, ptr)) {
725 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
726 if (isMaximized()) {
727 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
728 } else {
729 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
730 }
731 getApp()->exit(0);
732 }
733 return 1;
734}
735
736
737long
738GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
739 GUIDialog_GLChosenEditor* chooser =
741 chooser->create();
742 chooser->show();
743 return 1;
744}
745
746
747long
748GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
749 // check if close current simulation
750 if (onCmdClose(0, 0, 0) == 1) {
751 // create new network
753 }
754 return 1;
755}
756
757
758long
760 auto& neteditOptions = OptionsCont::getOptions();
761 // get netconvert file dialog
762 const GNEFileDialog netConvertFileDialog(this, TL("netconvert config file"),
767 // continue depending of dialog
768 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
769 // stop test before calling load thread
770 if (myInternalTest) {
772 }
773 // reset netedit options
774 myLoadThread->fillOptions(neteditOptions);
775 myLoadThread->setDefaultOptions(neteditOptions);
776 // set netconvert configuration file to load
777 neteditOptions.resetWritable();
778 neteditOptions.set("netccfg-file", netConvertFileDialog.getFilename());
779 // run load thread
781 // update view
782 update();
783 }
784 return 1;
785}
786
787
788long
789GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
790 // get netconvert filename
791 const GNEFileDialog networkFileDialog(this, TL("network file"),
796 // continue depending of dialog
797 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
798 // load network
799 loadNetwork(networkFileDialog.getFilename());
800 }
801 return 0;
802}
803
804
805long
806GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
807 // get OSM file dilaog
808 const GNEFileDialog OSMFileDialog(this, TL("OpenStreetMap file"),
813 // continue depending of dialog
814 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
815 loadOSM(OSMFileDialog.getFilename());
816 }
817 return 1;
818}
819
820
821long
822GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
823 auto& neteditOptions = OptionsCont::getOptions();
824 // get netconvert filename
825 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
830 // continue depending of dialog
831 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
832 // stop test before calling load thread
833 if (myInternalTest) {
835 }
836 // reset netedit options
837 myLoadThread->fillOptions(neteditOptions);
838 myLoadThread->setDefaultOptions(neteditOptions);
839 // set netedit configuration file to load
840 neteditOptions.resetWritable();
841 neteditOptions.set("netecfg-file", neteditConfigFileDialog.getFilename());
842 // run load thread
844 // update view
845 update();
846 }
847 return 1;
848}
849
850
851long
852GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
853 auto& neteditOptions = OptionsCont::getOptions();
854 // get netconvert filename
855 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
860 // continue depending of dialog
861 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
862 // stop test before calling load thread
863 if (myInternalTest) {
865 }
866 // reset options
867 myLoadThread->fillOptions(neteditOptions);
868 myLoadThread->setDefaultOptions(neteditOptions);
869 // set sumo configuration file to load
870 neteditOptions.resetWritable();
871 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
872 // run load thread
874 // update view
875 update();
876 }
877 return 1;
878}
879
880
881long
883 // get existent configuration file
885 // check if close current simulation
886 if (onCmdClose(0, 0, 0) == 1) {
887 // stop test before calling load thread
888 if (myInternalTest) {
890 }
891 auto& neteditOptions = OptionsCont::getOptions();
892 // reset options
893 myLoadThread->fillOptions(neteditOptions);
894 myLoadThread->setDefaultOptions(neteditOptions);
895 // set netedit configuration file to load
896 neteditOptions.resetWritable();
897 neteditOptions.set("netecfg-file", neteditConfigFile);
898 // run load thread
900 // update view
901 update();
902 }
903 return 1;
904}
905
906
907long
908GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
909 // get existent sumo config file
911 // check if close current simulation
912 if (onCmdClose(0, 0, 0) == 1) {
913 // stop test before calling load thread
914 if (myInternalTest) {
916 }
917 auto& neteditOptions = OptionsCont::getOptions();
918 // reset options
919 myLoadThread->fillOptions(neteditOptions);
920 myLoadThread->setDefaultOptions(neteditOptions);
921 // set configuration file to load
922 neteditOptions.resetWritable();
923 neteditOptions.set("sumocfg-file", sumoConfigFile);
924 // run load thread
926 // update view
927 update();
928 }
929 return 1;
930}
931
932
933long
934GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
935 // check if file exist
937 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
938 } else {
939 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
940 }
941}
942
943
944long
945GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
946 // check if file exist
948 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
949 } else {
950 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
951 }
952}
953
954
955long
956GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
957 // get netconvert filename
958 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
963 // continue depending of dialog
964 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
965 // set tls type in bucket
967 // load traffic lights
968 loadTrafficLights("Loading");
969 }
970 return 1;
971}
972
973
974long
975GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
976 // load traffic lights
977 loadTrafficLights("Reloading");
978 return 1;
979}
980
981
982long
983GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
984 // check if file exist
986 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
987 } else {
988 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
989 }
990}
991
992
993long
994GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
995 // get netconvert filename
996 const GNEFileDialog edgeTypesFileDialog(this, TL("EdgeTypes file"),
1001 // continue depending of dialog
1002 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
1003 // set tls type in bucket
1005 // load edge types
1006 loadEdgeTypes("Loading");
1007 }
1008 return 1;
1009}
1010
1011
1012long
1013GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1014 // load edge types
1015 loadEdgeTypes("Reloading");
1016 return 0;
1017}
1018
1019
1020long
1021GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1022 // check if file exist
1024 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1025 } else {
1026 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1027 }
1028}
1029
1030
1031long
1032GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector sel, void*) {
1033 auto& neteditOptions = OptionsCont::getOptions();
1034 // check if close current file
1035 if (onCmdClose(0, sel, 0) == 1) {
1036 // stop test before calling load thread
1037 if (myInternalTest) {
1039 }
1040 // store size, position and viewport
1042 // set flag
1043 myAmLoading = true;
1044 // get files
1048 // fill (reset) all options
1049 myLoadThread->fillOptions(neteditOptions);
1050 // set default options defined in GNELoadThread::setDefaultOptions(...)
1051 myLoadThread->setDefaultOptions(neteditOptions);
1052 // set file to load
1053 neteditOptions.resetWritable();
1054 if (neteditConfig.size() > 0) {
1055 // set netedit config
1057 // set status bar
1058 setStatusBarText(TLF("Reloading netedit config file '%'", neteditConfig));
1059 } else if (sumoConfig.size() > 0) {
1060 // set sumo config
1062 // set status bar
1063 setStatusBarText(TLF("Reloading sumo config file '%'", sumoConfig));
1064 } else if (networkFile.size() > 0) {
1065 // set network config
1067 // set status bar
1068 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1069 } else {
1070 // nothing to load
1071 return 0;
1072 }
1073 // load network
1075 }
1076 return 1;
1077}
1078
1079
1080long
1081GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1082 // declare strings
1083 FXString neteditConfig = TL("&Reload Netedit config");
1084 FXString sumoConfig = TL("&Reload Sumo config");
1085 FXString netFile = TL("&Reload Network");
1086 FXString reload = TL("&Reload");
1087 // check options
1088 if (myNet == nullptr) {
1089 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1090 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1092 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1093 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1095 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1096 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1098 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1099 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1100 } else {
1101 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1102 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1103 }
1104 return 1;
1105}
1106
1107
1108long
1109GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector sel, void*) {
1110 auto& neteditOptions = OptionsCont::getOptions();
1111 // check if close current file
1112 if (onCmdClose(0, sel, 0) == 1) {
1113 // stop test before calling load thread
1114 if (myInternalTest) {
1116 }
1117 // store size, position and viewport
1119 // set flag
1120 myAmLoading = true;
1121 // get network
1122 const std::string networkFile = myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK);
1123 // fill (reset) all options
1124 myLoadThread->fillOptions(neteditOptions);
1125 // set default options defined in GNELoadThread::setDefaultOptions(...)
1126 myLoadThread->setDefaultOptions(neteditOptions);
1127 // set file to load
1129 // set status bar
1130 setStatusBarText(TLF("Reloading network file '%'", networkFile));
1131 // loaad network
1133 }
1134 return 1;
1135}
1136
1137
1138long
1139GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1140 if (myNet == nullptr) {
1141 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1142 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1145 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1146 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1147 } else {
1148 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1149 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1150 }
1151 return 1;
1152}
1153
1154
1155long
1156GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1157 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1158 if (myAmLoading) {
1159 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1160 } else if (onCmdClose(0, 0, 0) == 1) {
1161 // get filedata
1162 const std::string recentFile = ((const char*)fileData);
1163 // check if we're loading a network o a config
1164 if ((recentFile.find(".netecfg") != std::string::npos) ||
1165 (recentFile.find(".sumocfg") != std::string::npos) ||
1166 (recentFile.find(".netccfg") != std::string::npos)) {
1167 // load config
1168 loadConfiguration(recentFile);
1169 } else {
1170 // load network
1171 loadNetwork(recentFile);
1172 }
1173 }
1174 return 1;
1175}
1176
1177
1178long
1179GNEApplicationWindow::onCmdClose(FXObject* sender, FXSelector sel, void* ptr) {
1180 if (myViewNet == nullptr) {
1181 return 1;
1182 } else if (askSaveElements(sender, sel, ptr)) {
1183 // check if is reloading
1184 const bool reloading = (FXSELID(sel) == MID_GNE_TOOLBARFILE_RELOADNETWORK) || (FXSELID(sel) == MID_HOTKEY_CTRL_R_RELOAD);
1185 // close all windows
1186 closeAllWindows(!reloading);
1187 // add a separator to the log
1189 // hide all menu commands
1193 // hide view options
1197 return 1;
1198 } else {
1199 return 0;
1200 }
1201}
1202
1203
1204long
1205GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1206 if (myMDIClient->numChildren() > 0) {
1207 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1208 if (w != nullptr) {
1209 w->onCmdLocate(nullptr, sel, nullptr);
1210 }
1211 }
1212 return 1;
1213}
1214
1215
1216long
1217GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1218 return myToolsMenuCommands.showTool(obj);
1219}
1220
1221
1222long
1223GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1225}
1226
1227
1228long
1231}
1232
1233
1234long
1235GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1236 // currently always enabled
1237 return 1;
1238}
1239
1240
1241long
1242GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1243 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1244 return 1;
1245}
1246
1247
1248long
1249GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1251 return 1;
1252}
1253
1254
1255long
1257 return 1;
1258}
1259
1260
1261long
1263 return 1;
1264}
1265
1266
1267long
1268GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1269 // create and open about dialog
1270 GNEAboutDialog(this);
1271 return 1;
1272}
1273
1274
1275long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1276 FXEvent* event = (FXEvent*)ptr;
1277 FXString string = GUIUserIO::clipped.c_str();
1278 setDNDData(FROM_CLIPBOARD, event->target, string);
1279 return 1;
1280}
1281
1282
1283long
1284GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1285 eventOccurred();
1286 return 1;
1287}
1288
1289
1290void
1292 // load events
1293 while (!myThreadEvents.empty()) {
1294 // get the next event
1297 // process
1298 switch (e->getOwnType()) {
1301 break;
1308 break;
1309 default:
1310 break;
1311 }
1312 delete e;
1313 }
1314}
1315
1316
1317void
1320 myAmLoading = false;
1321 GNEEvent_FileLoaded* fileLoadedEvent = static_cast<GNEEvent_FileLoaded*>(e);
1322 // check whether the loading was successful
1323 if (fileLoadedEvent->getNet() == nullptr) {
1324 // report failure
1325 std::string failureMessage;
1326 switch (fileLoadedEvent->getType()) {
1328 failureMessage = TLF("Loading of netedit config '%' failed", fileLoadedEvent->getFile());
1329 break;
1331 failureMessage = TLF("Loading of sumo config '%' failed", fileLoadedEvent->getFile());
1332 break;
1334 failureMessage = TLF("Loading of netconvert config '%' failed", fileLoadedEvent->getFile());
1335 break;
1337 failureMessage = TLF("Loading of network '%' failed", fileLoadedEvent->getFile());
1338 break;
1340 failureMessage = TLF("Loading of OSM Network '%' failed", fileLoadedEvent->getFile());
1341 break;
1343 failureMessage = TL("Invalid Options. Nothing loaded");
1344 break;
1346 failureMessage = TL("Could not build projection. Nothing loaded");
1347 break;
1349 failureMessage = TL("Invalid extension for config file. Only .netecfg, .sumocfg or .netccfg are allowed");
1350 break;
1351 default:
1352 failureMessage = TL("Invalid input network option. Load with either sumo/netedit/netconvert config or with --new option");
1353 break;
1354 }
1355 // write info
1356 WRITE_ERROR(failureMessage);
1357 setStatusBarText(failureMessage);
1358 if (OptionsCont::getOptions().getBool("quit-on-fail")) {
1359 closeAllWindows(true);
1360 getApp()->exit(1);
1361 } else {
1363 }
1364 } else {
1365 // report success
1366 std::string successMessage;
1367 switch (fileLoadedEvent->getType()) {
1369 successMessage = TLF("Netedit config '%' loaded", fileLoadedEvent->getFile());
1370 break;
1372 successMessage = TLF("Sumo config '%' loaded", fileLoadedEvent->getFile());
1373 break;
1375 successMessage = TLF("Netconvert config '%' loaded", fileLoadedEvent->getFile());
1376 break;
1378 successMessage = TLF("Network '%' loaded", fileLoadedEvent->getFile());
1379 break;
1381 successMessage = TLF("OSM Network '%' loaded", fileLoadedEvent->getFile());
1382 break;
1384 successMessage = TLF("Network '%' loaded through console", fileLoadedEvent->getFile());
1385 break;
1387 successMessage = TL("New network successfully created");
1388 break;
1389 default:
1390 throw ProcessError("Invalid sucess mesage. Check if all cases were covered");
1391 }
1392 // write info
1393 WRITE_MESSAGE(successMessage);
1394 setStatusBarText(successMessage);
1395 // set new Net
1396 myNet = fileLoadedEvent->getNet();
1397 // set size and pos
1399 // build viewparent toolbar grips before creating view parent
1401 // initialise netedit View
1402 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1403 // create it maximized
1404 viewParent->maximize();
1405 // mark it as Active child
1406 myMDIClient->setActiveChild(viewParent);
1407 // cast pointer myViewNet
1408 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1409 // set settings in view
1410 if (viewParent->getView() && (fileLoadedEvent->getSettingsFile().size() > 0)) {
1411 GUISettingsHandler settings(getApp(), fileLoadedEvent->getSettingsFile(), true, true);
1412 settings.addSettings(viewParent->getView());
1413 viewParent->getView()->addDecals(settings.getDecals());
1414 settings.applyViewport(viewParent->getView());
1415 settings.setSnapshots(viewParent->getView());
1416 }
1417 // set network name on the caption
1418 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileLoadedEvent->getFile().c_str()));
1419 // force supermode network
1421 // update view port
1422 if (fileLoadedEvent->getViewportFromRegistry()) {
1423 Position off;
1424 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1425 Position p(off.x(), off.y(), 0);
1426 myViewNet->setViewportFromToRot(off, p, 0);
1427 }
1428 // load elements
1429 loadAdditionalElements("Loading");
1430 loadDemandElements("Loading");
1431 loadDataElements("Loading");
1432 loadMeanDataElements("Loading");
1433 // load selection
1434 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1436 }
1438 }
1439 // update app
1440 update();
1441 // restore focus
1442 setFocus();
1443}
1444
1445
1446void
1451
1452// ---------------------------------------------------------------------------
1453// private methods
1454// ---------------------------------------------------------------------------
1455
1456void
1458 // build file menu
1459 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1461 myFileMenuNeteditConfig = new FXMenuPane(this);
1462 myFileMenuSumoConfig = new FXMenuPane(this);
1463 myFileMenuTLS = new FXMenuPane(this);
1464 myFileMenuEdgeTypes = new FXMenuPane(this);
1465 myFileMenuAdditionals = new FXMenuPane(this);
1466 myFileMenuDemandElements = new FXMenuPane(this);
1467 myFileMenuDataElements = new FXMenuPane(this);
1468 myFileMenuMeanDataElements = new FXMenuPane(this);
1469 myFileMenuRecentNetworks = new FXMenuPane(this);
1470 myFileMenuRecentConfigs = new FXMenuPane(this);
1474 // add separator for recent files
1475 new FXMenuSeparator(myFileMenu);
1476 // build recent files
1479 new FXMenuSeparator(myFileMenu);
1480 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1481 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1482 // build modes menu
1483 myModesMenu = new FXMenuPane(this);
1485 myModesMenuTitle->setTarget(this);
1487 // build Supermode commands and hide it
1489 // add separator
1490 new FXSeparator(myModesMenu);
1491 // build modes menu commands
1493 // build edit menu
1494 myEditMenu = new FXMenuPane(this);
1496 // build edit menu commands
1498 // build separator
1499 new FXMenuSeparator(myEditMenu);
1500 // build view options
1504 // hide view options
1508 // build view menu commands
1510 // build separator
1511 new FXMenuSeparator(myEditMenu);
1512 // build front element menu commands
1514 // build separator
1515 new FXMenuSeparator(myEditMenu);
1516 // build open in sumo menu commands
1518 // build lock menu
1519 myLockMenu = new FXMenuPane(this);
1521 myLockMenuTitle->setTarget(this);
1523 // build lock menu commands
1525 // build processing menu (trigger netbuild computations)
1526 myProcessingMenu = new FXMenuPane(this);
1529 // build locate menu
1530 myLocatorMenu = new FXMenuPane(this);
1533 // build tools menu
1534 myToolsMenu = new FXMenuPane(this);
1535 myToolsAssignMenu = new FXMenuPane(this);
1536 myToolsDetectorMenu = new FXMenuPane(this);
1537 myToolsDistrictMenu = new FXMenuPane(this);
1538 myToolsDRTMenu = new FXMenuPane(this);
1539 myToolsEmissionsMenu = new FXMenuPane(this);
1540 myToolsImportMenu = new FXMenuPane(this);
1541 myToolsImportCityBrainMenu = new FXMenuPane(this);
1542 myToolsImportGTFSMenu = new FXMenuPane(this);
1543 myToolsImportVissim = new FXMenuPane(this);
1544 myToolsImportVisum = new FXMenuPane(this);
1545 myToolsNetMenu = new FXMenuPane(this);
1546 myToolsRouteMenu = new FXMenuPane(this);
1547 myToolsOutputMenu = new FXMenuPane(this);
1548 myToolsShapes = new FXMenuPane(this);
1549 myToolsTLS = new FXMenuPane(this);
1550 myToolsTriggerMenu = new FXMenuPane(this);
1551 myToolsTurnDefs = new FXMenuPane(this);
1552 myToolsVisualizationMenu = new FXMenuPane(this);
1553 myToolsXML = new FXMenuPane(this);
1555 // build tools menu cascasde
1556 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1557 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1558 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1560 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1569 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1570 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1571 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1575 // add separators between folders
1576 new FXMenuSeparator(myToolsMenu);
1577 new FXMenuSeparator(myToolsImportMenu);
1578 // create map with tool Menu panes and their associated folder
1585 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1587 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1588 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1595 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1598 // build tools
1600 // build windows menu
1601 myWindowMenu = new FXMenuPane(this);
1604 // build language menu
1606 // build help menu
1607 myHelpMenu = new FXMenuPane(this);
1610}
1611
1612
1613FXGLCanvas*
1615 // netedit uses only a single View, then return nullptr
1616 return nullptr;
1617}
1618
1619
1622 return 0;
1623}
1624
1625
1626double
1628 return 1;
1629}
1630
1631
1636
1637
1642
1643
1648
1649
1654
1655
1656void
1658 if (myViewNet && myViewNet->getNet()) {
1659 // show
1661 // set label depending of recomputing
1663 myRequireRecomputingButton->setText("");
1664 myRequireRecomputingButton->setTipText(TL("Network computed"));
1666 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1667 } else {
1668 myRequireRecomputingButton->setText(TL("Press F5"));
1669 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1671 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1672 }
1673 } else {
1674 // hide
1676 }
1677}
1678
1679
1680void
1681GNEApplicationWindow::closeAllWindows(const bool resetFilenames) {
1682 // first check if net must be deleted
1683 if (myNet != nullptr) {
1684 delete myNet;
1685 myNet = nullptr;
1687 }
1688 // reset default filenames
1689 if (resetFilenames) {
1691 }
1692 // check if view has to be saved
1693 if (myViewNet) {
1695 // save decals and viewport for persistence (before they are cleared)
1699 // clear decals and release GPU textures
1700 if (myViewNet->makeCurrent()) {
1705 myViewNet->makeNonCurrent();
1706 }
1707 }
1708 // lock tracker
1709 myTrackerLock.lock();
1710 // remove trackers and other external windows
1711 while (!myGLWindows.empty()) {
1712 delete myGLWindows.front();
1713 }
1714 myViewNet = nullptr;
1715 for (FXMainWindow* const window : myTrackerWindows) {
1716 window->destroy();
1717 delete window;
1718 }
1719 myTrackerWindows.clear();
1720 // reset the caption
1721 setTitle(myTitlePrefix);
1722 // unlock tracker
1723 myTrackerLock.unlock();
1724 // remove coordinate information
1725 myGeoCoordinate->setText(TL("N/A"));
1726 myCartesianCoordinate->setText(TL("N/A"));
1727 myTestCoordinate->setText(TL("N/A"));
1728 myTestFrame->hide();
1730}
1731
1732
1733FXCursor*
1735 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1736}
1737
1738
1739void
1741 auto& neteditOptions = OptionsCont::getOptions();
1742 if (neteditOptions.getBool("new")) {
1743 // save output file
1744 const auto outputFile = neteditOptions.getString("output-file");
1745 // create new network reset all options
1747 // check if define network file using this ouput file
1748 if (!outputFile.empty()) {
1750 }
1751 } else {
1752 // set flag
1753 myAmLoading = true;
1754 // set status bar
1755 setStatusBarText(TL("Loading console arguments."));
1756 // load console arguments
1758 // add it into recent networks and configs
1761 }
1764 }
1765 }
1766}
1767
1768
1769void
1771 auto& neteditOptions = OptionsCont::getOptions();
1772 // save windows size and position
1774 // enable loading flag and disable reloading flag
1775 myAmLoading = true;
1776 // recenter view
1777 gSchemeStorage.saveViewport(0, 0, -1, 0);
1778 // fill (reset) all options
1779 GNELoadThread::fillOptions(neteditOptions);
1780 // set default options defined in GNELoadThread::setDefaultOptions(...)
1781 GNELoadThread::setDefaultOptions(neteditOptions);
1782 // update status bar
1783 setStatusBarText(TL("Creating new network."));
1784 // create new network
1786 // update window
1787 update();
1788}
1789
1790
1791void
1792GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1793 if (networkFile.empty()) {
1794 WRITE_ERROR(TL("Trying to load an empty network."));
1795 } else {
1796 auto& neteditOptions = OptionsCont::getOptions();
1797 // stop test before calling load thread
1798 if (myInternalTest) {
1800 }
1801 // store size, position and viewport
1803 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1804 // set flag
1805 myAmLoading = true;
1806 // fill (reset) all options
1807 myLoadThread->fillOptions(neteditOptions);
1808 // set default options defined in GNELoadThread::setDefaultOptions(...)
1809 myLoadThread->setDefaultOptions(neteditOptions);
1810 // update default net file
1812 // set status bar
1813 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1814 // load network
1816 // add it into recent nets
1817 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1818 }
1819}
1820
1821
1822void
1823GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1824 if (configurationFile.empty()) {
1825 WRITE_ERROR(TL("Trying to load an empty configuration."));
1826 } else {
1827 auto& neteditOptions = OptionsCont::getOptions();
1828 // store size, position and viewport
1830 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1831 // set flag
1832 myAmLoading = true;
1833 // fill (reset) all options
1834 myLoadThread->fillOptions(neteditOptions);
1835 // set default options defined in GNELoadThread::setDefaultOptions(...)
1836 myLoadThread->setDefaultOptions(neteditOptions);
1837 // set file to load
1838 neteditOptions.resetWritable();
1839 neteditOptions.set("configuration-file", configurationFile);
1840 // set status bar
1841 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1842 // load config
1844 // add it into recent configs
1845 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1846 }
1847}
1848
1849
1850void
1851GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1852 auto& neteditOptions = OptionsCont::getOptions();
1853 // store size, position and viewport
1855 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1856 // set flag
1857 myAmLoading = true;
1858 // fill (reset) all options
1859 myLoadThread->fillOptions(neteditOptions);
1860 // set default options defined in GNELoadThread::setDefaultOptions(...)
1861 myLoadThread->setDefaultOptions(neteditOptions);
1862 // recommended osm options
1863 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1864 neteditOptions.set("osm-files", OSMFile);
1865 neteditOptions.set("geometry.remove", "true");
1866 neteditOptions.set("ramps.guess", "true");
1867 neteditOptions.set("junctions.join", "true");
1868 neteditOptions.set("tls.guess-signals", "true");
1869 neteditOptions.set("tls.discard-simple", "true");
1870 // open netedit options dialog
1871 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1872 // open wizard dialog
1873 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1874 // needed to set projection parameters
1875 NIFrame::checkOptions(neteditOptions);
1876 // set file to load
1877 neteditOptions.resetWritable();
1878 neteditOptions.set("configuration-file", OSMFile);
1879 // set status bar
1880 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1881 // load config
1883 }
1884}
1885
1886void
1887GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1888 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1889 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1890}
1891
1892
1893long
1894GNEApplicationWindow::computeJunctionWithVolatileOptions(FXObject* sender, FXSelector sel, void* ptr) {
1895 // open question dialog box
1896 const GNEQuestionBasicDialog questionDialog(this, GNEDialog::Buttons::YES_NO,
1897 TL("Recompute with volatile options"),
1898 TL("Changes produced in the net due a recomputing with"),
1899 TL("volatile options cannot be undone. Continue?"));
1900 // check result
1901 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1902 // save all elements
1903 onCmdSaveAdditionalElements(sender, sel, ptr);
1904 onCmdSaveDemandElements(sender, sel, ptr);
1905 onCmdSaveDataElements(sender, sel, ptr);
1906 onCmdSaveMeanDataElements(sender, sel, ptr);
1907 // compute with volatile options
1908 myNet->computeNetwork(this, true, true);
1910 }
1911 return 1;
1912}
1913
1914
1915bool
1918 myConsoleOptionsLoaded = false;
1919 return true;
1920 } else {
1921 return false;
1922 }
1923}
1924
1925
1930
1931
1936
1937
1938void
1942
1943
1944long
1945GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1946 // check that currently there is a View
1947 if (myViewNet) {
1948 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1949 }
1950 return 1;
1951}
1952
1953
1954long
1955GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1956 // check that currently there is a View
1957 if (myViewNet) {
1958 myViewNet->onCmdSetMode(sender, sel, ptr);
1959 }
1960 return 1;
1961}
1962
1963
1964long
1965GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1966 if (myViewNet) {
1967 // check if we're calling the functions using internal test
1968 switch (FXSELID(sel)) {
1971 break;
1972 case MID_GNE_LOCK_EDGE:
1974 break;
1975 case MID_GNE_LOCK_LANE:
1977 break;
1980 break;
1983 break;
1986 break;
1989 break;
1990 case MID_GNE_LOCK_WIRE:
1992 break;
1993 case MID_GNE_LOCK_TAZ:
1995 break;
1998 break;
1999 case MID_GNE_LOCK_POI:
2001 break;
2004 break;
2007 break;
2008 case MID_GNE_LOCK_ROUTE:
2010 break;
2013 break;
2016 break;
2019 break;
2020 case MID_GNE_LOCK_WALK:
2022 break;
2023 case MID_GNE_LOCK_RIDE:
2025 break;
2028 break;
2031 break;
2034 break;
2035 case MID_GNE_LOCK_STOP:
2037 break;
2040 break;
2043 break;
2046 break;
2047 default:
2048 break;
2049 }
2051 }
2052 return 1;
2053}
2054
2055
2056long
2057GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
2058 // lock all
2061 return 1;
2062}
2063
2064
2065long
2067 // unlock all
2070 return 1;
2071}
2072
2073
2074long
2076 if (myViewNet) {
2077 myViewNet->update();
2078 }
2079 return 1;
2080}
2081
2082
2083long
2084GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2085 if (myViewNet) {
2087 // supermode network
2093 myLockMenuTitle->enable();
2094 } else {
2095 myLockMenuTitle->disable();
2096 }
2098 // supermode demand
2103 myLockMenuTitle->enable();
2104 } else {
2105 myLockMenuTitle->disable();
2106 }
2108 // supermode data
2112 myLockMenuTitle->enable();
2113 } else {
2114 myLockMenuTitle->disable();
2115 }
2116 } else {
2117 myLockMenuTitle->disable();
2118 }
2119 } else {
2120 myLockMenuTitle->disable();
2121 }
2122 return 1;
2123}
2124
2125
2126long
2127GNEApplicationWindow::onCmdProcessButton(FXObject* sender, FXSelector sel, void* ptr) {
2128 // first check if there is a view
2129 if (myViewNet) {
2130 // process depending of supermode
2132 // check what FXMenuCommand was called
2133 switch (FXSELID(sel)) {
2135 myNet->computeNetwork(this, true, false);
2137 break;
2139 computeJunctionWithVolatileOptions(sender, sel, ptr);
2140 break;
2143 break;
2146 break;
2149 break;
2150 default:
2151 break;
2152 }
2154 // check what FXMenuCommand was called
2155 switch (FXSELID(sel)) {
2159 break;
2162 break;
2165 break;
2168 break;
2171 break;
2172 default:
2173 break;
2174 }
2175 }
2176 // refresh to update undo-redo button
2177 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2178 }
2179 return 1;
2180}
2181
2182
2183long
2184GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2185 // get extra arguments
2186 std::string extraArg;
2188 extraArg = " -s \"" + StringUtils::escapeShell(myNetgenerateOptions.getValueString("output-file")) + "\" ";
2189 }
2190 FXRegistry reg("SUMO netedit", "netedit");
2191 std::string netedit = "netedit";
2192 const char* sumoPath = getenv("SUMO_HOME");
2193 if (sumoPath != nullptr) {
2194#ifdef DEBUG
2195 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2196#else
2197 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2198#endif
2199 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2200 netedit = "\"" + newPath + "\"";
2201 }
2202 }
2203 std::string cmd = netedit + extraArg;
2204 // start in background
2205#ifndef WIN32
2206 cmd = cmd + " &";
2207#else
2208 // see "help start" for the parameters
2209 cmd = "start /B \"\" " + cmd;
2210#endif
2211 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2212 // yay! fun with dangerous commands... Never use this over the internet
2214 return 1;
2215}
2216
2217
2218long
2219GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2220 // input parameters
2221 std::string inputParameters;
2222 // if we have only a network, then load directly without creating a SumoConfig
2224 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2225 // force save network
2226 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2227 // network wasn't saved, then stop
2228 return 0;
2229 }
2230 inputParameters = " --registry-viewport -n \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::NETWORK) + "\"";
2231 // write info
2233 } else {
2234 // force save SumoConfig
2235 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2236 // SumoConfig wasn't saved, then stop
2237 return 0;
2238 }
2239 inputParameters = " --registry-viewport -c \"" + myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG) + "\"";
2240 // write info
2241 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", myFileBucketHandler->getDefaultFilename(FileBucket::Type::SUMO_CONFIG)));
2242 }
2243 // save current viewport in registry
2244 FXRegistry reg("SUMO GUI", "sumo-gui");
2245 reg.read();
2246 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2247 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2248 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2249 reg.write();
2250 // declare executable
2251 std::string sumoGuiExecutable = "sumo-gui";
2252 // if SUMO_HOME is defined, update executable
2253 const char* sumoHome = getenv("SUMO_HOME");
2254 if (sumoHome != nullptr) {
2255 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2256 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2257 sumoGuiExecutable = "\"" + newPath + "\"";
2258 }
2259 }
2260 // declare command
2261 std::string cmd = sumoGuiExecutable + inputParameters;
2262 // start in background
2263#ifndef WIN32
2264 cmd = cmd + " &";
2265#else
2266 // see "help start" for the parameters
2267 cmd = "start /B \"\" " + cmd;
2268#endif
2269 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2270 // yay! fun with dangerous commands... Never use this over the internet
2272 return 1;
2273}
2274
2275
2276long
2277GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2278 // check that view exists
2279 if (myViewNet) {
2280 // first check if we're selecting a subset of edges in TAZ Frame
2282 // clear current selection
2284 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2285 // check if stop select parent
2287 // and stop select paretn
2289 } else {
2290 // clear inspected elements
2292 }
2293 } else {
2294 // abort current operation
2296 }
2297 }
2298 return 1;
2299}
2300
2301
2302long
2303GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2304 // check that view exists
2305 if (myViewNet) {
2307 }
2308 return 1;
2309}
2310
2311
2312long
2313GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2314 // check that view exists
2315 if (myViewNet) {
2317 }
2318 return 1;
2319}
2320
2321
2322long
2323GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2324 // check that view exists
2325 if (myViewNet) {
2327 }
2328 return 1;
2329}
2330
2331
2332long
2333GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2334 // check that view exists
2335 if (myViewNet) {
2337 }
2338 return 1;
2339}
2340
2341
2342long
2344 // check that view exists
2345 if (myViewNet) {
2347 }
2348 return 1;
2349}
2350
2351
2352long
2353GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2354 // check that view exists
2355 if (myViewNet) {
2357 // refresh flow frames
2358 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2360 }
2361 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2363 }
2364 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2366 }
2367 // refresh inspector frame
2368 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2370 }
2371 }
2372 return 1;
2373}
2374
2375
2376long
2377GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2378 // check that view exists
2379 if (myViewNet) {
2381 }
2382 return 1;
2383}
2384
2385
2386long
2387GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2390 }
2391 return 1;
2392}
2393
2394
2395long
2396GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2397 // enable or disable sender element depending of viewNet
2398 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2399}
2400
2401
2402long
2405 return 1;
2406}
2407
2408
2409long
2410GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2411 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2412 return 1;
2413}
2414
2415
2416long
2417GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2419}
2420
2421
2422long
2423GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2424 // check that view exists
2425 if (myViewNet) {
2427 }
2428 return 1;
2429}
2430
2431
2432long
2433GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2434 // check that view exists
2435 if (myViewNet) {
2437 }
2438 return 1;
2439}
2440
2441
2442long
2443GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2444 // check that view exists
2445 if (myViewNet) {
2446 // Call manually toggle grid function
2447 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2448 }
2449 return 1;
2450}
2451
2452
2453long
2454GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2455 // check that view exists
2456 if (myViewNet) {
2457 // Call manually toggle junction shape function
2458 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2459 }
2460 return 1;
2461}
2462
2463
2464long
2466 if (myViewNet) {
2467 // check if all element are front
2468 bool allFront = true;
2469 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2470 if (!AC->isMarkedForDrawingFront()) {
2471 allFront = false;
2472 break;
2473 }
2474 }
2475 // first unfront all elements
2477 // only mark front elements if we have at least one non-front element
2478 if (!allFront) {
2479 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2480 AC->markForDrawingFront();
2481 }
2482 }
2483 myViewNet->update();
2485 }
2486 return 1;
2487}
2488
2489
2490long
2491GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2492 // first check that we have a ViewNet
2493 if (myViewNet) {
2494 // first check what selector was called
2495 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2496 // check that numericalKeyPressed is valid
2497 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2498 return 0;
2499 }
2500 // declare a vector in which save visible menu commands
2501 std::vector<MFXCheckableButton*> visibleMenuCommands;
2502 // get common, network and demand visible menu commands
2506 // now check that numericalKeyPressed isn't greater than visible view options
2507 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2508 return 0;
2509 }
2510 // toggle edit options
2512 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2513 return 1;
2515 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2516 return 1;
2518 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2519 return 1;
2520 }
2521 }
2522 return 0;
2523}
2524
2525
2526long
2527GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2528 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2529 return 1;
2530}
2531
2532
2533long
2534GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2535 // update in every version
2536 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2537 return 1;
2538}
2539
2540
2541long
2542GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2543 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2544 return 1;
2545}
2546
2547
2548long
2551 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2552 } else {
2553 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2554 }
2555}
2556
2557
2558long
2559GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2560 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2561 myAllowUndoRedo = true;
2562 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2563 } else {
2564 myAllowUndoRedo = false;
2565 // drop undo-redo list after changing flag
2566 myUndoList->clear();
2567 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2568 }
2569}
2570
2571
2572long
2574 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2576 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2577 } else {
2578 myAllowUndoRedoLoading = false;
2579 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2580 }
2581}
2582
2583
2584long
2585GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2586 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2587 return 1;
2588}
2589
2590
2591long
2592GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2593 // create and open feedback dialog
2594 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2595 feedback->create();
2596 feedback->show(PLACEMENT_OWNER);
2597 return 1;
2598}
2599
2600
2601long
2603 auto& neteditOptions = OptionsCont::getOptions();
2604 // open netedit option dialog
2605 const GNENeteditOptionsDialog neteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2606 // continue depending of result
2607 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2608 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2609 NBFrame::checkOptions(neteditOptions);
2610 NWFrame::checkOptions(neteditOptions);
2611 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2612 // check if mark netedit config as unsaved
2613 if (neteditOptionsDialog.isOptionModified() && myNet) {
2615 // aditionally, check if network requires saving
2616 if (neteditOptionsDialog.requireSaveNetwork()) {
2619 }
2620 }
2621 }
2622 return 1;
2623}
2624
2625
2626long
2628 // open sumo option dialog
2629 const GNESumoOptionsDialog sumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2630 // continue depending of result
2631 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2633 }
2634 return 1;
2635}
2636
2637
2638long
2641 return 1;
2642}
2643
2644
2645long
2647 // open netgenerate options dialog
2649 return 1;
2650}
2651
2652
2653long
2654GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2655 // Check conditions
2656 if (myViewNet == nullptr) {
2657 return 0;
2658 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2659 return 0;
2660 } else {
2661 // check supermode (currently ignore supermode data)
2664 // abort if user doesn't press "yes"
2666 return 0;
2667 }
2668 }
2670 // update current show frame after undo
2673 }
2674 // update file bucket options (needed to maintain integrity)
2676 // update manually undo/redo menu commands (see #6005)
2679 // update toolbar undo-redo buttons
2681 return 1;
2682 }
2683}
2684
2685
2686long
2687GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2688 // Check conditions
2689 if (myViewNet == nullptr) {
2690 return 0;
2691 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2692 return 0;
2693 } else {
2694 // check supermode (currently ignore supermode data)
2697 // abort if user doesn't press "yes"
2699 return 0;
2700 }
2701 }
2703 // update current show frame after redo
2706 }
2707 // update file bucket options (needed to maintain integrity)
2709 // update manually undo/redo menu commands (see #6005)
2712 // update toolbar undo-redo buttons
2714 return 1;
2715 }
2716}
2717
2718
2719long
2721 // open UndoList Dialog
2722 GNEUndoListDialog(this);
2723 return 1;
2724}
2725
2726
2727long
2728GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2729 // check if net exist and there is something to undo/redo
2730 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2731 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2732 } else {
2733 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2734 }
2735 return 1;
2736}
2737
2738
2739long
2741 // first check viewNet
2743 // update demand path calculator
2745 }
2746 return 1;
2747}
2748
2749
2750long
2751GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2752 // Prepared for #6042
2753 return 1;
2754}
2755
2756
2757long
2758GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2759 // Prepared for #6042
2760 return 1;
2761}
2762
2763
2764long
2765GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2766 // Prepared for #6042
2767 return 1;
2768}
2769
2770
2771long
2772GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2773 // first check if myViewNet exist
2774 if (myViewNet) {
2775 // call set template in inspector frame
2777 }
2778 return 1;
2779}
2780
2781
2782long
2783GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2784 // first check if myViewNet exist
2785 if (myViewNet) {
2786 // call copy template in inspector frame
2788 }
2789 return 1;
2790}
2791
2792
2793long
2794GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2795 // first check if myViewNet exist
2796 if (myViewNet) {
2797 // call clear template in inspector frame
2799 }
2800 return 1;
2801}
2802
2803
2804long
2805GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2806 // check if net exist
2807 if (myNet) {
2809 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2810 } else {
2812 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2813 }
2814}
2815
2816
2817long
2818GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2819 // check if at least there is one edge in the network
2820 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2821 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2822 } else {
2823 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2824 }
2825}
2826
2827
2828long
2829GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2830 // check if net, viewnet and front attribute exist
2831 if (myViewNet && (myViewNet->getInspectedElements().getACs().size() > 0)) {
2832 // check if all element are front
2833 bool allFront = true;
2834 for (auto& AC : myViewNet->getInspectedElements().getACs()) {
2835 if (!AC->isMarkedForDrawingFront()) {
2836 allFront = false;
2837 break;
2838 }
2839 }
2840 // set button text depending of all selected
2841 if (allFront) {
2842 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront element"));
2843 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront inspected elements"));
2844 } else {
2845 myEditMenuCommands.toggleFrontElement->setText(TL("Front element"));
2846 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2847 }
2848 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2849 } else if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2850 myEditMenuCommands.toggleFrontElement->setText(TL("Unfront all element"));
2851 myEditMenuCommands.toggleFrontElement->setTipText(TL("Unfront all elements"));
2852 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2853 } else {
2854 myEditMenuCommands.toggleFrontElement->setText(TL("Front element (only inspected elements)"));
2855 myEditMenuCommands.toggleFrontElement->setTipText(TL("Mark element to be drawn above everything else"));
2856 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2857 }
2858}
2859
2860
2861long
2862GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2863 if (myNet == nullptr) {
2864 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2865 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2866 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2867 } else {
2868 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2869 }
2870}
2871
2872
2873long
2874GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2875 if (myNet == nullptr) {
2876 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2878 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2879 } else {
2880 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2881 }
2882}
2883
2884
2885long
2887 if (myNet == nullptr) {
2888 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2889 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2890 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2891 } else {
2892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2893 }
2894}
2895
2896
2897long
2898GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2899 if (myNet == nullptr) {
2900 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2901 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2902 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2903 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2904 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2905 } else {
2906 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2907 }
2908}
2909
2910
2911long
2912GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2913 if (myNet == nullptr) {
2914 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2915 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2916 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2917 } else {
2918 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2919 }
2920
2921}
2922
2923
2924long
2925GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2926 if (myNet == nullptr) {
2927 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2929 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2930 } else {
2931 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2932 }
2933}
2934
2935
2936long
2937GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2938 if (myNet == nullptr) {
2939 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2940 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2941 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2942 } else {
2943 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2944 }
2945
2946}
2947
2948
2949long
2950GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2951 if (myNet == nullptr) {
2952 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2953 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2954 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2955 } else {
2956 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2957 }
2958
2959}
2960
2961
2962long
2963GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2964 if (myNet == nullptr) {
2965 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2966 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2967 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2968 } else {
2969 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2970 }
2971}
2972
2973
2974long
2976 if (myNet == nullptr) {
2977 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2978 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2979 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2980 } else {
2981 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2982 }
2983
2984}
2985
2986
2987long
2988GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2989 return myUndoList->onUpdUndo(sender, sel, ptr);
2990}
2991
2992
2993long
2994GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2995 return myUndoList->onUpdRedo(sender, sel, ptr);
2996}
2997
2998
2999long
3000GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
3001 // first check viewNet
3002 if (myViewNet) {
3003 // check supermode network
3005 // disable
3006 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3008 // disable
3009 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3010 } else {
3011 // enable
3012 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3013 }
3014 } else {
3015 // disable
3016 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3017 }
3018}
3019
3020
3021long
3022GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
3023 // check viewNet
3024 if (myViewNet) {
3025 // continue depending of selector
3026 switch (FXSELID(sel)) {
3027 // Network
3029 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3031 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3033 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3035 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
3037 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
3039 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
3041 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
3043 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
3045 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
3047 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
3049 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
3051 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
3053 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
3055 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
3057 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
3059 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
3061 return myViewNet->onCmdToggleShowPolygonSymbols(sender, sel, ptr);
3063 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3064 // Demand
3066 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
3068 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3070 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
3072 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
3074 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
3076 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
3078 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
3080 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
3082 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
3084 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
3086 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
3087 // Data
3089 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
3091 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
3093 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
3095 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
3097 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3099 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
3101 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
3103 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3104 default:
3105 return 0;
3106 }
3107 } else {
3108 return 0;
3109 }
3110}
3111
3112
3113long
3114GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3115 // get menuCheck
3116 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3117 // check viewNet
3118 if (myViewNet && menuCheck) {
3119 // continue depending of selector
3120 switch (FXSELID(sel)) {
3121 // Network
3124 menuCheck->setCheck(TRUE);
3125 } else {
3126 menuCheck->setCheck(FALSE);
3127 }
3128 break;
3131 menuCheck->setCheck(TRUE);
3132 } else {
3133 menuCheck->setCheck(FALSE);
3134 }
3135 break;
3138 menuCheck->setCheck(TRUE);
3139 } else {
3140 menuCheck->setCheck(FALSE);
3141 }
3142 break;
3145 menuCheck->setCheck(TRUE);
3146 } else {
3147 menuCheck->setCheck(FALSE);
3148 }
3149 break;
3152 menuCheck->setCheck(TRUE);
3153 } else {
3154 menuCheck->setCheck(FALSE);
3155 }
3156 break;
3159 menuCheck->setCheck(TRUE);
3160 } else {
3161 menuCheck->setCheck(FALSE);
3162 }
3163 break;
3166 menuCheck->setCheck(TRUE);
3167 } else {
3168 menuCheck->setCheck(FALSE);
3169 }
3170 break;
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;
3241 // Demand
3244 menuCheck->setCheck(TRUE);
3245 } else {
3246 menuCheck->setCheck(FALSE);
3247 }
3248 break;
3251 menuCheck->setCheck(TRUE);
3252 } else {
3253 menuCheck->setCheck(FALSE);
3254 }
3255 break;
3258 menuCheck->setCheck(TRUE);
3259 } else {
3260 menuCheck->setCheck(FALSE);
3261 }
3262 break;
3265 menuCheck->setCheck(TRUE);
3266 } else {
3267 menuCheck->setCheck(FALSE);
3268 }
3269 break;
3272 menuCheck->setCheck(TRUE);
3273 } else {
3274 menuCheck->setCheck(FALSE);
3275 }
3276 break;
3279 menuCheck->setCheck(TRUE);
3280 } else {
3281 menuCheck->setCheck(FALSE);
3282 }
3283 break;
3286 menuCheck->setCheck(TRUE);
3287 } else {
3288 menuCheck->setCheck(FALSE);
3289 }
3290 // special case for lock persons
3292 menuCheck->enable();
3293 } else {
3294 menuCheck->disable();
3295 }
3296 break;
3299 menuCheck->setCheck(TRUE);
3300 } else {
3301 menuCheck->setCheck(FALSE);
3302 }
3303 break;
3306 menuCheck->setCheck(TRUE);
3307 } else {
3308 menuCheck->setCheck(FALSE);
3309 }
3310 // special case for lock containers
3312 menuCheck->enable();
3313 } else {
3314 menuCheck->disable();
3315 }
3316 break;
3319 menuCheck->setCheck(TRUE);
3320 } else {
3321 menuCheck->setCheck(FALSE);
3322 }
3323 break;
3326 menuCheck->setCheck(TRUE);
3327 } else {
3328 menuCheck->setCheck(FALSE);
3329 }
3330 break;
3331 // Data
3334 menuCheck->setCheck(TRUE);
3335 } else {
3336 menuCheck->setCheck(FALSE);
3337 }
3338 break;
3341 menuCheck->setCheck(TRUE);
3342 } else {
3343 menuCheck->setCheck(FALSE);
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 break;
3362 menuCheck->setCheck(TRUE);
3363 } else {
3364 menuCheck->setCheck(FALSE);
3365 }
3366 break;
3369 menuCheck->setCheck(TRUE);
3370 } else {
3371 menuCheck->setCheck(FALSE);
3372 }
3373 break;
3374
3377 menuCheck->setCheck(TRUE);
3378 } else {
3379 menuCheck->setCheck(FALSE);
3380 }
3381 break;
3384 menuCheck->setCheck(TRUE);
3385 } else {
3386 menuCheck->setCheck(FALSE);
3387 }
3388 break;
3389 default:
3390 break;
3391 }
3392 }
3393 return 0;
3394}
3395
3396
3397long
3398GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3399 auto& neteditOptions = OptionsCont::getOptions();
3400 // check if we're forcing to saving additionals
3402 neteditOptions.getBool("force-saving")) {
3403 WRITE_MESSAGE(TL("Force save network"));
3404 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
3405 // nothing to save
3406 return 1;
3407 }
3408 // first check if we have to set the output filename
3411 }
3412 // function onCmdSaveNetworkAs must be executed if this is the first save
3414 return onCmdSaveNetworkAs(sender, sel, ptr);
3415 } else {
3416 // always recompute before saving
3417 myNet->computeNetwork(this);
3418 bool saved = false;
3419 try {
3420 // obtain invalid networkElements (currently only edges or crossings
3421 std::vector<GNENetworkElement*> invalidNetworkElements;
3422 // iterate over crossings and edges
3423 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3424 if (!edge.second->isNetworkElementValid()) {
3425 invalidNetworkElements.push_back(edge.second);
3426 }
3427 }
3428 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3429 if (!crossing.second->isNetworkElementValid()) {
3430 invalidNetworkElements.push_back(crossing.second);
3431 }
3432 }
3433 // if there are invalid network elements, open GNEFixNetworkElements
3434 if (invalidNetworkElements.size() > 0) {
3435 // create fix network elements dialog
3436 const GNEFixNetworkElements fixNetworkElementsDialog(this, invalidNetworkElements);
3437 // continue depending of result
3438 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3439 // Save network
3440 myNet->saveNetwork();
3441 saved = true;
3442 } else {
3443 // stop
3444 return 0;
3445 }
3446 } else {
3447 // Save network
3448 myNet->saveNetwork();
3449 saved = true;
3450 }
3451 } catch (IOError& e) {
3452 // open error message box
3453 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3454 }
3455 if (saved) {
3456 // write info
3458 // After saving a net successfully, add it into Recent Nets list.
3461 } else {
3464 return 0;
3465 }
3466 return 1;
3467 }
3468}
3469
3470
3471long
3472GNEApplicationWindow::onCmdSaveNetworkAs(FXObject* sender, FXSelector sel, void* ptr) {
3473 // get network file file
3474 const GNEFileDialog networkFileDialog(this, TL("network file"),
3479 // continue depending of dialog
3480 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3481 // update default network file
3483 // update netedit title with the network name
3484 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3485 // enable save network
3487 // save network
3488 return onCmdSaveNetwork(sender, sel, ptr);
3489 } else {
3490 return 0;
3491 }
3492}
3493
3494
3495long
3496GNEApplicationWindow::onCmdSavePlainXML(FXObject* sender, FXSelector sel, void* ptr) {
3497 // first check if we have to set the output filename
3500 }
3501 // function onCmdSaveNetworkAs must be executed if this is the first save
3503 return onCmdSavePlainXMLAs(sender, sel, ptr);
3504 } else {
3505 // start saving plain XML
3506 getApp()->beginWaitCursor();
3507 try {
3508 // we use the prefix instead the netconvert config
3510 // save plain xml
3511 myNet->savePlain(plainXMLPrefix, myNetconvertOptions);
3512 // write info
3513 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLPrefix));
3514 } catch (IOError& e) {
3515 // open message box
3516 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3517 }
3518 // end saving plain XML
3519 getApp()->endWaitCursor();
3520 // set focus again in viewNet
3521 myViewNet->setFocus();
3522 }
3523 return 1;
3524}
3525
3526
3527long
3528GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject* sender, FXSelector sel, void* ptr) {
3529 // get neteditConfig filename
3530 const GNEFileDialog plainXMLFileDialog(this, TL("plain XML file"),
3535 // continue depending of dialog
3536 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3537 // update default netconvert file
3539 // save plain xml
3540 return onCmdSavePlainXML(sender, sel, ptr);
3541 }
3542 return 1;
3543}
3544
3545
3546long
3548 // get neteditConfig filename
3549 const GNEFileDialog joinedJunctionsFileDialog(this, TL("joined junctions file"),
3554 // continue depending of dialog
3555 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3556 getApp()->beginWaitCursor();
3557 try {
3558 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3559 // write info
3560 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3561 } catch (IOError& e) {
3562 // opening error message
3563 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3564 }
3565 getApp()->endWaitCursor();
3566 // set focus again in viewNet
3567 myViewNet->setFocus();
3568 }
3569 return 1;
3570}
3571
3572
3573long
3574GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject* sender, FXSelector sel, void* ptr) {
3575 // first check if netedit config is already saved
3577 return 1;
3578 }
3579 // Check if configuration file was already set at start of netedit or with a previous save
3581 return onCmdSaveNeteditConfigAs(sender, sel, ptr);
3582 } else {
3583 // save all elements giving automatic names based on patter if their file isn't defined
3584 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3585 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due network)."));
3586 return 0;
3587 }
3588 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3589 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due additional file)."));
3590 return 0;
3591 }
3592 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3593 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due demand file)."));
3594 return 0;
3595 }
3596 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3597 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due data file)."));
3598 return 0;
3599 }
3600 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3601 WRITE_MESSAGE(TL("Saving of netedit configuration aborted (due meanData file)."));
3602 return 0;
3603 }
3604 // get netedit config file
3606 // configuration
3607 std::ofstream out(XMLSubSys::transcodeToLocal(neteditConfigFile));
3608 if (out.good()) {
3609 const auto& neteditOptions = OptionsCont::getOptions();
3610 // write netedit config
3611 neteditOptions.writeConfiguration(out, true, false, false, neteditConfigFile, true);
3612 // write info
3613 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3614 // config saved
3616 // After saving a config successfully, add it into recent configs
3617 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3618 // if we have a sumo config defined, save it also
3620 // get SumoConfig file
3622 std::ofstream sumoCfg(XMLSubSys::transcodeToLocal(sumoConfigFile));
3623 if (sumoCfg.good()) {
3624 // before saving sumo config, check if force enable option junction-taz
3626 mySumoOptions.set("junction-taz", "true");
3627 }
3628 // write SUMO config
3629 mySumoOptions.writeConfiguration(sumoCfg, true, false, false, sumoConfigFile, true);
3630 // write info
3631 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3632 // After saving a config successfully, add it into recent configs
3633 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3634 }
3635 }
3636 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3637 if (neteditOptions.getBool("autosave-netconvert-file")) {
3638 onCmdSavePlainXML(sender, sel, ptr);
3639 }
3640 } else {
3641 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3642 }
3643 out.close();
3644 return 1;
3645 }
3646}
3647
3648
3649long
3650GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3651 // get neteditConfig filename
3652 const GNEFileDialog neteditConfigFileDialog(this, TL("netedit config file"),
3657 // continue depending of dialog
3658 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3659 // set file in file bucket handler
3661 // mark netedit config as unsaved
3663 // continue saving netedit config
3664 return onCmdSaveNeteditConfig(sender, sel, ptr);
3665 } else {
3666 return 0;
3667 }
3668}
3669
3670
3671long
3672GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3673 // check if enable or disable save netedit config button
3674 if (myNet == nullptr) {
3675 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3676 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3677 // a config requieres at least ONE edge
3678 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3680 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3681 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3682 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3683 } else {
3684 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3685 }
3686 // check if enable/disable save individual files
3687 if (myNet) {
3691 } else {
3693 }
3694 }
3695 return 1;
3696}
3697
3698
3699long
3700GNEApplicationWindow::onUpdSaveNeteditConfigAs(FXObject* sender, FXSelector, void*) {
3701 // check if enable or disable save netedit config button
3702 if (myNet == nullptr) {
3703 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3704 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3705 // a config requieres at least ONE edge
3706 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3707 } else {
3708 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3709 }
3710}
3711
3712
3713long
3714GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3715 // obtain netedit option container
3716 auto& neteditOptions = OptionsCont::getOptions();
3717 // reset containers
3718 neteditOptions.resetWritable();
3720 // Check if configuration file was already set at start of netedit or with a previous save
3722 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3723 } else {
3724 // save all elements giving automatic names based on patter in their file isn't defined
3725 if (onCmdSaveNetwork(sender, sel, ptr) != 1) {
3726 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3727 return 0;
3728 }
3729 if (onCmdSaveAdditionalElements(sender, sel, ptr) != 1) {
3730 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3731 return 0;
3732 }
3733 if (onCmdSaveDemandElements(sender, sel, ptr) != 1) {
3734 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3735 return 0;
3736 }
3737 if (onCmdSaveDataElements(sender, sel, ptr) != 1) {
3738 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3739 return 0;
3740 }
3741 if (onCmdSaveMeanDataElements(sender, sel, ptr) != 1) {
3742 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3743 return 0;
3744 }
3745 // get SumoConfig file
3747 // confinguration
3748 std::ofstream out(XMLSubSys::transcodeToLocal(sumoConfigFile));
3749 if (out.good()) {
3750 // before saving sumo config, check if force enable option junction-taz
3752 mySumoOptions.set("junction-taz", "true");
3753 }
3754 // write SUMO config
3755 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3756 // write info
3757 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3758 // After saving a config successfully, add it into recent configs
3759 myMenuBarFile.myRecentConfigs.appendFile(sumoConfigFile.c_str());
3760 // if we have a netedit cong defined, save it also
3762 // get netedit config file
3764 // configuration
3765 std::ofstream neteditCfg(XMLSubSys::transcodeToLocal(neteditConfigFile));
3766 if (neteditCfg.good()) {
3767 // write netedit config
3768 neteditOptions.writeConfiguration(neteditCfg, true, false, false, myFileBucketHandler->getDefaultFolder(FileBucket::Type::NETEDIT_CONFIG), true);
3769 // write info
3770 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3771 // config saved
3773 // After saving a config successfully, add it into recent configs
3774 myMenuBarFile.myRecentConfigs.appendFile(neteditConfigFile.c_str());
3775 }
3776 }
3777 // save in plain XML (netconvert) if the option is enabled (usually used in netedit tests)
3778 if (neteditOptions.getBool("autosave-netconvert-file")) {
3779 onCmdSavePlainXML(sender, sel, ptr);
3780 }
3782 } else {
3783 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3784 }
3785 out.close();
3786 return 1;
3787 }
3788}
3789
3790
3791long
3792GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3793 // get sumoConfig filename
3794 const GNEFileDialog sumoConfigFileDialog(this, TL("sumo config file"),
3799 // continue depending of dialog
3800 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3801 // set sumo config
3803 // mark netedit config as unsaved
3805 // check instead saving sumo config, save netedit config (this will save also the sumoConfig)
3807 return onCmdSaveNeteditConfig(sender, sel, ptr);
3808 } else {
3810 return onCmdSaveSumoConfig(sender, sel, ptr);
3811 }
3812 } else {
3813 return 0;
3814 }
3815}
3816
3817
3818long
3819GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3820 if (myNet == nullptr) {
3821 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3822 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3823 // a config requieres at least ONE edge
3824 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3826 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3827 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3828 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3829 } else {
3830 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3831 }
3832}
3833
3834
3835long
3836GNEApplicationWindow::onUpdSaveSumoConfigAs(FXObject* sender, FXSelector, void*) {
3837 if (myNet == nullptr) {
3838 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3839 } else if (myNet->getAttributeCarriers()->getEdges().size() == 0) {
3840 // a config requieres at least ONE edge
3841 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3842 } else {
3843 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3844 }
3845}
3846
3847long
3848GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3849 // Check if TLS Programs file was already set at start of netedit or with a previous save
3851 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3852 } else {
3853 // Start saving TLS Programs
3854 getApp()->beginWaitCursor();
3855 try {
3856 // compute before saving
3857 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3859 // write info
3861 } catch (IOError& e) {
3862 // open error message box
3863 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3864 }
3866 getApp()->endWaitCursor();
3867 // set focus again in viewNet
3868 myViewNet->setFocus();
3869 }
3870 return 1;
3871}
3872
3873
3874long
3875GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3876 if (myNet == nullptr) {
3877 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3878 } else {
3879 // check if there is at least one TLS
3880 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3881 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3882 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3883 }
3884 }
3885 // no TLS, then disable
3886 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3887 }
3888}
3889
3890
3891long
3892GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3893 // Check if edgeType file was already set at start of netedit or with a previous save
3895 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3896 } else {
3897 // Start saving edgeTypes
3898 getApp()->beginWaitCursor();
3899 try {
3901 // save edge types
3902 myNet->saveEdgeTypes(edgeTypeFile);
3903 // write info
3904 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", edgeTypeFile));
3905 } catch (IOError& e) {
3906 // open error message box
3907 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3908 }
3910 getApp()->endWaitCursor();
3911 }
3912 return 1;
3913}
3914
3915
3916long
3917GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3918 // check if net exist and there are edge types
3919 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3920 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3921 } else {
3922 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3923 }
3924 return 1;
3925}
3926
3927
3928long
3929GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject* sender, FXSelector sel, void* ptr) {
3930 // get TLS file
3931 const GNEFileDialog TLSfileDialog(this, TL("Traffic Light definitions file"),
3936 // continue depending of dialog
3937 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3938 // set tls type in bucket
3940 // enable save netedit config
3942 // set focus again in viewNet
3943 myViewNet->setFocus();
3944 // save TLS Programs
3945 return onCmdSaveTLSPrograms(sender, sel, ptr);
3946 } else {
3947 return 1;
3948 }
3949}
3950
3951
3952long
3953GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject* sender, FXSelector sel, void* ptr) {
3954 // get network file file
3955 const GNEFileDialog edgeTypeFileDialog(this, TL("EdgeTypes file"),
3960 // continue depending of dialog
3961 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3962 // set tls type in bucket
3964 // enable save netedit config
3966 // set focus again in viewNet
3967 myViewNet->setFocus();
3968 // save edgeTypes
3969 return onCmdSaveEdgeTypes(sender, sel, ptr);
3970 } else {
3971 return 1;
3972 }
3973}
3974
3975
3976long
3978 // get file
3979 const GNEFileDialog additionalFileDialog(this, TL("Additional elements file"),
3984 // continue depending of dialog
3985 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3986 // flag for save current saving status
3987 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3988 // get (or create) bucket for this new file
3989 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::ADDITIONAL, additionalFileDialog.getFilename(), true);
3990 // disable validation for additionals
3991 XMLSubSys::setValidation("never", "auto", "auto");
3992 // Create additional handler
3993 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3994 // begin undoList operation
3995 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", bucket->getFilename()));
3996 // Run parser
3997 if (!generalHandler.parse()) {
3998 // write error
3999 WRITE_ERROR(TLF("Loading of additional file '%' failed.", bucket->getFilename()));
4000 } else {
4001 // write info
4002 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", bucket->getFilename()));
4003 // enable save if there is errors loading additionals
4004 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4006 }
4007 }
4008 // end undoList operation
4009 myUndoList->end();
4010 // restore validation for additionals
4011 XMLSubSys::setValidation("auto", "auto", "auto");
4012 // check if clear undoList
4014 myUndoList->clear();
4015 }
4016 update();
4017 }
4018 return 1;
4019}
4020
4021
4022long
4024 // disable validation for additionals
4025 XMLSubSys::setValidation("never", "auto", "auto");
4026 // begin undoList operation
4027 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
4028 // clear additionals
4030 // reload additional elements stored in options
4031 loadAdditionalElements("Reloading");
4032 // end undoList operation
4033 myUndoList->end();
4034 // restore validation for additionals
4035 XMLSubSys::setValidation("auto", "auto", "auto");
4036 // check if clear undoList
4038 myUndoList->clear();
4039 }
4040 update();
4041 return 1;
4042}
4043
4044
4045long
4046GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
4047 if (myViewNet == nullptr) {
4048 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4050 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4051 } else {
4052 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4053 }
4054}
4055
4056
4057long
4058GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
4059 const auto savingFileHandler = myFileBucketHandler;
4060 // get option container
4061 auto& neteditOptions = OptionsCont::getOptions();
4062 // check if we're forcing to saving additionals
4064 neteditOptions.getBool("force-saving") &&
4066 WRITE_MESSAGE(TL("Force save additional elements"));
4067 } else if (myNet->getSavingStatus()->isAdditionalsSaved()) {
4068 // nothing to save
4069 return 1;
4070 }
4071 // check if we have to define a default filename
4073 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::ADDITIONAL, myFileBucketHandler->getConfigFilePrefix(".add.xml"));
4074 }
4075 // check if we have to open save as dialog
4076 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::ADDITIONAL)) {
4077 // choose file to save
4078 return onCmdSaveAdditionalElementsAs(sender, sel, ptr);
4079 } else {
4080 // always recompute before saving
4081 myNet->computeNetwork(this);
4082 try {
4083 // compute before saving (for detectors positions)
4084 myNet->computeNetwork(this);
4085 // save additionals
4086 const bool savingResult = myNet->saveAdditionals();
4087 // show info
4088 if (savingResult) {
4089 WRITE_MESSAGE(TL("Additionals saved."));
4090 return 1;
4091 } else {
4092 WRITE_MESSAGE(TL("Saving additional aborted."));
4093 return 0;
4094 }
4095 } catch (IOError& e) {
4096 // open error message box
4097 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
4098 }
4099 return 0;
4100 }
4101}
4102
4103
4104long
4105GNEApplicationWindow::onCmdSaveAdditionalElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4106 // get additional file
4107 const GNEFileDialog additionalFileDialog(this, TL("Additional elements as"),
4112 // continue depending of dialog
4113 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4114 // update default name
4116 // save additional
4117 return onCmdSaveAdditionalElements(sender, sel, ptr);
4118 } else {
4119 return 0;
4120 }
4121}
4122
4123
4124long
4125GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4126 // get additional file
4127 const GNEFileDialog additionalFileDialog(this, TL("Additional elements in unified file"),
4132 // continue depending of dialog
4133 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4134 // use the file as default file
4136 // begin undoList operation
4137 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
4138 // iterate over all demand elementes and change file
4139 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
4140 for (const auto& additionalElement : additionalElementTag.second) {
4141 additionalElement.second->setAttribute(GNE_ATTR_SAVEFILE, additionalFileDialog.getFilename(), myUndoList);
4142 }
4143 }
4144 // end undoList operation
4145 myUndoList->end();
4146 // save additionals
4148 return onCmdSaveAdditionalElements(sender, sel, ptr);
4149 } else {
4150 return 0;
4151 }
4152}
4153
4154
4155long
4157 // get juPedSim file
4158 const GNEFileDialog juPedSimfileDialog(this, TL("JuPedSim elements file"),
4163 // continue depending of dialog
4164 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4165 try {
4166 // save additionals
4167 const bool savingResult = myNet->saveJuPedSimElements(juPedSimfileDialog.getFilename());
4168 // set focus again in viewNet
4169 myViewNet->setFocus();
4170 // show info
4171 if (savingResult) {
4172 WRITE_MESSAGE(TL("JuPedSim elements saved."));
4173 return 1;
4174 } else {
4175 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
4176 return 0;
4177 }
4178 } catch (IOError& e) {
4179 // open error message box
4180 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4181 }
4182 }
4183 return 0;
4184}
4185
4186
4187long
4189 // get file
4190 const GNEFileDialog routeFileDialog(this, TL("Route elements file"),
4195 // continue depending of dialog
4196 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4197 // save previous demand element status saving
4198 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4199 // disable validation for additionals
4200 XMLSubSys::setValidation("never", "auto", "auto");
4201 // get (or create) bucket for this new file
4202 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, routeFileDialog.getFilename(), true);
4203 // Create generic handler
4205 // begin undoList operation
4206 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", bucket->getFilename()));
4207 // Run parser for additionals
4208 if (!handler.parse()) {
4209 // write error
4210 WRITE_ERROR(TLF("Loading of route file '%' failed.", bucket->getFilename()));
4211 } else {
4212 // show info
4213 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", bucket->getFilename()));
4214 // enable demand elements if there is an error creating element
4215 if (previouslySaved && !handler.isErrorCreatingElement()) {
4217 }
4218 }
4219 // end undoList operation
4220 myUndoList->end();
4221 // restore validation
4222 XMLSubSys::setValidation("auto", "auto", "auto");
4223 // check if clear undoList
4225 myUndoList->clear();
4226 }
4227 update();
4228 }
4229 return 1;
4230}
4231
4232
4233long
4235 // disable validation for additionals
4236 XMLSubSys::setValidation("never", "auto", "auto");
4237 // begin undoList operation
4238 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4239 // clear demand elements
4241 // reload demand elements stored in options
4242 loadDemandElements("Reloading");
4243 // end undoList operation and update view
4244 myUndoList->end();
4245 // restore validation for demand
4246 XMLSubSys::setValidation("auto", "auto", "auto");
4247 // check if clear undoList
4249 myUndoList->clear();
4250 }
4251 update();
4252 return 1;
4253}
4254
4255
4256long
4257GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4258 if (myViewNet == nullptr) {
4259 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4261 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4262 } else {
4263 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4264 }
4265}
4266
4267
4268long
4269GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4270 const auto savingFileHandler = myFileBucketHandler;
4271 // get option container
4272 auto& neteditOptions = OptionsCont::getOptions();
4273 // check if we're forcing to saving demand elements
4275 neteditOptions.getBool("force-saving") &&
4277 WRITE_MESSAGE(TL("Force save demand elements"));
4278 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
4279 // nothing to save
4280 return 1;
4281 }
4282 // check if we have to define a default filename
4284 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DEMAND, myFileBucketHandler->getConfigFilePrefix(".rou.xml"));
4285 }
4286 // check if we have to open save as dialog
4287 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DEMAND)) {
4288 // choose file to save
4289 return onCmdSaveDemandElementsAs(sender, sel, ptr);
4290 } else {
4291 // always recompute before saving
4292 myNet->computeNetwork(this);
4293 try {
4294 // save demand elements
4295 const bool savingResult = myNet->saveDemandElements();
4296 // show info
4297 if (savingResult) {
4298 WRITE_MESSAGE(TL("Demand elements saved."));
4299 return 1;
4300 } else {
4301 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4302 return 0;
4303 }
4304 } catch (IOError& e) {
4305 // open error message box
4306 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4307 }
4308 }
4309 return 0;
4310}
4311
4312
4313long
4314GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4315 // get route file
4316 const GNEFileDialog routeFileDialog(this, TL("Route elements"),
4321 // continue depending of dialog
4322 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4323 // update default name
4325 // save demand elements
4326 return onCmdSaveDemandElements(sender, sel, ptr);
4327 } else {
4328 return 0;
4329 }
4330}
4331
4332
4333long
4334GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4335 // get route file
4336 const GNEFileDialog routeFileDialog(this, TL("Route elements file in unified file"),
4341 // continue depending of dialog
4342 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4343 // use the file as default file
4345 // begin undoList operation
4346 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4347 // iterate over all demand elementes and change file
4348 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4349 for (const auto& demandElement : demandElementTag.second) {
4350 demandElement.second->setAttribute(GNE_ATTR_SAVEFILE, routeFileDialog.getFilename(), myUndoList);
4351 }
4352 }
4353 // end undoList operation
4354 myUndoList->end();
4355 // save demand elements
4357 return onCmdSaveDemandElements(sender, sel, ptr);
4358 } else {
4359 return 0;
4360 }
4361}
4362
4363
4364long
4365GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4366 // get file
4367 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4372 // continue depending of dialog
4373 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4374 // save previous demand element status saving
4375 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4376 // get (or create) bucket for this new file
4377 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, dataFileDialog.getFilename(), true);
4378 // disable update data
4380 // disable validation for data elements
4381 XMLSubSys::setValidation("never", "auto", "auto");
4382 // Create data handler
4383 GNEDataHandler dataHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4384 // begin undoList operation
4385 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", bucket->getFilename()));
4386 // Run data parser
4387 if (!dataHandler.parse()) {
4388 // write error
4389 WRITE_ERROR(TLF("Loading of data file '%' failed.", bucket->getFilename()));
4390 } else {
4391 // show info
4392 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", bucket->getFilename()));
4393 // enable demand elements if there is an error creating element
4394 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4396 }
4397 }
4398 // end undoList operation
4399 myUndoList->end();
4400 // enable update data
4402 // restore validation for data
4403 XMLSubSys::setValidation("auto", "auto", "auto");
4404 // check if clear undoList
4406 myUndoList->clear();
4407 }
4408 update();
4409 }
4410 return 1;
4411}
4412
4413
4414long
4416 // disable update data
4418 // disable validation for additionals
4419 XMLSubSys::setValidation("never", "auto", "auto");
4420 // begin undoList operation
4421 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4422 // clear data elements
4424 // reload data elements stored in options
4425 loadDataElements("Reloading");
4426 // restore validation for data
4427 XMLSubSys::setValidation("auto", "auto", "auto");
4428 // end undoList operation and update view
4429 myUndoList->end();
4430 // enable update data
4432 // check if clear undoList
4434 myUndoList->clear();
4435 }
4436 update();
4437 return 1;
4438}
4439
4440
4441long
4442GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4443 if (myViewNet == nullptr) {
4444 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4446 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4447 } else {
4448 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4449 }
4450}
4451
4452
4453long
4454GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4455 const auto savingFileHandler = myFileBucketHandler;
4456 // get option container
4457 auto& neteditOptions = OptionsCont::getOptions();
4458 // check if we're forcing to saving data elements
4460 neteditOptions.getBool("force-saving") &&
4462 WRITE_MESSAGE(TL("Force save data elements"));
4463 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
4464 // nothing to save
4465 return 1;
4466 }
4467 // check if we have to define a default filename
4469 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::DATA, myFileBucketHandler->getConfigFilePrefix(".dat.xml"));
4470 }
4471 // check if we have to open save as dialog
4472 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::DATA)) {
4473 return onCmdSaveDataElementsAs(sender, sel, ptr);
4474 } else {
4475 try {
4476 // save data elements
4477 const bool savingResult = myNet->saveDataElements();
4478 // show info
4479 if (savingResult) {
4480 WRITE_MESSAGE(TL("Data elements saved."));
4481 return 1;
4482 } else {
4483 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4484 return 0;
4485 }
4486 } catch (IOError& e) {
4487 // open error message box
4488 GNEErrorBasicDialog(this, TL("Saving data elements failed"), e.what());
4489 }
4490 }
4491 return 0;
4492}
4493
4494
4495long
4496GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4497 // get data file
4498 const GNEFileDialog dataFileDialog(this, TL("Data elements file"),
4503 // continue depending of dialog
4504 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4505 // update default name
4507 // save data elements
4508 return onCmdSaveDataElements(sender, sel, ptr);
4509 } else {
4510 return 0;
4511 }
4512}
4513
4514
4515long
4516GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4517 // get data file
4518 const GNEFileDialog dataFileDialog(this, TL("Data elements file in unified file"),
4523 // continue depending of dialog
4524 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4525 // use the file as default file
4527 // begin undoList operation
4528 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4529 // iterate over all demand elementes and change file
4530 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4531 dataSet.second->setAttribute(GNE_ATTR_SAVEFILE, dataFileDialog.getFilename(), myUndoList);
4532 }
4533 // end undoList operation
4534 myUndoList->end();
4535 // save data elements
4537 return onCmdSaveDataElements(sender, sel, ptr);
4538 } else {
4539 return 0;
4540 }
4541}
4542
4543
4544long
4546 // get file
4547 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file"),
4552 // continue depending of dialog
4553 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4554 // save previous demand element status saving
4555 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4556 // get (or create) bucket for this new file
4557 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, meanDataFileDialog.getFilename(), true);
4558 // disable validation for meanDatas
4559 XMLSubSys::setValidation("never", "auto", "auto");
4560 // Create meanData handler
4561 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4562 // begin undoList operation
4563 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", bucket->getFilename()));
4564 // Run parser
4565 if (!generalHandler.parse()) {
4566 // write error
4567 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", bucket->getFilename()));
4568 } else {
4569 // show info
4570 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", bucket->getFilename()));
4571 // enable demand elements if there is an error creating element
4572 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4574 }
4575 }
4576 // end undoList operation
4577 myUndoList->end();
4578 // restore validation for meanDatas
4579 XMLSubSys::setValidation("auto", "auto", "auto");
4580 // check if clear undoList
4582 myUndoList->clear();
4583 }
4584 update();
4585 }
4586 return 1;
4587}
4588
4589
4590long
4592 // disable validation for meanDatas
4593 XMLSubSys::setValidation("never", "auto", "auto");
4594 // begin undoList operation
4596 // clear meanDatas
4598 // reload meanData elements stored in options
4599 loadMeanDataElements("Reloading");
4600 // end undoList operation and update view
4601 myUndoList->end();
4602 // restore validation for meanDatas
4603 XMLSubSys::setValidation("auto", "auto", "auto");
4604 // check if clear undoList
4606 myUndoList->clear();
4607 }
4608 update();
4609 return 1;
4610}
4611
4612
4613long
4614GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4615 if (myViewNet == nullptr) {
4616 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4618 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4619 } else {
4620 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4621 }
4622}
4623
4624
4625long
4626GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4627 const auto savingFileHandler = myFileBucketHandler;
4628 // get option container
4629 auto& neteditOptions = OptionsCont::getOptions();
4630 // check if we're forcing to saving meandata elements
4632 neteditOptions.getBool("force-saving") &&
4634 WRITE_MESSAGE(TL("Force save meandata elements"));
4635 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
4636 // nothing to save
4637 return 1;
4638 }
4639 // check if we have to define a default filename
4641 savingFileHandler->setDefaultFilenameFile(FileBucket::Type::MEANDATA, myFileBucketHandler->getConfigFilePrefix(".dat.add.xml"));
4642 }
4643 // check if we have to open save as dialog
4644 if (!savingFileHandler->isFilenameDefined(FileBucket::Type::MEANDATA)) {
4645 return onCmdSaveMeanDataElementsAs(sender, sel, ptr);
4646 } else {
4647 try {
4648 // compute before saving
4649 myNet->computeNetwork(this);
4650 // save demand elements
4651 const bool savingResult = myNet->saveMeanDatas();
4652 // show info
4653 if (savingResult) {
4654 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4655 return 1;
4656 } else {
4657 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4658 return 0;
4659 }
4660 } catch (IOError& e) {
4661 // open error message box
4662 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4663 }
4664 }
4665 return 0;
4666}
4667
4668
4669long
4670GNEApplicationWindow::onCmdSaveMeanDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4671 // get meanData file
4672 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements"),
4677 // continue depending of dialog
4678 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4679 // update default name
4681 // save meanDatas
4682 return onCmdSaveMeanDataElements(sender, sel, ptr);
4683 } else {
4684 return 0;
4685 }
4686}
4687
4688
4689long
4690GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4691 // get meanData file
4692 const GNEFileDialog meanDataFileDialog(this, TL("MeanData elements file in unified file"),
4697 // continue depending of dialog
4698 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4699 // use the file as default file
4701 // begin undoList operation
4702 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4703 // iterate over all demand elementes and change file
4704 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4705 for (const auto& meanData : meanDataTag.second) {
4706 meanData.second->setAttribute(GNE_ATTR_SAVEFILE, meanDataFileDialog.getFilename(), myUndoList);
4707 }
4708 }
4709 // end undoList operation
4710 myUndoList->end();
4711 // save meanDatas
4713 return onCmdSaveMeanDataElements(sender, sel, ptr);
4714 } else {
4715 return 0;
4716 }
4717}
4718
4719
4720bool
4721GNEApplicationWindow::askSaveElements(FXObject* sender, FXSelector sel, void* ptr) {
4722 if (myNet) {
4724 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(commonResult);
4725 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(commonResult);
4726 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(commonResult);
4727 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(commonResult);
4728 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(commonResult);
4729 // first check if abort saving
4730 if (commonResult == GNEDialog::Result::ABORT) {
4731 return false;
4732 }
4733 // save every type of file
4734 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4735 (onCmdSaveNetwork(sender, sel, ptr) != 1)) {
4736 return false;
4737 }
4738 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4739 (onCmdSaveAdditionalElements(sender, sel, ptr) != 1)) {
4740 return false;
4741 }
4742 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4743 (onCmdSaveDemandElements(sender, sel, ptr) != 1)) {
4744 return false;
4745 }
4746 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4747 (onCmdSaveDataElements(sender, sel, ptr) != 1)) {
4748 return false;
4749 }
4750 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4751 (onCmdSaveMeanDataElements(sender, sel, ptr) != 1)) {
4752 return false;
4753 }
4754 // restore focus in viewNet
4755 myViewNet->setFocus();
4756 // clear undo list
4757 clearUndoList();
4758 // all saved, then continue
4759 return true;
4760 } else {
4761 // nothing to do, then continue
4762 return true;
4763 }
4764}
4765
4766
4767void
4769 // check that view exists
4770 if (myViewNet) {
4772 }
4773 // update require recomputing
4775}
4776
4777
4778void
4780 // remove lock hotkeys
4782 // check supermode
4783 if (supermode == Supermode::NETWORK) {
4784 // menu commands
4788 // lock
4792 // processing
4797 } else if (supermode == Supermode::DEMAND) {
4798 // menu commands
4802 // lock
4806 // processing
4811 } else if (supermode == Supermode::DATA) {
4812 // menu commands
4816 // lock
4820 // processing
4825 } else {
4826 // menu commands
4831 // lock
4835 // processing
4839 }
4840 // continue depending of view
4841 if (myViewNet) {
4845 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4848 }
4849 }
4850}
4851
4852
4853bool
4857
4858
4859void
4863
4864
4865void
4867 myUndoRedoListEnabled = reason;
4868}
4869
4870
4871const std::string&
4875
4876
4877void
4879 if (myViewNet) {
4880 // destroy Popup (to avoid crashes)
4882 }
4883 // clear undo list and return true to continue with closing/reload
4884 myUndoList->clear();
4885}
4886
4887
4892
4893
4898
4899
4904
4905
4910
4911
4916
4917
4922
4923
4928
4929
4930void
4932 // get netedit option container
4933 auto& neteditOptions = OptionsCont::getOptions();
4934 // get additional files (don't use reference because it's modified during loading)
4935 const StringVector additionalFiles = neteditOptions.getStringVector("additional-files");
4936 // check if we have additionals to load
4937 if (myNet && (additionalFiles.size() > 0)) {
4938 // disable validation for additionals
4939 XMLSubSys::setValidation("never", "auto", "auto");
4940 // begin undolist
4941 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("% additional elements from '%'", operation, toString(additionalFiles)));
4942 // use this flag for mark all elements as saved after loading, if it was sucessfully
4943 bool setSaved = additionalFiles.size() == 1;
4944 // iterate over every additional file
4945 for (const auto& file : additionalFiles) {
4946 // check if ignore missing inputs
4947 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4948 WRITE_MESSAGE(TLF("% additionals from '%'.", operation, file));
4949 // get (or create) bucket for this new file
4951 // declare general handler
4952 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4953 // check if force overwritte
4954 if (operation == "reloading") {
4955 generalHandler.forceOverwriteElements();
4956 }
4957 // Run parser
4958 if (!generalHandler.parse()) {
4959 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
4960 }
4961 setSaved &= !generalHandler.isErrorCreatingElement();
4962 }
4963 }
4964 // end undo list
4965 myUndoList->end();
4966 // disable validation for additionals
4967 XMLSubSys::setValidation("auto", "auto", "auto");
4968 if (setSaved) {
4970 }
4971 // check if clear undoList
4973 myUndoList->clear();
4974 }
4975 }
4976}
4977
4978
4979void
4980GNEApplicationWindow::loadDemandElements(const std::string operation) {
4981 // get netedit option container
4982 auto& neteditOptions = OptionsCont::getOptions();
4983 // get demand files (don't use reference because it's modified during loading)
4984 const StringVector demandFiles = neteditOptions.getStringVector("route-files");
4985 // check if we have demand files to load
4986 if (myNet && (demandFiles.size() > 0)) {
4987 // disable validation for additionals
4988 XMLSubSys::setValidation("never", "auto", "auto");
4989 // begin undolist
4990 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% demand elements from '%'", operation, toString(demandFiles)));
4991 // use this flag for mark all elements as saved after loading, if it was sucessfully
4992 bool setSaved = demandFiles.size() == 1;
4993 // iterate over every demand file
4994 for (const auto& file : demandFiles) {
4995 // check if ignore missing inputs
4996 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4997 WRITE_MESSAGE(TLF("% demand elements from '%'.", operation, file));
4998 // get (or create) bucket for this new file
4999 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DEMAND, file, true);
5000 // declare general handler
5001 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5002 // check if force overwritte
5003 if (operation == "reloading") {
5004 generalHandler.forceOverwriteElements();
5005 }
5006 // Run parser
5007 if (!generalHandler.parse()) {
5008 WRITE_ERROR(TLF("% of '%' failed.", operation, file));
5009 }
5010 setSaved &= !generalHandler.isErrorCreatingElement();
5011 }
5012 }
5013 // end undo list
5014 myUndoList->end();
5015 // disable validation for additionals
5016 XMLSubSys::setValidation("auto", "auto", "auto");
5017 if (setSaved) {
5019 }
5020 // check if clear undoList
5022 myUndoList->clear();
5023 }
5024 }
5025}
5026
5027
5028void
5029GNEApplicationWindow::loadDataElements(const std::string operation) {
5030 // get option container
5031 auto& neteditOptions = OptionsCont::getOptions();
5032 // get data files (don't use reference because it's modified during loading)
5033 const StringVector dataFiles = neteditOptions.getStringVector("data-files");
5034 if (myNet && (dataFiles.size() > 0)) {
5035 // disable validation for additionals
5036 XMLSubSys::setValidation("never", "auto", "auto");
5037 // begin undolist
5038 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% data elements from '%'", operation, toString(dataFiles)));
5039 // use this flag for mark all elements as saved after loading, if it was sucessfully
5040 bool setSaved = dataFiles.size() == 1;
5041 // iterate over every data file
5042 for (const auto& file : dataFiles) {
5043 // check if ignore missing inputs
5044 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5045 WRITE_MESSAGE(TLF("% data elements from '%'.", operation, file));
5046 // get (or create) bucket for this new file
5047 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::DATA, file, true);
5048 // declare general handler
5049 GNEDataHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5050 // check if force overwritte
5051 if (operation == "reloading") {
5052 generalHandler.forceOverwriteElements();
5053 }
5054 // Run parser
5055 if (!generalHandler.parse()) {
5056 WRITE_ERROR(TLF("% of % failed.", operation, file));
5057 }
5058 setSaved &= !generalHandler.isErrorCreatingElement();
5059 }
5060 }
5061 // end undo list
5062 myUndoList->end();
5063 // disable validation for additionals
5064 XMLSubSys::setValidation("auto", "auto", "auto");
5065 if (setSaved) {
5067 }
5068 // check if clear undoList
5070 myUndoList->clear();
5071 }
5072 }
5073}
5074
5075
5076void
5078 // get option container
5079 auto& neteditOptions = OptionsCont::getOptions();
5080 // get meanData files (don't use reference because it's modified during loading)
5081 const StringVector meanDataFiles = neteditOptions.getStringVector("meandata-files");
5082 if (myNet && (meanDataFiles.size() > 0)) {
5083 // disable validation for additionals
5084 XMLSubSys::setValidation("never", "auto", "auto");
5085 // begin undolist
5086 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("% meanData elements from '%'", operation, toString(meanDataFiles)));
5087 // use this flag for mark all elements as saved after loading, if it was sucessfully
5088 bool setSaved = meanDataFiles.size() == 1;
5089 // iterate over every meanData file
5090 for (const auto& file : meanDataFiles) {
5091 // check if ignore missing inputs
5092 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
5093 WRITE_MESSAGE(TLF("% meanData elements from '%'.", operation, file));
5094 // get (or create) bucket for this new file
5095 auto bucket = myFileBucketHandler->getBucket(FileBucket::Type::MEANDATA, file, true);
5096 // declare general handler
5097 GNEGeneralHandler generalHandler(myNet, bucket, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
5098 // check if force overwritte
5099 if (operation == "reloading") {
5100 generalHandler.forceOverwriteElements();
5101 }
5102 // Run parser
5103 if (!generalHandler.parse()) {
5104 WRITE_ERROR(TLF("% of % failed.", operation, file));
5105 }
5106 setSaved &= !generalHandler.isErrorCreatingElement();
5107 }
5108 }
5109 // end undo list
5110 myUndoList->end();
5111 // disable validation for additionals
5112 XMLSubSys::setValidation("auto", "auto", "auto");
5113 if (setSaved) {
5115 }
5116 // check if clear undoList
5118 myUndoList->clear();
5119 }
5120 }
5121}
5122
5123
5124void
5125GNEApplicationWindow::loadTrafficLights(const std::string operation) {
5126 // get TLS file
5128 if (tlsFile.size() > 0) {
5129 // show info
5130 WRITE_MESSAGE(TLF("% TLS programs from '%'.", operation, tlsFile));
5131 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% TLS programs from '%'.", operation, tlsFile));
5132 myNet->computeNetwork(this);
5133 // parse TLS programs
5134 if (myNet->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(tlsFile) == false) {
5135 // Abort undo/redo
5137 } else {
5138 // commit undo/redo operation
5139 myUndoList->end();
5140 update();
5141 }
5142 // requiere save network
5144 // if defined, require save netedit config
5147 }
5148 }
5149}
5150
5151
5152void
5153GNEApplicationWindow::loadEdgeTypes(const std::string operation) {
5154 // get edgeType file
5156 if (edgeTypeFile.size() > 0) {
5157 // declare type container
5158 NBTypeCont typeContainerAux;
5159 // declare type handler
5160 NIXMLTypesHandler handler(typeContainerAux);
5161 // load edge types
5162 NITypeLoader::load(handler, {edgeTypeFile}, toString(SUMO_TAG_TYPES));
5163 // now create GNETypes based on typeContainerAux
5164 WRITE_MESSAGE(TLF("% edge types from '%'.", operation, edgeTypeFile));
5165 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("% edge types from '%'.", operation, edgeTypeFile));
5166 // iterate over typeContainerAux
5167 for (const auto& auxEdgeType : typeContainerAux) {
5168 // create new edge type
5169 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
5170 // add lane types
5171 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
5172 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
5173 }
5174 // add it using undoList
5175 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
5176
5177 }
5178 // end undo list
5180 // refresh edge type selector
5182 // requiere save network
5184 // if defined, require save netedit config
5187 }
5188 }
5189}
5190
5191
5196
5197
5198bool
5200 if (myInternalTest == nullptr) {
5201 return true;
5202 } else if (obj == myInternalTest) {
5203 return true;
5204 } else {
5205 return false;
5206 }
5207}
5208
5209// ---------------------------------------------------------------------------
5210// GNEApplicationWindow - protected methods
5211// ---------------------------------------------------------------------------
5212#ifdef _MSC_VER
5213#pragma warning(push)
5214#pragma warning(disable: 4355) // mask warning about "this" in initializers
5215#endif
5217 myToolbarsGrip(this),
5218 myMenuBarFile(this),
5219 myFileMenuCommands(this),
5220 myModesMenuCommands(this),
5221 myEditMenuCommands(this),
5222 myLockMenuCommands(this),
5223 myProcessingMenuCommands(this),
5224 myLocateMenuCommands(this),
5225 myToolsMenuCommands(this),
5226 myWindowsMenuCommands(this),
5227 myHelpMenuCommands(this),
5228 mySupermodeCommands(this) {
5229}
5230#ifdef _MSC_VER
5231#pragma warning(pop)
5232#endif
5233
5234
5235long
5236GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5237 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5238 if (handled == 0 && myMDIClient->numChildren() > 0) {
5239 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5240 if (w != nullptr) {
5241 w->onKeyPress(nullptr, sel, eventData);
5242 }
5243 }
5244 return 0;
5245}
5246
5247
5248long
5249GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5250 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5251 if (handled == 0 && myMDIClient->numChildren() > 0) {
5252 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5253 if (w != nullptr) {
5254 w->onKeyRelease(nullptr, sel, eventData);
5255 }
5256 }
5257 return 0;
5258}
5259
5260
5261/****************************************************************************/
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:861
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:775
@ 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:743
@ 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:891
@ 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:949
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:927
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:777
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:915
@ 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:973
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:809
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:729
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:907
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:687
@ 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:835
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:917
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:787
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:769
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:857
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:887
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:741
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:843
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:841
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:979
@ 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:925
@ 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:965
@ 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:847
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:951
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:895
@ 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:939
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:278
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:929
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:723
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:737
@ 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:755
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:661
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:713
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:815
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:717
@ 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:689
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:937
@ 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:773
@ 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:859
@ 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:971
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:761
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:759
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:883
@ 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:945
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:811
@ 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:897
@ 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:735
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:967
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWFILLEDWALKINGAREAS
draw filled walking areas
Definition GUIAppEnum.h:865
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:771
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:855
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:747
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:849
@ 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:845
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:901
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:953
@ 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:885
@ 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:875
@ 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:871
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:719
@ 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:665
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:913
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:813
@ 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:975
@ 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:911
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:71
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:184
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_UNIFIED
save data elements unified
Definition GUIAppEnum.h:751
@ 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:863
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:837
@ 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:739
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:663
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:943
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:879
@ 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:711
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:853
@ 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:851
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:969
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:789
@ 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:977
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_AS
save additionals element as
Definition GUIAppEnum.h:727
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:899
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:909
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:721
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:877
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:833
@ 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:725
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:941
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:957
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ MID_GNE_TOOLBARFILE_SAVEDATAELEMENTS_AS
save data elements as
Definition GUIAppEnum.h:749
@ 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:745
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:667
@ 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:903
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:881
@ 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:753
@ 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:923
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:955
@ 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:905
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:733
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:268
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:839
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:715
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:947
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:831
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_AS
save meanDatas as
Definition GUIAppEnum.h:757
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:731
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:873
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:893
@ 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:921
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:919
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:807
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:889
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:300
@ MID_LANGUAGE_KO
change language to korean
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition GUIDesigns.h:124
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition GUIDesigns.h:359
#define GUIDesignLabelStatusBar
label used in statusBar
Definition GUIDesigns.h:284
#define GUIDesignSplitter
Definition GUIDesigns.h:505
#define GUIDesignSplitterMDI
MDI Splitter.
Definition GUIDesigns.h:508
#define GUIDesignStatusBar
design used in status bar
Definition GUIDesigns.h:477
@ MESSAGE_OCCURRED
send when a message occurred
@ GLDEBUG_OCCURRED
send when a gldebug occurred
@ ERROR_OCCURRED
send when a error occurred
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occurred
@ WARNING_OCCURRED
send when a warning occurred
GUISelectedStorage gSelected
A global holder of selected objects.
FXString gCurrentFolder
The folder used as last.
@ MODEMEANDATA
@ MODEADDITIONAL
@ SUPERMODEDEMAND
@ NETEDIT_MINI
@ VCLASS_SMALL_TAXI
@ MODECREATEEDGE
@ TOOL_TURNDEFS
@ SUPERMODENETWORK
@ SUPERMODEDATA
@ TOOL_CITYBRAIN
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:288
#define WRITE_ERROR(msg)
Definition MsgHandler.h:295
#define TL(string)
Definition MsgHandler.h:304
#define TLF(string,...)
Definition MsgHandler.h:306
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:294
std::vector< std::string > StringVector
Definition of a vector of strings.
Definition Option.h:42
@ SUMO_TAG_TYPES
types (edge)
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ GNE_ATTR_SAVEFILE
save file
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:49
bool isErrorCreatingElement() const
get flag for mark if a element wasn't created
void forceOverwriteElements()
force overwritte elements (used if we're reloading elements)
bool parse()
parse
void setSelector(FXSelector sel)
set the selector
void setTarget(FXObject *tgt)
set the target
static bool isReadable(std::string path)
Checks whether the given file is readable.
static void resetFont()
to be called when the font context is invalidated
Definition GLHelper.cpp:666
std::string getConfigDirectory() const
get current config directory (if we defined a netedit, sumo or netconvert config)
void resetDefaultFilenames()
brief set default files for all buckets
std::string getDefaultFilename(const FileBucket::Type type) const
functions related with filenames
bool isFilenameDefined(const FileBucket::Type type) const
check if at least we have an additional file defined
std::string getConfigFilePrefix(const std::string &sufix) const
get current config patter (if we defined a netedit, sumo or netconvert config)
std::string getDefaultFolder(const FileBucket::Type type) const
get default folder associated with the given tipe
FileBucket * getBucket(const FileBucket::Type type, const std::string &filename, const bool create)
get bucket
void setDefaultFilenameFile(const FileBucket::Type type, const std::string &filename)
brief set default additional file
long onCmdOpenNetgenerateDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate" button
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands
Supermode Commands.
long onCmdToggleUndoRedoLoading(FXObject *, FXSelector, void *)
called when toggle checkbox disable undo redo during loading (file)
long onCmdSaveTLSProgramsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms as is executed
FXMenuTitle * myModesMenuTitle
menu title for modes
const std::string & isUndoRedoEnabledTemporally() const
check if undo-redo is enabled temporally
void create()
Creates the main window (required by FOX)
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + J to toggle draw junction shape
GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands
Windows Menu Commands.
GNELoadThread * myLoadThread
the thread that loads the network
void enableUndoRedoTemporally()
enable undo-redo temporally (for example, after creating an edge)
void clearUndoList()
clear undo list
GNENet * myNet
we are responsible for the net
long onCmdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is executed
long onCmdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onCmdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is executed
void handleEvent_Message(GUIEvent *e)
handle event of type message
long onCmdSaveAdditionalElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals as
long onCmdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is executed
long onCmdLoadAdditionalsInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load additionals"
long onCmdOpenTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall open TLS programs is executed
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
long onCmdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
void updateControls()
update control contents after undo/redo or recompute
long onUpdSaveMeanDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas unified is executed
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands
Lock Menu Commands.
const GNETagPropertiesDatabase * myTagPropertiesDatabase
tagProperties database
long onCmdSavePlainXML(FXObject *, FXSelector, void *)
called when the command/FXCall save plain xml is executed
long onCmdFeedback(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->feedback
long onCmdNewNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall new network is executed
long onCmdRunTests(FXObject *, FXSelector, void *)
run tests
long onCmdSavePlainXMLAs(FXObject *, FXSelector, void *)
called when the command/FXCall save as plain xml is executed
long onCmdOpenOptionsDialog(FXObject *, FXSelector, void *)
called when user press "options" button
GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands
Help Menu Commands.
GNEApplicationWindow()
FOX needs this for static members.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
called when the command/FXCall clipboard request is executed
long onCmdToggleUndoRedo(FXObject *, FXSelector, void *)
called when toggle checkbox disable undo redo (processing)
long onCmdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is executed
long onUpdSaveNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall save network is executed
std::string myUndoRedoListEnabled
string to check if undo/redo list is enabled (a String is used to keep the disabling reason)
std::map< std::string, FXMenuPane * > myMenuPaneToolMaps
map with menu pane tools and strings
long onCmdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is executed
long onCmdOpenMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open meanDatas is executed
long onUpdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is updated
long onUpdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as is updated
long onCmdClose(FXObject *, FXSelector, void *)
called when the command/FXCall close is executed
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
long onCmdToggleViewOption(FXObject *, FXSelector, void *)
toggle viewOption
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
OptionsCont myOriginalNetgenerateOptions
original netgenerate options container
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
OptionsCont myOriginalNeteditOptions
original netedit options container
void loadDemandElements(const std::string operation)
load demand elements from netedit options
long onCmdProcessButton(FXObject *sender, FXSelector sel, void *)
called when user press a process button (or a shortcut)
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
GNEApplicationWindowHelper::ModesMenuCommands & getModesMenuCommands()
get modes Menu Commands (needed for show/hide menu commands)
long onCmdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
called if the user press the toggle time format button
long onCmdRunNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
called when run netgenerate is called
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands
Processing Menu Commands.
OptionsCont & getSumoOptions()
get SUMO options container
FXMenuPane * myToolsImportCityBrainMenu
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
get Edit Menu Commands (needed for show/hide menu commands)
void setStatusBarText(const std::string &statusBarText)
set text of the statusBar
GNEUndoList * myUndoList
the one and only undo list
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
FXMenuPane * myFileMenuDemandElements
long onCmdSmartReload(FXObject *, FXSelector, void *)
called when the command/FXCall smart reload is executed
void loadEdgeTypes(const std::string operation)
load meanData elements
long onCmdPaste(FXObject *, FXSelector, void *)
long onUpdPythonTool(FXObject *, FXSelector, void *)
called when the command/FXCall python tool is updated
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall open network is executed
GNEExternalRunner * myExternalRunner
external runner for running external tools
long onCmdComputePathManager(FXObject *, FXSelector, void *)
long onCmdToggleComputeNetworkData(FXObject *, FXSelector, void *)
called when toggle checkbox compute network when switching between supermodes
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
GNEInternalTest * getInternalTest() const
get netedit test system
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread is executed
long onUpdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements unified is executed
long onUpdRequireRecomputing(FXObject *sender, FXSelector sel, void *ptr)
update label for require recomputing
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is executed
long onUpdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onUpdSaveDemandElements(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements is executed
OptionsCont myOriginalSumoOptions
original sumo options container
OptionsCont myNetgenerateOptions
netgenerate options container
SUMOTime getCurrentSimTime() const
get current simulation time (pure virtual but we don't need it)
long onUpdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is updated
long onCmdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is executed
FXMenuPane * myFileMenuMeanDataElements
long onCmdLockAllElements(FXObject *, FXSelector sel, void *)
called when user press lock all elements button
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
long onCmdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
long onCmdClearSelectionShortcut(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for clear selection
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
GNEUndoList * getUndoList()
get pointer to undoList
long onUpdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is updated
long onUpdNeedsFrontElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs front element is executed
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
void loadTrafficLights(const std::string operation)
load traffic lights
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
GNEApplicationWindowHelper::FileBucketHandler * myFileBucketHandler
saving files handler
long onUpdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is updated
void disableUndoRedoTemporally(const std::string &reason)
disable undo-redo temporally giving a string with the reason (for example, if we're creating an edge)
long onCmdToggleGrid(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + G to toggle grid
void dependentBuild()
build dependent
long onCmdEditChosen(FXObject *, FXSelector, void *)
called when the command/FXCall edit chosen is executed
long onUpdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is updated
long onCmdOpenSumoOptionsDialog(FXObject *, FXSelector, void *)
called when user press "sumo options" button
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands
Edit Menu Commands.
long onCmdSetSuperMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-supermode hotkey
bool allowInputSignals(FXObject *obj) const
check if ignore input signal (using during netedit tests)
long onCmdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is executed
long onUpdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is updated
void loadMeanDataElements(const std::string operation)
load meanData elements from netedit options
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
GNEViewNet * myViewNet
pointer to current view net
GNEExternalRunner * getExternalRunner() const
get external runner
long onUpdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onUpdNeedsNetworkElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs at least one network element is executed
const FXString myTitlePrefix
the prefix for the window title
long onCmdOpenAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
GNEApplicationWindowHelper::FileBucketHandler * getFileBucketHandler() const
get file bucket handler
long onCmdSaveNetworkAs(FXObject *, FXSelector, void *)
called when the command/FXCall save network as is executed
double getTrackerInterval() const
get current tracker interval (pure virtual but we don't need it)
void fillMenuBar()
Builds the menu bar.
long onCmdFocusFrame(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for focus on frame
long onCmdSaveMeanDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas as is executed
long onCmdToggleFrontElement(FXObject *, FXSelector, void *)
called if the user call toggle front element
void loadConfiguration(const std::string &configurationFile)
starts to load a configuration
GNEApplicationWindowHelper::LockMenuCommands & getLockMenuCommands()
get lock Menu Commands
long onCmdPostprocessingNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
postprocessing netgenerate
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
long onCmdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is executed
long onUpdRequireViewNet(FXObject *sender, FXSelector sel, void *ptr)
enable or disable sender object depending if viewNet exist
long onUpdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is updated
OptionsCont & getNetgenerateOptions()
get netgenerate options container
long onCmdSaveDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements is executed
long onCmdCut(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdNewWindow(FXObject *, FXSelector, void *)
long onCmdSaveJoinedJunctionsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save joined is executed
long onCmdOpenEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall open edgeType is executed
long onCmdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save JuPedSim elements as is executed
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database
void setExternalRunner(GNEExternalRunner *externalRunner)
set external runner
long onCmdLoadDemandInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load demand"
long onUpdLockMenuTitle(FXObject *, FXSelector sel, void *)
enable or disable lock menu title
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onUpdSaveDataElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements unified is executed
long onCmdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is executed
long onCmdRedo(FXObject *sender, FXSelector, void *)
long onCmdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements as is executed
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
long onCmdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements as is executed
void handleEvent_FileLoaded(GUIEvent *e)
handle event of type Network loaded
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadAdditionalElements(const std::string operation)
load additional elements from netedit options
GNEInternalTest * myInternalTest
internal test system
void loadOSM(const std::string &OSMFile)
starts to load a OSM File
long onUpdSaveAdditionalElements(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals is executed
long onCmdOpenNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netedit config is executed
bool myAllowUndoRedoLoading
allow undo-redo loading (read from registry)
long onCmdOpenRecent(FXObject *, FXSelector, void *)
called when the command/FXCall open recent is executed
void closeAllWindows(const bool resetFilenames)
this method closes all windows and deletes the current simulation
bool myAllowUndoRedo
allow undo-redo (read from registry)
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
long onUpdOpen(FXObject *, FXSelector, void *)
called when the command/FXCall on update open executed
long onCmdSetMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-mode hotkey
bool myHadDependentBuild
check if had dependent build
long onCmdBackspace(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits backspace
void updateRecomputingLabel()
update recomputing label
bool askSaveElements(FXObject *sender, FXSelector sel, void *ptr)
warns about unsaved changes and gives the user the option to abort
long onUpdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
long onCmdCopy(FXObject *, FXSelector, void *)
long onCmdOpenSUMOGUI(FXObject *sender, FXSelector sel, void *ptr)
called if the user hints ctrl + T
long onCmdOpenDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall open demand is executed
FXMenuPane * myToolsVisualizationMenu
void loadNetwork(const std::string &networkFile)
load network
long onUpdToggleViewOption(FXObject *, FXSelector, void *)
update viewOption
GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands
Tools Menu Commands.
long onCmdUnlockAllElements(FXObject *, FXSelector sel, void *)
called when user press unlock all elements button
long onUpdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is updated
long onUpdNeedsNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall needs network is executed
long onUpdReloadAdditionalElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is updated
GNEApplicationWindowHelper::ToolbarsGrip & getToolbarsGrip()
get ToolbarsGrip
long onUpdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save juPedSim as is executed
long onUpdReloadNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall network reload is executed
OptionsCont mySumoOptions
sumo options container
bool consoleOptionsLoaded()
check if console options was already loaded
long onCmdSaveDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements is executed
long onCmdOpenPythonToolDialog(FXObject *obj, FXSelector, void *)
called when user press over a tool dialog button
long onCmdLocate(FXObject *, FXSelector, void *)
called when the command/FXCall locate is executed
long onCmdDel(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits del
long onCmdHotkeys(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Hotkeys
long onCmdOpenDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open data is executed
long onCmdRunPythonTool(FXObject *obj, FXSelector, void *)
called when user run a tool
void updateSuperModeMenuCommands(const Supermode supermode)
update FXMenuCommands depending of supermode
OptionsCont myNetconvertOptions
netconvert options container
bool myConsoleOptionsLoaded
flag for check if console options was already loaded
long onUpdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is updated
void createNewNetwork()
create new network
long onCmdEnter(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits enter
FXCursor * getDefaultCursor()
get default cursor
long onCmdSetTemplate(FXObject *, FXSelector, void *)
GNEApplicationWindowHelper::FileMenuCommands & getFileMenuCommands()
get file Menu Commands (needed for show/hide menu commands)
long onCmdSaveDataElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements unified is executed
long onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
long onCmdOpenNetgenerateOptionsDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate options" button
long onUpdUndo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall undo is executed
const GNEApplicationWindowHelper::ProcessingMenuCommands & getProcessingMenuCommands() const
get processing Menu Commands
long onCmdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements unified is executed
long onCmdPostProcessingPythonTool(FXObject *obj, FXSelector, void *)
post processing after run tool
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
long onCmdReloadNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall network reload is executed
long onUpdSaveAdditionalElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals unified is executed
long onUpdSmartReload(FXObject *, FXSelector, void *)
called when the update/FXCall smart reload is executed
FXMenuPane * myFileMenuRecentNetworks
FXSplitter * myMainSplitter
The splitter that divides the main window into view and the log window.
long onCmdLockSelectElements(FXObject *, FXSelector sel, void *)
called when user press lock select elements button
long onCmdOpenNetconvertConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netconvertconfiguration is executed
long onCmdSaveTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms is executed
long onUpdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is updated
long onCmdUndo(FXObject *sender, FXSelector, void *)
called when user press Ctrl+Z
long onCmdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is executed
long onCmdSaveNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall save network is executed
FXMenuPane * myFileMenu
the submenus
long computeJunctionWithVolatileOptions(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects Processing->compute junctions with volatile options
GNEApplicationWindowHelper::ToolbarsGrip myToolbarsGrip
Toolbars Grip.
long onUpdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
update toggle time format button
MFXSynchQue< GUIEvent * > myThreadEvents
List of load requests.
long onCmdSaveAdditionalElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals unified is executed
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
called when a key is released
void loadDataElements(const std::string operation)
load data elements from netedit options
GNEApplicationWindowHelper::ModesMenuCommands myModesMenuCommands
Modes Menu Commands.
long onUpdSaveTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms is updated
FXGLCanvas * getBuildGLCanvas() const
get build GL Canvas (must be implemented in all children)
long onCmdEditViewScheme(FXObject *, FXSelector, void *)
Called on menu Edit->Visualization.
long onCmdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as is executed
long onCmdOpenForeign(FXObject *, FXSelector, void *)
called when the command/FXCall open foreign is executed
long onCmdSaveMeanDataElementsUnified(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas unified is executed
void refreshAttributesEditor()
refresh attribute editor
GNEAttributesEditorType * getNeteditAttributesEditor() const
get netedit attributes editor
void abortReparenting()
abort selecting parent
void refreshAttributesEditor()
refresh attribute editor
GNEAttributesEditor * getContainerAttributesEditor() const
get attributes editor
void refreshEdgeTypeSelector()
refresh edge type selector
EdgeTypeSelector * getEdgeTypeSelector() const
get edgeType selector
Result getResult() const
get result to indicate if this dialog was closed accepting or rejecting changes
Result
list of possible results when closing the dialog
Definition GNEDialog.h:70
void addLaneType(GNELaneType *laneType)
add laneType
GNENet * getNet() const
get the loaded net
const std::string & getSettingsFile() const
get the name of the settings file to load
bool getViewportFromRegistry() const
get whether loading viewport from registry
const std::string & getFile() const
get the name of the loaded file
GNEEvent_FileLoaded::Type getType() const
get event type
std::string getFilename() const
Return file name, if any.
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition GNEFrame.cpp:187
void forceOverwriteElements()
force overwritte elements (used if we're reloading elements)
bool isErrorCreatingElement() const
get flag for check if a element wasn't created
void clearTemplate()
clear template (used by shortcut)
void setTemplate()
set template (used by shortcut)
void copyTemplate()
copy template (used by shortcut)
TemplateEditor * getTemplateEditor() const
get template editor
void clearInspection()
clear inspection
GNEAttributesEditor * getAttributesEditor() const
get AttributesEditor
void refreshInspection()
refresh current inspection
void runNeteditInternalTests(GNEApplicationWindow *applicationWindow)
run netedit internal test
void newNetwork()
begins the creation of an empty network
static void fillOptions(OptionsCont &neteditOptions)
clears and initializes the OptionsCont
void loadNetworkOrConfig()
begins the loading of an existent network or config
static void setDefaultOptions(OptionsCont &neteditOptions)
sets required options for proper functioning
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEDemandElement * >, std::hash< int > > & getDemandElements() const
get demand elements
const std::unordered_map< const GUIGlObject *, GNECrossing * > & getCrossings() const
get crossings
int getNumberOfMeanDatas() const
get number of meanDatas
const std::unordered_map< SumoXMLTag, std::map< const std::string, GNEMeanData * >, std::hash< int > > & getMeanDatas() const
get meanDatas
const std::map< const std::string, GNEDataSet * > & getDataSets() const
get demand elements
const std::map< std::string, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
int getNumberOfDemandElements() const
get number of current demand elements saved in AttributeCarriers (default vTypes are NOT included)
int getNumberOfAdditionals() const
get number of additionals
bool requireJunctionTazOption() const
check if we have elements that requires the option junction-taz
const std::map< std::string, GNEJunction * > & getJunctions() const
get junctions
const std::map< std::string, GNEEdgeType * > & getEdgeTypes() const
map with the ID and pointer to edgeTypes of net
const std::unordered_map< SumoXMLTag, std::unordered_map< const GUIGlObject *, GNEAdditional * >, std::hash< int > > & getAdditionals() const
get additionals
GNEDialog::Result askSaveMeanDataElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in meanData elements and gives the user the option to abort
void dataElementsSaved()
mark demand elements as saved
GNEDialog::Result askSaveDemandElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in demand elements and gives the user the option to abort
void requireSaveNetwork()
inform that network has to be saved
void demandElementsSaved()
mark demand elements as saved
void SumoConfigSaved()
mark SumoConfig as saved
void additionalsSaved()
mark additionals as saved
void requireSaveNeteditConfig()
inform that netedit config has to be saved
void requireSaveSumoConfig()
inform that SumoConfig has to be saved
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void requireSaveMeanDatas()
inform that mean data elements has to be saved
void meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
GNEDialog::Result askSaveAdditionalElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in additionals and gives the user the option to abort
void requireSaveAdditionals()
inform that additionals has to be saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
GNEDialog::Result askSaveNetwork(GNEDialog::Result &commonResult) const
warns about unsaved changes in network and gives the user the option to abort
bool isAdditionalsSaved() const
check if additionals are saved
void requireSaveDemandElements()
inform that demand elements has to be saved
GNEDialog::Result askSaveDataElements(GNEDialog::Result &commonResult) const
warns about unsaved changes in data elements and gives the user the option to abort
void clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition GNENet.cpp:2135
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1792
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1632
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2403
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2828
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1441
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:186
void enableUpdateData()
Definition GNENet.cpp:2893
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2847
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2170
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2338
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2148
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:198
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1898
void computeNetwork(GNEApplicationWindow *window, bool force=false, bool volatileOptions=false)
trigger full netbuild computation param[in] window The window to inform about delay param[in] force W...
Definition GNENet.cpp:1469
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1943
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1808
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:174
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition GNENet.cpp:2181
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2904
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2227
void saveNetwork()
save the network
Definition GNENet.cpp:1394
bool saveJuPedSimElements(const std::string &filename)
save JuPedSim elements
Definition GNENet.cpp:2272
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1626
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1750
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1834
void requireRecompute()
inform the net about the need for recomputation
Definition GNENet.cpp:1619
GNEViewParent * getViewParent() const
get view parent (used for simplify code)
Definition GNENet.cpp:150
void savePlain(const std::string &prefix, const OptionsCont &netconvertOptions)
save plain xml representation of the network (and nothing else)
Definition GNENet.cpp:1432
bool saveDemandElements()
save demand element elements of the network
Definition GNENet.cpp:2289
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1568
bool isOptionModified() const
check if option was modified
bool requireSaveNetwork() const
check if modified network requiere save network
void updatePathCalculator()
update DijkstraRouter (needed a good calculation of dijkstra path after modifying network)
bool isPathCalculatorUpdated() const
check if pathCalculator is updated
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
GNEAttributesEditor * getPersonAttributesEditor() const
get attributes creator
void loadFromFile(const std::string &file) const
load from file
void clearCurrentSelection() const
clear current selection with possibility of undo/redo
GNESelectorFrame::SelectionOperation * getSelectionOperationModul() const
get selection operation modul
bool isOptionModified() const
check if option was modified
bool isChangesPending() const
return true if there is changes to save
const std::vector< CurrentTAZ::TAZEdgeColor > & getEdgeAndTAZChildrenSelected() const
get map with edge and TAZChildren
void clearSelectedEdges()
clear current TAZ children
TAZSelectionStatistics * getTAZSelectionStatisticsModule() const
get TAZ Selection Statistics module
TAZSaveChanges * getTAZSaveChangesModule() const
get TAZ Save Changes module
bool parseTLSPrograms(const std::string &file)
parse TLS Programs from a file
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void undo()
undo the last command group
long onUpdUndo(FXObject *, FXSelector, void *)
event after Undo
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
void abortAllChangeGroups()
reverts and discards ALL active chained change groups
Supermode getRedoSupermode() const
get redo supermode
long onUpdRedo(FXObject *, FXSelector, void *)
event after Redo
Supermode getUndoSupermode() const
get undo supermode
void redo()
redo the last command group
void add(GNEChange *command, bool doit=false, bool merge=true)
Add new command, executing it if desired. The new command will be merged with the previous command if...
GNEAttributesEditor * getVehicleAttributesEditor() const
get attributes creator
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all inspected ACs
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all fronted ACs
long onCmdToggleShowDemandElementsNetwork(FXObject *, FXSelector, void *)
toggle show demand elements (network)
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
GNENet * getNet() const
get the net object
void hotkeyBackSpace()
handle backspace keypress
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
long onCmdToggleShowDemandElementsData(FXObject *, FXSelector, void *)
toggle show demand elements (data)
void abortOperation(bool clearSelection=true)
abort current edition operation
GNEViewNetHelper::InspectedElements & getInspectedElements()
get inspected elements
long onCmdToggleDrawSpreadVehicles(FXObject *, FXSelector, void *)
toggle draw vehicles in begin position or spread in lane
long onCmdToggleShowConnections(FXObject *, FXSelector, void *)
toggle show connections
long onCmdToggleShowTAZElements(FXObject *, FXSelector, void *)
toggle show TAZ elements
long onCmdToggleMoveElevation(FXObject *, FXSelector, void *)
toggle move elevation
long onCmdToggleShowAllPersonPlans(FXObject *, FXSelector, void *)
toggle show all person plans in super mode demand
long onCmdToggleTAZRelOnlyTo(FXObject *, FXSelector, void *)
toggle TAZRez only to
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
void hotkeyFocusFrame()
handle focus frame keypress
long onCmdToggleChainEdges(FXObject *, FXSelector, void *)
toggle chain edges
long onCmdToggleLockContainer(FXObject *, FXSelector, void *)
toggle lock container in super mode demand
long onCmdToggleShowGrid(FXObject *, FXSelector, void *)
toggle show grid
GNEViewNetHelper::MarkFrontElements & getMarkFrontElements()
get marked for drawing front elements
long onCmdToggleHideNonInspecteDemandElements(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
GNEViewParent * getViewParent() const
get the net object
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
toggle draw junction shape
long onCmdToggleShowShapes(FXObject *, FXSelector, void *)
toggle show shapes in super mode data
long onCmdToggleMergeAutomatically(FXObject *, FXSelector, void *)
toggle warn for merge
GNEViewNetHelper::SaveElements & getSaveElements()
get variable used to save elements
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
long onCmdSetSupermode(FXObject *, FXSelector sel, void *)
long onCmdToggleExtendSelection(FXObject *, FXSelector, void *)
toggle extend selection
bool aksChangeSupermode(const std::string &operation, Supermode expectedSupermode)
ask about change supermode
long onCmdSetMode(FXObject *, FXSelector sel, void *)
called when user press a mode button (Network or demand)
void hotkeyEnter()
handle enter keypress
long onCmdToggleShowOverlappedRoutes(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
long onCmdToggleAutoOppositeEdge(FXObject *, FXSelector, void *)
toggle autoOpposite edge
GNEViewNetHelper::LockManager & getLockManager()
get lock manager
void updateControls()
update control contents after undo/redo or recompute
void hotkeyDel()
handle del keypress
long onCmdToggleChangeAllPhases(FXObject *, FXSelector, void *)
toggle change all phases
long onCmdToggleTAZRelDrawing(FXObject *, FXSelector, void *)
toggle TAZRel drawing
long onCmdToggleShowJunctionBubbles(FXObject *, FXSelector, void *)
toggle show junction bubbles
long onCmdToggleShowAdditionalSubElements(FXObject *, FXSelector, void *)
toggle show additional sub-elements
long onCmdToggleShowAllContainerPlans(FXObject *, FXSelector, void *)
toggle show all container plans in super mode demand
long onCmdToggleTAZRelOnlyFrom(FXObject *, FXSelector, void *)
toggle TAZRez only from
long onCmdToggleShowAdditionals(FXObject *, FXSelector, void *)
toggle show additionals in super mode data
long onCmdToggleLockPerson(FXObject *, FXSelector, void *)
toggle lock person in super mode demand
GNEViewNetHelper::TimeFormat & getTimeFormat()
get variable used to switch between time formats
long onCmdToggleSelectEdges(FXObject *, FXSelector, void *)
toggle select edges
long onCmdToggleShowTrips(FXObject *, FXSelector, void *)
toggle show all trips in super mode demand
long onCmdToggleHideShapes(FXObject *, FXSelector, void *)
toggle hide shapes in super mode demand
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
long onCmdToggleShowPolygonSymbols(FXObject *, FXSelector, void *)
toggle show polygon symbols
A single child window which contains a view of the simulation area.
void updateUndoRedoButtons()
update toolbar undo/redo buttons (called when user press Ctrl+Z/Y)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
Called when user press a key.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
void saveDecals(const std::vector< GUISUMOAbstractView::Decal > &decals)
Makes the given decals the default.
static void close()
close GUICursorSubSys
static void initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
static FXMenuCommand * buildFXMenuCommandShortcut(FXComposite *p, const std::string &text, const std::string &shortcut, const std::string &info, FXIcon *icon, FXObject *tgt, FXSelector sel)
build menu command
The application's "Feedback" dialog.
void create()
Creates the widget.
Editor for the list of chosen objects.
const std::string & getMsg() const
Returns the message.
GUIEventType getOwnType() const
returns the event type
Definition GUIEvent.h:89
GUISUMOAbstractView * getView() const
return GUISUMOAbstractView
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static void initIcons(FXApp *a)
Initiate GUIIconSubSys.
static void close()
close GUIIconSubSys
void setWindowSizeAndPos()
perform initial window positioning and sizing according to user options / previous call
std::vector< FXMainWindow * > myTrackerWindows
list of tracker windows
FXMenuPane * myLanguageMenu
Language menu common to all applications.
FXLabel * myCartesianCoordinate
Labels for the current cartesian, geo-coordinate and test coordinates.
std::map< std::string, std::string > myOnlineMaps
online mapping services for the context menu
MFXStaticToolTip * myStaticTooltipMenu
static toolTip used in menus
FXMDIClient * myMDIClient
The multi view panel.
void buildLanguageMenu(FXMenuBar *menuBar)
long onCmdChangeLanguage(FXObject *, FXSelector, void *)
FXHorizontalFrame * myGeoFrame
FXHorizontalFrame * myTestFrame
FXHorizontalFrame * myCartesianFrame
FXLabel * myTestCoordinate
FXMutex myTrackerLock
A lock to make the removal and addition of trackers secure.
void storeWindowSizeAndPos()
record window position and size in registry
FXLabel * myGeoCoordinate
FXStatusBar * myStatusbar
The status bar.
FXGLVisual * myGLVisual
The gl-visual used.
std::vector< GUIGlChildWindow * > myGLWindows
list of GLWindows
long onUpdChangeLanguage(FXObject *, FXSelector, void *)
A logging window for the gui.
void addSeparator()
Adds a a separator to this log window.
void unregisterMsgHandlers()
unregister message handlers
void clear()
Clears the window.
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
void registerMsgHandlers()
register message handlers
virtual double getRotation() const =0
Returns the rotation of the canvas stored in this changer.
virtual double getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
virtual double getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
virtual double getZPos() const =0
Returns the camera height corresponding to the current zoom factor.
void addDecals(const std::vector< Decal > &decals)
add decals
void showViewschemeEditor()
show viewsscheme editor
void processPendingTextureDeletes()
process pending texture deletions
FXbool makeCurrent()
A reimplementation due to some internal reasons.
virtual void showViewportEditor()
show viewport editor
GUIPerspectiveChanger & getChanger() const
get changer
std::vector< Decal > & getDecals()
The list of decals to show.
void clearDecals()
clear all decals
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
void destroyPopup()
destroys the popup
An XML-handler for visualisation schemes.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
static void buildAccelerators(FXAccelTable *accelTable, FXObject *target, const bool sumogui)
build accelerators
static void close()
close GUITextureSubSys
static void resetTextures()
Reset textures.
static void initTextures(FXApp *a)
Initiate GUITextureSubSys for textures.
static std::string clipped
Definition GUIUserIO.h:58
bool parse()
parse
static void resetLoaded()
resets loaded location elements
bool isRunning() const
check if test is running
void stopTests()
stop tests
bool amChecked() const
check if this MFXCheckableButton is checked
void toggleCheck()
Toggle current check state.
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependence to an optional file name.
Definition MFXUtils.cpp:62
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp:776
A storage for available edgeTypes of edges.
Definition NBTypeCont.h:52
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NIFrame.cpp:397
static bool load(SUMOSAXHandler &handler, const std::vector< std::string > &files, const std::string &type, const bool stringParse=false)
Importer for edge type information stored in XML.
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition NWFrame.cpp:148
A storage for options typed value containers)
Definition OptionsCont.h:89
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false, const std::string &indent="") const
Writes the configuration.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
void setOptionEditable(const std::string &name, const bool value)
set option editable
void doRegister(const std::string &name, Option *o)
Adds an option under the given name.
void setApplicationDescription(const std::string &appDesc)
Sets the application description.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
std::string getValueString(const std::string &name) const
Returns the string-value of the named option (all options)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.
Definition Position.h:37
void set(double x, double y)
set positions x and y
Definition Position.h:82
double x() const
Returns the x-position.
Definition Position.h:52
double y() const
Returns the y-position.
Definition Position.h:57
static StringBijection< SumoConfigFileExtension > SumoConfigFileExtensions
sumo config file extensions
static StringBijection< AdditionalFileExtension > AdditionalFileExtensions
additional file extensions
static StringBijection< MeanDataFileExtension > MeanDataFileExtensions
mean data file extensions
static StringBijection< TLSFileExtension > TLSFileExtensions
TLS file extensions.
static StringBijection< RouteFileExtension > RouteFileExtensions
route file extensions
static StringBijection< NetconvertConfigFileExtension > NetconvertConfigFileExtensions
netconvert config file extensions
static StringBijection< OSMFileExtension > OSMFileExtensions
OSM file extensions.
static StringBijection< EdgeDataFileExtension > EdgeDataFileExtensions
edgedata file extensions
static StringBijection< NetconvertPlainFileExtension > NetconvertPlainFileExtensions
netconvert config file extensions
static StringBijection< JunctionFileExtension > JunctionFileExtensions
juntion file extensions
static StringBijection< NeteditConfigFileExtension > NeteditConfigFileExtensions
netedit config file extensions
static StringBijection< NetFileExtension > NetFileExtensions
net file extensions
static StringBijection< EdgeTypeFileExtension > EdgeTypeFileExtensions
edge file extensions
static std::string escapeShell(const std::string &orig)
Escape special characters with backslash.
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp:70
static bool checkOptions(OptionsCont &oc)
checks shared options and sets StdDefs
static void parseTemplate(OptionsCont &options, const std::string &templateString)
run parser
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition XMLSubSys.cpp:88
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
@ SEL_THREAD_EVENT
Definition fxexdefs.h:173
@ SEL_THREAD
Definition fxexdefs.h:155
DemandViewOptions demandViewOptions
demand view options
FXMenuCheck * menuCheckAllowUndoRedo
checkBox for allow undo-redo
NetworkViewOptions networkViewOptions
network view options
void buildUndoRedoMenuCommands(FXMenuPane *editMenu)
build undo-redo menu commands
void buildViewMenuCommands(FXMenuPane *editMenu)
build view menu commands
FXMenuCheck * loadAdditionalsInSUMOGUI
menu check for load additionals in SUMO GUI
FXMenuCommand * undoLastChange
FXMenuCommand for undo last change.
FXMenuCommand * toggleFrontElement
FXMenuCommand for toggle front element.
FXMenuCheck * loadDemandInSUMOGUI
menu check for load demand in SUMO GUI
FXMenuCommand * redoLastChange
FXMenuCommand for redo last change.
void buildOpenSUMOMenuCommands(FXMenuPane *editMenu)
build open sumo menu commands
void buildFrontElementMenuCommand(FXMenuPane *editMenu)
build front element commands
void buildFileMenuCommands(FXMenuPane *fileMenu, FXMenuPane *fileMenuNEEDITConfig, FXMenuPane *fileMenuSumoConfig, FXMenuPane *fileMenuTLS, FXMenuPane *fileMenuEdgeTypes, FXMenuPane *fileMenuAdditionals, FXMenuPane *fileMenuDemandElements, FXMenuPane *fileMenuDataElements, FXMenuPane *fileMenuMeanDataElements)
build menu commands
FXMenuCheck * menuCheckAllowUndoRedoLoading
checkBox for allow undo-redo loading
void buildHelpMenuCommands(FXMenuPane *helpMenu)
build menu commands
void buildLocateMenuCommands(FXMenuPane *locateMenu)
build menu commands
void buildLockMenuCommands(FXMenuPane *editMenu)
build menu commands
MFXMenuCheckIcon * menuCheckLockConnections
menu check to lock connections
void hideNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockPersons
menu check to lock persons
MFXMenuCheckIcon * menuCheckLockVehicles
menu check to lock vehicles
MFXMenuCheckIcon * menuCheckLockCrossings
menu check to lock crossings
MFXMenuCheckIcon * menuCheckLockTAZs
menu check to lock TAZs
void hideDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockEdgeTAZRels
menu check to lock edgeTAZRels
void hideDataLockMenuCommands()
show data processing menu commands
void showDataLockMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckLockPersonTrips
menu check to lock personTrips
MFXMenuCheckIcon * menuCheckLockWires
menu check to lock Wires
MFXMenuCheckIcon * menuCheckLockPOIs
menu check to lock POIs
MFXMenuCheckIcon * menuCheckLockPolygons
menu check to lock polygons
MFXMenuCheckIcon * menuCheckLockWalkingAreas
menu check to lock walkingAreas
MFXMenuCheckIcon * menuCheckLockEdges
menu check to lock edges
MFXMenuCheckIcon * menuCheckLockRides
menu check to lock rides
MFXMenuCheckIcon * menuCheckLockContainers
menu check to lock containers
MFXMenuCheckIcon * menuCheckLockJpsWalkableAreas
menu check to lock jps walkableareas
MFXMenuCheckIcon * menuCheckLockEdgeRelDatas
menu check to lock edgeRelDatas
MFXMenuCheckIcon * menuCheckLockStops
menu check to lock stops
MFXMenuCheckIcon * menuCheckLockLanes
menu check to lock lanes
MFXMenuCheckIcon * menuCheckLockAdditionals
menu check to lock additionals
void showNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockWalks
menu check to lock walks
MFXMenuCheckIcon * menuCheckLockJpsObstacles
menu check to lock jps obstacles
void showDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockTranships
menu check to lock tranships
MFXMenuCheckIcon * menuCheckLockTransports
menu check to lock transports
void buildRecentConfigFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentConfigFiles)
build recent config
MFXRecentNetworks myRecentConfigs
List of recent configs.
MFXRecentNetworks myRecentNetworks
List of recent networks.
void buildRecentNetworkFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentNetworkFiles)
build recent network
void buildModesMenuCommands(FXMenuPane *modesMenu)
build modes menu commands
DemandMenuCommands demandMenuCommands
Demand Menu Commands.
void setDefaultView(Supermode supermode)
set default view
void setJuPedSimView(Supermode supermode)
set JuPedSim view
NetworkMenuCommands networkMenuCommands
Network Menu Commands.
void showDataProcessingMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckRecomputeDataMode
checkBox for recomputing when changing data mode
void showDemandProcessingMenuCommands()
show demand processing menu commands
void hideDemandProcessingMenuCommands()
show demand processing menu commands
void hideDataProcessingMenuCommands()
show data processing menu commands
void buildProcessingMenuCommands(FXMenuPane *processingMenu)
build menu commands
void showNetworkProcessingMenuCommands()
show network processing menu commands
void hideNetworkProcessingMenuCommands()
show network processing menu commands
void buildSupermodeCommands(FXMenuPane *editMenu)
build menu commands
FXMenuBar * menu
The application menu bar (for file, edit, processing...)
long postProcessing(FXObject *menuCommand) const
run postprocessing
void buildTools(FXMenuPane *toolsMenu, const std::map< std::string, FXMenuPane * > &menuPaneToolMaps)
build tools (and menu commands)
long runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
static bool toggleEditOptionsDemand(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Demand menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsData(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Data menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckLockContainer
Lock Container.
DataEditMode dataEditMode
the current Data edit mode
bool isDefaultView() const
check if default view is enabled
DemandEditMode demandEditMode
the current Demand edit mode
Supermode currentSupermode
the current supermode
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
MFXCheckableButton * menuCheckSelectEdges
checkable button to select only edges
MFXCheckableButton * menuCheckChainEdges
checkable button to the endpoint for a created edge should be set as the new source
MFXCheckableButton * menuCheckShowDemandElements
checkable button to show Demand Elements
MFXCheckableButton * menuCheckMoveElevation
checkable button to apply movement to elevation
MFXCheckableButton * menuCheckShowTAZElements
checkable button to show TAZ elements
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
MFXCheckableButton * menuCheckAutoOppositeEdge
check checkable to create auto create opposite edge
MFXCheckableButton * menuCheckDrawSpreadVehicles
checkable button to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowConnections
checkable button to show connections
MFXCheckableButton * menuCheckHideConnections
checkable button to hide connections in connect mode
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckToggleGrid
checkable button to show grid button
MFXCheckableButton * menuCheckMergeAutomatically
checkable button to we should't warn about merging junctions
MFXCheckableButton * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
MFXCheckableButton * menuCheckShowAdditionalSubElements
checkable button to show additional sub-elements
MFXCheckableButton * menuCheckChangeAllPhases
checkable button to set change all phases
MFXCheckableButton * menuCheckShowPolygonSymbols
check checkable to show polygon symbols
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label