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-2025 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>
70#include <utils/xml/XMLSubSys.h>
71
74#include "GNEInternalTest.h"
75#include "GNELoadThread.h"
76#include "GNENet.h"
77#include "GNEUndoList.h"
78#include "GNEViewParent.h"
79
80#ifdef HAVE_VERSION_H
81#include <version.h>
82#endif
83
84// ===========================================================================
85// FOX-declarations
86// ===========================================================================
87
88FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
89 // quit calls
93 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
94 // toolbar file
101 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
106 // network
121 // NeteditConfig
129 // SumoConfig
137 // TLS
144 // edge types
153 // additionals
164 // demand elements
173 // data elements
182 // meanDatas
191 // other
196 // Toolbar supermode
200 // Toolbar modes
217 // Toolbar edit
226 // Network view options
259 // Demand view options
282 // Data view options
299 // view
316 /* Prepared for #6042
317 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
318 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
319 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
320 */
321 // toolbar lock
353 // Toolbar processing
372 // Toolbar locate
397 // toolbar python tools
402 // toolbar windows
404 // toolbar help
407 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
408 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
409 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
411 // alt + <number>
432 // key events
433 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
434 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
435 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
436 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
437 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
439 // threads events
442 // edge template functions
446 // languages
469 // tools
472 // other
473 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
480 FXMAPFUNC(SEL_COMMAND, MID_RUNTESTS, GNEApplicationWindow::onCmdRunTests),
481};
482
483// Object implementation
484FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
485
486// ===========================================================================
487// GNEApplicationWindow method definitions
488// ===========================================================================
489#ifdef _MSC_VER
490#pragma warning(push)
491#pragma warning(disable: 4355) // mask warning about "this" in initializers
492#endif
493GNEApplicationWindow::GNEApplicationWindow(FXApp* app, const GNETagPropertiesDatabase* tagPropertiesDatabase, const std::string& configPattern) :
494 GUIMainWindow(app),
495 myTagPropertiesDatabase(tagPropertiesDatabase),
496 myUndoList(new GNEUndoList(this)),
497 myConfigPattern(configPattern),
498 myToolbarsGrip(this),
499 myMenuBarFile(this),
500 myFileMenuCommands(this),
501 myModesMenuCommands(this),
502 myEditMenuCommands(this),
503 myLockMenuCommands(this),
504 myProcessingMenuCommands(this),
505 myLocateMenuCommands(this),
506 myToolsMenuCommands(this),
507 myWindowsMenuCommands(this),
508 myHelpMenuCommands(this),
509 mySupermodeCommands(this),
510 myTitlePrefix("netedit " VERSION_STRING),
511 myAllowUndoRedo(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedo", true) == TRUE),
512 myAllowUndoRedoLoading(getApp()->reg().readBoolEntry("NETEDIT", "AllowUndoRedoLoading", true) == TRUE) {
513 // init icons
515 // init Textures
517 // init cursors
519 // set tooltip options
520 app->setTooltipTime(1000000000);
521 app->setTooltipPause(1000000000);
522 // set SUMO Options descriptions
523 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
524 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo Version " VERSION_STRING);
525 // set default netedit options
528 // parse options
533}
534#ifdef _MSC_VER
535#pragma warning(pop)
536#endif
537
538
539void
541 // do this not twice
543 // do not translate debug messages
544 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
545 return;
546 }
547 myHadDependentBuild = true;
548 setTarget(this);
549 setSelector(MID_WINDOW);
550 // build toolbar menu
552 // build the thread - io
555 // build the status bar
556 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
557 // build geo coordinates label
558 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
560 TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
561 myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
562 // build geo coordinates label
564 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
565 myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
566 // build cartesian coordinates label
568 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
569 myCartesianCoordinate->setHelpText(TL("Network coordinate"));
570 // build test coordinates label (only if gui-testing is enabled)
572 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
573 myTestCoordinate->setHelpText(TL("Test coordinate"));
575 myTestFrame->hide();
576 // make the window a mdi-window
577 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
579 myMDIMenu = new FXMDIMenu(this, myMDIClient);
580 // build the message window
582 myMainSplitter->setSplit(1, 65);
583 // fill menu and tool bar
584 fillMenuBar();
585 // build additional threads
587 // check if create internal test system
588 if (OptionsCont::getOptions().getString("test-file").size() > 0) {
589 myInternalTest = new GNEInternalTest(OptionsCont::getOptions().getString("test-file"));
590 }
591 // set the status bar
592 setStatusBarText(TL("Ready."));
593 // set the caption
594 setTitle(myTitlePrefix);
595 // set Netedit ICON
598 // build netedit Accelerators (hotkeys)
599 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
600}
601
602
603void
605 // set windows size and position
607 // set current folder
608 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
609 // Create main window
610 FXMainWindow::create();
611 // get text width
612 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
613 // adjust cartesian and geo frame
614 myCartesianFrame->setWidth(textWidth);
615 myGeoFrame->setWidth(textWidth);
616 // fill online maps
617 if (myOnlineMaps.empty()) {
618 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
619 myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
620 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
621 }
622 // show application windows
623 show(PLACEMENT_DEFAULT);
624 // check if maximice
625 if (!OptionsCont::getOptions().isSet("window-size")) {
626 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
627 maximize();
628 }
629 }
630}
631
632
635 // Close icons
637 // Close gifs (Textures)
640 // delete visuals
641 delete myGLVisual;
642 // must delete menus to avoid segfault on removing accelerators
643 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
646 delete myFileMenuTLS;
647 delete myFileMenuEdgeTypes;
654 delete myFileMenu;
655 delete myModesMenu;
656 delete myEditMenu;
657 delete myLockMenu;
658 delete myProcessingMenu;
659 delete myLocatorMenu;
660 delete myToolsMenu;
661 delete myToolsDetectorMenu;
662 delete myToolsDistrictMenu;
663 delete myToolsDRTMenu;
665 delete myToolsImportMenu;
668 delete myToolsImportVissim;
669 delete myToolsImportVisum;
670 delete myToolsNetMenu;
671 delete myToolsRouteMenu;
672 delete myToolsOutputMenu;
673 delete myToolsShapes;
674 delete myToolsTLS;
675 delete myToolsTurnDefs;
677 delete myToolsXML;
678 delete myWindowMenu;
679 delete myHelpMenu;
680 delete myLanguageMenu;
681 // Delete load thread
682 delete myLoadThread;
683 if (myInternalTest) {
684 delete myInternalTest;
685 }
686 // drop all events
687 while (!myThreadEvents.empty()) {
688 // get the next event
691 delete e;
692 }
693 // delete undoList and dialog
694 delete myUndoList;
695}
696
697
698long
699GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
700 if (askSaveElements()) {
702 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
703 if (isMaximized()) {
704 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
705 } else {
706 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
707 }
708 getApp()->exit(0);
709 }
710 return 1;
711}
712
713
714long
715GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
716 GUIDialog_GLChosenEditor* chooser =
718 chooser->create();
719 chooser->show();
720 return 1;
721}
722
723
724long
725GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
726 // check if close current simulation
727 if (onCmdClose(0, 0, 0) == 1) {
728 // create new network
730 }
731 return 1;
732}
733
734
735long
737 // get netconvert file dialog
738 const auto netConvertFileDialog = GNEFileDialog(this, TL("netconvert config file"),
742 // continue depending of netConvertFileDialog
743 if ((netConvertFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
744 // load configuration
745 loadConfiguration(netConvertFileDialog.getFilename());
746 }
747 return 1;
748}
749
750
751long
752GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
753 // get netconvert filename
754 const auto networkFileDialog = GNEFileDialog(this, TL("network file"),
758 // continue depending of netconvertFile
759 if ((networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
760 // load network
761 loadNetwork(networkFileDialog.getFilename());
762 }
763 return 0;
764}
765
766
767long
768GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
769 // get OSM file dilaog
770 const auto OSMFileDialog = GNEFileDialog(this, TL("OpenStreetMap file"),
774 // continue depending of netconvertFile
775 if ((OSMFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
776 loadOSM(OSMFileDialog.getFilename());
777 }
778 return 1;
779}
780
781
782long
783GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
784 auto& neteditOptions = OptionsCont::getOptions();
785 // get netconvert filename
786 const auto neteditConfigFileDialog = GNEFileDialog(this, TL("netedit config file"),
790 // continue depending of netconvertFile
791 if ((neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
792 // reset netedit options
793 myLoadThread->fillOptions(neteditOptions);
794 myLoadThread->setDefaultOptions(neteditOptions);
795 // set netedit configuration file to load
796 neteditOptions.resetWritable();
797 neteditOptions.set("configuration-file", neteditConfigFileDialog.getFilename());
798 // run load thread
800 // update view
801 update();
802 }
803 return 1;
804}
805
806
807long
808GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
809 auto& neteditOptions = OptionsCont::getOptions();
810 // get netconvert filename
811 const auto sumoConfigFileDialog = GNEFileDialog(this, TL("sumo config file"),
815 // continue depending of netconvertFile
816 if ((sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) && (onCmdClose(0, 0, 0) == 1)) {
817 // reset options
818 myLoadThread->fillOptions(neteditOptions);
819 myLoadThread->setDefaultOptions(neteditOptions);
820 // set sumo configuration file to load
821 neteditOptions.resetWritable();
822 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
823 // run load thread
825 // update view
826 update();
827 }
828 return 1;
829}
830
831
832long
834 // check if close current simulation
835 if (onCmdClose(0, 0, 0) == 1) {
836 auto& neteditOptions = OptionsCont::getOptions();
837 // get existent configuration file
838 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
839 // reset options
840 myLoadThread->fillOptions(neteditOptions);
841 myLoadThread->setDefaultOptions(neteditOptions);
842 // set configuration file to load
843 neteditOptions.resetWritable();
844 neteditOptions.set("configuration-file", neteditConfigFile);
845 // run load thread
847 // update view
848 update();
849 }
850 return 1;
851}
852
853
854long
855GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
856 auto& neteditOptions = OptionsCont::getOptions();
857 // check if close current simulation
858 if (onCmdClose(0, 0, 0) == 1) {
859 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
860 // reset options
861 myLoadThread->fillOptions(neteditOptions);
862 myLoadThread->setDefaultOptions(neteditOptions);
863 // set configuration file to load
864 neteditOptions.resetWritable();
865 neteditOptions.set("sumocfg-file", sumoConfigFile);
866 // run load thread
868 // update view
869 update();
870 }
871 return 1;
872}
873
874
875long
876GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
877 // check if file exist
878 if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
879 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
880 } else {
881 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
882 }
883}
884
885
886long
887GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
888 // check if file exist
889 if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
890 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
891 } else {
892 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
893 }
894}
895
896
897long
898GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
899 auto& neteditOptions = OptionsCont::getOptions();
900 // get netconvert filename
901 const auto TLSfileDialog = GNEFileDialog(this, TL("Traffic Light definitions file"),
905 // continue depending of netconvertFile
906 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
907 // set file to load
908 neteditOptions.resetWritable();
909 neteditOptions.set("tls-file", TLSfileDialog.getFilename());
910 // Run parser
911 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TLF("loading TLS Programs from '%'", TLSfileDialog.getFilename()));
912 myNet->computeNetwork(this);
913 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(TLSfileDialog.getFilename()) == false) {
914 // Abort undo/redo
916 } else {
917 // commit undo/redo operation
918 myUndoList->end();
919 update();
920 }
921 }
922 return 1;
923}
924
925
926long
927GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
928 // get option container
929 auto& neteditOptions = OptionsCont::getOptions();
930 // Run parser
931 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + neteditOptions.getString("tls-file") + "'");
932 myNet->computeNetwork(this);
933 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(neteditOptions.getString("tls-file")) == false) {
934 // Abort undo/redo
936 } else {
937 // commit undo/redo operation
938 myUndoList->end();
939 update();
940 }
941 return 1;
942}
943
944
945long
946GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
947 // check if file exist
948 if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
949 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
950 } else {
951 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
952 }
953}
954
955
956long
957GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
958 auto& neteditOptions = OptionsCont::getOptions();
959 // get netconvert filename
960 const auto edgeTypesFileDialog = GNEFileDialog(this, TL("EdgeTypes file"),
964 // continue depending of netconvertFile
965 if (edgeTypesFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
966 // set file to load
967 neteditOptions.resetWritable();
968 neteditOptions.set("edgetypes-file", edgeTypesFileDialog.getFilename());
969 // declare type container
970 NBTypeCont typeContainerAux;
971 // declare type handler
972 NIXMLTypesHandler handler(typeContainerAux);
973 // load edge types
974 NITypeLoader::load(handler, {edgeTypesFileDialog.getFilename()}, "types");
975 // write information
976 WRITE_MESSAGE(TLF("Loaded edge types from '%'.", toString(typeContainerAux.size())));
977 // now create GNETypes based on typeContainerAux
979 // iterate over typeContainerAux
980 for (const auto& auxEdgeType : typeContainerAux) {
981 // create new edge type
982 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
983 // add lane types
984 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
985 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
986 }
987 // add it using undoList
988 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
989
990 }
991 // end undo list
993 // refresh edge type selector
995 }
996 return 1;
997}
998
999
1000long
1001GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
1002 // declare type container
1003 NBTypeCont typeContainerAux;
1004 // declare type handler
1005 NIXMLTypesHandler handler(typeContainerAux);
1006 // load edge types
1007 NITypeLoader::load(handler, {OptionsCont::getOptions().getString("edgetypes-file")}, "types");
1008 // write information
1009 WRITE_MESSAGE(TLF("Reloaded edge types from '%'.", toString(typeContainerAux.size())));
1010 // now create GNETypes based on typeContainerAux
1012 // iterate over typeContainerAux
1013 for (const auto& auxEdgeType : typeContainerAux) {
1014 // create new edge type
1015 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
1016 // add lane types
1017 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
1018 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
1019 }
1020 // add it using undoList
1021 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
1022
1023 }
1024 // end undo list
1026 // refresh edge type selector
1028 return 0;
1029}
1030
1031
1032long
1033GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
1034 // check if file exist
1035 if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
1036 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1037 } else {
1038 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1039 }
1040}
1041
1042
1043long
1044GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector, void*) {
1045 auto& neteditOptions = OptionsCont::getOptions();
1046 // check if close current file
1047 if (onCmdClose(0, 0, 0) == 1) {
1048 // store size, position and viewport
1050 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1051 // set flag
1052 myAmLoading = true;
1053 // get files
1054 const auto neteditConfig = neteditOptions.getString("configuration-file");
1055 const auto sumoConfig = neteditOptions.getString("sumocfg-file");
1056 const auto networkFile = neteditOptions.getString("net-file");
1057 // fill (reset) all options
1058 myLoadThread->fillOptions(neteditOptions);
1059 // set default options defined in GNELoadThread::setDefaultOptions(...)
1060 myLoadThread->setDefaultOptions(neteditOptions);
1061 // set file to load
1062 neteditOptions.resetWritable();
1063 if (neteditConfig.size() > 0) {
1064 neteditOptions.set("configuration-file", neteditConfig);
1065 // set status bar
1066 setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
1067 } else if (sumoConfig.size() > 0) {
1068 neteditOptions.set("sumocfg-file", sumoConfig);
1069 // set status bar
1070 setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
1071 } else if (networkFile.size() > 0) {
1072 neteditOptions.set("net-file", networkFile);
1073 // set status bar
1074 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1075 } else {
1076 // nothing to load
1077 return 0;
1078 }
1079 // load network
1081 }
1082 return 1;
1083}
1084
1085
1086long
1087GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1088 auto& neteditOptions = OptionsCont::getOptions();
1089 // declare strings
1090 FXString neteditConfig = TL("&Reload Netedit config");
1091 FXString sumoConfig = TL("&Reload Sumo config");
1092 FXString netFile = TL("&Reload Network");
1093 FXString reload = TL("&Reload");
1094 // check options
1095 if (myNet == nullptr) {
1096 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1097 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1098 } else if (neteditOptions.getString("configuration-file").size() > 0) {
1099 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1100 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1101 } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1102 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1103 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1104 } else if (neteditOptions.getString("net-file").size() > 0) {
1105 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1106 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1107 } else {
1108 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1109 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1110 }
1111 return 1;
1112}
1113
1114
1115long
1116GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector, void*) {
1117 auto& neteditOptions = OptionsCont::getOptions();
1118 // check if close current file
1119 if (onCmdClose(0, 0, 0) == 1) {
1120 // store size, position and viewport
1122 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1123 // set flag
1124 myAmLoading = true;
1125 // get network
1126 const auto networkFile = neteditOptions.getString("net-file");
1127 // fill (reset) all options
1128 myLoadThread->fillOptions(neteditOptions);
1129 // set default options defined in GNELoadThread::setDefaultOptions(...)
1130 myLoadThread->setDefaultOptions(neteditOptions);
1131 // set file to load
1132 neteditOptions.resetWritable();
1133 neteditOptions.set("net-file", networkFile);
1134 // set status bar
1135 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1136 // loaad network
1138 }
1139 return 1;
1140}
1141
1142
1143long
1144GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1145 auto& neteditOptions = OptionsCont::getOptions();
1146 if (myNet == nullptr) {
1147 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1148 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1149 } else if ((neteditOptions.getString("net-file").size() > 0) &&
1150 ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1151 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1152 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1153 } else {
1154 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1155 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1156 }
1157 return 1;
1158}
1159
1160
1161long
1162GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1163 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1164 if (myAmLoading) {
1165 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1166 } else if (onCmdClose(0, 0, 0) == 1) {
1167 // get filedata
1168 const std::string recentFile = ((const char*)fileData);
1169 // check if we're loading a network o a config
1170 if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1171 (recentFile.find(".netecfg") != std::string::npos) ||
1172 (recentFile.find(".sumocfg") != std::string::npos) ||
1173 (recentFile.find(".netccfg") != std::string::npos)) {
1174 // load config
1175 loadConfiguration(recentFile);
1176 } else {
1177 // load network
1178 loadNetwork(recentFile);
1179 }
1180 }
1181 return 1;
1182}
1183
1184
1185long
1186GNEApplicationWindow::onCmdClose(FXObject*, FXSelector, void*) {
1187 if (myViewNet == nullptr) {
1188 return 1;
1189 } else if (askSaveElements()) {
1191 // add a separator to the log
1193 // hide all menu commands
1197 // hide view options
1201 return 1;
1202 } else {
1203 return 0;
1204 }
1205}
1206
1207
1208long
1209GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1210 if (myMDIClient->numChildren() > 0) {
1211 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1212 if (w != nullptr) {
1213 w->onCmdLocate(nullptr, sel, nullptr);
1214 }
1215 }
1216 return 1;
1217}
1218
1219
1220long
1221GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1222 return myToolsMenuCommands.showTool(obj);
1223}
1224
1225
1226long
1227GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1229}
1230
1231
1232long
1235}
1236
1237
1238long
1239GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1240 // currently always enabled
1241 return 1;
1242}
1243
1244
1245long
1246GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1247 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1248 return 1;
1249}
1250
1251
1252long
1253GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1255 return 1;
1256}
1257
1258
1259long
1261 return 1;
1262}
1263
1264
1265long
1267 return 1;
1268}
1269
1270
1271long
1272GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1273 // create and open about dialog
1274 GNEAboutDialog(this);
1275 return 1;
1276}
1277
1278
1279long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1280 FXEvent* event = (FXEvent*)ptr;
1281 FXString string = GUIUserIO::clipped.c_str();
1282 setDNDData(FROM_CLIPBOARD, event->target, string);
1283 return 1;
1284}
1285
1286
1287long
1288GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1289 eventOccurred();
1290 return 1;
1291}
1292
1293
1294void
1296 // load events
1297 while (!myThreadEvents.empty()) {
1298 // get the next event
1301 // process
1302 switch (e->getOwnType()) {
1305 break;
1312 break;
1313 default:
1314 break;
1315 }
1316 delete e;
1317 }
1318}
1319
1320
1321void
1323 myAmLoading = false;
1324 GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1325 // get option container
1326 auto& neteditOptions = OptionsCont::getOptions();
1327 // check whether the loading was successful
1328 if (ec->net == nullptr) {
1329 // report failure
1330 setStatusBarText(TLF("Loading of network '%' failed", ec->file));
1331 } else {
1332 // set new Net
1333 myNet = ec->net;
1334 // report success
1335 setStatusBarText(TLF("Network '%' loaded", ec->file));
1337 // build viewparent toolbar grips before creating view parent
1339 // initialise netedit View
1340 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1341 // create it maximized
1342 viewParent->maximize();
1343 // mark it as Active child
1344 myMDIClient->setActiveChild(viewParent);
1345 // cast pointer myViewNet
1346 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1347 // set settings in view
1348 if (viewParent->getView() && ec->settingsFile != "") {
1349 GUISettingsHandler settings(ec->settingsFile, true, true);
1350 settings.addSettings(viewParent->getView());
1351 viewParent->getView()->addDecals(settings.getDecals());
1352 settings.applyViewport(viewParent->getView());
1353 settings.setSnapshots(viewParent->getView());
1354 }
1355 // set network name on the caption
1356 setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1357 // force supermode network
1358 if (myViewNet) {
1360 }
1361 if (myViewNet && ec->viewportFromRegistry) {
1362 Position off;
1363 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1364 Position p(off.x(), off.y(), 0);
1365 myViewNet->setViewportFromToRot(off, p, 0);
1366 }
1367 // if we're loading a sumo config, update netedit options
1368 if ((mySumoOptions.getStringVector("additional-files").size() > 0) && neteditOptions.getStringVector("additional-files").empty()) {
1369 neteditOptions.resetWritable();
1370 neteditOptions.set("additional-files", mySumoOptions.getValueString("additional-files"));
1371 }
1372 if ((mySumoOptions.getStringVector("route-files").size() > 0) && neteditOptions.getStringVector("route-files").empty()) {
1373 neteditOptions.resetWritable();
1374 neteditOptions.set("route-files", mySumoOptions.getValueString("route-files"));
1375 }
1376 // load elements
1381 // load selection
1382 if (!OptionsCont::getOptions().isDefault("selection-file")) {
1384 }
1386 }
1388 // update app
1389 update();
1390 // restore focus
1391 setFocus();
1392}
1393
1394
1395void
1400
1401// ---------------------------------------------------------------------------
1402// private methods
1403// ---------------------------------------------------------------------------
1404
1405void
1407 // build file menu
1408 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1410 myFileMenuNeteditConfig = new FXMenuPane(this);
1411 myFileMenuSumoConfig = new FXMenuPane(this);
1412 myFileMenuTLS = new FXMenuPane(this);
1413 myFileMenuEdgeTypes = new FXMenuPane(this);
1414 myFileMenuAdditionals = new FXMenuPane(this);
1415 myFileMenuDemandElements = new FXMenuPane(this);
1416 myFileMenuDataElements = new FXMenuPane(this);
1417 myFileMenuMeanDataElements = new FXMenuPane(this);
1418 myFileMenuRecentNetworks = new FXMenuPane(this);
1419 myFileMenuRecentConfigs = new FXMenuPane(this);
1423 // add separator for recent files
1424 new FXMenuSeparator(myFileMenu);
1425 // build recent files
1428 new FXMenuSeparator(myFileMenu);
1429 GUIDesigns::buildFXMenuCommandShortcut(myFileMenu, TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1430 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1431 // build modes menu
1432 myModesMenu = new FXMenuPane(this);
1434 myModesMenuTitle->setTarget(this);
1436 // build Supermode commands and hide it
1438 // add separator
1439 new FXSeparator(myModesMenu);
1440 // build modes menu commands
1442 // build edit menu
1443 myEditMenu = new FXMenuPane(this);
1445 // build edit menu commands
1447 // build separator
1448 new FXMenuSeparator(myEditMenu);
1449 // build view options
1453 // hide view options
1457 // build view menu commands
1459 // build separator
1460 new FXMenuSeparator(myEditMenu);
1461 // build front element menu commands
1463 // build separator
1464 new FXMenuSeparator(myEditMenu);
1465 // build open in sumo menu commands
1467 // build lock menu
1468 myLockMenu = new FXMenuPane(this);
1470 myLockMenuTitle->setTarget(this);
1472 // build lock menu commands
1474 // build processing menu (trigger netbuild computations)
1475 myProcessingMenu = new FXMenuPane(this);
1478 // build locate menu
1479 myLocatorMenu = new FXMenuPane(this);
1482 // build tools menu
1483 myToolsMenu = new FXMenuPane(this);
1484 myToolsAssignMenu = new FXMenuPane(this);
1485 myToolsDetectorMenu = new FXMenuPane(this);
1486 myToolsDistrictMenu = new FXMenuPane(this);
1487 myToolsDRTMenu = new FXMenuPane(this);
1488 myToolsEmissionsMenu = new FXMenuPane(this);
1489 myToolsImportMenu = new FXMenuPane(this);
1490 myToolsImportCityBrainMenu = new FXMenuPane(this);
1491 myToolsImportGTFSMenu = new FXMenuPane(this);
1492 myToolsImportVissim = new FXMenuPane(this);
1493 myToolsImportVisum = new FXMenuPane(this);
1494 myToolsNetMenu = new FXMenuPane(this);
1495 myToolsRouteMenu = new FXMenuPane(this);
1496 myToolsOutputMenu = new FXMenuPane(this);
1497 myToolsShapes = new FXMenuPane(this);
1498 myToolsTLS = new FXMenuPane(this);
1499 myToolsTriggerMenu = new FXMenuPane(this);
1500 myToolsTurnDefs = new FXMenuPane(this);
1501 myToolsVisualizationMenu = new FXMenuPane(this);
1502 myToolsXML = new FXMenuPane(this);
1504 // build tools menu cascasde
1505 new FXMenuCascade(myToolsMenu, TL("Assign"), nullptr, myToolsAssignMenu);
1506 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1507 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1509 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1518 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1519 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1520 new FXMenuCascade(myToolsMenu, TL("Trigger"), nullptr, myToolsTriggerMenu);
1524 // add separators between folders
1525 new FXMenuSeparator(myToolsMenu);
1526 new FXMenuSeparator(myToolsImportMenu);
1527 // create map with tool Menu panes and their associated folder
1534 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1536 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1537 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1544 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1547 // build tools
1549 // build windows menu
1550 myWindowMenu = new FXMenuPane(this);
1553 // build language menu
1555 // build help menu
1556 myHelpMenu = new FXMenuPane(this);
1559}
1560
1561
1562FXGLCanvas*
1564 // netedit uses only a single View, then return nullptr
1565 return nullptr;
1566}
1567
1568
1571 return 0;
1572}
1573
1574
1575double
1577 return 1;
1578}
1579
1580
1585
1586
1591
1592
1597
1598
1603
1604
1605void
1607 if (myViewNet && myViewNet->getNet()) {
1608 // show
1610 // set label depending of recomputing
1612 myRequireRecomputingButton->setText("");
1613 myRequireRecomputingButton->setTipText(TL("Network computed"));
1615 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1616 } else {
1617 myRequireRecomputingButton->setText(TL("Press F5"));
1618 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1620 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1621 }
1622 } else {
1623 // hide
1625 }
1626}
1627
1628
1629void
1631 // first check if net must be deleted
1632 if (myNet != nullptr) {
1633 delete myNet;
1634 myNet = nullptr;
1636 }
1637 // check if view has to be saved
1638 if (myViewNet) {
1640 // clear decals
1641 myViewNet->getDecals().clear();
1642 }
1643 // lock tracker
1644 myTrackerLock.lock();
1645 // remove trackers and other external windows
1646 while (!myGLWindows.empty()) {
1647 delete myGLWindows.front();
1648 }
1649 myViewNet = nullptr;
1650 for (FXMainWindow* const window : myTrackerWindows) {
1651 window->destroy();
1652 delete window;
1653 }
1654 myTrackerWindows.clear();
1655 // reset the caption
1656 setTitle(myTitlePrefix);
1657 // unlock tracker
1658 myTrackerLock.unlock();
1659 // remove coordinate information
1660 myGeoCoordinate->setText(TL("N/A"));
1661 myCartesianCoordinate->setText(TL("N/A"));
1662 myTestCoordinate->setText(TL("N/A"));
1663 myTestFrame->hide();
1665 // Reset textures
1667 // reset fonts
1669}
1670
1671
1672FXCursor*
1674 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1675}
1676
1677
1678void
1680 auto& neteditOptions = OptionsCont::getOptions();
1681 if (neteditOptions.getBool("new")) {
1682 // save output file
1683 const auto outputFile = neteditOptions.getString("output-file");
1684 // create new network reset all options
1686 // check if define output file
1687 if (!outputFile.empty()) {
1688 neteditOptions.resetWritable();
1689 neteditOptions.set("net-file", outputFile);
1690 }
1691 } else {
1692 // set flag
1693 myAmLoading = true;
1694 // set status bar
1695 setStatusBarText(TL("Loading console arguments."));
1696 // load console arguments
1698 // add it into recent networks and configs
1699 if (neteditOptions.getString("net-file").size() > 0) {
1700 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
1701 }
1702 if (neteditOptions.getString("configuration-file").size() > 0) {
1703 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
1704 }
1705 }
1706}
1707
1708
1709void
1711 auto& neteditOptions = OptionsCont::getOptions();
1712 // save windows size and position
1714 // enable loading flag and disable reloading flag
1715 myAmLoading = true;
1716 // recenter view
1717 gSchemeStorage.saveViewport(0, 0, -1, 0);
1718 // fill (reset) all options
1719 GNELoadThread::fillOptions(neteditOptions);
1720 // set default options defined in GNELoadThread::setDefaultOptions(...)
1721 GNELoadThread::setDefaultOptions(neteditOptions);
1722 // update status bar
1723 setStatusBarText(TL("Creating new network."));
1724 // create new network
1726 // update window
1727 update();
1728}
1729
1730
1731void
1732GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1733 if (networkFile.empty()) {
1734 WRITE_ERROR(TL("Trying to load an empty network."));
1735 } else {
1736 auto& neteditOptions = OptionsCont::getOptions();
1737 // store size, position and viewport
1739 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1740 // set flag
1741 myAmLoading = true;
1742 // fill (reset) all options
1743 myLoadThread->fillOptions(neteditOptions);
1744 // set default options defined in GNELoadThread::setDefaultOptions(...)
1745 myLoadThread->setDefaultOptions(neteditOptions);
1746 // set file to load
1747 neteditOptions.resetWritable();
1748 neteditOptions.set("net-file", networkFile);
1749 // set status bar
1750 setStatusBarText(TLF("Loading network file '%'.", networkFile));
1751 // load network
1753 // add it into recent nets
1754 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1755 }
1756}
1757
1758
1759void
1760GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1761 if (configurationFile.empty()) {
1762 WRITE_ERROR(TL("Trying to load an empty configuration."));
1763 } else {
1764 auto& neteditOptions = OptionsCont::getOptions();
1765 // store size, position and viewport
1767 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1768 // set flag
1769 myAmLoading = true;
1770 // fill (reset) all options
1771 myLoadThread->fillOptions(neteditOptions);
1772 // set default options defined in GNELoadThread::setDefaultOptions(...)
1773 myLoadThread->setDefaultOptions(neteditOptions);
1774 // set file to load
1775 neteditOptions.resetWritable();
1776 neteditOptions.set("configuration-file", configurationFile);
1777 // set status bar
1778 setStatusBarText(TLF("Loading configuration file '%'.", configurationFile));
1779 // load config
1781 // add it into recent configs
1782 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1783 }
1784}
1785
1786
1787void
1788GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1789 auto& neteditOptions = OptionsCont::getOptions();
1790 // store size, position and viewport
1792 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1793 // set flag
1794 myAmLoading = true;
1795 // fill (reset) all options
1796 myLoadThread->fillOptions(neteditOptions);
1797 // set default options defined in GNELoadThread::setDefaultOptions(...)
1798 myLoadThread->setDefaultOptions(neteditOptions);
1799 // recommended osm options
1800 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1801 neteditOptions.set("osm-files", OSMFile);
1802 neteditOptions.set("geometry.remove", "true");
1803 neteditOptions.set("ramps.guess", "true");
1804 neteditOptions.set("junctions.join", "true");
1805 neteditOptions.set("tls.guess-signals", "true");
1806 neteditOptions.set("tls.discard-simple", "true");
1807 // open netedit options dialog
1808 const auto neteditOptionsDialog = GNENeteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
1809 // open wizard dialog
1810 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
1811 // needed to set projection parameters
1812 NIFrame::checkOptions(neteditOptions);
1813 // set file to load
1814 neteditOptions.resetWritable();
1815 neteditOptions.set("configuration-file", OSMFile);
1816 // set status bar
1817 setStatusBarText(TLF("Loading OSM file '%'.", OSMFile));
1818 // load config
1820 }
1821}
1822
1823void
1824GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1825 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1826 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1827}
1828
1829
1830long
1832 // open question dialog box
1833 const auto questionDialog = GNEQuestionBasicDialog(this, GNEDialog::Buttons::YES_NO,
1834 TL("Recompute with volatile options"),
1835 TL("Changes produced in the net due a recomputing with"),
1836 TL("volatile options cannot be undone. Continue?"));
1837 // check result
1838 if (questionDialog.getResult() == GNEDialog::Result::ACCEPT) {
1839 // save all elements
1840 onCmdSaveAdditionalElements(nullptr, 0, nullptr);
1841 onCmdSaveDemandElements(nullptr, 0, nullptr);
1842 onCmdSaveDataElements(nullptr, 0, nullptr);
1843 onCmdSaveMeanDataElements(nullptr, 0, nullptr);
1844 // compute with volatile options
1845 myNet->computeNetwork(this, true, true);
1847 }
1848 return 1;
1849}
1850
1851
1852bool
1855 myConsoleOptionsLoaded = false;
1856 return true;
1857 } else {
1858 return false;
1859 }
1860}
1861
1862
1867
1868
1869void
1873
1874
1875long
1876GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1877 // check that currently there is a View
1878 if (myViewNet) {
1879 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1880 }
1881 return 1;
1882}
1883
1884
1885long
1886GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1887 // check that currently there is a View
1888 if (myViewNet) {
1889 myViewNet->onCmdSetMode(sender, sel, ptr);
1890 }
1891 return 1;
1892}
1893
1894
1895long
1896GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector sel, void*) {
1897 if (myViewNet) {
1898 // check if we're calling the functions using internal test
1899 switch (FXSELID(sel)) {
1902 break;
1903 case MID_GNE_LOCK_EDGE:
1905 break;
1906 case MID_GNE_LOCK_LANE:
1908 break;
1911 break;
1914 break;
1917 break;
1920 break;
1921 case MID_GNE_LOCK_WIRE:
1923 break;
1924 case MID_GNE_LOCK_TAZ:
1926 break;
1929 break;
1930 case MID_GNE_LOCK_POI:
1932 break;
1935 break;
1938 break;
1939 case MID_GNE_LOCK_ROUTE:
1941 break;
1944 break;
1947 break;
1950 break;
1951 case MID_GNE_LOCK_WALK:
1953 break;
1954 case MID_GNE_LOCK_RIDE:
1956 break;
1959 break;
1962 break;
1965 break;
1966 case MID_GNE_LOCK_STOP:
1968 break;
1971 break;
1974 break;
1977 break;
1978 default:
1979 break;
1980 }
1982 }
1983 return 1;
1984}
1985
1986
1987long
1988GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1989 // lock all
1992 return 1;
1993}
1994
1995
1996long
1998 // unlock all
2001 return 1;
2002}
2003
2004
2005long
2007 if (myViewNet) {
2008 myViewNet->update();
2009 }
2010 return 1;
2011}
2012
2013
2014long
2015GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2016 if (myViewNet) {
2018 // supermode network
2024 myLockMenuTitle->enable();
2025 } else {
2026 myLockMenuTitle->disable();
2027 }
2029 // supermode demand
2034 myLockMenuTitle->enable();
2035 } else {
2036 myLockMenuTitle->disable();
2037 }
2039 // supermode data
2043 myLockMenuTitle->enable();
2044 } else {
2045 myLockMenuTitle->disable();
2046 }
2047 } else {
2048 myLockMenuTitle->disable();
2049 }
2050 } else {
2051 myLockMenuTitle->disable();
2052 }
2053 return 1;
2054}
2055
2056
2057long
2058GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
2059 // first check if there is a view
2060 if (myViewNet) {
2061 // process depending of supermode
2063 // check what FXMenuCommand was called
2064 switch (FXSELID(sel)) {
2066 myNet->computeNetwork(this, true, false);
2068 break;
2071 break;
2074 break;
2077 break;
2080 break;
2081 default:
2082 break;
2083 }
2085 // check what FXMenuCommand was called
2086 switch (FXSELID(sel)) {
2090 break;
2093 break;
2096 break;
2099 break;
2102 break;
2103 default:
2104 break;
2105 }
2106 }
2107 // refresh to update undo-redo button
2108 myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
2109 }
2110 return 1;
2111}
2112
2113
2114long
2115GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
2116 // get extra arguments
2117 std::string extraArg;
2119 extraArg = " -s " + myNetgenerateOptions.getValueString("output-file");
2120 }
2121 FXRegistry reg("SUMO netedit", "netedit");
2122 std::string netedit = "netedit";
2123 const char* sumoPath = getenv("SUMO_HOME");
2124 if (sumoPath != nullptr) {
2125#ifdef DEBUG
2126 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
2127#else
2128 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2129#endif
2130 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2131 netedit = "\"" + newPath + "\"";
2132 }
2133 }
2134 std::string cmd = netedit + extraArg;
2135 // start in background
2136#ifndef WIN32
2137 cmd = cmd + " &";
2138#else
2139 // see "help start" for the parameters
2140 cmd = "start /B \"\" " + cmd;
2141#endif
2142 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2143 // yay! fun with dangerous commands... Never use this over the internet
2145 return 1;
2146}
2147
2148
2149long
2150GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2151 // get option container
2152 auto& neteditOptions = OptionsCont::getOptions();
2153 // input parameters
2154 std::string inputParameters;
2155 // if we have only a network, then load directly without creating a SumoConfig
2157 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2158 // force save network
2159 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2160 // network wasn't saved, then stop
2161 return 0;
2162 }
2163 inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2164 // write info
2165 WRITE_MESSAGE(TLF("Loading network '%' in SUMO-GUI.", neteditOptions.getString("net-file")));
2166 } else {
2167 // force save SumoConfig
2168 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2169 // SumoConfig wasn't saved, then stop
2170 return 0;
2171 }
2172 inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2173 // write info
2174 WRITE_MESSAGE(TLF("Loading sumo config '%' in SUMO-GUI.", neteditOptions.getString("sumocfg-file")));
2175 }
2176 // save current viewport in registry
2177 FXRegistry reg("SUMO GUI", "sumo-gui");
2178 reg.read();
2179 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2180 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2181 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2182 reg.write();
2183 // declare executable
2184 std::string sumoGuiExecutable = "sumo-gui";
2185 // if SUMO_HOME is defined, update executable
2186 const char* sumoHome = getenv("SUMO_HOME");
2187 if (sumoHome != nullptr) {
2188 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2189 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2190 sumoGuiExecutable = "\"" + newPath + "\"";
2191 }
2192 }
2193 // declare command
2194 std::string cmd = sumoGuiExecutable + inputParameters;
2195 // start in background
2196#ifndef WIN32
2197 cmd = cmd + " &";
2198#else
2199 // see "help start" for the parameters
2200 cmd = "start /B \"\" " + cmd;
2201#endif
2202 WRITE_MESSAGE(TLF("Running '%'.", cmd));
2203 // yay! fun with dangerous commands... Never use this over the internet
2205 return 1;
2206}
2207
2208
2209long
2210GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2211 // check that view exists
2212 if (myViewNet) {
2213 // first check if we're selecting a subset of edges in TAZ Frame
2215 // clear current selection
2217 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2218 // check if stop select parent
2220 // and stop select paretn
2222 } else {
2223 // clear inspected elements
2225 }
2226 } else {
2227 // abort current operation
2229 }
2230 }
2231 return 1;
2232}
2233
2234
2235long
2236GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2237 // check that view exists
2238 if (myViewNet) {
2240 }
2241 return 1;
2242}
2243
2244
2245long
2246GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2247 // check that view exists
2248 if (myViewNet) {
2250 }
2251 return 1;
2252}
2253
2254
2255long
2256GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2257 // check that view exists
2258 if (myViewNet) {
2260 }
2261 return 1;
2262}
2263
2264
2265long
2266GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2267 // check that view exists
2268 if (myViewNet) {
2270 }
2271 return 1;
2272}
2273
2274
2275long
2277 // check that view exists
2278 if (myViewNet) {
2280 }
2281 return 1;
2282}
2283
2284
2285long
2286GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2287 // check that view exists
2288 if (myViewNet) {
2290 // refresh flow frames
2291 if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2293 }
2294 if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2296 }
2297 if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2299 }
2300 // refresh inspector frame
2301 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2303 }
2304 }
2305 return 1;
2306}
2307
2308
2309long
2310GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2311 // check that view exists
2312 if (myViewNet) {
2314 }
2315 return 1;
2316}
2317
2318
2319long
2320GNEApplicationWindow::onCmdRunTests(FXObject*, FXSelector, void*) {
2323 // after running, remove internal tests
2324 delete myInternalTest;
2325 myInternalTest = nullptr;
2326 }
2327 return 1;
2328}
2329
2330
2331long
2332GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2333 // enable or disable sender element depending of viewNet
2334 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2335}
2336
2337
2338long
2341 return 1;
2342}
2343
2344
2345long
2346GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2347 GNERunNetgenerateDialog netgenerateDialog(this, &myNetgenerateOptions);
2348 return 1;
2349}
2350
2351
2352long
2353GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2355}
2356
2357
2358long
2359GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2360 // check that view exists
2361 if (myViewNet) {
2363 }
2364 return 1;
2365}
2366
2367
2368long
2369GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2370 // check that view exists
2371 if (myViewNet) {
2373 }
2374 return 1;
2375}
2376
2377
2378long
2379GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2380 // check that view exists
2381 if (myViewNet) {
2382 // Call manually toggle grid function
2383 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2384 }
2385 return 1;
2386}
2387
2388
2389long
2390GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2391 // check that view exists
2392 if (myViewNet) {
2393 // Call manually toggle junction shape function
2394 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2395 }
2396 return 1;
2397}
2398
2399
2400long
2401GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2402 if (myViewNet) {
2403 // get first inspected AC
2404 auto inspectedAC = myViewNet->getInspectedElements().getFirstAC();
2405 if (inspectedAC) {
2406 // set or clear front attribute
2407 if (inspectedAC->isMarkedForDrawingFront()) {
2408 inspectedAC->unmarkForDrawingFront();
2409 } else {
2410 inspectedAC->markForDrawingFront();
2411 }
2412 } else {
2414 }
2415 myViewNet->update();
2416 }
2417 return 1;
2418}
2419
2420
2421long
2422GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2423 // first check that we have a ViewNet
2424 if (myViewNet) {
2425 // first check what selector was called
2426 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2427 // check that numericalKeyPressed is valid
2428 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2429 return 0;
2430 }
2431 // declare a vector in which save visible menu commands
2432 std::vector<MFXCheckableButton*> visibleMenuCommands;
2433 // get common, network and demand visible menu commands
2437 // now check that numericalKeyPressed isn't greater than visible view options
2438 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2439 return 0;
2440 }
2441 // toggle edit options
2443 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2444 return 1;
2446 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2447 return 1;
2449 visibleMenuCommands.at(numericalKeyPressed), sender, sel)) {
2450 return 1;
2451 }
2452 }
2453 return 0;
2454}
2455
2456
2457long
2458GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2459 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2460 return 1;
2461}
2462
2463
2464long
2465GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2466 // update in every version
2467 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2468 return 1;
2469}
2470
2471
2472long
2473GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2474 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2475 return 1;
2476}
2477
2478
2479long
2482 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2483 } else {
2484 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2485 }
2486}
2487
2488
2489long
2490GNEApplicationWindow::onCmdToggleUndoRedo(FXObject*, FXSelector, void*) {
2491 if (myEditMenuCommands.menuCheckAllowUndoRedo->getCheck() == TRUE) {
2492 myAllowUndoRedo = true;
2493 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", true);
2494 } else {
2495 myAllowUndoRedo = false;
2496 // drop undo-redo list after changing flag
2497 myUndoList->clear();
2498 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedo", false);
2499 }
2500}
2501
2502
2503long
2505 if (myFileMenuCommands.menuCheckAllowUndoRedoLoading->getCheck() == TRUE) {
2507 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", true);
2508 } else {
2509 myAllowUndoRedoLoading = false;
2510 return getApp()->reg().writeBoolEntry("NETEDIT", "AllowUndoRedoLoading", false);
2511 }
2512}
2513
2514
2515long
2516GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2517 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2518 return 1;
2519}
2520
2521
2522long
2523GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2524 // create and open feedback dialog
2525 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2526 feedback->create();
2527 feedback->show(PLACEMENT_OWNER);
2528 return 1;
2529}
2530
2531
2532long
2534 auto& neteditOptions = OptionsCont::getOptions();
2535 // open netedit option dialog
2536 const auto neteditOptionsDialog = GNENeteditOptionsDialog(this, neteditOptions, myOriginalNeteditOptions);
2537 // continue depending of result
2538 if (neteditOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) {
2539 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2540 NBFrame::checkOptions(neteditOptions);
2541 NWFrame::checkOptions(neteditOptions);
2542 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2543 // check if mark netedit config as unsaved
2544 if (neteditOptionsDialog.isOptionModified() && myNet) {
2546 }
2547 }
2548 return 1;
2549}
2550
2551
2552long
2554 // open sumo option dialog
2555 const auto sumoOptionsDialog = GNESumoOptionsDialog(this, mySumoOptions, myOriginalSumoOptions);
2556 // continue depending of result
2557 if ((sumoOptionsDialog.getResult() == GNEDialog::Result::ACCEPT) && sumoOptionsDialog.isOptionModified() && myNet) {
2559 }
2560 return 1;
2561}
2562
2563
2564long
2567 return 1;
2568}
2569
2570
2571long
2573 // open netgenerate options dialog
2575 return 1;
2576}
2577
2578
2579long
2580GNEApplicationWindow::onCmdUndo(FXObject* sender, FXSelector, void*) {
2581 // Check conditions
2582 if (myViewNet == nullptr) {
2583 return 0;
2584 } else if ((myInternalTest != sender) && !myEditMenuCommands.undoLastChange->isEnabled()) {
2585 return 0;
2586 } else {
2587 // check supermode (currently ignore supermode data)
2590 // abort if user doesn't press "yes"
2592 return 0;
2593 }
2594 }
2596 // update current show frame after undo
2599 }
2600 // update manually undo/redo menu commands (see #6005)
2603 // update toolbar undo-redo buttons
2605 return 1;
2606 }
2607}
2608
2609
2610long
2611GNEApplicationWindow::onCmdRedo(FXObject* sender, FXSelector, void*) {
2612 // Check conditions
2613 if (myViewNet == nullptr) {
2614 return 0;
2615 } else if ((myInternalTest != sender) && !myEditMenuCommands.redoLastChange->isEnabled()) {
2616 return 0;
2617 } else {
2618 // check supermode (currently ignore supermode data)
2621 // abort if user doesn't press "yes"
2623 return 0;
2624 }
2625 }
2627 // update current show frame after redo
2630 }
2631 // update manually undo/redo menu commands (see #6005)
2634 // update toolbar undo-redo buttons
2636 return 1;
2637 }
2638}
2639
2640
2641long
2643 // open UndoList Dialog
2644 GNEUndoListDialog(this);
2645 return 1;
2646}
2647
2648
2649long
2650GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2651 // check if net exist and there is something to undo/redo
2652 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2653 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2654 } else {
2655 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2656 }
2657 return 1;
2658}
2659
2660
2661long
2663 // first check viewNet
2665 // update demand path calculator
2667 }
2668 return 1;
2669}
2670
2671
2672long
2673GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2674 // Prepared for #6042
2675 return 1;
2676}
2677
2678
2679long
2680GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2681 // Prepared for #6042
2682 return 1;
2683}
2684
2685
2686long
2687GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2688 // Prepared for #6042
2689 return 1;
2690}
2691
2692
2693long
2694GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2695 // first check if myViewNet exist
2696 if (myViewNet) {
2697 // call set template in inspector frame
2699 }
2700 return 1;
2701}
2702
2703
2704long
2705GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2706 // first check if myViewNet exist
2707 if (myViewNet) {
2708 // call copy template in inspector frame
2710 }
2711 return 1;
2712}
2713
2714
2715long
2716GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2717 // first check if myViewNet exist
2718 if (myViewNet) {
2719 // call clear template in inspector frame
2721 }
2722 return 1;
2723}
2724
2725
2726long
2727GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2728 // check if net exist
2729 if (myNet) {
2731 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2732 } else {
2734 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2735 }
2736}
2737
2738
2739long
2740GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2741 // check if at least there is one edge in the network
2742 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2743 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2744 } else {
2745 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2746 }
2747}
2748
2749
2750long
2751GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2752 // check if net, viewnet and front attribute exist
2753 if (myViewNet && (myViewNet->getMarkFrontElements().getACs().size() > 0)) {
2754 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2755 } else {
2756 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2757 }
2758}
2759
2760
2761long
2762GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2763 if (myNet == nullptr) {
2764 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2765 } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2766 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2767 } else {
2768 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2769 }
2770}
2771
2772
2773long
2774GNEApplicationWindow::onUpdSaveAdditionalElements(FXObject* sender, FXSelector, void*) {
2775 if (myNet == nullptr) {
2776 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2778 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2779 } else {
2780 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2781 }
2782}
2783
2784
2785long
2787 if (myNet == nullptr) {
2788 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2789 } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2790 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2791 } else {
2792 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2793 }
2794}
2795
2796
2797long
2798GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2799 if (myNet == nullptr) {
2800 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2801 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2802 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2803 } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2804 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2805 } else {
2806 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2807 }
2808}
2809
2810
2811long
2812GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2813 if (myNet == nullptr) {
2814 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2815 } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2816 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2817 } else {
2818 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2819 }
2820
2821}
2822
2823
2824long
2825GNEApplicationWindow::onUpdSaveDemandElementsUnified(FXObject* sender, FXSelector, void*) {
2826 if (myNet == nullptr) {
2827 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2829 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2830 } else {
2831 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2832 }
2833}
2834
2835
2836long
2837GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2838 if (myNet == nullptr) {
2839 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2840 } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2841 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2842 } else {
2843 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2844 }
2845
2846}
2847
2848
2849long
2850GNEApplicationWindow::onUpdSaveDataElementsUnified(FXObject* sender, FXSelector, void*) {
2851 if (myNet == nullptr) {
2852 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2853 } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2854 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2855 } else {
2856 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2857 }
2858
2859}
2860
2861
2862long
2863GNEApplicationWindow::onUpdSaveMeanDataElements(FXObject* sender, FXSelector, void*) {
2864 if (myNet == nullptr) {
2865 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2866 } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2867 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2868 } else {
2869 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2870 }
2871}
2872
2873
2874long
2876 if (myNet == nullptr) {
2877 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2878 } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2879 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2880 } else {
2881 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2882 }
2883
2884}
2885
2886
2887long
2888GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2889 return myUndoList->onUpdUndo(sender, sel, ptr);
2890}
2891
2892
2893long
2894GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2895 return myUndoList->onUpdRedo(sender, sel, ptr);
2896}
2897
2898
2899long
2900GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2901 // first check viewNet
2902 if (myViewNet) {
2903 // check supermode network
2905 // disable
2906 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2908 // disable
2909 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2910 } else {
2911 // enable
2912 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2913 }
2914 } else {
2915 // disable
2916 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2917 }
2918}
2919
2920
2921long
2922GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2923 // check viewNet
2924 if (myViewNet) {
2925 // continue depending of selector
2926 switch (FXSELID(sel)) {
2927 // Network
2929 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2931 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2933 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2935 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2937 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2939 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2941 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2943 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2945 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2947 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2949 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2951 return myViewNet->onCmdToggleMergeAutomatically(sender, sel, ptr);
2953 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2955 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2957 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2959 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2960 // Demand
2962 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2964 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2966 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2968 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2970 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2972 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2974 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2976 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2978 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2980 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2982 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2983 // Data
2985 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2987 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
2989 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
2991 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
2993 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2995 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2997 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
2999 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
3000 default:
3001 return 0;
3002 }
3003 } else {
3004 return 0;
3005 }
3006}
3007
3008
3009long
3010GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
3011 // get menuCheck
3012 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
3013 // check viewNet
3014 if (myViewNet && menuCheck) {
3015 // continue depending of selector
3016 switch (FXSELID(sel)) {
3017 // Network
3020 menuCheck->setCheck(TRUE);
3021 } else {
3022 menuCheck->setCheck(FALSE);
3023 }
3024 break;
3027 menuCheck->setCheck(TRUE);
3028 } else {
3029 menuCheck->setCheck(FALSE);
3030 }
3031 break;
3034 menuCheck->setCheck(TRUE);
3035 } else {
3036 menuCheck->setCheck(FALSE);
3037 }
3038 break;
3041 menuCheck->setCheck(TRUE);
3042 } else {
3043 menuCheck->setCheck(FALSE);
3044 }
3045 break;
3048 menuCheck->setCheck(TRUE);
3049 } else {
3050 menuCheck->setCheck(FALSE);
3051 }
3052 break;
3055 menuCheck->setCheck(TRUE);
3056 } else {
3057 menuCheck->setCheck(FALSE);
3058 }
3059 break;
3062 menuCheck->setCheck(TRUE);
3063 } else {
3064 menuCheck->setCheck(FALSE);
3065 }
3066 break;
3069 menuCheck->setCheck(TRUE);
3070 } else {
3071 menuCheck->setCheck(FALSE);
3072 }
3073 break;
3076 menuCheck->setCheck(TRUE);
3077 } else {
3078 menuCheck->setCheck(FALSE);
3079 }
3080 break;
3083 menuCheck->setCheck(TRUE);
3084 } else {
3085 menuCheck->setCheck(FALSE);
3086 }
3087 break;
3090 menuCheck->setCheck(TRUE);
3091 } else {
3092 menuCheck->setCheck(FALSE);
3093 }
3094 break;
3097 menuCheck->setCheck(TRUE);
3098 } else {
3099 menuCheck->setCheck(FALSE);
3100 }
3101 break;
3104 menuCheck->setCheck(TRUE);
3105 } else {
3106 menuCheck->setCheck(FALSE);
3107 }
3108 break;
3111 menuCheck->setCheck(TRUE);
3112 } else {
3113 menuCheck->setCheck(FALSE);
3114 }
3115 break;
3118 menuCheck->setCheck(TRUE);
3119 } else {
3120 menuCheck->setCheck(FALSE);
3121 }
3122 break;
3125 menuCheck->setCheck(TRUE);
3126 } else {
3127 menuCheck->setCheck(FALSE);
3128 }
3129 break;
3130 // Demand
3133 menuCheck->setCheck(TRUE);
3134 } else {
3135 menuCheck->setCheck(FALSE);
3136 }
3137 break;
3140 menuCheck->setCheck(TRUE);
3141 } else {
3142 menuCheck->setCheck(FALSE);
3143 }
3144 break;
3147 menuCheck->setCheck(TRUE);
3148 } else {
3149 menuCheck->setCheck(FALSE);
3150 }
3151 break;
3154 menuCheck->setCheck(TRUE);
3155 } else {
3156 menuCheck->setCheck(FALSE);
3157 }
3158 break;
3161 menuCheck->setCheck(TRUE);
3162 } else {
3163 menuCheck->setCheck(FALSE);
3164 }
3165 break;
3168 menuCheck->setCheck(TRUE);
3169 } else {
3170 menuCheck->setCheck(FALSE);
3171 }
3172 break;
3175 menuCheck->setCheck(TRUE);
3176 } else {
3177 menuCheck->setCheck(FALSE);
3178 }
3179 // special case for lock persons
3181 menuCheck->enable();
3182 } else {
3183 menuCheck->disable();
3184 }
3185 break;
3188 menuCheck->setCheck(TRUE);
3189 } else {
3190 menuCheck->setCheck(FALSE);
3191 }
3192 break;
3195 menuCheck->setCheck(TRUE);
3196 } else {
3197 menuCheck->setCheck(FALSE);
3198 }
3199 // special case for lock containers
3201 menuCheck->enable();
3202 } else {
3203 menuCheck->disable();
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;
3220 // Data
3223 menuCheck->setCheck(TRUE);
3224 } else {
3225 menuCheck->setCheck(FALSE);
3226 }
3227 break;
3230 menuCheck->setCheck(TRUE);
3231 } else {
3232 menuCheck->setCheck(FALSE);
3233 }
3234 break;
3237 menuCheck->setCheck(TRUE);
3238 } else {
3239 menuCheck->setCheck(FALSE);
3240 }
3241 break;
3244 menuCheck->setCheck(TRUE);
3245 } else {
3246 menuCheck->setCheck(FALSE);
3247 }
3248 break;
3251 menuCheck->setCheck(TRUE);
3252 } else {
3253 menuCheck->setCheck(FALSE);
3254 }
3255 break;
3258 menuCheck->setCheck(TRUE);
3259 } else {
3260 menuCheck->setCheck(FALSE);
3261 }
3262 break;
3263
3266 menuCheck->setCheck(TRUE);
3267 } else {
3268 menuCheck->setCheck(FALSE);
3269 }
3270 break;
3273 menuCheck->setCheck(TRUE);
3274 } else {
3275 menuCheck->setCheck(FALSE);
3276 }
3277 break;
3278 default:
3279 break;
3280 }
3281 }
3282 return 0;
3283}
3284
3285
3286long
3287GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3288 auto& neteditOptions = OptionsCont::getOptions();
3289 if (myNet->getSavingStatus()->isNetworkSaved() && !neteditOptions.getBool("force-saving")) {
3290 // nothing to save
3291 return 1;
3292 }
3293 // first check if we have to set the output filename
3294 if ((sel == MID_GNE_AUTOMATICFILENAME) && neteditOptions.getString("net-file").empty()) {
3295 neteditOptions.set("net-file", *(static_cast<std::string*>(ptr)) + ".net.xml");
3296 }
3297 // function onCmdSaveNetworkAs must be executed if this is the first save
3298 if (neteditOptions.getString("net-file").empty()) {
3299 return onCmdSaveNetworkAs(sender, sel, ptr);
3300 } else {
3301 // always recompute before saving
3302 myNet->computeNetwork(this);
3303 // se net file in SUMO options
3305 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3306 bool saved = false;
3307 try {
3308 // obtain invalid networkElements (currently only edges or crossings
3309 std::vector<GNENetworkElement*> invalidNetworkElements;
3310 // iterate over crossings and edges
3311 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3312 if (!edge.second->isNetworkElementValid()) {
3313 invalidNetworkElements.push_back(edge.second);
3314 }
3315 }
3316 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3317 if (!crossing.second->isNetworkElementValid()) {
3318 invalidNetworkElements.push_back(crossing.second);
3319 }
3320 }
3321 // if there are invalid network elements, open GNEFixNetworkElements
3322 if (invalidNetworkElements.size() > 0) {
3323 // create fix network elements dialog
3324 const auto fixNetworkElementsDialog = GNEFixNetworkElements(this, invalidNetworkElements);
3325 // continue depending of result
3326 if (fixNetworkElementsDialog.getResult() == GNEDialog::Result::ACCEPT) {
3327 // Save network
3328 myNet->saveNetwork();
3329 saved = true;
3330 } else {
3331 // stop
3332 return 0;
3333 }
3334 } else {
3335 // Save network
3336 myNet->saveNetwork();
3337 saved = true;
3338 }
3339 } catch (IOError& e) {
3340 // open error message box
3341 GNEErrorBasicDialog(this, TL("Saving network failed"), e.what());
3342 }
3343 if (saved) {
3344 // write info
3345 WRITE_MESSAGE(TLF("Network saved in '%'.", neteditOptions.getString("net-file")));
3346 // After saving a net successfully, add it into Recent Nets list.
3347 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3349 } else {
3351 WRITE_ERROR(TLF("Could not save network in '%'.", neteditOptions.getString("net-file")));
3352 return 0;
3353 }
3354 return 1;
3355 }
3356}
3357
3358
3359long
3360GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3361 // get network file file
3362 const auto networkFileDialog = GNEFileDialog(this, TL("network file"),
3366 if (networkFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3367 // set ouput file in netedit configs
3368 auto& neteditOptions = OptionsCont::getOptions();
3369 neteditOptions.resetWritable();
3370 neteditOptions.set("net-file", networkFileDialog.getFilename());
3371 // update netedit title with the network name
3372 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFileDialog.getFilename().c_str()));
3373 // enable save network
3375 // save network
3376 return onCmdSaveNetwork(nullptr, 0, nullptr);
3377 } else {
3378 return 0;
3379 }
3380}
3381
3382
3383long
3384GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3385 // get neteditConfig filename
3386 const auto plainXMLFileDialog = GNEFileDialog(this, TL("plain XML file"),
3390 // Remove extension
3391 if (plainXMLFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3392 auto plainXMLFile = plainXMLFileDialog.getFilename();
3393 // adjust file
3394 if (plainXMLFile.back() == '.') {
3395 plainXMLFile.pop_back();
3396 } else {
3397 plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3398 plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3399 plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3400 plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3401 plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3402 plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3403 }
3404 // continue depending of file
3405 if (!plainXMLFile.empty()) {
3406 // start saving plain XML
3407 getApp()->beginWaitCursor();
3408 try {
3409 myNet->savePlain(plainXMLFile);
3410 // write info
3411 WRITE_MESSAGE(TLF("Plain XML saved with prefix '%'.", plainXMLFile));
3412 } catch (IOError& e) {
3413 // open message box
3414 GNEErrorBasicDialog(this, TL("Saving plain xml failed"), e.what());
3415 }
3416 // end saving plain XML
3417 getApp()->endWaitCursor();
3418 // set focus again in viewNet
3419 myViewNet->setFocus();
3420 }
3421 }
3422 return 1;
3423}
3424
3425
3426long
3428 // get neteditConfig filename
3429 const auto joinedJunctionsFileDialog = GNEFileDialog(this, TL("joined junctions file"),
3433 // continue depending of file
3434 if (joinedJunctionsFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3435 getApp()->beginWaitCursor();
3436 try {
3437 myNet->saveJoined(joinedJunctionsFileDialog.getFilename());
3438 // write info
3439 WRITE_MESSAGE(TLF("Joined junctions saved to '%'.", joinedJunctionsFileDialog.getFilename()));
3440 } catch (IOError& e) {
3441 // opening error message
3442 GNEErrorBasicDialog(this, TL("Saving joined junctions failed"), e.what());
3443 }
3444 getApp()->endWaitCursor();
3445 // set focus again in viewNet
3446 myViewNet->setFocus();
3447 }
3448 return 1;
3449}
3450
3451
3452long
3454 // obtain netedit option container
3455 auto& neteditOptions = OptionsCont::getOptions();
3456 neteditOptions.resetWritable();
3457 // Check if configuration file was already set at start of netedit or with a previous save
3458 if (neteditOptions.getString("configuration-file").empty()) {
3459 return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3460 } else {
3461 // get config file
3462 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3463 // get file path
3464 const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3465 // get patter file
3466 auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3467 // update netedit config
3469 // save all elements giving automatic names based on patter if their file isn't defined
3470 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3471 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3472 return 0;
3473 }
3474 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3475 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3476 return 0;
3477 }
3478 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3479 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3480 return 0;
3481 }
3482 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3483 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3484 return 0;
3485 }
3486 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3487 WRITE_MESSAGE(TL("Saving of netedit configuration aborted."));
3488 return 0;
3489 }
3490 // configuration
3491 std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3492 if (out.good()) {
3493 // write netedit config
3494 neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3495 // write info
3496 WRITE_MESSAGE(TLF("Netedit configuration saved in '%'.", neteditConfigFile));
3497 // config saved
3499 // After saving a config successfully, add it into recent configs
3500 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3501 } else {
3502 WRITE_ERROR(TLF("Could not save netedit configuration in '%'.", neteditConfigFile));
3503 }
3504 out.close();
3505 return 1;
3506 }
3507}
3508
3509
3510long
3511GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3512 auto& neteditOptions = OptionsCont::getOptions();
3513 // get neteditConfig filename
3514 const auto neteditConfigFileDialog = GNEFileDialog(this, TL("netedit config file"),
3518 // continue depending of file
3519 if (neteditConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3520 neteditOptions.resetWritable();
3521 neteditOptions.set("configuration-file", neteditConfigFileDialog.getFilename());
3522 // continue saving netedit config
3523 return onCmdSaveNeteditConfig(sender, sel, ptr);
3524 } else {
3525 return 0;
3526 }
3527}
3528
3529
3530long
3531GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3532 // check if enable or disable save netedit config button
3533 if (myNet == nullptr) {
3534 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3535 } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3536 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3537 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3538 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3539 } else {
3540 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3541 }
3542 // check if enable/disable save individual files
3543 if (myNet) {
3547 } else {
3549 }
3550 }
3551 return 1;
3552}
3553
3554
3555long
3556GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3557 // obtain netedit option container
3558 auto& neteditOptions = OptionsCont::getOptions();
3559 // reset containers
3560 neteditOptions.resetWritable();
3562 // Check if configuration file was already set at start of netedit or with a previous save
3563 if (neteditOptions.getString("sumocfg-file").empty()) {
3564 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3565 } else {
3566 // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3567 const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3568 const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3569 const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3570 // get SumoConfig file
3571 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3572 // get config file without extension
3573 auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3574 // update netedit config
3576 // save all elements giving automatic names based on patter in their file isn't defined
3577 if (onCmdSaveNetwork(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3578 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3579 return 0;
3580 }
3581 if (onCmdSaveAdditionalElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3582 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3583 return 0;
3584 }
3585 if (onCmdSaveDemandElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3586 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3587 return 0;
3588 }
3589 if (onCmdSaveDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3590 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3591 return 0;
3592 }
3593 if (onCmdSaveMeanDataElements(nullptr, MID_GNE_AUTOMATICFILENAME, &patterFile) != 1) {
3594 WRITE_MESSAGE(TL("Saving of SUMO configuration aborted"));
3595 return 0;
3596 }
3597 // set input in sumo options
3598 setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3599 // if we have trips or flow over junctions, add option junction-taz
3602 mySumoOptions.set("junction-taz", "true");
3603 }
3604 std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3605 if (out.good()) {
3606 // write SUMO config
3607 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3608 // write info
3609 WRITE_MESSAGE(TLF("SUMO configuration saved in '%'.", sumoConfigFile));
3610 // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3611 if (!ignoreAdditionals && !ignoreDemandElements) {
3613 }
3614 // After saving a config successfully, add it into recent configs
3615 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3616 } else {
3617 WRITE_MESSAGE(TLF("Could not save SUMO configuration in '%'.", sumoConfigFile));
3618 }
3619 out.close();
3620 return 1;
3621 }
3622}
3623
3624
3625long
3626GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3627 auto& neteditOptions = OptionsCont::getOptions();
3628 // get sumoConfig filename
3629 const auto sumoConfigFileDialog = GNEFileDialog(this, TL("sumo config file"),
3633 // continue depending of file
3634 if (sumoConfigFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3635 // save file in netedit options
3636 neteditOptions.resetWritable();
3637 neteditOptions.set("sumocfg-file", sumoConfigFileDialog.getFilename());
3638 // continue saving SUMO Config
3639 return onCmdSaveSumoConfig(sender, sel, ptr);
3640 } else {
3641 return 0;
3642 }
3643}
3644
3645
3646long
3647GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3648 if (myNet == nullptr) {
3649 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3650 } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3651 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3652 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3653 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3654 } else {
3655 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3656 }
3657}
3658
3659
3660long
3661GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3662 // get option container
3663 auto& neteditOptions = OptionsCont::getOptions();
3664 // Check if TLS Programs file was already set at start of netedit or with a previous save
3665 if (neteditOptions.getString("tls-file").empty()) {
3666 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3667 } else {
3668 // Start saving TLS Programs
3669 getApp()->beginWaitCursor();
3670 try {
3671 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3672 myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3673 // write info
3674 WRITE_MESSAGE(TLF("TLS Programs saved in '%'.", neteditOptions.getString("tls-file")));
3675 } catch (IOError& e) {
3676 // open error message box
3677 GNEErrorBasicDialog(this, TL("Saving TLS Programs failed"), e.what());
3678 }
3680 getApp()->endWaitCursor();
3681 // set focus again in viewNet
3682 myViewNet->setFocus();
3683 }
3684 return 1;
3685}
3686
3687
3688long
3689GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3690 if (myNet == nullptr) {
3691 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3692 } else {
3693 // check if there is at least one TLS
3694 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3695 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3696 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3697 }
3698 }
3699 // no TLS, then disable
3700 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3701 }
3702}
3703
3704
3705long
3706GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3707 // get option container
3708 auto& neteditOptions = OptionsCont::getOptions();
3709 // Check if edgeType file was already set at start of netedit or with a previous save
3710 if (neteditOptions.getString("edgetypes-file").empty()) {
3711 return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3712 } else {
3713 // Start saving edgeTypes
3714 getApp()->beginWaitCursor();
3715 try {
3716 myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3717 // write info
3718 WRITE_MESSAGE(TLF("EdgeType saved in '%'.", neteditOptions.getString("edgetypes-file")));
3719 } catch (IOError& e) {
3720 // open error message box
3721 GNEErrorBasicDialog(this, TL("Saving edgeTypes failed"), e.what());
3722 }
3724 getApp()->endWaitCursor();
3725 }
3726 return 1;
3727}
3728
3729
3730long
3731GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3732 // check if net exist and there are edge types
3733 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3734 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3735 } else {
3736 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3737 }
3738 return 1;
3739}
3740
3741
3742long
3744 // get option container
3745 auto& neteditOptions = OptionsCont::getOptions();
3746 // get TLS file
3747 const auto TLSfileDialog = GNEFileDialog(this, TL("Traffic Light definitions file"),
3751 // check tat file is valid
3752 if (TLSfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3753 // change value of "tls-file"
3754 neteditOptions.resetWritable();
3755 neteditOptions.set("tls-file", TLSfileDialog.getFilename());
3756 // set focus again in viewNet
3757 myViewNet->setFocus();
3758 // save TLS Programs
3759 return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3760 } else {
3761 return 1;
3762 }
3763}
3764
3765
3766long
3767GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3768 // get option container
3769 auto& neteditOptions = OptionsCont::getOptions();
3770 // get network file file
3771 const auto edgeTypeFileDialog = GNEFileDialog(this, TL("EdgeTypes file"),
3775 // check tat file is valid
3776 if (edgeTypeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3777 // change value of "edgetypes-file"
3778 neteditOptions.resetWritable();
3779 neteditOptions.set("edgetypes-file", edgeTypeFileDialog.getFilename());
3780 // set focus again in viewNet
3781 myViewNet->setFocus();
3782 // save edgeTypes
3783 return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3784 } else {
3785 return 1;
3786 }
3787}
3788
3789
3790long
3791GNEApplicationWindow::onUpdSaveEdgeTypesAs(FXObject* sender, FXSelector, void*) {
3792 // check if net exist and there are edge types
3793 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3794 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3795 } else {
3796 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3797 }
3798 return 1;
3799}
3800
3801
3802long
3804 // get file
3805 const auto additionalFileDialog = GNEFileDialog(this, TL("Additional elements file"),
3809 // check file
3810 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3811 // flag for save current saving status
3812 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3813 // disable validation for additionals
3814 XMLSubSys::setValidation("never", "auto", "auto");
3815 // Create additional handler
3816 GNEGeneralHandler generalHandler(myNet, additionalFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3817 // begin undoList operation
3818 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("load additionals from '%'", additionalFileDialog.getFilename()));
3819 // Run parser
3820 if (!generalHandler.parse()) {
3821 // write error
3822 WRITE_ERROR(TLF("Loading of additional file '%' failed.", additionalFileDialog.getFilename()));
3823 } else {
3824 // write info
3825 WRITE_MESSAGE(TLF("Loading of additional file '%' successfully.", additionalFileDialog.getFilename()));
3826 // enable save if there is errors loading additionals
3827 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3829 }
3830 }
3831 // end undoList operation
3832 myUndoList->end();
3833 // restore validation for additionals
3834 XMLSubSys::setValidation("auto", "auto", "auto");
3835 // check if clear undoList
3837 myUndoList->clear();
3838 }
3839 update();
3840 }
3841 return 1;
3842}
3843
3844
3845long
3847 // disable validation for additionals
3848 XMLSubSys::setValidation("never", "auto", "auto");
3849 // begin undoList operation
3850 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals"));
3851 // clear additionals
3853 // iterate over all additional files
3854 for (const auto& additionalFileName : myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames()) {
3855 // Create general handler
3856 GNEGeneralHandler generalHandler(myNet, additionalFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
3857 // force overwritte elements
3858 generalHandler.forceOverwriteElements();
3859 // Run parser
3860 if (!generalHandler.parse()) {
3861 WRITE_ERROR(TLF("Reloading of additional file '%' failed.", additionalFileName));
3862 } else {
3863 WRITE_MESSAGE(TLF("Reloading of additional file '%' successfully.", additionalFileName));
3864 }
3865 }
3866 // end undoList operation
3867 myUndoList->end();
3868 // restore validation for additionals
3869 XMLSubSys::setValidation("auto", "auto", "auto");
3870 // check if clear undoList
3872 myUndoList->clear();
3873 }
3874 update();
3875 return 1;
3876}
3877
3878
3879long
3880GNEApplicationWindow::onUpdReloadAdditionalElements(FXObject* sender, FXSelector, void*) {
3881 if (myViewNet == nullptr) {
3882 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3883 } else if (myViewNet->getNet()->getSavingFilesHandler()->getAdditionalFilenames().empty()) {
3884 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3885 } else {
3886 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3887 }
3888}
3889
3890
3891long
3892GNEApplicationWindow::onCmdSaveAdditionalElements(FXObject* sender, FXSelector sel, void* ptr) {
3893 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
3894 // get option container
3895 auto& neteditOptions = OptionsCont::getOptions();
3896 if (myNet->getSavingStatus()->isAdditionalsSaved() && !neteditOptions.getBool("force-saving")) {
3897 // nothing to save
3898 return 1;
3899 }
3900 // check if we have to set the output filename
3901 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getAdditionalFilenames().empty()) {
3902 savingFileHandler->updateAdditionalEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".add.xml");
3903 }
3904 // check if we have to open save as dialog
3905 if (savingFileHandler->getAdditionalFilenames().empty()) {
3906 // choose file to save
3907 return onCmdSaveAdditionalElementsUnified(sender, sel, ptr);
3908 } else {
3909 // always recompute before saving
3910 myNet->computeNetwork(this);
3911 try {
3912 // compute before saving (for detectors positions)
3913 myNet->computeNetwork(this);
3914 // save additionals
3915 const bool savingResult = myNet->saveAdditionals();
3916 // show info
3917 if (savingResult) {
3918 WRITE_MESSAGE(TL("Additionals saved."));
3919 return 1;
3920 } else {
3921 WRITE_MESSAGE(TL("Saving additional aborted."));
3922 return 0;
3923 }
3924 } catch (IOError& e) {
3925 // open error message box
3926 GNEErrorBasicDialog(this, TL("Saving additional elements failed"), e.what());
3927 }
3928 return 0;
3929 }
3930}
3931
3932
3933long
3934GNEApplicationWindow::onCmdSaveAdditionalElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
3935 // get option container
3936 auto& neteditOptions = OptionsCont::getOptions();
3937 // declare current folder
3938 FXString currentFolder = gCurrentFolder;
3939 // set current folder
3940 if (neteditOptions.getString("configuration-file").size() > 0) {
3941 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3942 } else if (neteditOptions.getString("net-file").size() > 0) {
3943 currentFolder = getFolder(neteditOptions.getString("net-file"));
3944 }
3945 // get additional file
3946 const auto additionalFileDialog = GNEFileDialog(this, TL("Additional elements file"),
3950 // check that file is valid
3951 if (additionalFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3952 // begin undoList operation
3953 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TLF("saving of unified additional elements in '%'", additionalFileDialog.getFilename()));
3954 // iterate over all demand elementes and change file
3955 for (const auto& additionalElementTag : myNet->getAttributeCarriers()->getAdditionals()) {
3956 for (const auto& additionalElement : additionalElementTag.second) {
3957 additionalElement.second->setAttribute(GNE_ATTR_ADDITIONAL_FILE, additionalFileDialog.getFilename(), myUndoList);
3958 }
3959 }
3960 // end undoList operation
3961 myUndoList->end();
3962 // save additionals
3963 return onCmdSaveAdditionalElements(sender, sel, ptr);
3964 } else {
3965 return 0;
3966 }
3967}
3968
3969
3970long
3972 // get juPedSim file
3973 const auto juPedSimfileDialog = GNEFileDialog(this, TL("JuPedSim elements file"),
3977 // check that file is valid
3978 if (juPedSimfileDialog.getResult() == GNEDialog::Result::ACCEPT) {
3979 try {
3980 // get all jupedsims
3981 std::unordered_set<const GNEAttributeCarrier*> juPedSimElements;
3982 for (const auto& additionalTag : myNet->getAttributeCarriers()->getAdditionals()) {
3983 if (myTagPropertiesDatabase->getTagProperty(additionalTag.first, true)->isJuPedSimElement()) {
3984 for (const auto& additional : additionalTag.second) {
3985 juPedSimElements.insert(additional.second);
3986 }
3987 }
3988 }
3989 // save additionals
3990 const bool savingResult = myNet->saveJuPedSimElements(juPedSimElements, juPedSimfileDialog.getFilename());
3991 // set focus again in viewNet
3992 myViewNet->setFocus();
3993 // show info
3994 if (savingResult) {
3995 WRITE_MESSAGE(TL("JuPedSim elements saved."));
3996 return 1;
3997 } else {
3998 WRITE_MESSAGE(TL("Saving JuPedSim elements aborted."));
3999
4000 return 0;
4001 }
4002 } catch (IOError& e) {
4003 // open error message box
4004 GNEErrorBasicDialog(this, TL("Saving JuPedSim elements failed"), e.what());
4005 }
4006 }
4007 return 0;
4008}
4009
4010
4011long
4013 // get file
4014 const auto routeFileDialog = GNEFileDialog(this, TL("Route elements file"),
4018 // check file
4019 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4020 // save previous demand element status saving
4021 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
4022 // disable validation for additionals
4023 XMLSubSys::setValidation("never", "auto", "auto");
4024 // Create generic handler
4025 GNEGeneralHandler handler(myNet, routeFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4026 // begin undoList operation
4027 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("loading demand elements from '%'", routeFileDialog.getFilename()));
4028 // Run parser for additionals
4029 if (!handler.parse()) {
4030 // write error
4031 WRITE_ERROR(TLF("Loading of route file '%' failed.", routeFileDialog.getFilename()));
4032 } else {
4033 // show info
4034 WRITE_MESSAGE(TLF("Loading of route file '%' successfully.", routeFileDialog.getFilename()));
4035 // enable demand elements if there is an error creating element
4036 if (previouslySaved && !handler.isErrorCreatingElement()) {
4038 }
4039 }
4040 // end undoList operation
4041 myUndoList->end();
4042 // restore validation
4043 XMLSubSys::setValidation("auto", "auto", "auto");
4044 // check if clear undoList
4046 myUndoList->clear();
4047 }
4048 update();
4049 }
4050 return 1;
4051}
4052
4053
4054long
4056 // disable validation for additionals
4057 XMLSubSys::setValidation("never", "auto", "auto");
4058 // begin undoList operation
4059 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("reloading demand elements"));
4060 // clear demand elements
4062 // iterate over all demand elements
4063 for (const auto& demandFileName : myNet->getSavingFilesHandler()->getDemandFilenames()) {
4064 // Create handler
4065 GNEGeneralHandler generalHandler(myNet, demandFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4066 // force overwritte elements
4067 generalHandler.forceOverwriteElements();
4068 // Run parser for additionals
4069 if (!generalHandler.parse()) {
4070 WRITE_ERROR(TLF("Reloading of route file '%' failed.", demandFileName));
4071 } else {
4072 WRITE_MESSAGE(TLF("Reloading of route file '%' successfully.", demandFileName));
4073 }
4074 }
4075 // end undoList operation and update view
4076 myUndoList->end();
4077 // restore validation for demand
4078 XMLSubSys::setValidation("auto", "auto", "auto");
4079 // check if clear undoList
4081 myUndoList->clear();
4082 }
4083 update();
4084 return 1;
4085}
4086
4087
4088long
4089GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
4090 if (myViewNet == nullptr) {
4091 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4092 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDemandFilenames().empty()) {
4093 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4094 } else {
4095 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4096 }
4097}
4098
4099
4100long
4101GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
4102 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4103 // get option container
4104 auto& neteditOptions = OptionsCont::getOptions();
4105 // check saving conditions
4106 if (myNet->getSavingStatus()->isDemandElementsSaved() && !neteditOptions.getBool("force-saving")) {
4107 // nothing to save
4108 return 1;
4109 }
4110 // check if we have to set the output filename
4111 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDemandFilenames().empty()) {
4112 savingFileHandler->updateDemandEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".rou.xml");
4113 }
4114 // check if we have to open save as dialog
4115 if (savingFileHandler->getDemandFilenames().empty()) {
4116 // choose file to save
4117 return onCmdSaveDemandElementsUnified(sender, sel, ptr);
4118 } else {
4119 // always recompute before saving
4120 myNet->computeNetwork(this);
4121 try {
4122 // save demand elements
4123 const bool savingResult = myNet->saveDemandElements();
4124 // show info
4125 if (savingResult) {
4126 WRITE_MESSAGE(TL("Demand elements saved."));
4127 return 1;
4128 } else {
4129 WRITE_MESSAGE(TL("Saving demand elements aborted."));
4130 return 0;
4131 }
4132 } catch (IOError& e) {
4133 // open error message box
4134 GNEErrorBasicDialog(this, TL("Saving demand elements failed"), e.what());
4135 }
4136 }
4137 return 0;
4138}
4139
4140
4141long
4142GNEApplicationWindow::onCmdSaveDemandElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4143 // get option container
4144 auto& neteditOptions = OptionsCont::getOptions();
4145 // declare current folder
4146 FXString currentFolder = gCurrentFolder;
4147 // set current folder
4148 if (neteditOptions.getString("configuration-file").size() > 0) {
4149 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4150 } else if (neteditOptions.getString("net-file").size() > 0) {
4151 currentFolder = getFolder(neteditOptions.getString("net-file"));
4152 }
4153 // get route file
4154 const auto routeFileDialog = GNEFileDialog(this, TL("Route elements file"),
4158 // check that file is correct
4159 if (routeFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4160 // begin undoList operation
4161 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("saving of unified demand elements in '%'.", routeFileDialog.getFilename()));
4162 // iterate over all demand elementes and change file
4163 for (const auto& demandElementTag : myNet->getAttributeCarriers()->getDemandElements()) {
4164 for (const auto& demandElement : demandElementTag.second) {
4165 demandElement.second->setAttribute(GNE_ATTR_DEMAND_FILE, routeFileDialog.getFilename(), myUndoList);
4166 }
4167 }
4168 // end undoList operation
4169 myUndoList->end();
4170 // save demand elements
4171 return onCmdSaveDemandElements(sender, sel, ptr);
4172 } else {
4173 return 0;
4174 }
4175}
4176
4177
4178long
4179GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4180 // get file
4181 const auto dataFileDialog = GNEFileDialog(this, TL("Data elements file"),
4185 // check file
4186 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4187 // save previous demand element status saving
4188 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4189 // disable update data
4191 // disable validation for data elements
4192 XMLSubSys::setValidation("never", "auto", "auto");
4193 // Create data handler
4194 GNEDataHandler dataHandler(myNet, dataFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4195 // begin undoList operation
4196 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("loading data elements from '%'.", dataFileDialog.getFilename()));
4197 // Run data parser
4198 if (!dataHandler.parse()) {
4199 // write error
4200 WRITE_ERROR(TLF("Loading of data file '%' failed.", dataFileDialog.getFilename()));
4201 } else {
4202 // show info
4203 WRITE_MESSAGE(TLF("Loading of data file '%' successfully.", dataFileDialog.getFilename()));
4204 // enable demand elements if there is an error creating element
4205 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4207 }
4208 }
4209 // end undoList operation
4210 myUndoList->end();
4211 // enable update data
4213 // restore validation for data
4214 XMLSubSys::setValidation("auto", "auto", "auto");
4215 // check if clear undoList
4217 myUndoList->clear();
4218 }
4219 update();
4220 }
4221 return 1;
4222}
4223
4224
4225long
4227 // disable update data
4229 // disable validation for additionals
4230 XMLSubSys::setValidation("never", "auto", "auto");
4231 // begin undoList operation
4232 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements"));
4233 // clear data elements
4235 // iterate over all data elements
4236 for (const auto& dataFileName : myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames()) {
4237 // Create additional handler
4238 GNEDataHandler dataHandler(myNet, dataFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4239 // force overwritte elements
4240 dataHandler.forceOverwriteElements();
4241 // Run data parser
4242 if (!dataHandler.parse()) {
4243 WRITE_ERROR(TLF("Reloading of data file '%' failed.", dataFileName));
4244 } else {
4245 WRITE_MESSAGE(TLF("Reloading of data file '%' successfully.", dataFileName));
4246 }
4247 }
4248 // restore validation for data
4249 XMLSubSys::setValidation("auto", "auto", "auto");
4250 // end undoList operation and update view
4251 myUndoList->end();
4252 // enable update data
4254 // check if clear undoList
4256 myUndoList->clear();
4257 }
4258 update();
4259 return 1;
4260}
4261
4262
4263long
4264GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4265 if (myViewNet == nullptr) {
4266 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4267 } else if (myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames().empty()) {
4268 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4269 } else {
4270 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4271 }
4272}
4273
4274
4275long
4276GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4277 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4278 // get option container
4279 auto& neteditOptions = OptionsCont::getOptions();
4280 // check saving conditions
4281 if (myNet->getSavingStatus()->isDataElementsSaved() && !neteditOptions.getBool("force-saving")) {
4282 // nothing to save
4283 return 1;
4284 }
4285 // check if we have to set the output filename
4286 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getDataFilenames().empty()) {
4287 savingFileHandler->updateDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + ".xml");
4288 }
4289 // check if we have to open save as dialog
4290 if (savingFileHandler->getDataFilenames().empty()) {
4291 return onCmdSaveDataElementsUnified(sender, sel, ptr);
4292 } else {
4293 try {
4294 // save data elements
4295 const bool savingResult = myNet->saveDataElements();
4296 // show info
4297 if (savingResult) {
4298 WRITE_MESSAGE(TL("Data 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 data elements failed"), e.what());
4307 }
4308 }
4309 return 0;
4310}
4311
4312
4313long
4314GNEApplicationWindow::onCmdSaveDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4315 // get option container
4316 auto& neteditOptions = OptionsCont::getOptions();
4317 // declare current folder
4318 FXString currentFolder = gCurrentFolder;
4319 // set current folder
4320 if (neteditOptions.getString("configuration-file").size() > 0) {
4321 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4322 } else if (neteditOptions.getString("net-file").size() > 0) {
4323 currentFolder = getFolder(neteditOptions.getString("net-file"));
4324 }
4325 // get data file
4326 const auto dataFileDialog = GNEFileDialog(this, TL("Data elements file"),
4330 // check that file is correct
4331 if (dataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4332 // begin undoList operation
4333 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("saving of unified data elements in '%'", dataFileDialog.getFilename()));
4334 // iterate over all demand elementes and change file
4335 for (const auto& dataSet : myNet->getAttributeCarriers()->getDataSets()) {
4336 dataSet.second->setAttribute(GNE_ATTR_DATA_FILE, dataFileDialog.getFilename(), myUndoList);
4337 }
4338 // end undoList operation
4339 myUndoList->end();
4340 // save data elements
4341 return onCmdSaveDataElements(sender, sel, ptr);
4342 } else {
4343 return 0;
4344 }
4345}
4346
4347
4348long
4350 // get file
4351 const auto meanDataFileDialog = GNEFileDialog(this, TL("MeanData elements file"),
4355 // check file
4356 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4357 // save previous demand element status saving
4358 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4359 // disable validation for meanDatas
4360 XMLSubSys::setValidation("never", "auto", "auto");
4361 // Create meanData handler
4362 GNEGeneralHandler generalHandler(myNet, meanDataFileDialog.getFilename(), myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4363 // begin undoList operation
4364 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TLF("load meanDatas from '%'", meanDataFileDialog.getFilename()));
4365 // Run parser
4366 if (!generalHandler.parse()) {
4367 // write error
4368 WRITE_ERROR(TLF("Loading of meandata file '%' failed.", meanDataFileDialog.getFilename()));
4369 } else {
4370 // show info
4371 WRITE_MESSAGE(TLF("Loading of meandata file '%' successfully.", meanDataFileDialog.getFilename()));
4372 // enable demand elements if there is an error creating element
4373 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4375 }
4376 }
4377 // end undoList operation
4378 myUndoList->end();
4379 // restore validation for meanDatas
4380 XMLSubSys::setValidation("auto", "auto", "auto");
4381 // check if clear undoList
4383 myUndoList->clear();
4384 }
4385 update();
4386 }
4387 return 1;
4388}
4389
4390
4391long
4393 // disable validation for meanDatas
4394 XMLSubSys::setValidation("never", "auto", "auto");
4395 // begin undoList operation
4397 // clear meanDatas
4399 // iterate over all data elements
4400 for (const auto& meanDataFileName : myViewNet->getNet()->getSavingFilesHandler()->getDataFilenames()) {
4401 // Create general handler
4402 GNEGeneralHandler generalHandler(myNet, meanDataFileName, myAllowUndoRedoLoading ? myAllowUndoRedo : false);
4403 // force overwritte elements
4404 generalHandler.forceOverwriteElements();
4405 // Run parser
4406 if (!generalHandler.parse()) {
4407 WRITE_ERROR(TLF("Reloading of meanData file '%' failed.", meanDataFileName));
4408 } else {
4409 WRITE_MESSAGE(TLF("Reloading of meanData file '%' successfully.", meanDataFileName));
4410 }
4411 }
4412 // end undoList operation and update view
4413 myUndoList->end();
4414 // restore validation for meanDatas
4415 XMLSubSys::setValidation("auto", "auto", "auto");
4416 // check if clear undoList
4418 myUndoList->clear();
4419 }
4420 update();
4421 return 1;
4422}
4423
4424
4425long
4426GNEApplicationWindow::onUpdReloadMeanDataElements(FXObject* sender, FXSelector, void*) {
4427 if (myViewNet == nullptr) {
4428 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4429 } else if (myViewNet->getNet()->getSavingFilesHandler()->getMeanDataFilenames().empty()) {
4430 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4431 } else {
4432 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4433 }
4434}
4435
4436
4437long
4438GNEApplicationWindow::onCmdSaveMeanDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4439 const auto savingFileHandler = myViewNet->getNet()->getSavingFilesHandler();
4440 // get option container
4441 auto& neteditOptions = OptionsCont::getOptions();
4442 // check saving conditions
4443 if (myNet->getSavingStatus()->isMeanDatasSaved() && !neteditOptions.getBool("force-saving")) {
4444 // nothing to save
4445 return 1;
4446 }
4447 // check if we have to set the output filename
4448 if ((sel == MID_GNE_AUTOMATICFILENAME) && savingFileHandler->getMeanDataFilenames().empty()) {
4449 savingFileHandler->updateMeanDataEmptyFilenames(*(static_cast<std::string*>(ptr)) + "add.xml");
4450 }
4451 // check if we have to open save as dialog
4452 if (savingFileHandler->getMeanDataFilenames().empty()) {
4453 return onCmdSaveMeanDataElementsUnified(sender, sel, ptr);
4454 } else {
4455 try {
4456 // compute before saving
4457 myNet->computeNetwork(this);
4458 // save demand elements
4459 const bool savingResult = myNet->saveMeanDatas();
4460 // show info
4461 if (savingResult) {
4462 WRITE_MESSAGE(TL("MeanDatas elements saved"));
4463 return 1;
4464 } else {
4465 WRITE_MESSAGE(TL("Saving MeanData elements aborted"));
4466 return 0;
4467 }
4468 } catch (IOError& e) {
4469 // open error message box
4470 GNEErrorBasicDialog(this, TL("Saving demand elements failed!"), e.what());
4471 }
4472 }
4473 return 0;
4474}
4475
4476
4477long
4478GNEApplicationWindow::onCmdSaveMeanDataElementsUnified(FXObject* sender, FXSelector sel, void* ptr) {
4479 // get option container
4480 auto& neteditOptions = OptionsCont::getOptions();
4481 // declare current folder
4482 FXString currentFolder = gCurrentFolder;
4483 // set current folder
4484 if (neteditOptions.getString("configuration-file").size() > 0) {
4485 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4486 } else if (neteditOptions.getString("net-file").size() > 0) {
4487 currentFolder = getFolder(neteditOptions.getString("net-file"));
4488 }
4489 // get meanData file
4490 const auto meanDataFileDialog = GNEFileDialog(this, TL("MeanData elements file"),
4494 // check that file is valid
4495 if (meanDataFileDialog.getResult() == GNEDialog::Result::ACCEPT) {
4496 // begin undoList operation
4497 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TLF("saving of unified mean data elements in '%'", meanDataFileDialog.getFilename()));
4498 // iterate over all demand elementes and change file
4499 for (const auto& meanDataTag : myNet->getAttributeCarriers()->getMeanDatas()) {
4500 for (const auto& meanData : meanDataTag.second) {
4501 meanData.second->setAttribute(GNE_ATTR_MEANDATA_FILE, meanDataFileDialog.getFilename(), myUndoList);
4502 }
4503 }
4504 // end undoList operation
4505 myUndoList->end();
4506 // save meanDatas
4507 return onCmdSaveMeanDataElements(sender, sel, ptr);
4508 } else {
4509 return 0;
4510 }
4511}
4512
4513
4514bool
4516 if (myNet) {
4517 bool abortSaving = false;
4518 const auto saveNetwork = myNet->getSavingStatus()->askSaveNetwork(abortSaving);
4519 const auto saveAdditionalElements = myNet->getSavingStatus()->askSaveAdditionalElements(abortSaving);
4520 const auto saveDemandElements = myNet->getSavingStatus()->askSaveDemandElements(abortSaving);
4521 const auto saveDataElements = myNet->getSavingStatus()->askSaveDataElements(abortSaving);
4522 const auto saveMeanDataElements = myNet->getSavingStatus()->askSaveMeanDataElements(abortSaving);
4523 // first check if abort saving
4524 if (abortSaving) {
4525 return false;
4526 }
4527 // save every type of file
4528 if ((saveNetwork == GNEDialog::Result::ACCEPT) &&
4529 (onCmdSaveNetwork(nullptr, 0, nullptr) != 1)) {
4530 return false;
4531 }
4532 if ((saveAdditionalElements == GNEDialog::Result::ACCEPT) &&
4533 (onCmdSaveAdditionalElements(nullptr, 0, nullptr) != 1)) {
4534 return false;
4535 }
4536 if ((saveDemandElements == GNEDialog::Result::ACCEPT) &&
4537 (onCmdSaveDemandElements(nullptr, 0, nullptr) != 1)) {
4538 return false;
4539 }
4540 if ((saveDataElements == GNEDialog::Result::ACCEPT) &&
4541 (onCmdSaveDataElements(nullptr, 0, nullptr) != 1)) {
4542 return false;
4543 }
4544 if ((saveMeanDataElements == GNEDialog::Result::ACCEPT) &&
4545 (onCmdSaveMeanDataElements(nullptr, 0, nullptr) != 1)) {
4546 return false;
4547 }
4548 // restore focus in viewNet
4549 myViewNet->setFocus();
4550 // clear undo list
4551 clearUndoList();
4552 // all saved, then continue
4553 return true;
4554 } else {
4555 // nothing to do, then continue
4556 return true;
4557 }
4558}
4559
4560
4561void
4562GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4563 // obtain netedit option container
4564 auto& neteditOptions = OptionsCont::getOptions();
4566 // set network
4567 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4568 // set routes
4569 if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4570 mySumoOptions.resetDefault("route-files");
4571 } else {
4572 mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4573 }
4574 // set SumoOptions depending of additionalFiles and meanData files
4575 if (ignoreAdditionals) {
4576 if (neteditOptions.getString("meandata-files").empty()) {
4577 mySumoOptions.resetDefault("additional-files");
4578 } else {
4579 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4580 }
4581 } else {
4582 if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4583 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4584 } else if (neteditOptions.getString("additional-files").size() > 0) {
4585 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4586 } else if (neteditOptions.getString("meandata-files").size() > 0) {
4587 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4588 } else {
4589 mySumoOptions.resetDefault("additional-files");
4590 }
4591 }
4592}
4593
4594
4595FXString
4596GNEApplicationWindow::getFolder(const std::string& folder) const {
4597 // declare folder
4598 std::string newFolder = folder;
4599 // declare stop flag
4600 bool stop = false;
4601 // continue while stop is false
4602 while (!stop) {
4603 if (newFolder.empty()) {
4604 // new folder empty, then stop
4605 stop = true;
4606 } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4607 (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4608 // removed file, then stop
4609 stop = true;
4610 } else {
4611 newFolder.pop_back();
4612 }
4613 }
4614 // if is empty, return gCurrentFolder
4615 if (newFolder.empty()) {
4616 return gCurrentFolder;
4617 }
4618 return FXString(newFolder.c_str());
4619}
4620
4621
4622void
4624 // check that view exists
4625 if (myViewNet) {
4627 }
4628 // update require recomputing
4630}
4631
4632
4633void
4635 // remove lock hotkeys
4637 // check supermode
4638 if (supermode == Supermode::NETWORK) {
4639 // menu commands
4643 // lock
4647 // processing
4652 } else if (supermode == Supermode::DEMAND) {
4653 // menu commands
4657 // lock
4661 // processing
4666 } else if (supermode == Supermode::DATA) {
4667 // menu commands
4671 // lock
4675 // processing
4680 } else {
4681 // menu commands
4686 // lock
4690 // processing
4694 }
4695 // continue depending of view
4696 if (myViewNet) {
4700 } else if (myViewNet->getEditModes().isJuPedSimView()) {
4703 }
4704 }
4705}
4706
4707
4708bool
4712
4713
4714void
4718
4719
4720void
4722 myUndoRedoListEnabled = reason;
4723}
4724
4725
4726const std::string&
4730
4731
4732void
4734 if (myViewNet) {
4735 // destroy Popup (to avoid crashes)
4737 }
4738 // clear undo list and return true to continue with closing/reload
4739 myUndoList->clear();
4740}
4741
4742
4747
4748
4753
4754
4759
4760
4765
4766
4771
4772
4777
4778
4783
4784
4785void
4787 // get option container
4788 auto& neteditOptions = OptionsCont::getOptions();
4789 // get additional files
4790 const auto& additionalFiles = neteditOptions.getStringVector("additional-files");
4791 // check if ignore loading of additional files
4792 const auto ignoreLoadAdditionalFiles = neteditOptions.getBool("ignore.additionalelements");
4793 // check conditions
4794 if (ignoreLoadAdditionalFiles) {
4795 // reset flag
4796 neteditOptions.resetWritable();
4797 neteditOptions.set("ignore.additionalelements", "false");
4798 // also reset route files in both containers
4799 neteditOptions.resetDefault("additional-files");
4800 mySumoOptions.resetDefault("additional-files");
4801 } else if (myNet && (additionalFiles.size() > 0)) {
4802 // update saving files handler
4803 myNet->getSavingFilesHandler()->updateAdditionalEmptyFilenames(additionalFiles.front());
4804 // disable validation for additionals
4805 XMLSubSys::setValidation("never", "auto", "auto");
4806 // begin undolist
4807 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4808 // use this flag for mark all elements as saved after loading, if it was sucessfully
4809 bool setSaved = additionalFiles.size() == 1;
4810 // iterate over every additional file
4811 for (const auto& file : additionalFiles) {
4812 // check if ignore missing inputs
4813 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4814 WRITE_MESSAGE(TLF("loading additionals from '%'.", file));
4815 // declare general handler
4817 // Run parser
4818 if (!handler.parse()) {
4819 WRITE_ERROR(TLF("Loading of '%' failed.", file));
4820 }
4821 setSaved &= !handler.isErrorCreatingElement();
4822 // set additionals in SumoConfig
4823 setInputInSumoOptions(false, false);
4824 }
4825 }
4826 // end undo list
4827 myUndoList->end();
4828 // disable validation for additionals
4829 XMLSubSys::setValidation("auto", "auto", "auto");
4830 if (setSaved) {
4832 }
4833 // check if clear undoList
4835 myUndoList->clear();
4836 }
4837 }
4838}
4839
4840
4841void
4843 // get option container
4844 auto& neteditOptions = OptionsCont::getOptions();
4845 // get demand files
4846 const auto& demandFiles = neteditOptions.getStringVector("route-files");
4847 // check if ignore loading of additional files
4848 const auto ignoreLoadDemandFiles = neteditOptions.getBool("ignore.routeelements");
4849 // check conditions
4850 if (ignoreLoadDemandFiles) {
4851 // reset flag
4852 neteditOptions.resetWritable();
4853 neteditOptions.set("ignore.routeelements", "false");
4854 // also reset route files in both containers
4855 neteditOptions.resetDefault("route-files");
4856 mySumoOptions.resetDefault("route-files");
4857 } else if (myNet && (demandFiles.size() > 0)) {
4858 // update saving files handler
4860 // disable validation for additionals
4861 XMLSubSys::setValidation("never", "auto", "auto");
4862 // begin undolist
4863 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4864 // use this flag for mark all elements as saved after loading, if it was sucessfully
4865 bool setSaved = demandFiles.size() == 1;
4866 // iterate over every demand file
4867 for (const auto& file : demandFiles) {
4868 // check if ignore missing inputs
4869 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4870 WRITE_MESSAGE(TLF("loading demand elements from '%'.", file));
4871 // declare general handler
4873 // Run parser
4874 if (!handler.parse()) {
4875 WRITE_ERROR(TLF("Loading of '%' failed.", file));
4876 }
4877 setSaved &= !handler.isErrorCreatingElement();
4878 // set additionals in SumoConfig
4879 setInputInSumoOptions(false, false);
4880 }
4881 }
4882 // end undo list
4883 myUndoList->end();
4884 // disable validation for additionals
4885 XMLSubSys::setValidation("auto", "auto", "auto");
4886 if (setSaved) {
4888 }
4889 // check if clear undoList
4891 myUndoList->clear();
4892 }
4893 }
4894}
4895
4896
4897void
4899 // get option container
4900 auto& neteditOptions = OptionsCont::getOptions();
4901 // get data files
4902 const auto& dataFiles = neteditOptions.getStringVector("data-files");
4903 if (myNet && (dataFiles.size() > 0)) {
4904 // update saving files handler
4906 // disable validation for additionals
4907 XMLSubSys::setValidation("never", "auto", "auto");
4908 // begin undolist
4909 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading data elements from '") + toString(dataFiles) + "'");
4910 // use this flag for mark all elements as saved after loading, if it was sucessfully
4911 bool setSaved = dataFiles.size() == 1;
4912 // iterate over every data file
4913 for (const auto& file : dataFiles) {
4914 // check if ignore missing inputs
4915 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4916 WRITE_MESSAGE(TLF("loading data elements from '%'.", file));
4917 // declare general handler
4919 // Run parser
4920 if (!handler.parse()) {
4921 WRITE_ERROR(TLF("Loading of % failed.", file));
4922 }
4923 setSaved &= !handler.isErrorCreatingElement();
4924 // set additionals in SumoConfig
4925 setInputInSumoOptions(false, false);
4926 }
4927 }
4928 // end undo list
4929 myUndoList->end();
4930 // disable validation for additionals
4931 XMLSubSys::setValidation("auto", "auto", "auto");
4932 if (setSaved) {
4934 }
4935 // check if clear undoList
4937 myUndoList->clear();
4938 }
4939 }
4940}
4941
4942
4943void
4945 // get option container
4946 auto& neteditOptions = OptionsCont::getOptions();
4947 // get meanData files
4948 const auto& meanDataFiles = neteditOptions.getStringVector("meandata-files");
4949 if (myNet && (meanDataFiles.size() > 0)) {
4950 // update saving files handler
4951 myNet->getSavingFilesHandler()->updateMeanDataEmptyFilenames(meanDataFiles.front());
4952 // disable validation for additionals
4953 XMLSubSys::setValidation("never", "auto", "auto");
4954 // begin undolist
4955 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading meanData elements from '") + toString(meanDataFiles) + "'");
4956 // use this flag for mark all elements as saved after loading, if it was sucessfully
4957 bool setSaved = meanDataFiles.size() == 1;
4958 // iterate over every meanData file
4959 for (const auto& file : meanDataFiles) {
4960 // check if ignore missing inputs
4961 if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4962 WRITE_MESSAGE(TLF("loading meanData elements from '%'.", file));
4963 // declare general handler
4965 // Run parser
4966 if (!handler.parse()) {
4967 WRITE_ERROR(TLF("Loading of % failed.", file));
4968 }
4969 setSaved &= !handler.isErrorCreatingElement();
4970 // set additionals in SumoConfig
4971 setInputInSumoOptions(false, false);
4972 }
4973 }
4974 // end undo list
4975 myUndoList->end();
4976 // disable validation for additionals
4977 XMLSubSys::setValidation("auto", "auto", "auto");
4978 if (setSaved) {
4980 }
4981 // check if clear undoList
4983 myUndoList->clear();
4984 }
4985 }
4986}
4987
4988
4993
4994
4995bool
4997 if (myInternalTest == nullptr) {
4998 return true;
4999 } else if (obj == myInternalTest) {
5000 return true;
5001 } else {
5002 return false;
5003 }
5004}
5005
5006// ---------------------------------------------------------------------------
5007// GNEApplicationWindow - protected methods
5008// ---------------------------------------------------------------------------
5009#ifdef _MSC_VER
5010#pragma warning(push)
5011#pragma warning(disable: 4355) // mask warning about "this" in initializers
5012#endif
5014 myToolbarsGrip(this),
5015 myMenuBarFile(this),
5016 myFileMenuCommands(this),
5017 myModesMenuCommands(this),
5018 myEditMenuCommands(this),
5019 myLockMenuCommands(this),
5020 myProcessingMenuCommands(this),
5021 myLocateMenuCommands(this),
5022 myToolsMenuCommands(this),
5023 myWindowsMenuCommands(this),
5024 myHelpMenuCommands(this),
5025 mySupermodeCommands(this) {
5026}
5027#ifdef _MSC_VER
5028#pragma warning(pop)
5029#endif
5030
5031
5032long
5033GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
5034 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
5035 if (handled == 0 && myMDIClient->numChildren() > 0) {
5036 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5037 if (w != nullptr) {
5038 w->onKeyPress(nullptr, sel, eventData);
5039 }
5040 }
5041 return 0;
5042}
5043
5044
5045long
5046GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
5047 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
5048 if (handled == 0 && myMDIClient->numChildren() > 0) {
5049 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
5050 if (w != nullptr) {
5051 w->onKeyRelease(nullptr, sel, eventData);
5052 }
5053 }
5054 return 0;
5055}
5056
5057
5058/****************************************************************************/
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:847
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:761
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition GUIAppEnum.h:272
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition GUIAppEnum.h:270
@ MID_GNE_LOCK_POLYGON
lock polygons
Definition GUIAppEnum.h:873
@ 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:268
@ 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:234
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:931
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:909
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:763
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:188
@ MID_GNE_LOCK_TRANSHIP
lock tranships
Definition GUIAppEnum.h:897
@ 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:955
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:795
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALELEMENTS_UNIFIED
save additionals unified
Definition GUIAppEnum.h:721
@ MID_GNE_LOCK_WALK
lock walks
Definition GUIAppEnum.h:889
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition GUIAppEnum.h:681
@ 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:821
@ MID_GNE_LOCK_STOP
lock stops
Definition GUIAppEnum.h:899
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:773
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:755
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:843
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:161
@ MID_GNE_LOCK_WIRE
lock wires
Definition GUIAppEnum.h:869
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:733
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:829
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:827
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:961
@ 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:907
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition GUIAppEnum.h:242
@ 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:238
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:947
@ 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:833
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:933
@ MID_GNE_LOCK_JPS_WALKABLEAREA
lock walkableAreas
Definition GUIAppEnum.h:877
@ 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:246
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:921
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition GUIAppEnum.h:276
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:911
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:717
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:729
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition GUIAppEnum.h:286
@ 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:743
@ MID_LANGUAGE_PT
change language to portuguese
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:655
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:707
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition GUIAppEnum.h:801
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:711
@ 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:683
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:919
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:149
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition GUIAppEnum.h:230
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition GUIAppEnum.h:208
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition GUIAppEnum.h:759
@ 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:845
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition GUIAppEnum.h:284
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition GUIAppEnum.h:248
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition GUIAppEnum.h:250
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition GUIAppEnum.h:244
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:953
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAELEMENTS
reload meanDatas
Definition GUIAppEnum.h:747
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAELEMENTS_UNIFIED
save meanDatas unified
Definition GUIAppEnum.h:745
@ MID_GNE_LOCK_WALKINGAREA
lock walkingareas
Definition GUIAppEnum.h:865
@ 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:927
@ MID_GNE_TOGGLE_UNDOREDO
enable/disable undo-redo
Definition GUIAppEnum.h:797
@ 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:879
@ 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:727
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:949
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:757
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:841
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:737
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:835
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition GUIAppEnum.h:99
@ MID_RECENTFILE
Loads a file previously loaded.
Definition GUIAppEnum.h:318
@ 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:831
@ MID_GNE_LOCK_VEHICLE
lock vehicles
Definition GUIAppEnum.h:883
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:935
@ 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:867
@ MID_LANGUAGE_HU
change language to hungarian
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:236
@ 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:240
@ MID_GNE_LOCK_EDGE
lock edges
Definition GUIAppEnum.h:857
@ 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:853
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:713
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition GUIAppEnum.h:367
@ 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:659
@ MID_GNE_LOCK_TRANSPORT
lock transports
Definition GUIAppEnum.h:895
@ MID_GNE_TOGGLE_UNDOREDO_LOADING
enable/disable undo-redo during loading
Definition GUIAppEnum.h:799
@ 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:957
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:155
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition GUIAppEnum.h:346
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:57
@ MID_GNE_LOCK_CONTAINER
lock containers
Definition GUIAppEnum.h:893
@ 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:739
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:55
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:823
@ 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:731
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:657
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:925
@ MID_GNE_LOCK_CONNECTION
lock connections
Definition GUIAppEnum.h:861
@ 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:705
@ MID_GNE_NETWORKVIEWOPTIONS_MERGEAUTOMATICALLY
don't ask before merging junctions
Definition GUIAppEnum.h:839
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAELEMENTS
save Mean Datas
Definition GUIAppEnum.h:216
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition GUIAppEnum.h:264
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:837
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:951
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:775
@ 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:959
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_LOCK_ROUTE
lock routes
Definition GUIAppEnum.h:881
@ MID_GNE_LOCK_RIDE
lock rides
Definition GUIAppEnum.h:891
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:715
@ MID_GNE_LOCK_LANE
lock lanes
Definition GUIAppEnum.h:859
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:819
@ 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:719
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:923
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:939
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:135
@ 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:735
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:661
@ 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:290
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:222
@ MID_GNE_LOCK_PERSON
lock persons
Definition GUIAppEnum.h:885
@ MID_GNE_LOCK_CROSSING
lock crossings
Definition GUIAppEnum.h:863
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:157
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition GUIAppEnum.h:254
@ 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:288
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition GUIAppEnum.h:741
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition GUIAppEnum.h:214
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition GUIAppEnum.h:262
@ 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:232
@ MID_GNE_LOCK_TAZRELDATA
lock TAZRelDatas
Definition GUIAppEnum.h:905
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:937
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition GUIAppEnum.h:274
@ MID_GNE_AUTOMATICFILENAME
create automatic filename if it was not defined previously
@ 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:887
@ MID_RUNTESTS
run tests
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALELEMENTS
reload additionals
Definition GUIAppEnum.h:725
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:266
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:825
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:709
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:929
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:817
@ MID_LANGUAGE_FR
change language to french
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition GUIAppEnum.h:723
@ MID_GNE_LOCK_JUNCTION
lock junctions
Definition GUIAppEnum.h:855
@ MID_GNE_LOCK_POI
lock POIs
Definition GUIAppEnum.h:875
@ 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:903
@ MID_GNE_LOCK_EDGEDATA
lock edgeDatas
Definition GUIAppEnum.h:901
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:793
@ MID_GNE_LOCK_TAZ
lock TAZs
Definition GUIAppEnum.h:871
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALELEMENTS
Save Additional Elements.
Definition GUIAppEnum.h:202
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:298
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:289
#define WRITE_ERROR(msg)
Definition MsgHandler.h:296
#define TL(string)
Definition MsgHandler.h:305
#define TLF(string,...)
Definition MsgHandler.h:307
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:295
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ GNE_ATTR_MEANDATA_FILE
meanData data file
@ GNE_ATTR_DEMAND_FILE
demand demand file
@ GNE_ATTR_ADDITIONAL_FILE
additional save file
@ GNE_ATTR_DATA_FILE
data data file
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
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 std::string getFilePath(const std::string &path)
Removes the file information from the given path.
static void resetFont()
to be called when the font context is invalidated
Definition GLHelper.cpp:666
The main window of Netedit.
bool askSaveElements()
warns about unsaved changes and gives the user the option to abort
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
void setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes)
set input files in sumo options
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 computeJunctionWithVolatileOptions()
called if the user selects Processing->compute junctions with volatile options
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)
long onUpdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is updated
std::map< std::string, FXMenuPane * > myMenuPaneToolMaps
map with menu pane tools and strings
long onCmdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is executed
long onCmdOpenMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open meanDatas is executed
long onUpdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is updated
long onCmdClose(FXObject *, FXSelector, void *)
called when the command/FXCall close is executed
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
long onCmdToggleViewOption(FXObject *, FXSelector, void *)
toggle viewOption
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
OptionsCont myOriginalNetgenerateOptions
original netgenerate options container
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
OptionsCont myOriginalNeteditOptions
original netedit options container
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
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
void closeAllWindows()
this method closes all windows and deletes the current simulation *‍/
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 *)
FXString getFolder(const std::string &folder) const
extract folder
GNEInternalTest * getInternalTest() const
get netedit test system
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread is executed
long onUpdSaveDemandElementsUnified(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements unified is executed
long onUpdRequireRecomputing(FXObject *sender, FXSelector sel, void *ptr)
update label for require recomputing
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is executed
long onUpdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onUpdSaveDemandElements(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements is executed
OptionsCont myOriginalSumoOptions
original sumo options container
OptionsCont myNetgenerateOptions
netgenerate options container
SUMOTime getCurrentSimTime() const
get current simulation time (pure virtual but we don't need it)
long onCmdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is executed
FXMenuPane * myFileMenuMeanDataElements
long onCmdLockAllElements(FXObject *, FXSelector sel, void *)
called when user press lock all elements button
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
long onCmdSaveMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
long onCmdClearSelectionShortcut(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for clear selection
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
GNEUndoList * getUndoList()
get pointer to undoList
long onUpdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is updated
long onUpdNeedsFrontElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs front element is executed
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
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 loadDataElements()
load data elements
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
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
void loadDemandElements()
load demand elements
void loadAdditionalElements()
load additional elements
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
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
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 onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadMeanDataElements()
load meanData elements
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
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
long onUpdReloadMeanDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
void handleEvent_NetworkLoaded(GUIEvent *e)
handle event of type Network loaded
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
bool myConsoleOptionsLoaded
flag for check if console options was already loaded
long onCmdSetFrontElement(FXObject *, FXSelector, void *)
called if the user call set front element
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
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
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 unmarkForDrawingFront()
unmark for drawing front
void refreshAttributesEditor()
refresh attribute editor
void abortReparenting()
abort selecting parent
GNEAttributesEditor * getContainerAttributesEditor() const
get attributes editor
void refreshEdgeTypeSelector()
refresh edge type selector
EdgeTypeSelector * getEdgeTypeSelector() const
get edgeType selector
void addLaneType(GNELaneType *laneType)
add laneType
GNENet * net
the loaded net
const bool viewportFromRegistry
whether loading viewport from registry
const std::string file
the name of the loaded file
const std::string settingsFile
the name of the settings file to load
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition GNEFrame.cpp:193
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
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
const std::vector< std::string > & getAdditionalFilenames() const
get vector with additional elements saving files (starting with default)
void updateMeanDataEmptyFilenames(const std::string &file)
update meanData elements with empty filenames with the given file
void updateAdditionalEmptyFilenames(const std::string &file)
update additional elements with empty filenames with the given file
const std::vector< std::string > & getDemandFilenames() const
get vector with demand elements saving files (starting with default)
void updateDataEmptyFilenames(const std::string &file)
update data elements with empty filenames with the given file
void updateNeteditConfig()
update netedit config
void updateDemandEmptyFilenames(const std::string &file)
update demand elements with empty filenames with the given file
const std::vector< std::string > & getMeanDataFilenames() const
get vector with meanData elements saving files (starting with default)
const std::vector< std::string > & getDataFilenames() const
get vector with data elements saving files (starting with default)
void dataElementsSaved()
mark demand elements as saved
void requireSaveNetwork()
inform that network has to be saved
void demandElementsSaved()
mark demand elements as saved
void SumoConfigSaved()
mark SumoConfig as saved
GNEDialog::Result askSaveDemandElements(bool &abortSaving) const
warns about unsaved changes in demand elements and gives the user the option to abort
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 meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
GNEDialog::Result askSaveNetwork(bool &abortSaving) const
warns about unsaved changes in network and gives the user the option to abort
bool isDataElementsSaved() const
check if data elements are saved
GNEDialog::Result askSaveAdditionalElements(bool &abortSaving) const
warns about unsaved changes in additionals and gives the user the option to abort
GNEDialog::Result askSaveDataElements(bool &abortSaving) const
warns about unsaved changes in data elements and gives the user the option to abort
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
GNEDialog::Result askSaveMeanDataElements(bool &abortSaving) const
warns about unsaved changes in meanData elements and gives the user the option to abort
bool isAdditionalsSaved() const
check if additionals are saved
void clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition GNENet.cpp:2125
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1782
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1622
bool saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2344
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2848
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1414
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:162
void enableUpdateData()
Definition GNENet.cpp:2913
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2867
void clearDataElements(GNEUndoList *undoList)
clear data elements
Definition GNENet.cpp:2160
bool saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2298
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:2138
GNEPathManager * getDemandPathManager()
get demand path manager
Definition GNENet.cpp:174
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1888
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:1460
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1933
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1798
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:144
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition GNENet.cpp:2171
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2924
GNENetHelper::SavingFilesHandler * getSavingFilesHandler() const
get saving files handler
Definition GNENet.cpp:156
bool saveAdditionals()
save additional elements
Definition GNENet.cpp:2223
void saveNetwork()
save the network
Definition GNENet.cpp:1367
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1604
bool saveJuPedSimElements(const std::unordered_set< const GNEAttributeCarrier * > &ACs, const std::string &file)
save JuPedSim elements
Definition GNENet.cpp:2250
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1740
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1824
void savePlain(const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition GNENet.cpp:1405
bool saveDemandElements()
save demand element elements of the network
Definition GNENet.cpp:2267
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2193
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1547
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 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
const GNETagProperties * getTagProperty(const SumoXMLTag tag, const bool hardFail) const
get tagProperty associated to the given tag
bool isJuPedSimElement() const
return true if tag correspond to a JuPedSim element
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
GNEAttributeCarrier * getFirstAC() const
const std::unordered_set< GNEAttributeCarrier * > & getACs() const
get hash table with all fronted ACs
long onCmdToggleShowDemandElementsNetwork(FXObject *, FXSelector, void *)
toggle show demand elements (network)
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
GNENet * getNet() const
get the net object
void hotkeyBackSpace()
handle backspace keypress
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
long onCmdToggleShowDemandElementsData(FXObject *, FXSelector, void *)
toggle show demand elements (data)
void abortOperation(bool clearSelection=true)
abort current edition operation
GNEViewNetHelper::InspectedElements & getInspectedElements()
get inspected elements
long onCmdToggleDrawSpreadVehicles(FXObject *, FXSelector, void *)
toggle draw vehicles in begin position or spread in lane
long onCmdToggleShowConnections(FXObject *, FXSelector, void *)
toggle show connections
long onCmdToggleShowTAZElements(FXObject *, FXSelector, void *)
toggle show TAZ elements
long onCmdToggleMoveElevation(FXObject *, FXSelector, void *)
toggle move elevation
long onCmdToggleShowAllPersonPlans(FXObject *, FXSelector, void *)
toggle show all person plans in super mode demand
long onCmdToggleTAZRelOnlyTo(FXObject *, FXSelector, void *)
toggle TAZRez only to
const GNEViewNetHelper::NetworkViewOptions & getNetworkViewOptions() const
get network view options
void hotkeyFocusFrame()
handle focus frame keypress
long onCmdToggleChainEdges(FXObject *, FXSelector, void *)
toggle chain edges
long onCmdToggleLockContainer(FXObject *, FXSelector, void *)
toggle lock container in super mode demand
long onCmdToggleShowGrid(FXObject *, FXSelector, void *)
toggle show grid
GNEViewNetHelper::MarkFrontElements & getMarkFrontElements()
get marked for drawing front elements
long onCmdToggleHideNonInspecteDemandElements(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
GNEViewParent * getViewParent() const
get the net object
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
toggle draw junction shape
long onCmdToggleShowShapes(FXObject *, FXSelector, void *)
toggle show shapes in super mode data
long onCmdToggleMergeAutomatically(FXObject *, FXSelector, void *)
toggle warn for merge
GNEViewNetHelper::SaveElements & getSaveElements()
get variable used to save elements
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
long onCmdSetSupermode(FXObject *, FXSelector sel, void *)
long onCmdToggleExtendSelection(FXObject *, FXSelector, void *)
toggle extend selection
bool aksChangeSupermode(const std::string &operation, Supermode expectedSupermode)
ask about change supermode
long onCmdSetMode(FXObject *, FXSelector sel, void *)
called when user press a mode button (Network or demand)
void hotkeyEnter()
handle enter keypress
long onCmdToggleShowOverlappedRoutes(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
long onCmdToggleAutoOppositeEdge(FXObject *, FXSelector, void *)
toggle autoOpposite edge
GNEViewNetHelper::LockManager & getLockManager()
get lock manager
void updateControls()
update control contents after undo/redo or recompute
void hotkeyDel()
handle del keypress
long onCmdToggleChangeAllPhases(FXObject *, FXSelector, void *)
toggle change all phases
long onCmdToggleTAZRelDrawing(FXObject *, FXSelector, void *)
toggle TAZRel drawing
long onCmdToggleShowJunctionBubbles(FXObject *, FXSelector, void *)
toggle show junction bubbles
long onCmdToggleShowAdditionalSubElements(FXObject *, FXSelector, void *)
toggle show additional sub-elements
long onCmdToggleShowAllContainerPlans(FXObject *, FXSelector, void *)
toggle show all container plans in super mode demand
long onCmdToggleTAZRelOnlyFrom(FXObject *, FXSelector, void *)
toggle TAZRez only from
long onCmdToggleShowAdditionals(FXObject *, FXSelector, void *)
toggle show additionals in super mode data
long onCmdToggleLockPerson(FXObject *, FXSelector, void *)
toggle lock person in super mode demand
GNEViewNetHelper::TimeFormat & getTimeFormat()
get variable used to switch between time formats
long onCmdToggleSelectEdges(FXObject *, FXSelector, void *)
toggle select edges
long onCmdToggleShowTrips(FXObject *, FXSelector, void *)
toggle show all trips in super mode demand
long onCmdToggleHideShapes(FXObject *, FXSelector, void *)
toggle hide shapes in super mode demand
const GNEViewNetHelper::DemandViewOptions & getDemandViewOptions() const
get demand view options
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
A single child window which contains a view of the simulation area.
void updateUndoRedoButtons()
update toolbar undo/redo buttons (called when user press Ctrl+Z/Y)
long onKeyPress(FXObject *o, FXSelector sel, void *data)
Called when user press a key.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
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 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
virtual void showViewportEditor()
show viewport editor
GUIPerspectiveChanger & getChanger() const
get changer
std::vector< Decal > & getDecals()
The list of decals to show.
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
bool amChecked() const
check if this MFXCheckableButton is checked
void toggleCheck()
Toggle current check state.
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependence to an optional file name.
Definition MFXUtils.cpp:61
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp:764
A storage for available edgeTypes of edges.
Definition NBTypeCont.h:52
int size() const
Returns the number of known edgeTypes.
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 resetDefault()
Resets all options to default.
void setApplicationName(const std::string &appName, const std::string &fullName)
Sets the application name.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
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.
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
Writes the configuration.
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
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< XMLFileExtension > XMLFileExtensions
XML 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< 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 replace(std::string str, const std::string &what, const std::string &by)
Replaces all occurrences of the second string by the third string within the first string.
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition SysUtils.cpp:69
static bool checkOptions(OptionsCont &oc)
checks shared options and sets StdDefs
static void parseTemplate(OptionsCont &options, const std::string &templateString)
run parser
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition XMLSubSys.cpp:83
@ SEL_THREAD_EVENT
Definition fxexdefs.h:173
@ SEL_THREAD
Definition fxexdefs.h:155
DemandViewOptions demandViewOptions
demand view options
FXMenuCheck * menuCheckAllowUndoRedo
checkBox for allow undo-redo
NetworkViewOptions networkViewOptions
network view options
void buildUndoRedoMenuCommands(FXMenuPane *editMenu)
build undo-redo menu commands
void buildViewMenuCommands(FXMenuPane *editMenu)
build view menu commands
FXMenuCheck * loadAdditionalsInSUMOGUI
menu check for load additionals in SUMO GUI
FXMenuCommand * undoLastChange
FXMenuCommand for undo last change.
FXMenuCheck * loadDemandInSUMOGUI
menu check for load demand in SUMO GUI
FXMenuCommand * redoLastChange
FXMenuCommand for redo last change.
void buildOpenSUMOMenuCommands(FXMenuPane *editMenu)
build open sumo menu commands
void buildFrontElementMenuCommand(FXMenuPane *editMenu)
build front element commands
void buildFileMenuCommands(FXMenuPane *fileMenu, FXMenuPane *fileMenuNEEDITConfig, FXMenuPane *fileMenuSumoConfig, FXMenuPane *fileMenuTLS, FXMenuPane *fileMenuEdgeTypes, FXMenuPane *fileMenuAdditionals, FXMenuPane *fileMenuDemandElements, FXMenuPane *fileMenuDataElements, FXMenuPane *fileMenuMeanDataElements)
build menu commands
FXMenuCheck * menuCheckAllowUndoRedoLoading
checkBox for allow undo-redo loading
void buildHelpMenuCommands(FXMenuPane *helpMenu)
build menu commands
void buildLocateMenuCommands(FXMenuPane *locateMenu)
build menu commands
void buildLockMenuCommands(FXMenuPane *editMenu)
build menu commands
MFXMenuCheckIcon * menuCheckLockConnections
menu check to lock connections
void hideNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockPersons
menu check to lock persons
MFXMenuCheckIcon * menuCheckLockVehicles
menu check to lock vehicles
MFXMenuCheckIcon * menuCheckLockCrossings
menu check to lock crossings
MFXMenuCheckIcon * menuCheckLockTAZs
menu check to lock TAZs
void hideDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockEdgeTAZRels
menu check to lock edgeTAZRels
void hideDataLockMenuCommands()
show data processing menu commands
void showDataLockMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckLockPersonTrips
menu check to lock personTrips
MFXMenuCheckIcon * menuCheckLockWires
menu check to lock Wires
MFXMenuCheckIcon * menuCheckLockPOIs
menu check to lock POIs
MFXMenuCheckIcon * menuCheckLockPolygons
menu check to lock polygons
MFXMenuCheckIcon * menuCheckLockWalkingAreas
menu check to lock walkingAreas
MFXMenuCheckIcon * menuCheckLockEdges
menu check to lock edges
MFXMenuCheckIcon * menuCheckLockRides
menu check to lock rides
MFXMenuCheckIcon * menuCheckLockContainers
menu check to lock containers
MFXMenuCheckIcon * menuCheckLockJpsWalkableAreas
menu check to lock jps walkableareas
MFXMenuCheckIcon * menuCheckLockEdgeRelDatas
menu check to lock edgeRelDatas
MFXMenuCheckIcon * menuCheckLockStops
menu check to lock stops
MFXMenuCheckIcon * menuCheckLockLanes
menu check to lock lanes
MFXMenuCheckIcon * menuCheckLockAdditionals
menu check to lock additionals
void showNetworkLockMenuCommands()
show network processing menu commands
MFXMenuCheckIcon * menuCheckLockWalks
menu check to lock walks
MFXMenuCheckIcon * menuCheckLockJpsObstacles
menu check to lock jps obstacles
void showDemandLockMenuCommands()
show demand processing menu commands
MFXMenuCheckIcon * menuCheckLockTranships
menu check to lock tranships
MFXMenuCheckIcon * menuCheckLockTransports
menu check to lock transports
void buildRecentConfigFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentConfigFiles)
build recent config
MFXRecentNetworks myRecentConfigs
List of recent configs.
MFXRecentNetworks myRecentNetworks
List of recent networks.
void buildRecentNetworkFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentNetworkFiles)
build recent network
void buildModesMenuCommands(FXMenuPane *modesMenu)
build modes menu commands
DemandMenuCommands demandMenuCommands
Demand Menu Commands.
void setDefaultView(Supermode supermode)
set default view
void setJuPedSimView(Supermode supermode)
set JuPedSim view
NetworkMenuCommands networkMenuCommands
Network Menu Commands.
void showDataProcessingMenuCommands()
show data processing menu commands
MFXMenuCheckIcon * menuCheckRecomputeDataMode
checkBox for recomputing when changing data mode
void showDemandProcessingMenuCommands()
show demand processing menu commands
void hideDemandProcessingMenuCommands()
show demand processing menu commands
void hideDataProcessingMenuCommands()
show data processing menu commands
void buildProcessingMenuCommands(FXMenuPane *processingMenu)
build menu commands
void showNetworkProcessingMenuCommands()
show network processing menu commands
void hideNetworkProcessingMenuCommands()
show network processing menu commands
void buildSupermodeCommands(FXMenuPane *editMenu)
build menu commands
FXMenuBar * menu
The application menu bar (for file, edit, processing...)
long postProcessing(FXObject *menuCommand) const
run postprocessing
void buildTools(FXMenuPane *toolsMenu, const std::map< std::string, FXMenuPane * > &menuPaneToolMaps)
build tools (and menu commands)
long runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
static bool toggleEditOptionsDemand(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Demand menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsData(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Data menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckLockContainer
Lock Container.
DataEditMode dataEditMode
the current Data edit mode
bool isDefaultView() const
check if default view is enabled
DemandEditMode demandEditMode
the current Demand edit mode
Supermode currentSupermode
the current supermode
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
MFXCheckableButton * menuCheckSelectEdges
checkable button to select only edges
MFXCheckableButton * menuCheckChainEdges
checkable button to the endpoint for a created edge should be set as the new source
MFXCheckableButton * menuCheckShowDemandElements
checkable button to show Demand Elements
MFXCheckableButton * menuCheckMoveElevation
checkable button to apply movement to elevation
MFXCheckableButton * menuCheckShowTAZElements
checkable button to show TAZ elements
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
MFXCheckableButton * menuCheckAutoOppositeEdge
check checkable to create auto create opposite edge
MFXCheckableButton * menuCheckDrawSpreadVehicles
checkable button to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowConnections
checkable button to show connections
MFXCheckableButton * menuCheckHideConnections
checkable button to hide connections in connect mode
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckToggleGrid
checkable button to show grid button
MFXCheckableButton * menuCheckMergeAutomatically
checkable button to we should't warn about merging junctions
MFXCheckableButton * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
MFXCheckableButton * menuCheckShowAdditionalSubElements
checkable button to show additional sub-elements
MFXCheckableButton * menuCheckChangeAllPhases
checkable button to set change all phases
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label