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-2023 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>
39#include <netedit/templates.h>
40#include <netimport/NIFrame.h>
43#include <netwrite/NWFrame.h>
60#include <utils/xml/XMLSubSys.h>
61
64#include "GNELoadThread.h"
65#include "GNENet.h"
66#include "GNEViewNet.h"
67#include "GNEUndoList.h"
68#include "GNEViewParent.h"
69
70#ifdef HAVE_VERSION_H
71#include <version.h>
72#endif
73
74// ===========================================================================
75// FOX-declarations
76// ===========================================================================
77
78FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
79 // quit calls
83 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
84 // toolbar file
91 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
96 // network
111 // NeteditConfig
119 // SumoConfig
127 // TLS
134 // edge types
143 // additionals
152 // demand elements
161 // data elements
170 // meanDatas
179 // other
184 // Toolbar supermode
188 // Toolbar modes
205 // Toolbar edit
214 // Network view options
247 // Demand view options
270 // Data view options
287 // view
304 /* Prepared for #6042
305 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
306 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
307 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
308 */
309 // toolbar lock
315 // Toolbar processing
332 // Toolbar locate
355 // toolbar python tools
360 // toolbar windows
362 // toolbar help
365 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
366 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
367 FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
369 // alt + <number>
390 // key events
391 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
392 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
393 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
394 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
395 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
397 // threads events
400 // edge template functions
404 // languages
423 // tools
426 // other
427 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
431};
432
433// Object implementation
434FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
435
436
437// ===========================================================================
438// GNEApplicationWindow method definitions
439// ===========================================================================
440
441GNEApplicationWindow::GNEApplicationWindow(FXApp* a, const std::string& configPattern) :
442 GUIMainWindow(a),
443 myUndoList(new GNEUndoList(this)),
444 myConfigPattern(configPattern),
445 myToolbarsGrip(this),
446 myMenuBarFile(this),
447 myFileMenuCommands(this),
448 myModesMenuCommands(this),
449 myEditMenuCommands(this),
450 myLockMenuCommands(this),
451 myProcessingMenuCommands(this),
452 myLocateMenuCommands(this),
453 myToolsMenuCommands(this),
454 myWindowsMenuCommands(this),
455 myHelpMenuCommands(this),
456 mySupermodeCommands(this),
457 myTitlePrefix("netedit " VERSION_STRING) {
458 // init icons
460 // init Textures
462 // init cursors
464 // create undoList dialog (after initCursors)
465 myUndoListDialog = new GNEUndoListDialog(this);
466 a->setTooltipTime(1000000000);
467 a->setTooltipPause(1000000000);
468 // set SUMO Options descriptions
469 mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
470 mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo Version " VERSION_STRING);
471 // set default netedit options
472 GNELoadThread::fillOptions(myOriginalNeteditOptions);
473 GNELoadThread::setDefaultOptions(myOriginalNeteditOptions);
474 // parse options
475 TemplateHandler::parseTemplate(mySumoOptions, sumoTemplate);
476 TemplateHandler::parseTemplate(myOriginalSumoOptions, sumoTemplate);
477 TemplateHandler::parseTemplate(myNetgenerateOptions, netgenerateTemplate);
478 TemplateHandler::parseTemplate(myOriginalNetgenerateOptions, netgenerateTemplate);
479}
480
481void
483 // do this not twice
485 // do not translate debug messages
486 WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
487 return;
488 }
489 myHadDependentBuild = true;
490 // set language
491 if (gLanguage == "C") {
492 // due sumo and netedit shares language, load registry from sumo
493 FXRegistry reg("SUMO GUI", "sumo-gui");
494 reg.read();
495 gLanguage = reg.readStringEntry("gui", "language", "C");
497 }
498 setTarget(this);
499 setSelector(MID_WINDOW);
500 // build toolbar menu
502 // build the thread - io
505 // build the status bar
506 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
507 // build geo coordinates label
508 auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
510 (TL("Recomputing") + std::string("\t\t") + TL("Recomputing is needed")).c_str(), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
511 // build geo coordinates label
513 myGeoCoordinate = new FXLabel(myGeoFrame, (TL("N/A") + std::string("\t\t") + TL("Original coordinate (before coordinate transformation in netconvert)")).c_str(), nullptr, GUIDesignLabelStatusBar);
514 // build cartesian coordinates label
516 myCartesianCoordinate = new FXLabel(myCartesianFrame, (TL("N/A") + std::string("\t\t") + TL("Network coordinate")).c_str(), nullptr, GUIDesignLabelStatusBar);
517 // build test coordinates label (only if gui-testing is enabled)
519 myTestCoordinate = new FXLabel(myTestFrame, (TL("N/A") + std::string("\t\t") + TL("Test coordinate")).c_str(), nullptr, GUIDesignLabelStatusBar);
520 myTestCoordinate->setTextColor(FXRGB(255, 0, 0));
521 myTestFrame->hide();
522 // make the window a mdi-window
523 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
525 myMDIMenu = new FXMDIMenu(this, myMDIClient);
526 // build the message window
528 myMainSplitter->setSplit(1, 65);
529 // fill menu and tool bar
530 fillMenuBar();
531 // build additional threads
533 // set the status bar
534 setStatusBarText(TL("Ready."));
535 // set the caption
536 setTitle(myTitlePrefix);
537 // set Netedit ICON
540 // build netedit Accelerators (hotkeys)
541 GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
542}
543
544
545void
547 // set windows size and position
549 // set current folder
550 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
551 // Create main window
552 FXMainWindow::create();
553 // get text width
554 const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
555 // adjust cartesian and geo frame
556 myCartesianFrame->setWidth(textWidth);
557 myGeoFrame->setWidth(textWidth);
558 // fill online maps
559 if (myOnlineMaps.empty()) {
560 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
561 myOnlineMaps["GoogleSat"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
562 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
563 }
564 // show application windows
565 show(PLACEMENT_DEFAULT);
566 // check if maximice
567 if (!OptionsCont::getOptions().isSet("window-size")) {
568 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
569 maximize();
570 }
571 }
572}
573
574
577 // Close icons
579 // Close gifs (Textures)
582 // delete visuals
583 delete myGLVisual;
584 // must delete menus to avoid segfault on removing accelerators
585 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
588 delete myFileMenuTLS;
589 delete myFileMenuEdgeTypes;
596 delete myFileMenu;
597 delete myModesMenu;
598 delete myEditMenu;
599 delete myLockMenu;
600 delete myProcessingMenu;
601 delete myLocatorMenu;
602 delete myToolsMenu;
603 delete myToolsDetectorMenu;
604 delete myToolsDistrictMenu;
605 delete myToolsDRTMenu;
607 delete myToolsImportMenu;
610 delete myToolsImportVissim;
611 delete myToolsImportVisum;
612 delete myToolsNetMenu;
613 delete myToolsRouteMenu;
614 delete myToolsOutputMenu;
615 delete myToolsShapes;
616 delete myToolsTLS;
617 delete myToolsTurnDefs;
619 delete myToolsXML;
620 delete myWindowMenu;
621 delete myHelpMenu;
622 delete myLanguageMenu;
623 // Delete load thread
624 delete myLoadThread;
625 // drop all events
626 while (!myEvents.empty()) {
627 // get the next event
628 GUIEvent* e = myEvents.top();
629 myEvents.pop();
630 delete e;
631 }
632 // delete undoList and dialog
633 delete myUndoList;
634 delete myUndoListDialog;
635}
636
637
638long
639GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
642 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
643 if (isMaximized()) {
644 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
645 } else {
646 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
647 }
648 getApp()->exit(0);
649 }
650 return 1;
651}
652
653
654long
655GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
656 GUIDialog_GLChosenEditor* chooser =
658 chooser->create();
659 chooser->show();
660 return 1;
661}
662
663
664long
665GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
666 // check if close current simulation
667 if (onCmdClose(0, 0, 0) == 1) {
668 // create new network
670 }
671 return 1;
672}
673
674
675long
677 // get netconvert filename
678 const auto netconvertFile = GNEApplicationWindowHelper::openNetconvertFileDialog(this);
679 // continue depending of netconvertFile
680 if (!netconvertFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
681 // load configuration
682 loadConfiguration(netconvertFile);
683 }
684 return 1;
685}
686
687
688long
689GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
690 // get netconvert filename
691 const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, false);
692 // continue depending of netconvertFile
693 if (!networkFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
694 // load network
695 loadNetwork(networkFile);
696 }
697 return 0;
698}
699
700
701long
702GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
703 // get netconvert filename
704 const auto OSMFile = GNEApplicationWindowHelper::openOSMFileDialog(this);
705 // continue depending of netconvertFile
706 if (!OSMFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
707 loadOSM(OSMFile);
708 }
709 return 1;
710}
711
712
713long
714GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
715 auto& neteditOptions = OptionsCont::getOptions();
716 // get netconvert filename
717 const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, false);
718 // continue depending of netconvertFile
719 if (!neteditConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
720 // reset netedit options
721 myLoadThread->fillOptions(neteditOptions);
722 myLoadThread->setDefaultOptions(neteditOptions);
723 // set netedit configuration file to load
724 neteditOptions.resetWritable();
725 neteditOptions.set("configuration-file", neteditConfigFile);
726 // run load thread
728 // update view
729 update();
730 }
731 return 1;
732}
733
734
735long
736GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
737 auto& neteditOptions = OptionsCont::getOptions();
738 // get netconvert filename
739 const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, false);
740 // continue depending of netconvertFile
741 if (!sumoConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
742 // reset options
743 myLoadThread->fillOptions(neteditOptions);
744 myLoadThread->setDefaultOptions(neteditOptions);
745 // set sumo configuration file to load
746 neteditOptions.resetWritable();
747 neteditOptions.set("sumocfg-file", sumoConfigFile);
748 // run load thread
750 // update view
751 update();
752 }
753 return 1;
754}
755
756
757long
759 // check if close current simulation
760 if (onCmdClose(0, 0, 0) == 1) {
761 auto& neteditOptions = OptionsCont::getOptions();
762 // get existent configuration file
763 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
764 // reset options
765 myLoadThread->fillOptions(neteditOptions);
766 myLoadThread->setDefaultOptions(neteditOptions);
767 // set configuration file to load
768 neteditOptions.resetWritable();
769 neteditOptions.set("configuration-file", neteditConfigFile);
770 // run load thread
772 // update view
773 update();
774 }
775 return 1;
776}
777
778
779long
780GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
781 auto& neteditOptions = OptionsCont::getOptions();
782 // check if close current simulation
783 if (onCmdClose(0, 0, 0) == 1) {
784 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
785 // reset options
786 myLoadThread->fillOptions(neteditOptions);
787 myLoadThread->setDefaultOptions(neteditOptions);
788 // set configuration file to load
789 neteditOptions.resetWritable();
790 neteditOptions.set("sumocfg-file", sumoConfigFile);
791 // run load thread
793 // update view
794 update();
795 }
796 return 1;
797}
798
799
800long
801GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
802 // check if file exist
803 if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
804 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
805 } else {
806 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
807 }
808}
809
810
811long
812GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
813 // check if file exist
814 if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
815 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
816 } else {
817 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
818 }
819}
820
821
822long
823GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
824 auto& neteditOptions = OptionsCont::getOptions();
825 // get netconvert filename
826 const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, false);
827 // continue depending of netconvertFile
828 if (!TLSFile.empty()) {
829 // set file to load
830 neteditOptions.resetWritable();
831 neteditOptions.set("tls-file", TLSFile);
832 // Run parser
833 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + TLSFile + "'");
834 myNet->computeNetwork(this);
835 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(TLSFile) == false) {
836 // Abort undo/redo
838 } else {
839 // commit undo/redo operation
840 myUndoList->end();
841 update();
842 }
843 } else {
844 // write debug information
845 WRITE_DEBUG("Cancel TLSProgram dialog");
846 }
847 return 1;
848}
849
850
851long
852GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
853 // get option container
854 auto& neteditOptions = OptionsCont::getOptions();
855 // Run parser
856 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + neteditOptions.getString("tls-file") + "'");
857 myNet->computeNetwork(this);
858 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(neteditOptions.getString("tls-file")) == false) {
859 // Abort undo/redo
861 } else {
862 // commit undo/redo operation
863 myUndoList->end();
864 update();
865 }
866 return 1;
867}
868
869
870long
871GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
872 // check if file exist
873 if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
874 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
875 } else {
876 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
877 }
878}
879
880
881long
882GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
883 auto& neteditOptions = OptionsCont::getOptions();
884 // get netconvert filename
885 const auto edgeTypeFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, false);
886 // continue depending of netconvertFile
887 if (!edgeTypeFile.empty()) {
888 // set file to load
889 neteditOptions.resetWritable();
890 neteditOptions.set("edgetypes-file", edgeTypeFile);
891 // declare type container
892 NBTypeCont typeContainerAux;
893 // declare type handler
894 NIXMLTypesHandler handler(typeContainerAux);
895 // load edge types
896 NITypeLoader::load(handler, {edgeTypeFile}, "types");
897 // write information
898 WRITE_MESSAGE(TL("Loaded edge types from '") + toString(typeContainerAux.size()) + "'");
899 // now create GNETypes based on typeContainerAux
901 // iterate over typeContainerAux
902 for (const auto& auxEdgeType : typeContainerAux) {
903 // create new edge type
904 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
905 // add lane types
906 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
907 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
908 }
909 // add it using undoList
910 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
911
912 }
913 // end undo list
915 // refresh edge type selector
917 }
918 return 1;
919}
920
921
922long
923GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
924 // declare type container
925 NBTypeCont typeContainerAux;
926 // declare type handler
927 NIXMLTypesHandler handler(typeContainerAux);
928 // load edge types
929 NITypeLoader::load(handler, {OptionsCont::getOptions().getString("edgetypes-file")}, "types");
930 // write information
931 WRITE_MESSAGE(TL("Reloaded edge types from '") + toString(typeContainerAux.size()) + ".");
932 // now create GNETypes based on typeContainerAux
934 // iterate over typeContainerAux
935 for (const auto& auxEdgeType : typeContainerAux) {
936 // create new edge type
937 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
938 // add lane types
939 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
940 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
941 }
942 // add it using undoList
943 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
944
945 }
946 // end undo list
948 // refresh edge type selector
950 return 0;
951}
952
953
954long
955GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
956 // check if file exist
957 if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
958 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
959 } else {
960 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
961 }
962}
963
964
965long
966GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector, void*) {
967 auto& neteditOptions = OptionsCont::getOptions();
968 // check if close current file
969 if (onCmdClose(0, 0, 0) == 1) {
970 // store size, position and viewport
972 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
973 // set flag
974 myAmLoading = true;
975 // get files
976 const auto neteditConfig = neteditOptions.getString("configuration-file");
977 const auto sumoConfig = neteditOptions.getString("sumocfg-file");
978 const auto networkFile = neteditOptions.getString("net-file");
979 // fill (reset) all options
980 myLoadThread->fillOptions(neteditOptions);
981 // set default options defined in GNELoadThread::setDefaultOptions(...)
982 myLoadThread->setDefaultOptions(neteditOptions);
983 // set file to load
984 neteditOptions.resetWritable();
985 if (neteditConfig.size() > 0) {
986 neteditOptions.set("configuration-file", neteditConfig);
987 // set status bar
988 setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
989 } else if (sumoConfig.size() > 0) {
990 neteditOptions.set("sumocfg-file", sumoConfig);
991 // set status bar
992 setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
993 } else if (networkFile.size() > 0) {
994 neteditOptions.set("net-file", networkFile);
995 // set status bar
996 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
997 } else {
998 // nothing to load
999 return 0;
1000 }
1001 // load network
1003 }
1004 return 1;
1005}
1006
1007
1008long
1009GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1010 auto& neteditOptions = OptionsCont::getOptions();
1011 // declare strings
1012 FXString neteditConfig = TL("&Reload Netedit config");
1013 FXString sumoConfig = TL("&Reload Sumo config");
1014 FXString netFile = TL("&Reload Network");
1015 FXString reload = TL("&Reload");
1016 // check options
1017 if (myNet == nullptr) {
1018 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1019 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1020 } else if (neteditOptions.getString("configuration-file").size() > 0) {
1021 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1022 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1023 } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1024 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1025 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1026 } else if (neteditOptions.getString("net-file").size() > 0) {
1027 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1028 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1029 } else {
1030 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1031 sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1032 }
1033 return 1;
1034}
1035
1036
1037long
1038GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector, void*) {
1039 auto& neteditOptions = OptionsCont::getOptions();
1040 // check if close current file
1041 if (onCmdClose(0, 0, 0) == 1) {
1042 // store size, position and viewport
1044 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1045 // set flag
1046 myAmLoading = true;
1047 // get network
1048 const auto networkFile = neteditOptions.getString("net-file");
1049 // fill (reset) all options
1050 myLoadThread->fillOptions(neteditOptions);
1051 // set default options defined in GNELoadThread::setDefaultOptions(...)
1052 myLoadThread->setDefaultOptions(neteditOptions);
1053 // set file to load
1054 neteditOptions.resetWritable();
1055 neteditOptions.set("net-file", networkFile);
1056 // set status bar
1057 setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1058 // loaad network
1060 }
1061 return 1;
1062}
1063
1064
1065long
1066GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1067 auto& neteditOptions = OptionsCont::getOptions();
1068 if (myNet == nullptr) {
1069 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1070 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1071 } else if ((neteditOptions.getString("net-file").size() > 0) &&
1072 ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1073 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1074 sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1075 } else {
1076 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1077 sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1078 }
1079 return 1;
1080}
1081
1082
1083long
1084GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1085 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1086 if (myAmLoading) {
1087 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1088 } else if (onCmdClose(0, 0, 0) == 1) {
1089 // get filedata
1090 const std::string recentFile = ((const char*)fileData);
1091 // check if we're loading a network o a config
1092 if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1093 (recentFile.find(".netecfg") != std::string::npos) ||
1094 (recentFile.find(".sumocfg") != std::string::npos) ||
1095 (recentFile.find(".netccfg") != std::string::npos)) {
1096 // load config
1097 loadConfiguration(recentFile);
1098 } else {
1099 // load network
1100 loadNetwork(recentFile);
1101 }
1102 }
1103 return 1;
1104}
1105
1106
1107long
1108GNEApplicationWindow::onCmdClose(FXObject*, FXSelector, void*) {
1109 if (myViewNet == nullptr) {
1110 return 1;
1111 } else if (continueWithUnsavedChanges()) {
1113 // add a separator to the log
1115 // hide all Supermode, Network and demand commands
1120 // hide view options
1124 return 1;
1125 } else {
1126 return 0;
1127 }
1128}
1129
1130
1131long
1132GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1133 if (myMDIClient->numChildren() > 0) {
1134 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1135 if (w != nullptr) {
1136 w->onCmdLocate(nullptr, sel, nullptr);
1137 }
1138 }
1139 return 1;
1140}
1141
1142
1143long
1144GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1145 return myToolsMenuCommands.showTool(obj);
1146}
1147
1148
1149long
1150GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1152}
1153
1154
1155long
1158}
1159
1160
1161long
1162GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1163 // currently always enabled
1164 return 1;
1165}
1166
1167
1168long
1169GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1170 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1171 return 1;
1172}
1173
1174
1175long
1176GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1178 return 1;
1179}
1180
1181
1182long
1184 // write warning if netedit is running in testing mode
1185 WRITE_DEBUG("Toggle load additionals in sumo-gui");
1186 return 1;
1187}
1188
1189
1190long
1192 // write warning if netedit is running in testing mode
1193 WRITE_DEBUG("Toggle load demand in sumo-gui");
1194 return 1;
1195}
1196
1197
1198long
1199GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1200 // write warning if netedit is running in testing mode
1201 WRITE_DEBUG("Opening about dialog");
1202 // create and open about dialog
1203 GNEAbout* about = new GNEAbout(this);
1204 about->create();
1205 about->show(PLACEMENT_OWNER);
1206 // write warning if netedit is running in testing mode
1207 WRITE_DEBUG("Closed about dialog");
1208 return 1;
1209}
1210
1211
1212long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1213 FXEvent* event = (FXEvent*)ptr;
1214 FXString string = GUIUserIO::clipped.c_str();
1215 setDNDData(FROM_CLIPBOARD, event->target, string);
1216 return 1;
1217}
1218
1219
1220long
1221GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1222 eventOccurred();
1223 return 1;
1224}
1225
1226
1227void
1229 while (!myEvents.empty()) {
1230 // get the next event
1231 GUIEvent* e = myEvents.top();
1232 myEvents.pop();
1233 // process
1234 switch (e->getOwnType()) {
1237 break;
1244 break;
1245 default:
1246 break;
1247 }
1248 delete e;
1249 }
1250}
1251
1252
1253void
1255 myAmLoading = false;
1256 GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1257 // check whether the loading was successfull
1258 if (ec->net == nullptr) {
1259 // report failure
1260 setStatusBarText(TL("Loading of '") + ec->file + "' failed!");
1261 } else {
1262 // set new Net
1263 myNet = ec->net;
1264 // report success
1265 setStatusBarText(TL("'") + ec->file + TL("' loaded."));
1267 // build viewparent toolbar grips before creating view parent
1269 // initialise netedit View
1270 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1271 // create it maximized
1272 viewParent->maximize();
1273 // mark it as Active child
1274 myMDIClient->setActiveChild(viewParent);
1275 // cast pointer myViewNet
1276 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1277 // set settings in view
1278 if (viewParent->getView() && ec->settingsFile != "") {
1279 GUISettingsHandler settings(ec->settingsFile, true, true);
1280 settings.addSettings(viewParent->getView());
1281 viewParent->getView()->addDecals(settings.getDecals());
1282 settings.applyViewport(viewParent->getView());
1283 settings.setSnapshots(viewParent->getView());
1284 }
1285 // set network name on the caption
1286 setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1287 // force supermode network
1288 if (myViewNet) {
1290 }
1291 if (myViewNet && ec->viewportFromRegistry) {
1292 Position off;
1293 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1294 Position p(off.x(), off.y(), 0);
1295 myViewNet->setViewportFromToRot(off, p, 0);
1296 }
1297 }
1299 // load elements
1304 // after loading net shouldn't be saved
1305 if (myNet) {
1307 }
1308 // update app
1309 update();
1310 // restore focus
1311 setFocus();
1312}
1313
1314
1315void
1320
1321// ---------------------------------------------------------------------------
1322// private methods
1323// ---------------------------------------------------------------------------
1324
1325void
1327 // build file menu
1328 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1330 myFileMenuNeteditConfig = new FXMenuPane(this);
1331 myFileMenuSumoConfig = new FXMenuPane(this);
1332 myFileMenuTLS = new FXMenuPane(this);
1333 myFileMenuEdgeTypes = new FXMenuPane(this);
1334 myFileMenuAdditionals = new FXMenuPane(this);
1335 myFileMenuDemandElements = new FXMenuPane(this);
1336 myFileMenuDataElements = new FXMenuPane(this);
1337 myFileMenuMeanDataElements = new FXMenuPane(this);
1338 myFileMenuRecentNetworks = new FXMenuPane(this);
1339 myFileMenuRecentConfigs = new FXMenuPane(this);
1343 // add separator for recent files
1344 new FXMenuSeparator(myFileMenu);
1345 // build recent files
1348 new FXMenuSeparator(myFileMenu);
1350 TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1351 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1352 // build modes menu
1353 myModesMenu = new FXMenuPane(this);
1355 myModesMenuTitle->setTarget(this);
1357 // build Supermode commands and hide it
1360 // build modes menu commands
1362 // build edit menu
1363 myEditMenu = new FXMenuPane(this);
1365 // build edit menu commands
1367 // build separator
1368 new FXMenuSeparator(myEditMenu);
1369 // build view options
1373 // hide view options
1377 // build view menu commands
1379 // build separator
1380 new FXMenuSeparator(myEditMenu);
1381 // build front element menu commands
1383 // build separator
1384 new FXMenuSeparator(myEditMenu);
1385 // build open in sumo menu commands
1387 // build lock menu
1388 myLockMenu = new FXMenuPane(this);
1390 myLockMenuTitle->setTarget(this);
1392 // build lock menu commands
1394 // build processing menu (trigger netbuild computations)
1395 myProcessingMenu = new FXMenuPane(this);
1398 // build locate menu
1399 myLocatorMenu = new FXMenuPane(this);
1402 // build tools menu
1403 myToolsMenu = new FXMenuPane(this);
1404 myToolsDetectorMenu = new FXMenuPane(this);
1405 myToolsDistrictMenu = new FXMenuPane(this);
1406 myToolsDRTMenu = new FXMenuPane(this);
1407 myToolsEmissionsMenu = new FXMenuPane(this);
1408 myToolsImportMenu = new FXMenuPane(this);
1409 myToolsImportCityBrainMenu = new FXMenuPane(this);
1410 myToolsImportGTFSMenu = new FXMenuPane(this);
1411 myToolsImportVissim = new FXMenuPane(this);
1412 myToolsImportVisum = new FXMenuPane(this);
1413 myToolsNetMenu = new FXMenuPane(this);
1414 myToolsRouteMenu = new FXMenuPane(this);
1415 myToolsOutputMenu = new FXMenuPane(this);
1416 myToolsShapes = new FXMenuPane(this);
1417 myToolsTLS = new FXMenuPane(this);
1418 myToolsTurnDefs = new FXMenuPane(this);
1419 myToolsVisualizationMenu = new FXMenuPane(this);
1420 myToolsXML = new FXMenuPane(this);
1422 // build tools menu cascasde
1423 new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1424 new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1426 //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1435 //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1436 new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1440 // add separators between folders
1441 new FXMenuSeparator(myToolsMenu);
1442 new FXMenuSeparator(myToolsImportMenu);
1443 // create map with tool Menu panes and their associated folder
1449 myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1451 myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1452 myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1458 myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1461 // build tools
1463 // build windows menu
1464 myWindowMenu = new FXMenuPane(this);
1468 // build help menu
1469 myHelpMenu = new FXMenuPane(this);
1472}
1473
1474
1475FXGLCanvas*
1477 // netedit uses only a single View, then return nullptr
1478 return nullptr;
1479}
1480
1481
1484 return 0;
1485}
1486
1487
1488double
1490 return 1;
1491}
1492
1493
1498
1499
1504
1505
1510
1511
1516
1517
1518void
1520 if (myViewNet && myViewNet->getNet()) {
1521 // show
1523 // set label depending of recomputing
1525 myRequireRecomputingButton->setText("");
1526 myRequireRecomputingButton->setTipText(TL("Network computed"));
1528 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1529 } else {
1530 myRequireRecomputingButton->setText(TL("Press F5"));
1531 myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1533 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1534 }
1535 } else {
1536 // hide
1538 }
1539}
1540
1541
1542void
1544 // check if view has to be saved
1545 if (myViewNet) {
1547 myViewNet->getDecals().clear();
1548 }
1549 // lock tracker
1550 myTrackerLock.lock();
1551 // clear decals
1552 // remove trackers and other external windows
1553 while (!myGLWindows.empty()) {
1554 delete myGLWindows.front();
1555 }
1556 myViewNet = nullptr;
1557 for (FXMainWindow* const window : myTrackerWindows) {
1558 window->destroy();
1559 delete window;
1560 }
1561 myTrackerWindows.clear();
1562 // reset the caption
1563 setTitle(myTitlePrefix);
1564 // unlock tracker
1565 myTrackerLock.unlock();
1566 // remove coordinate information
1567 myGeoCoordinate->setText(TL("N/A"));
1568 myCartesianCoordinate->setText(TL("N/A"));
1569 myTestCoordinate->setText(TL("N/A"));
1570 myTestFrame->hide();
1571 // check if net can be deleted
1572 if (myNet != nullptr) {
1573 delete myNet;
1574 myNet = nullptr;
1576 }
1578 // Reset textures
1580 // reset fonts
1582}
1583
1584
1585FXCursor*
1587 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1588}
1589
1590
1591void
1593 auto& neteditOptions = OptionsCont::getOptions();
1594 if (neteditOptions.getBool("new")) {
1596 } else {
1597 // set flag
1598 myAmLoading = true;
1599 // set status bar
1600 setStatusBarText(TL("Loading console arguments"));
1601 // load console arguments
1603 // add it into recent networks and configs
1604 if (neteditOptions.getString("net-file").size() > 0) {
1605 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
1606 }
1607 if (neteditOptions.getString("configuration-file").size() > 0) {
1608 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
1609 }
1610 }
1611}
1612
1613
1614void
1616 auto& neteditOptions = OptionsCont::getOptions();
1617 // save windows size and position
1619 // enable loading flag and disable reloading flag
1620 myAmLoading = true;
1621 // recenter view
1622 gSchemeStorage.saveViewport(0, 0, -1, 0);
1623 // fill (reset) all options
1624 GNELoadThread::fillOptions(neteditOptions);
1625 // set default options defined in GNELoadThread::setDefaultOptions(...)
1626 GNELoadThread::setDefaultOptions(neteditOptions);
1627 // update status bar
1628 setStatusBarText(TL("Creating new network."));
1629 // create new network
1631 // update window
1632 update();
1633}
1634
1635
1636void
1637GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1638 if (networkFile.empty()) {
1639 WRITE_ERROR(TL("Trying to load an empty network"));
1640 } else {
1641 auto& neteditOptions = OptionsCont::getOptions();
1642 // store size, position and viewport
1644 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1645 // set flag
1646 myAmLoading = true;
1647 // fill (reset) all options
1648 myLoadThread->fillOptions(neteditOptions);
1649 // set default options defined in GNELoadThread::setDefaultOptions(...)
1650 myLoadThread->setDefaultOptions(neteditOptions);
1651 // set file to load
1652 neteditOptions.resetWritable();
1653 neteditOptions.set("net-file", networkFile);
1654 // set status bar
1655 setStatusBarText(TL("Loading network file '") + networkFile + "'");
1656 // load network
1658 // add it into recent nets
1659 myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1660 }
1661}
1662
1663
1664void
1665GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1666 if (configurationFile.empty()) {
1667 WRITE_ERROR(TL("Trying to load an empty configuration"));
1668 } else {
1669 auto& neteditOptions = OptionsCont::getOptions();
1670 // store size, position and viewport
1672 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1673 // set flag
1674 myAmLoading = true;
1675 // fill (reset) all options
1676 myLoadThread->fillOptions(neteditOptions);
1677 // set default options defined in GNELoadThread::setDefaultOptions(...)
1678 myLoadThread->setDefaultOptions(neteditOptions);
1679 // set file to load
1680 neteditOptions.resetWritable();
1681 neteditOptions.set("configuration-file", configurationFile);
1682 // set status bar
1683 setStatusBarText(TL("Loading configuration file '") + configurationFile + "'");
1684 // load config
1686 // add it into recent configs
1687 myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1688 }
1689}
1690
1691
1692void
1693GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1694 auto& neteditOptions = OptionsCont::getOptions();
1695 // store size, position and viewport
1697 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1698 // set flag
1699 myAmLoading = true;
1700 // fill (reset) all options
1701 myLoadThread->fillOptions(neteditOptions);
1702 // set default options defined in GNELoadThread::setDefaultOptions(...)
1703 myLoadThread->setDefaultOptions(neteditOptions);
1704 // recommended osm options
1705 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1706 neteditOptions.set("osm-files", OSMFile);
1707 neteditOptions.set("geometry.remove", "true");
1708 neteditOptions.set("ramps.guess", "true");
1709 neteditOptions.set("junctions.join", "true");
1710 neteditOptions.set("tls.guess-signals", "true");
1711 neteditOptions.set("tls.discard-simple", "true");
1712 // open wizard dialog
1713 if (GNEOptionsDialog::Options(this, GUIIcon::SUPERMODENETWORK, OptionsCont::getOptions(), myOriginalNeteditOptions, TL("Select Import Options")).first == TRUE) {
1714 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
1715 // set file to load
1716 neteditOptions.resetWritable();
1717 neteditOptions.set("configuration-file", OSMFile);
1718 // set status bar
1719 setStatusBarText(TL("Loading OSM file '") + OSMFile + "'");
1720 // load config
1722 }
1723}
1724
1725void
1726GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1727 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1728 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1729}
1730
1731
1732long
1734 // declare variable to save FXMessageBox outputs.
1735 FXuint answer = 0;
1736 // write warning if netedit is running in testing mode
1737 WRITE_DEBUG("Opening FXMessageBox 'Volatile Recomputing'");
1738 // open question dialog box
1739 answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Recompute with volatile options"),
1740 TL("Changes produced in the net due a recomputing with volatile options cannot be undone. Continue?"));
1741 if (answer != 1) { //1:yes, 2:no, 4:esc
1742 // write warning if netedit is running in testing mode
1743 if (answer == 2) {
1744 WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'No'");
1745 } else if (answer == 4) {
1746 WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'ESC'");
1747 }
1748 // abort recompute with volatile options
1749 return 0;
1750 } else {
1751 // write warning if netedit is running in testing mode
1752 WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'Yes'");
1753 // save additionals
1754 onCmdSaveAdditionals(nullptr, 0, nullptr);
1755 // save demand elements
1756 onCmdSaveDemandElements(nullptr, 0, nullptr);
1757 // save data elements
1758 onCmdSaveDataElements(nullptr, 0, nullptr);
1759 // save mean datas
1760 onCmdSaveMeanDatas(nullptr, 0, nullptr);
1761 // compute with volatile options
1762 myNet->computeNetwork(this, true, true);
1764 return 1;
1765 }
1766}
1767
1768bool
1771 myConsoleOptionsLoaded = false;
1772 return true;
1773 } else {
1774 return false;
1775 }
1776}
1777
1778
1779long
1780GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1781 // check that currently there is a View
1782 if (myViewNet) {
1783 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1784 }
1785 return 1;
1786}
1787
1788
1789long
1790GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1791 // check that currently there is a View
1792 if (myViewNet) {
1793 myViewNet->onCmdSetMode(sender, sel, ptr);
1794 }
1795 return 1;
1796}
1797
1798
1799long
1800GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector, void*) {
1801 if (myViewNet) {
1803 }
1804 return 1;
1805}
1806
1807
1808long
1809GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1810 // lock all
1813 return 1;
1814}
1815
1816
1817long
1819 // unlock all
1822 return 1;
1823}
1824
1825
1826long
1828 if (myViewNet) {
1829 myViewNet->update();
1830 }
1831 return 1;
1832}
1833
1834
1835long
1836GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
1837 if (myViewNet) {
1839 // supermode network
1845 myLockMenuTitle->enable();
1846 } else {
1847 myLockMenuTitle->disable();
1848 }
1850 // supermode demand
1855 myLockMenuTitle->enable();
1856 } else {
1857 myLockMenuTitle->disable();
1858 }
1860 // supermode data
1864 myLockMenuTitle->enable();
1865 } else {
1866 myLockMenuTitle->disable();
1867 }
1868 } else {
1869 myLockMenuTitle->disable();
1870 }
1871 } else {
1872 myLockMenuTitle->disable();
1873 }
1874 return 1;
1875}
1876
1877long
1878GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
1879 // first check if there is a view
1880 if (myViewNet) {
1881 // process depending of supermode
1883 // check what FXMenuCommand was called
1884 switch (FXSELID(sel)) {
1886 // show extra information for tests
1887 WRITE_DEBUG("Key F5 (Compute) pressed");
1888 myNet->computeNetwork(this, true, false);
1890 break;
1892 // show extra information for tests
1893 WRITE_DEBUG("Keys Shift + F5 (Compute with volatile options) pressed");
1895 break;
1897 // show extra information for tests
1898 WRITE_DEBUG("Key F6 (Clean junction) pressed");
1900 break;
1902 // show extra information for tests
1903 WRITE_DEBUG("Key F7 (Join junctions) pressed");
1905 break;
1907 // show extra information for tests
1908 WRITE_DEBUG("Key F8 (Clean invalid crossings) pressed");
1910 break;
1911 default:
1912 break;
1913 }
1915 // check what FXMenuCommand was called
1916 switch (FXSELID(sel)) {
1918 // show extra information for tests
1919 WRITE_DEBUG("Key F5 (Compute) pressed");
1922 break;
1924 // show extra information for tests
1925 WRITE_DEBUG("Key F6 (RemoveUnusedRoutes) pressed");
1927 break;
1929 // show extra information for tests
1930 WRITE_DEBUG("Key F7 (JoinRoutes) pressed");
1932 break;
1934 // show extra information for tests
1935 WRITE_DEBUG("Key F7 (AdjustPersonPlans) pressed");
1937 break;
1939 // show extra information for tests
1940 WRITE_DEBUG("Key F8 (CleanInvalidDemandElements) pressed");
1942 break;
1943 default:
1944 break;
1945 }
1946 }
1947 }
1948 return 1;
1949}
1950
1951
1952long
1953GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
1954 // get extra arguments
1955 std::string extraArg;
1957 extraArg = " -s " + myNetgenerateOptions.getValueString("output-file");
1958 }
1959 FXRegistry reg("SUMO netedit", "netedit");
1960 std::string netedit = "netedit";
1961 const char* sumoPath = getenv("SUMO_HOME");
1962 if (sumoPath != nullptr) {
1963#ifdef DEBUG
1964 std::string newPath = std::string(sumoPath) + "/bin/neteditD";
1965#else
1966 std::string newPath = std::string(sumoPath) + "/bin/netedit";
1967#endif
1968 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
1969 netedit = "\"" + newPath + "\"";
1970 }
1971 }
1972 std::string cmd = netedit + extraArg;
1973 // start in background
1974#ifndef WIN32
1975 cmd = cmd + " &";
1976#else
1977 // see "help start" for the parameters
1978 cmd = "start /B \"\" " + cmd;
1979#endif
1980 WRITE_MESSAGE(TL("Running ") + cmd + ".");
1981 // yay! fun with dangerous commands... Never use this over the internet
1983 return 1;
1984}
1985
1986
1987long
1988GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
1989 // get option container
1990 auto& neteditOptions = OptionsCont::getOptions();
1991 // input parameters
1992 std::string inputParameters;
1993 // if we have only a network, then load directly without creating a SumoConfig
1995 ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
1996 // force save network
1997 if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
1998 // network wasn't saved, then stop
1999 return 0;
2000 }
2001 inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2002 // write info
2003 WRITE_MESSAGE(TL("Loading network '") + neteditOptions.getString("net-file") + TL("' in SUMO-GUI"));
2004 } else {
2005 // force save SumoConfig
2006 if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2007 // SumoConfig wasn't saved, then stop
2008 return 0;
2009 }
2010 inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2011 // write info
2012 WRITE_MESSAGE(TL("Loading sumo config '") + neteditOptions.getString("sumocfg-file") + TL("' in SUMO-GUI"));
2013 }
2014 // save current viewport in registry
2015 FXRegistry reg("SUMO GUI", "sumo-gui");
2016 reg.read();
2017 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2018 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2019 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2020 reg.write();
2021 // declare executable
2022 std::string sumoGuiExecutable = "sumo-gui";
2023 // if SUMO_HOME is defined, update executable
2024 const char* sumoHome = getenv("SUMO_HOME");
2025 if (sumoHome != nullptr) {
2026 std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2027 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2028 sumoGuiExecutable = "\"" + newPath + "\"";
2029 }
2030 }
2031 // declare command
2032 std::string cmd = sumoGuiExecutable + inputParameters;
2033 // start in background
2034#ifndef WIN32
2035 cmd = cmd + " &";
2036#else
2037 // see "help start" for the parameters
2038 cmd = "start /B \"\" " + cmd;
2039#endif
2040 WRITE_MESSAGE(TL("Running ") + cmd + ".");
2041 // yay! fun with dangerous commands... Never use this over the internet
2043 return 1;
2044}
2045
2046
2047long
2048GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2049 // check that view exists
2050 if (myViewNet) {
2051 // show extra information for tests
2052 WRITE_DEBUG("Key ESC (abort) pressed");
2053 // first check if we're selecting a subset of edges in TAZ Frame
2055 // show extra information for tests
2056 WRITE_DEBUG("Cleaning current selected edges");
2057 // clear current selection
2059 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2060 // check if stop select parent
2062 // show extra information for tests
2063 WRITE_DEBUG("Stop select new parent");
2064 // and stop select paretn
2066 } else {
2067 // show extra information for tests
2068 WRITE_DEBUG("Cleaning inspected elements");
2069 // clear inspected elements
2071 }
2072 } else {
2073 // abort current operation
2075 }
2076 }
2077 return 1;
2078}
2079
2080
2081long
2082GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2083 // check that view exists
2084 if (myViewNet) {
2085 // show extra information for tests
2086 WRITE_DEBUG("Key DEL (delete) pressed");
2088 }
2089 return 1;
2090}
2091
2092
2093long
2094GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2095 // check that view exists
2096 if (myViewNet) {
2097 // show extra information for tests
2098 WRITE_DEBUG("Key ENTER pressed");
2100 }
2101 return 1;
2102}
2103
2104
2105long
2106GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2107 // check that view exists
2108 if (myViewNet) {
2109 // show extra information for tests
2110 WRITE_DEBUG("Key BACKSPACE pressed");
2112 }
2113 return 1;
2114}
2115
2116
2117long
2118GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2119 // check that view exists
2120 if (myViewNet) {
2122 }
2123 return 1;
2124}
2125
2126
2127long
2128GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2129 // enable or disable sender element depending of viewNet
2130 return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2131}
2132
2133
2134long
2137 return 1;
2138}
2139
2140
2141long
2145
2146
2147long
2148GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2150}
2151
2152
2153long
2154GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2155 // check that view exists
2156 if (myViewNet) {
2158 }
2159 return 1;
2160}
2161
2162
2163long
2164GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2165 // check that view exists
2166 if (myViewNet) {
2168 }
2169 return 1;
2170}
2171
2172
2173long
2174GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2175 // check that view exists
2176 if (myViewNet) {
2177 // show debug info
2179 // show extra information for tests
2180 WRITE_DEBUG("Disabled grid through Ctrl+g hotkey");
2181 } else {
2182 // show extra information for tests
2183 WRITE_DEBUG("Enabled grid through Ctrl+g hotkey");
2184 }
2185 // Call manually toggle grid function
2186 myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2187 }
2188 return 1;
2189}
2190
2191
2192long
2193GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2194 // check that view exists
2195 if (myViewNet) {
2196 // show debug info
2198 // show extra information for tests
2199 WRITE_DEBUG("Disabled draw junction shape through Ctrl+j hotkey");
2200 } else {
2201 // show extra information for tests
2202 WRITE_DEBUG("Enabled draw junction shape through Ctrl+j hotkey");
2203 }
2204 // Call manually toggle junction shape function
2205 myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2206 }
2207 return 1;
2208}
2209
2210
2211long
2212GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2213 if (myViewNet) {
2214 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2215 // get inspected AC
2216 GNEAttributeCarrier* inspectedAC = (myViewNet->getInspectedAttributeCarriers().size() == 1) ? myViewNet->getInspectedAttributeCarriers().front() : nullptr;
2217 // set or clear front attribute
2218 if (myViewNet->getFrontAttributeCarrier() == inspectedAC) {
2220 } else {
2221 myViewNet->setFrontAttributeCarrier(inspectedAC);
2222 }
2224 } else {
2226 }
2227 update();
2228 }
2229 return 1;
2230}
2231
2232
2233long
2234GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2235 // first check that we have a ViewNet
2236 if (myViewNet) {
2237 // first check what selector was called
2238 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2239 // check that numericalKeyPressed is valid
2240 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2241 return 1;
2242 }
2243 // declare a vector in which save visible menu commands
2244 std::vector<MFXCheckableButton*> visibleMenuCommands;
2245 // get common, network and demand visible menu commands
2249 // now check that numericalKeyPressed isn't greather than visible view options
2250 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2251 return 1;
2252 }
2253 // toggle edit options
2255 visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2256 return 1;
2258 visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2259 return 1;
2261 visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2262 return 1;
2263 }
2264 }
2265 return 1;
2266}
2267
2268
2269long
2270GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2271 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2272 return 1;
2273}
2274
2275
2276long
2277GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2278 // update in every version
2279 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2280 return 1;
2281}
2282
2283
2284long
2285GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2286 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2287 return 1;
2288}
2289
2290
2291long
2294 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2295 } else {
2296 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2297 }
2298}
2299
2300
2301long
2302GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2303 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2304 return 1;
2305}
2306
2307
2308long
2309GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2310 // write warning if netedit is running in testing mode
2311 WRITE_DEBUG("Opening feedback dialog");
2312 // create and open feedback dialog
2313 GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2314 feedback->create();
2315 feedback->show(PLACEMENT_OWNER);
2316 // write warning if netedit is running in testing mode
2317 WRITE_DEBUG("Closed feedback dialog");
2318 return 1;
2319}
2320
2321
2322long
2324 auto& neteditOptions = OptionsCont::getOptions();
2325 const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::NETEDIT_MINI, neteditOptions, myOriginalNeteditOptions, TL("Netedit options"));
2326 if (dialog.first == TRUE) {
2327 NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2328 NBFrame::checkOptions(neteditOptions);
2329 NWFrame::checkOptions(neteditOptions);
2330 SystemFrame::checkOptions(neteditOptions); // needed to set precision
2331 // check if mar netedit config as unsaved
2332 if (dialog.second) {
2334 }
2335 }
2336 return 1;
2337}
2338
2339
2340long
2342 const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::SUMO_MINI, mySumoOptions, myOriginalSumoOptions, TL("Sumo options"));
2343 // check if mark sumoConfig as unsaved
2344 if ((dialog.first == TRUE) && dialog.second) {
2346 }
2347 return 1;
2348}
2349
2350
2351long
2355
2356
2357long
2361
2362
2363long
2364GNEApplicationWindow::onCmdUndo(FXObject*, FXSelector, void*) {
2365 WRITE_DEBUG("Keys Ctrl+Z (Undo) pressed");
2366 // Check conditions
2367 if (myViewNet == nullptr) {
2368 return 0;
2369 } else if (!myEditMenuCommands.undoLastChange->isEnabled()) {
2370 return 0;
2371 } else {
2372 // check supermode (currently ignore supermode data)
2375 // abort if user doesn't press "yes"
2377 return 0;
2378 }
2379 }
2381 // update current show frame after undo
2384 }
2385 // update manually undo/redo menu commands (see #6005)
2388 // update toolbar undo-redo buttons
2390 return 1;
2391 }
2392}
2393
2394
2395long
2396GNEApplicationWindow::onCmdRedo(FXObject*, FXSelector, void*) {
2397 WRITE_DEBUG("Keys Ctrl+Y (Redo) pressed");
2398 // Check conditions
2399 if (myViewNet == nullptr) {
2400 return 0;
2401 } else if (!myEditMenuCommands.redoLastChange->isEnabled()) {
2402 return 0;
2403 } else {
2404 // check supermode (currently ignore supermode data)
2407 // abort if user doesn't press "yes"
2409 return 0;
2410 }
2411 }
2413 // update current show frame after redo
2416 }
2417 // update manually undo/redo menu commands (see #6005)
2420 // update toolbar undo-redo buttons
2422 return 1;
2423 }
2424}
2425
2426
2427long
2429 // avoid open two dialogs
2430 if (myUndoListDialog->shown()) {
2432 } else {
2434 }
2435 return 1;
2436}
2437
2438
2439long
2440GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2441 // check if net exist and there is something to undo/redo
2442 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2443 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2444 } else {
2445 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2446 if (myUndoListDialog->shown()) {
2448 }
2449 }
2450 return 1;
2451}
2452
2453
2454long
2456 // first check viewNet
2458 // update path calculator
2460 }
2461 return 1;
2462}
2463
2464
2465long
2466GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2467 WRITE_DEBUG("Key Ctrl+X (Cut) pressed");
2468 // Prepared for #6042
2469 return 1;
2470}
2471
2472
2473long
2474GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2475 WRITE_DEBUG("Key Ctrl+C (Copy) pressed");
2476 // Prepared for #6042
2477 return 1;
2478}
2479
2480
2481long
2482GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2483 WRITE_DEBUG("Key Ctrl+V (Paste) pressed");
2484 // Prepared for #6042
2485 return 1;
2486}
2487
2488
2489long
2490GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2491 WRITE_DEBUG("Key Ctrl+F1 (Set Template) pressed");
2492 // first check if myViewNet exist
2493 if (myViewNet) {
2494 // call set template in inspector frame
2496 }
2497 return 1;
2498}
2499
2500
2501long
2502GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2503 WRITE_DEBUG("Key Ctrl+F2 (Copy Template) pressed");
2504 // first check if myViewNet exist
2505 if (myViewNet) {
2506 // call copy template in inspector frame
2508 }
2509 return 1;
2510}
2511
2512
2513long
2514GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2515 WRITE_DEBUG("Key Ctrl+F3 (Clear Template) pressed");
2516 // first check if myViewNet exist
2517 if (myViewNet) {
2518 // call clear template in inspector frame
2520 }
2521 return 1;
2522}
2523
2524
2525long
2526GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2527 // check if net exist
2528 if (myNet) {
2530 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2531 } else {
2533 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2534 }
2535}
2536
2537
2538long
2539GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2540 // check if at least there is one edge in the network
2541 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2542 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2543 } else {
2544 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2545 }
2546}
2547
2548
2549long
2550GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2551 // check if net, viewnet and front attribute exist
2553 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2554 } else {
2555 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2556 }
2557}
2558
2559
2560long
2561GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2562 return sender->handle(this, ((myNet == nullptr) || myNet->getSavingStatus()->isNetworkSaved()) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2563}
2564
2565
2566long
2567GNEApplicationWindow::onUpdSaveAdditionals(FXObject* sender, FXSelector, void*) {
2568 if (myNet == nullptr) {
2569 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2571 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2572 } else {
2573 return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2574 }
2575}
2576
2577
2578long
2579GNEApplicationWindow::onUpdSaveAdditionalsAs(FXObject* sender, FXSelector, void*) {
2580 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2581}
2582
2583
2584long
2585GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2586 return sender->handle(this, ((myNet == nullptr) || myNet->getSavingStatus()->isDemandElementsSaved()) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2587}
2588
2589
2590long
2591GNEApplicationWindow::onUpdSaveDemandElementsAs(FXObject* sender, FXSelector, void*) {
2592 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getNumberOfDemandElements() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2593}
2594
2595
2596long
2597GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2598 return sender->handle(this, ((myNet == nullptr) || myNet->getSavingStatus()->isDataElementsSaved()) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2599}
2600
2601
2602long
2603GNEApplicationWindow::onUpdSaveDataElementsAs(FXObject* sender, FXSelector, void*) {
2604 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getDataSets().size() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2605}
2606
2607
2608long
2609GNEApplicationWindow::onUpdSaveMeanDatas(FXObject* sender, FXSelector, void*) {
2610 if (myNet == nullptr) {
2611 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2612 } else {
2613 return sender->handle(this, myNet->getSavingStatus()->isMeanDatasSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2614 }
2615}
2616
2617
2618long
2619GNEApplicationWindow::onUpdSaveMeanDatasAs(FXObject* sender, FXSelector, void*) {
2620 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2621}
2622
2623
2624long
2625GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2626 return myUndoList->onUpdUndo(sender, sel, ptr);
2627}
2628
2629
2630long
2631GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2632 return myUndoList->onUpdRedo(sender, sel, ptr);
2633}
2634
2635
2636long
2637GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2638 // first check viewNet
2639 if (myViewNet) {
2640 // check supermode network
2642 // disable
2643 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2645 // disable
2646 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2647 } else {
2648 // enable
2649 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2650 }
2651 } else {
2652 // disable
2653 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2654 }
2655}
2656
2657
2658long
2659GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2660 // check viewNet
2661 if (myViewNet) {
2662 // continue depending of selector
2663 switch (FXSELID(sel)) {
2664 // Network
2666 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2668 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2670 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2672 return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2674 return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2676 return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2678 return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2680 return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2682 return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2684 return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2686 return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2688 return myViewNet->onCmdToggleWarnAboutMerge(sender, sel, ptr);
2690 return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2692 return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2694 return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2696 return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2697 // Demand
2699 return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2701 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2703 return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2705 return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2707 return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2709 return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2711 return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2713 return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2715 return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2717 return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2719 return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2720 // Data
2722 return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2724 return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
2726 return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
2728 return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
2730 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2732 return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2734 return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
2736 return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
2737 default:
2738 return 0;
2739 }
2740 } else {
2741 return 0;
2742 }
2743}
2744
2745
2746long
2747GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
2748 // get menuCheck
2749 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
2750 // check viewNet
2751 if (myViewNet && menuCheck) {
2752 // continue depending of selector
2753 switch (FXSELID(sel)) {
2754 // Network
2757 menuCheck->setCheck(TRUE);
2758 } else {
2759 menuCheck->setCheck(FALSE);
2760 }
2761 break;
2764 menuCheck->setCheck(TRUE);
2765 } else {
2766 menuCheck->setCheck(FALSE);
2767 }
2768 break;
2771 menuCheck->setCheck(TRUE);
2772 } else {
2773 menuCheck->setCheck(FALSE);
2774 }
2775 break;
2778 menuCheck->setCheck(TRUE);
2779 } else {
2780 menuCheck->setCheck(FALSE);
2781 }
2782 break;
2785 menuCheck->setCheck(TRUE);
2786 } else {
2787 menuCheck->setCheck(FALSE);
2788 }
2789 break;
2792 menuCheck->setCheck(TRUE);
2793 } else {
2794 menuCheck->setCheck(FALSE);
2795 }
2796 break;
2799 menuCheck->setCheck(TRUE);
2800 } else {
2801 menuCheck->setCheck(FALSE);
2802 }
2803 break;
2806 menuCheck->setCheck(TRUE);
2807 } else {
2808 menuCheck->setCheck(FALSE);
2809 }
2810 break;
2813 menuCheck->setCheck(TRUE);
2814 } else {
2815 menuCheck->setCheck(FALSE);
2816 }
2817 break;
2820 menuCheck->setCheck(TRUE);
2821 } else {
2822 menuCheck->setCheck(FALSE);
2823 }
2824 break;
2827 menuCheck->setCheck(TRUE);
2828 } else {
2829 menuCheck->setCheck(FALSE);
2830 }
2831 break;
2834 menuCheck->setCheck(TRUE);
2835 } else {
2836 menuCheck->setCheck(FALSE);
2837 }
2838 break;
2841 menuCheck->setCheck(TRUE);
2842 } else {
2843 menuCheck->setCheck(FALSE);
2844 }
2845 break;
2848 menuCheck->setCheck(TRUE);
2849 } else {
2850 menuCheck->setCheck(FALSE);
2851 }
2852 break;
2855 menuCheck->setCheck(TRUE);
2856 } else {
2857 menuCheck->setCheck(FALSE);
2858 }
2859 break;
2862 menuCheck->setCheck(TRUE);
2863 } else {
2864 menuCheck->setCheck(FALSE);
2865 }
2866 break;
2867 // Demand
2870 menuCheck->setCheck(TRUE);
2871 } else {
2872 menuCheck->setCheck(FALSE);
2873 }
2874 break;
2877 menuCheck->setCheck(TRUE);
2878 } else {
2879 menuCheck->setCheck(FALSE);
2880 }
2881 break;
2884 menuCheck->setCheck(TRUE);
2885 } else {
2886 menuCheck->setCheck(FALSE);
2887 }
2888 break;
2891 menuCheck->setCheck(TRUE);
2892 } else {
2893 menuCheck->setCheck(FALSE);
2894 }
2895 break;
2898 menuCheck->setCheck(TRUE);
2899 } else {
2900 menuCheck->setCheck(FALSE);
2901 }
2902 break;
2905 menuCheck->setCheck(TRUE);
2906 } else {
2907 menuCheck->setCheck(FALSE);
2908 }
2909 break;
2912 menuCheck->setCheck(TRUE);
2913 } else {
2914 menuCheck->setCheck(FALSE);
2915 }
2916 // special case for lock persons
2918 menuCheck->enable();
2919 } else {
2920 menuCheck->disable();
2921 }
2922 break;
2925 menuCheck->setCheck(TRUE);
2926 } else {
2927 menuCheck->setCheck(FALSE);
2928 }
2929 break;
2932 menuCheck->setCheck(TRUE);
2933 } else {
2934 menuCheck->setCheck(FALSE);
2935 }
2936 // special case for lock containers
2938 menuCheck->enable();
2939 } else {
2940 menuCheck->disable();
2941 }
2942 break;
2945 menuCheck->setCheck(TRUE);
2946 } else {
2947 menuCheck->setCheck(FALSE);
2948 }
2949 break;
2952 menuCheck->setCheck(TRUE);
2953 } else {
2954 menuCheck->setCheck(FALSE);
2955 }
2956 break;
2957 // Data
2960 menuCheck->setCheck(TRUE);
2961 } else {
2962 menuCheck->setCheck(FALSE);
2963 }
2964 break;
2967 menuCheck->setCheck(TRUE);
2968 } else {
2969 menuCheck->setCheck(FALSE);
2970 }
2971 break;
2974 menuCheck->setCheck(TRUE);
2975 } else {
2976 menuCheck->setCheck(FALSE);
2977 }
2978 break;
2981 menuCheck->setCheck(TRUE);
2982 } else {
2983 menuCheck->setCheck(FALSE);
2984 }
2985 break;
2988 menuCheck->setCheck(TRUE);
2989 } else {
2990 menuCheck->setCheck(FALSE);
2991 }
2992 break;
2995 menuCheck->setCheck(TRUE);
2996 } else {
2997 menuCheck->setCheck(FALSE);
2998 }
2999 break;
3000
3003 menuCheck->setCheck(TRUE);
3004 } else {
3005 menuCheck->setCheck(FALSE);
3006 }
3007 break;
3010 menuCheck->setCheck(TRUE);
3011 } else {
3012 menuCheck->setCheck(FALSE);
3013 }
3014 break;
3015 default:
3016 break;
3017 }
3018 }
3019 return 0;
3020}
3021
3022
3023long
3024GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3025 auto& neteditOptions = OptionsCont::getOptions();
3026 // function onCmdSaveNetworkAs must be executed if this is the first save
3027 if (neteditOptions.getString("net-file").empty()) {
3028 return onCmdSaveNetworkAs(sender, sel, ptr);
3029 } else {
3030 // always recompute before saving
3031 myNet->computeNetwork(this);
3032 // se net file in SUMO options
3034 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3035 // begin save network
3036 getApp()->beginWaitCursor();
3037 bool saved = false;
3038 try {
3039 // obtain invalid networkElements (currently only edges or crossings
3040 std::vector<GNENetworkElement*> invalidNetworkElements;
3041 // iterate over crossings and edges
3042 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3043 if (edge.second->isNetworkElementValid() == false) {
3044 invalidNetworkElements.push_back(edge.second);
3045 }
3046 }
3047 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3048 if (crossing->isNetworkElementValid() == false) {
3049 invalidNetworkElements.push_back(crossing);
3050 }
3051 }
3052 // if there are invalid network elements, open GNEFixNetworkElements
3053 if (invalidNetworkElements.size() > 0) {
3054 // 0 -> Canceled Saving, with or without selecting invalid network elements
3055 // 1 -> Invalid network elements fixed, friendlyPos enabled, or saved with invalid positions
3056 GNEFixNetworkElements fixNetworkElementsDialog(myViewNet, invalidNetworkElements);
3057 if (fixNetworkElementsDialog.execute() == 0) {
3058 // show debug information
3059 WRITE_DEBUG("network elements saving aborted");
3060 // stop
3061 return 1;
3062 } else {
3063 // Save network
3064 myNet->saveNetwork();
3065 saved = true;
3066 // show debug information
3067 WRITE_DEBUG("network elements saved after dialog");
3068 }
3069 } else {
3070 // Save network
3071 myNet->saveNetwork();
3072 saved = true;
3073 // show debug information
3074 WRITE_DEBUG("network elements saved");
3075 }
3076 } catch (IOError& e) {
3077 // write warning if netedit is running in testing mode
3078 WRITE_DEBUG("Opening FXMessageBox 'error saving network'");
3079 // open error message box
3080 FXMessageBox::error(this, MBOX_OK, TL("Saving Network failed!"), "%s", e.what());
3081 // write warning if netedit is running in testing mode
3082 WRITE_DEBUG("Closed FXMessageBox 'error saving network' with 'OK'");
3083 }
3084 if (saved) {
3085 // write info
3086 WRITE_MESSAGE(TL("Network saved in '") + neteditOptions.getString("net-file") + "'.");
3087 // After saving a net successfully, add it into Recent Nets list.
3088 myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3090 } else {
3092 WRITE_ERROR(TL("Could not save network in '") + neteditOptions.getString("net-file") + "'");
3093 }
3094 // end save network
3095 getApp()->endWaitCursor();
3096 // update view
3098 // set focus again in net
3099 myViewNet->setFocus();
3100 return 1;
3101 }
3102}
3103
3104
3105long
3106GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3107 // get network file file
3108 const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, true);
3109 if (!networkFile.empty()) {
3110 // set ouput file in netedit configs
3111 auto& neteditOptions = OptionsCont::getOptions();
3112 neteditOptions.resetWritable();
3113 neteditOptions.set("net-file", networkFile);
3114 // update netedit title with the network name
3115 setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFile.c_str()));
3116 // save network
3117 onCmdSaveNetwork(nullptr, 0, nullptr);
3118 }
3119 return 1;
3120}
3121
3122
3123long
3124GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3125 // get neteditConfig filename
3127 // Remove extension
3128 if (!plainXMLFile.empty()) {
3129 // adjust file
3130 if (plainXMLFile.back() == '.') {
3131 plainXMLFile.pop_back();
3132 } else {
3133 plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3134 plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3135 plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3136 plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3137 plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3138 plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3139 }
3140 }
3141 // continue depending of file
3142 if (!plainXMLFile.empty()) {
3143 // start saving plain XML
3144 getApp()->beginWaitCursor();
3145 try {
3146 myNet->savePlain(plainXMLFile);
3147 // write info
3148 WRITE_MESSAGE(TL("Plain XML saved with prefix '") + plainXMLFile + "'");
3149 } catch (IOError& e) {
3150 // write warning if netedit is running in testing mode
3151 WRITE_DEBUG("Opening FXMessageBox 'Error saving plainXML'");
3152 // open message box
3153 FXMessageBox::error(this, MBOX_OK, TL("Saving plain xml failed!"), "%s", e.what());
3154 // write warning if netedit is running in testing mode
3155 WRITE_DEBUG("Closed FXMessageBox 'Error saving plainXML' with 'OK'");
3156 }
3157 // end saving plain XML
3158 getApp()->endWaitCursor();
3159
3160 // restore focus
3161 setFocus();
3162 }
3163 return 1;
3164}
3165
3166
3167long
3169 // get neteditConfig filename
3170 const auto joinedJunctionsFile = GNEApplicationWindowHelper::saveJoinedJunctionsFileDialog(this);
3171 // continue depending of file
3172 if (joinedJunctionsFile.size() > 0) {
3173 getApp()->beginWaitCursor();
3174 try {
3175 myNet->saveJoined(joinedJunctionsFile);
3176 // write info
3177 WRITE_MESSAGE(TL("Joined junctions saved to '") + joinedJunctionsFile + "'");
3178 } catch (IOError& e) {
3179 // write warning if netedit is running in testing mode
3180 WRITE_DEBUG("Opening FXMessageBox 'error saving joined'");
3181 // opening error message
3182 FXMessageBox::error(this, MBOX_OK, TL("Saving joined junctions failed!"), "%s", e.what());
3183 // write warning if netedit is running in testing mode
3184 WRITE_DEBUG("Closed FXMessageBox 'error saving joined' with 'OK'");
3185 }
3186 getApp()->endWaitCursor();
3187
3188 // restore focus
3189 setFocus();
3190 }
3191 return 1;
3192}
3193
3194
3195long
3197 // obtain netedit option container
3198 auto& neteditOptions = OptionsCont::getOptions();
3199 neteditOptions.resetWritable();
3200 // Check if configuration file was already set at start of netedit or with a previous save
3201 if (neteditOptions.getString("configuration-file").empty()) {
3202 return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3203 } else {
3204 // get config file
3205 const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3206 // get file path
3207 const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3208 // get patter file
3209 const auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3210 // get config file without extension
3211 if (neteditOptions.getString("net-file").empty()) {
3212 neteditOptions.set("net-file", patterFile + ".net.xml");
3213 }
3214 onCmdSaveNetwork(nullptr, 0, nullptr);
3215 // save all element giving automatic names
3217 if (neteditOptions.getString("additional-files").empty()) {
3218 neteditOptions.set("additional-files", patterFile + ".add.xml");
3219 }
3220 onCmdSaveAdditionals(nullptr, 0, nullptr);
3221 }
3223 if (neteditOptions.getString("route-files").empty()) {
3224 neteditOptions.set("route-files", patterFile + ".rou.xml");
3225 }
3226 onCmdSaveDemandElements(nullptr, 0, nullptr);
3227 }
3229 if (neteditOptions.getString("data-files").empty()) {
3230 neteditOptions.set("data-files", patterFile + ".dat.xml");
3231 }
3232 onCmdSaveDataElements(nullptr, 0, nullptr);
3233 }
3235 if (neteditOptions.getString("meandata-files").empty()) {
3236 neteditOptions.set("meandata-files", patterFile + ".med.add.xml");
3237 }
3238 onCmdSaveMeanDatas(nullptr, 0, nullptr);
3239 }
3240 std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3241 if (out.good()) {
3242 // write netedit config
3243 neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3244 // write info
3245 WRITE_MESSAGE(TL("Netedit configuration saved in '") + neteditConfigFile + "'");
3246 // config saved
3248 // After saving a config successfully, add it into recent configs
3249 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3250 } else {
3251 WRITE_ERROR(TL("Could not save netedit configuration in '") + neteditConfigFile + "'");
3252 }
3253 out.close();
3254 return 1;
3255 }
3256}
3257
3258
3259long
3260GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3261 auto& neteditOptions = OptionsCont::getOptions();
3262 // get neteditConfig filename
3263 const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, true);
3264 // continue depending of file
3265 if (!neteditConfigFile.empty()) {
3266 neteditOptions.resetWritable();
3267 neteditOptions.set("configuration-file", neteditConfigFile);
3268 // continue saving netedit config
3269 return onCmdSaveNeteditConfig(sender, sel, ptr);
3270 } else {
3271 return 0;
3272 }
3273}
3274
3275
3276long
3277GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3278 // check if enable or disable save netedit config button
3279 if (myNet == nullptr) {
3280 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3281 } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3282 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3283 } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3284 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3285 } else {
3286 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3287 }
3288 // check if enable/disable save individual files
3289 if (myNet) {
3293 } else {
3295 }
3296 }
3297 return 1;
3298}
3299
3300
3301long
3302GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3303 // obtain netedit option container
3304 auto& neteditOptions = OptionsCont::getOptions();
3305 // reset containers
3306 neteditOptions.resetWritable();
3308 // Check if configuration file was already set at start of netedit or with a previous save
3309 if (neteditOptions.getString("sumocfg-file").empty()) {
3310 return onCmdSaveSumoConfigAs(sender, sel, ptr);
3311 } else {
3312 // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3313 const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3314 const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3315 const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3316 // get SumoConfig file
3317 const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3318 // get config file without extension
3319 const auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3320 // save all element giving automatic names
3321 if (neteditOptions.getString("net-file").empty()) {
3322 neteditOptions.set("net-file", patterFile + ".net.xml");
3323 }
3324 onCmdSaveNetwork(nullptr, 0, nullptr);
3326 if (neteditOptions.getString("additional-files").empty()) {
3327 neteditOptions.set("additional-files", patterFile + ".add.xml");
3328 }
3329 onCmdSaveAdditionals(nullptr, 0, nullptr);
3330 }
3332 if (neteditOptions.getString("route-files").empty()) {
3333 neteditOptions.set("route-files", patterFile + ".rou.xml");
3334 }
3335 onCmdSaveDemandElements(nullptr, 0, nullptr);
3336 }
3338 if (neteditOptions.getString("meandata-files").empty()) {
3339 neteditOptions.set("meandata-files", patterFile + ".med.add.xml");
3340 }
3341 onCmdSaveMeanDatas(nullptr, 0, nullptr);
3342 }
3343 // set input in sumo options
3344 setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3345 // if we have trips or flow over junctions, add option junction-taz
3348 mySumoOptions.set("junction-taz", "true");
3349 }
3350 std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3351 if (out.good()) {
3352 // write SUMO config
3353 mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3354 // write info
3355 WRITE_MESSAGE(TL("SUMO configuration saved in '") + sumoConfigFile + "'");
3356 // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3357 if (!ignoreAdditionals && !ignoreDemandElements) {
3359 }
3360 // After saving a config successfully, add it into recent configs
3361 myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3362 } else {
3363 WRITE_MESSAGE(TL("Could not save SUMO configuration in '") + sumoConfigFile + "'");
3364 }
3365 out.close();
3366 return 1;
3367 }
3368}
3369
3370
3371long
3372GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3373 auto& neteditOptions = OptionsCont::getOptions();
3374 // get sumoConfig filename
3375 const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, true);
3376 // continue depending of file
3377 if (!sumoConfigFile.empty()) {
3378 // save file in netedit options
3379 neteditOptions.resetWritable();
3380 neteditOptions.set("sumocfg-file", sumoConfigFile);
3381 // continue saving SUMO Config
3382 return onCmdSaveSumoConfig(sender, sel, ptr);
3383 } else {
3384 return 0;
3385 }
3386}
3387
3388
3389long
3390GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3391 if (myNet == nullptr) {
3392 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3393 } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3394 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3395 } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3396 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3397 } else {
3398 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3399 }
3400}
3401
3402
3403long
3404GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3405 // get option container
3406 auto& neteditOptions = OptionsCont::getOptions();
3407 // Check if TLS Programs file was already set at start of netedit or with a previous save
3408 if (neteditOptions.getString("tls-file").empty()) {
3409 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3410 } else {
3411 // Start saving TLS Programs
3412 getApp()->beginWaitCursor();
3413 try {
3414 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3415 myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3416 // write info
3417 WRITE_MESSAGE(TL("TLS Programs saved in '") + neteditOptions.getString("tls-file") + "'");
3418 } catch (IOError& e) {
3419 // write warning if netedit is running in testing mode
3420 WRITE_DEBUG("Opening FXMessageBox 'error saving TLS Programs'");
3421 // open error message box
3422 FXMessageBox::error(this, MBOX_OK, TL("Saving TLS Programs failed!"), "%s", e.what());
3423 // write warning if netedit is running in testing mode
3424 WRITE_DEBUG("Closed FXMessageBox 'error saving TLS Programs' with 'OK'");
3425 }
3427 getApp()->endWaitCursor();
3428 // restore focus
3429 setFocus();
3430 }
3431 return 1;
3432}
3433
3434
3435long
3436GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3437 if (myNet == nullptr) {
3438 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3439 } else {
3440 // check if there is at least one TLS
3441 for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3442 if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3443 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3444 }
3445 }
3446 // no TLS, then disable
3447 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3448 }
3449}
3450
3451
3452long
3453GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3454 // get option container
3455 auto& neteditOptions = OptionsCont::getOptions();
3456 // Check if edgeType file was already set at start of netedit or with a previous save
3457 if (neteditOptions.getString("edgetypes-file").empty()) {
3458 return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3459 } else {
3460 // Start saving edgeTypes
3461 getApp()->beginWaitCursor();
3462 try {
3463 myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3464 // write info
3465 WRITE_MESSAGE(TL("EdgeType saved in '") + neteditOptions.getString("edgetypes-file") + "'");
3466 } catch (IOError& e) {
3467 // write warning if netedit is running in testing mode
3468 WRITE_DEBUG("Opening FXMessageBox 'error saving edgeTypes'");
3469 // open error message box
3470 FXMessageBox::error(this, MBOX_OK, TL("Saving edgeTypes failed!"), "%s", e.what());
3471 // write warning if netedit is running in testing mode
3472 WRITE_DEBUG("Closed FXMessageBox 'error saving edgeTypes' with 'OK'");
3473 }
3475 getApp()->endWaitCursor();
3476 // restore focus
3477 setFocus();
3478 }
3479 return 1;
3480}
3481
3482
3483long
3484GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3485 // check if net exist and there are edge types
3486 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3487 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3488 } else {
3489 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3490 }
3491 return 1;
3492}
3493
3494
3495long
3497 // get option container
3498 auto& neteditOptions = OptionsCont::getOptions();
3499 // get TLS file
3500 const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, true);
3501 // check tat file is valid
3502 if (!TLSFile.empty()) {
3503 // change value of "tls-file"
3504 neteditOptions.resetWritable();
3505 neteditOptions.set("tls-file", TLSFile);
3506 // save TLS Programs
3507 return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3508 } else {
3509 return 1;
3510 }
3511}
3512
3513
3514long
3515GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3516 // get option container
3517 auto& neteditOptions = OptionsCont::getOptions();
3518 // get network file file
3519 const auto edgeTypesFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, true);
3520 // check tat file is valid
3521 if (!edgeTypesFile.empty()) {
3522 // change value of "edgetypes-file"
3523 neteditOptions.resetWritable();
3524 neteditOptions.set("edgetypes-file", edgeTypesFile);
3525 // save edgeTypes
3526 return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3527 } else {
3528 return 1;
3529 }
3530}
3531
3532
3533long
3534GNEApplicationWindow::onUpdSaveEdgeTypesAs(FXObject* sender, FXSelector, void*) {
3535 // check if net exist and there are edge types
3536 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3537 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3538 } else {
3539 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3540 }
3541 return 1;
3542}
3543
3544
3545long
3546GNEApplicationWindow::onCmdOpenAdditionals(FXObject*, FXSelector, void*) {
3547 auto& neteditOptions = OptionsCont::getOptions();
3548 // get file
3549 const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, false);
3550 // check file
3551 if (!additionalFile.empty()) {
3552 // declare overwrite flag
3553 bool overwriteElements = false;
3554 // check if open question dialog box
3555 if (additionalFile == neteditOptions.getString("additional-files")) {
3556 // open overwrite dialog
3557 GNEOverwriteElementsDialog overwriteDialog(this, "additional");
3558 // continue depending of result
3559 if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3560 // abort load
3561 return 0;
3562 } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3563 // enable overwriteElements
3564 overwriteElements = true;
3565 }
3566 }
3567 // flag for save current saving status
3568 const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3569 // disable validation for additionals
3570 XMLSubSys::setValidation("never", "auto", "auto");
3571 // Create additional handler
3572 GNEGeneralHandler generalHandler(myNet, additionalFile, true, overwriteElements);
3573 // begin undoList operation
3574 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("load additionals from '") + additionalFile + "'");
3575 // Run parser
3576 if (!generalHandler.parse()) {
3577 // write error
3578 WRITE_ERROR(TL("Loading of additional file failed: ") + additionalFile);
3579 } else {
3580 // change value of "additional-files"
3581 neteditOptions.resetWritable();
3582 neteditOptions.set("additional-files", additionalFile);
3583 // write info
3584 WRITE_MESSAGE(TL("Loading of additional file sucessfully: ") + additionalFile);
3585 // enable save if there is errors loading additionals
3586 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3588 }
3589 }
3590 // end undoList operation
3591 myUndoList->end();
3592 // restore validation for additionals
3593 XMLSubSys::setValidation("auto", "auto", "auto");
3594 // update view
3595 update();
3596 }
3597 return 1;
3598}
3599
3600
3601long
3603 // get additionalFile
3604 const std::string additionalFile = OptionsCont::getOptions().getString("additional-files");
3605 // disable validation for additionals
3606 XMLSubSys::setValidation("never", "auto", "auto");
3607 // Create general handler
3608 GNEGeneralHandler generalHandler(myNet, additionalFile, true, true);
3609 // begin undoList operation
3610 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals from '") + additionalFile + "'");
3611 // clear additionals
3613 // Run parser
3614 if (!generalHandler.parse()) {
3615 WRITE_ERROR(TL("Reloading of additional file failed: ") + additionalFile);
3616 }
3617 // end undoList operation
3618 myUndoList->end();
3619 // restore validation for additionals
3620 XMLSubSys::setValidation("auto", "auto", "auto");
3621 // update view
3622 update();
3623 return 1;
3624}
3625
3626
3627long
3628GNEApplicationWindow::onUpdReloadAdditionals(FXObject* sender, FXSelector, void*) {
3629 // check if file exist
3630 if (myViewNet && OptionsCont::getOptions().getString("additional-files").empty()) {
3631 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3632 } else {
3633 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3634 }
3635}
3636
3637
3638long
3639GNEApplicationWindow::onCmdSaveAdditionals(FXObject* sender, FXSelector sel, void* ptr) {
3640 // get option container
3641 auto& neteditOptions = OptionsCont::getOptions();
3642 // check saving conditions
3644 // nothing to save
3645 return 1;
3646 } else if (neteditOptions.getString("additional-files").empty()) {
3647 // choose file to save
3648 return onCmdSaveAdditionalsAs(sender, sel, ptr);
3649 } else {
3650 // Start saving additionals
3651 getApp()->beginWaitCursor();
3652 try {
3653 // compute before saving (for detectors positions)
3654 myNet->computeNetwork(this);
3655 // save additionals
3657 // show info
3658 WRITE_MESSAGE(TL("Additionals saved in '") + neteditOptions.getString("additional-files") + "'");
3659 // end saving additionals
3660 getApp()->endWaitCursor();
3661 // restore focus
3662 setFocus();
3663 } catch (IOError& e) {
3664 // write warning if netedit is running in testing mode
3665 WRITE_DEBUG("Opening FXMessageBox 'error saving additionals'");
3666 // open error message box
3667 FXMessageBox::error(this, MBOX_OK, TL("Saving additionals failed!"), "%s", e.what());
3668 // write warning if netedit is running in testing mode
3669 WRITE_DEBUG("Closed FXMessageBox 'error saving additionals' with 'OK'");
3670 }
3671 getApp()->endWaitCursor();
3672 return 1;
3673 }
3674}
3675
3676
3677long
3679 // get option container
3680 auto& neteditOptions = OptionsCont::getOptions();
3681 // declare current folder
3682 FXString currentFolder = gCurrentFolder;
3683 // set current folder
3684 if (neteditOptions.getString("configuration-file").size() > 0) {
3685 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3686 } else if (neteditOptions.getString("net-file").size() > 0) {
3687 currentFolder = getFolder(neteditOptions.getString("net-file"));
3688 }
3689 // get additional file
3690 const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3691 // check that file is valid
3692 if (!additionalFile.empty()) {
3693 // reset writtable flag
3694 neteditOptions.resetWritable();
3695 // change value of "additional-files"
3696 neteditOptions.set("additional-files", additionalFile);
3697 // enable save additionals
3699 // save additionals
3700 return onCmdSaveAdditionals(nullptr, 0, nullptr);
3701 } else {
3702 return 1;
3703 }
3704}
3705
3706
3707long
3709 // get option container
3710 auto& neteditOptions = OptionsCont::getOptions();
3711 // get file
3712 const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, false);
3713 // check file
3714 if (!routeFile.empty()) {
3715 // declare overwrite flag
3716 bool overwriteElements = false;
3717 // check if open question dialog box
3718 if (routeFile == neteditOptions.getString("route-files")) {
3719 // open overwrite dialog
3720 GNEOverwriteElementsDialog overwriteDialog(this, "route");
3721 // continue depending of result
3722 if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3723 // abort load
3724 return 0;
3725 } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3726 // enable overwriteElements
3727 overwriteElements = true;
3728 }
3729 }
3730 // save previous demand element status saving
3731 const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
3732 // disable validation for additionals
3733 XMLSubSys::setValidation("never", "auto", "auto");
3734 // Create generic handler
3735 GNEGeneralHandler handler(myNet, routeFile, true, overwriteElements);
3736 // begin undoList operation
3737 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + routeFile + "'");
3738 // Run parser for additionals
3739 if (!handler.parse()) {
3740 // write error
3741 WRITE_ERROR(TL("Loading of route file failed: ") + routeFile);
3742 } else {
3743 // change value of "route-files"
3744 neteditOptions.resetWritable();
3745 neteditOptions.set("route-files", routeFile);
3746 // show info
3747 WRITE_MESSAGE(TL("Loading of route file sucessfully: ") + routeFile);
3748 // enable demand elements if there is an error creating element
3749 if (previouslySaved && !handler.isErrorCreatingElement()) {
3751 }
3752 }
3753 // end undoList operation
3754 myUndoList->end();
3755 // restore validation
3756 XMLSubSys::setValidation("auto", "auto", "auto");
3757 // update view
3758 update();
3759 }
3760 return 1;
3761}
3762
3763
3764long
3766 // get file
3767 const std::string routeFile = OptionsCont::getOptions().getString("route-files");
3768 // disable validation for additionals
3769 XMLSubSys::setValidation("never", "auto", "auto");
3770 // Create handler
3771 GNEGeneralHandler handler(myNet, routeFile, true, true);
3772 // begin undoList operation
3773 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, "reloading demand elements from '" + routeFile + "'");
3774 // clear demand elements
3776 // Run parser for additionals
3777 if (!handler.parse()) {
3778 WRITE_ERROR(TL("Reloading of route file failed: ") + routeFile);
3779 }
3780 // end undoList operation and update view
3781 myUndoList->end();
3782 update();
3783 // restore validation for demand
3784 XMLSubSys::setValidation("auto", "auto", "auto");
3785 return 1;
3786}
3787
3788
3789long
3790GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
3791 // check if file exist
3792 if (myViewNet && OptionsCont::getOptions().getString("route-files").empty()) {
3793 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3794 } else {
3795 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3796 }
3797}
3798
3799
3800long
3801GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
3802 // get option container
3803 auto& neteditOptions = OptionsCont::getOptions();
3804 // check if requiere save demand elements
3806 // nothing to save
3807 return 1;
3808 } else if (neteditOptions.getString("route-files").empty()) {
3809 return onCmdSaveDemandElementsAs(sender, sel, ptr);
3810 } else {
3811 // Start saving demand elements
3812 getApp()->beginWaitCursor();
3813 try {
3814 // compute before saving
3815 myNet->computeNetwork(this);
3816 // save demand elements
3818 // show info
3819 WRITE_MESSAGE(TL("Demand elements saved in '") + neteditOptions.getString("route-files") + "'");
3820 // end saving demand elements
3821 getApp()->endWaitCursor();
3822 // restore focus
3823 setFocus();
3824 } catch (IOError& e) {
3825 // write warning if netedit is running in testing mode
3826 WRITE_DEBUG("Opening FXMessageBox 'error saving demand elements'");
3827 // open error message box
3828 FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements failed!"), "%s", e.what());
3829 // write warning if netedit is running in testing mode
3830 WRITE_DEBUG("Closed FXMessageBox 'error saving demand elements' with 'OK'");
3831 }
3832 getApp()->endWaitCursor();
3833 return 1;
3834 }
3835}
3836
3837
3838long
3839GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
3840 // get option container
3841 auto& neteditOptions = OptionsCont::getOptions();
3842 // declare current folder
3843 FXString currentFolder = gCurrentFolder;
3844 // set current folder
3845 if (neteditOptions.getString("configuration-file").size() > 0) {
3846 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3847 } else if (neteditOptions.getString("net-file").size() > 0) {
3848 currentFolder = getFolder(neteditOptions.getString("net-file"));
3849 }
3850 // get route file
3851 const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, true);
3852 // check that file is correct
3853 if (!routeFile.empty()) {
3854 // reset writtable flag
3855 neteditOptions.resetWritable();
3856 // change value of "route-files"
3857 neteditOptions.set("route-files", routeFile);
3858 // requiere save demand elements
3860 // save demand elements
3861 return onCmdSaveDemandElements(sender, sel, ptr);
3862 } else {
3863 return 1;
3864 }
3865}
3866
3867
3868long
3869GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
3870 // get option container
3871 auto& neteditOptions = OptionsCont::getOptions();
3872 // get file
3873 const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, false);
3874 // check file
3875 if (!dataFile.empty()) {
3876 // declare overwrite flag
3877 bool overwriteElements = false;
3878 // check if open question dialog box
3879 if (dataFile == neteditOptions.getString("data-files")) {
3880 // open overwrite dialog
3881 GNEOverwriteElementsDialog overwriteDialog(this, "data");
3882 // continue depending of result
3883 if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3884 // abort load
3885 return 0;
3886 } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3887 // enable overwriteElements
3888 overwriteElements = true;
3889 }
3890 }
3891 // save previous demand element status saving
3892 const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
3893 // disable update data
3895 // disable validation for data elements
3896 XMLSubSys::setValidation("never", "auto", "auto");
3897 // Create data handler
3898 GNEDataHandler dataHandler(myNet, dataFile, true, overwriteElements);
3899 // begin undoList operation
3900 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + dataFile + "'");
3901 // Run data parser
3902 if (!dataHandler.parse()) {
3903 // write error
3904 WRITE_ERROR(TL("Loading of data file failed: ") + dataFile);
3905 } else {
3906 // change value of "data-files"
3907 neteditOptions.resetWritable();
3908 neteditOptions.set("data-files", dataFile);
3909 // show info
3910 WRITE_MESSAGE(TL("Loading of data file sucessfully: ") + dataFile);
3911 // enable demand elements if there is an error creating element
3912 if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
3914 }
3915 }
3916 // end undoList operation
3917 myUndoList->end();
3918 // enable update data
3920 // restore validation for data
3921 XMLSubSys::setValidation("auto", "auto", "auto");
3922 // update
3923 update();
3924 }
3925 return 1;
3926}
3927
3928
3929long
3931 // get file
3932 const std::string dataFile = OptionsCont::getOptions().getString("data-files");
3933 // disable update data
3935 // disable validation for additionals
3936 XMLSubSys::setValidation("never", "auto", "auto");
3937 // Create additional handler
3938 GNEDataHandler dataHandler(myNet, dataFile, true, false);
3939 // begin undoList operation
3940 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements from '") + dataFile + "'");
3941 // clear data elements
3943 // Run data parser
3944 if (!dataHandler.parse()) {
3945 WRITE_ERROR(TL("Reloading of data file failed: ") + dataFile);
3946 }
3947 // restore validation for data
3948 XMLSubSys::setValidation("auto", "auto", "auto");
3949 // end undoList operation and update view
3950 myUndoList->end();
3951 // enable update data
3953 // update
3954 update();
3955 return 1;
3956}
3957
3958
3959long
3960GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
3961 // check if file exist
3962 if (myViewNet && OptionsCont::getOptions().getString("data-files").empty()) {
3963 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3964 } else {
3965 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3966 }
3967}
3968
3969
3970long
3971GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
3972 // get option container
3973 auto& neteditOptions = OptionsCont::getOptions();
3974 // check conditions
3976 // nothing to save
3977 return 1;
3978 } else if (neteditOptions.getString("data-files").empty()) {
3979 return onCmdSaveDataElementsAs(sender, sel, ptr);
3980 } else {
3981 // Start saving data elements
3982 getApp()->beginWaitCursor();
3983 try {
3984 // save data elements
3986 // write einfo
3987 WRITE_MESSAGE(TL("Data elements saved in '") + neteditOptions.getString("data-files") + "'");
3988 } catch (IOError& e) {
3989 // write warning if netedit is running in testing mode
3990 WRITE_DEBUG("Opening FXMessageBox 'error saving data elements'");
3991 // open error message box
3992 FXMessageBox::error(this, MBOX_OK, TL("Saving data elements failed!"), "%s", e.what());
3993 // write warning if netedit is running in testing mode
3994 WRITE_DEBUG("Closed FXMessageBox 'error saving data elements' with 'OK'");
3995 }
3996 // end saving
3997 getApp()->endWaitCursor();
3998 // restore focus
3999 setFocus();
4000 return 1;
4001 }
4002}
4003
4004
4005long
4006GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4007 // get option container
4008 auto& neteditOptions = OptionsCont::getOptions();
4009 // declare current folder
4010 FXString currentFolder = gCurrentFolder;
4011 // set current folder
4012 if (neteditOptions.getString("configuration-file").size() > 0) {
4013 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4014 } else if (neteditOptions.getString("net-file").size() > 0) {
4015 currentFolder = getFolder(neteditOptions.getString("net-file"));
4016 }
4017 // get data file
4018 const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, true);
4019 // check that file is correct
4020 if (!dataFile.empty()) {
4021 // reset writtable flag
4022 neteditOptions.resetWritable();
4023 // change value of "data-files"
4024 neteditOptions.set("data-files", dataFile);
4025 // mark data elements as unsaved
4027 // save data elements
4028 return onCmdSaveDataElements(sender, sel, ptr);
4029 } else {
4030 return 1;
4031 }
4032}
4033
4034
4035long
4036GNEApplicationWindow::onCmdOpenMeanDatas(FXObject*, FXSelector, void*) {
4037 auto& neteditOptions = OptionsCont::getOptions();
4038 // get file
4039 const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, false);
4040 // check file
4041 if (!meanDataFile.empty()) {
4042 // declare overwrite flag
4043 bool overwriteElements = false;
4044 // check if open question dialog box
4045 if (meanDataFile == neteditOptions.getString("meandata-files")) {
4046 // open overwrite dialog
4047 GNEOverwriteElementsDialog overwriteDialog(this, "meanData");
4048 // continue depending of result
4049 if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
4050 // abort load
4051 return 0;
4052 } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
4053 // enable overwriteElements
4054 overwriteElements = true;
4055 }
4056 }
4057 // save previous demand element status saving
4058 const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4059 // disable validation for meanDatas
4060 XMLSubSys::setValidation("never", "auto", "auto");
4061 // Create meanData handler
4062 GNEGeneralHandler generalHandler(myNet, meanDataFile, true, overwriteElements);
4063 // begin undoList operation
4064 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("load meanDatas from '") + meanDataFile + "'");
4065 // Run parser
4066 if (!generalHandler.parse()) {
4067 // write error
4068 WRITE_ERROR(TL("Loading of meandata file failed: ") + meanDataFile);
4069 } else {
4070 // change value of "meandata-files"
4071 neteditOptions.resetWritable();
4072 neteditOptions.set("meandata-files", meanDataFile);
4073 // show info
4074 WRITE_MESSAGE(TL("Loading of meandata file sucessfully: ") + meanDataFile);
4075 // enable demand elements if there is an error creating element
4076 if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4078 }
4079 }
4080 // end undoList operation
4081 myUndoList->end();
4082 // restore validation for meanDatas
4083 XMLSubSys::setValidation("auto", "auto", "auto");
4084 // update view
4085 update();
4086 }
4087 return 1;
4088}
4089
4090
4091long
4092GNEApplicationWindow::onCmdReloadMeanDatas(FXObject*, FXSelector, void*) {
4093 // get file
4094 const std::string meanDataFile = OptionsCont::getOptions().getString("meandata-files");
4095 // disable validation for meanDatas
4096 XMLSubSys::setValidation("never", "auto", "auto");
4097 // Create general handler
4098 GNEGeneralHandler generalHandler(myNet, meanDataFile, true, true);
4099 // begin undoList operation
4100 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading meanDatas from '") + meanDataFile + "'");
4101 // clear meanDatas
4103 // Run parser
4104 if (!generalHandler.parse()) {
4105 WRITE_MESSAGE(TL("Loading of meandata file sucessfully: ") + meanDataFile);
4106 }
4107 // end undoList operation and update view
4108 myUndoList->end();
4109 update();
4110 // restore validation for meanDatas
4111 XMLSubSys::setValidation("auto", "auto", "auto");
4112 return 1;
4113}
4114
4115
4116long
4117GNEApplicationWindow::onUpdReloadMeanDatas(FXObject* sender, FXSelector, void*) {
4118 // check if file exist
4119 if (myViewNet && OptionsCont::getOptions().getString("meandata-files").empty()) {
4120 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4121 } else {
4122 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4123 }
4124}
4125
4126
4127long
4128GNEApplicationWindow::onCmdSaveMeanDatas(FXObject* sender, FXSelector sel, void* ptr) {
4129 // get option container
4130 auto& neteditOptions = OptionsCont::getOptions();
4131 // check conditions
4133 // nothing to save
4134 return 1;
4135 } else if (neteditOptions.getString("meandata-files").empty()) {
4136 return onCmdSaveMeanDatasAs(sender, sel, ptr);
4137 } else {
4138 // Start saving meanDatas
4139 getApp()->beginWaitCursor();
4140 try {
4141 // save mean datas
4143 // write info
4144 WRITE_MESSAGE(TL("MeanDatas saved in '") + neteditOptions.getString("meandata-files") + "'");
4145 } catch (IOError& e) {
4146 // write warning if netedit is running in testing mode
4147 WRITE_DEBUG("Opening FXMessageBox 'error saving meanData'");
4148 // open error message box
4149 FXMessageBox::error(this, MBOX_OK, TL("Saving meanData failed!"), "%s", e.what());
4150 // write warning if netedit is running in testing mode
4151 WRITE_DEBUG("Closed FXMessageBox 'error saving meanDara' with 'OK'");
4152 }
4153 // end saving
4154 getApp()->endWaitCursor();
4155 // restore focus
4156 setFocus();
4157 return 1;
4158 }
4159}
4160
4161
4162long
4163GNEApplicationWindow::onCmdSaveMeanDatasAs(FXObject* sender, FXSelector sel, void* ptr) {
4164 // get option container
4165 auto& neteditOptions = OptionsCont::getOptions();
4166 // declare current folder
4167 FXString currentFolder = gCurrentFolder;
4168 // set current folder
4169 if (neteditOptions.getString("configuration-file").size() > 0) {
4170 currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4171 } else if (neteditOptions.getString("net-file").size() > 0) {
4172 currentFolder = getFolder(neteditOptions.getString("net-file"));
4173 }
4174 // get meanData file
4175 const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, true);
4176 // check that file is valid
4177 if (!meanDataFile.empty()) {
4178 // reset writtable flag
4179 neteditOptions.resetWritable();
4180 // change value of "meandata-files"
4181 neteditOptions.set("meandata-files", meanDataFile);
4182 // mark mean datas as unsaved
4184 // save meanDatas
4185 return onCmdSaveMeanDatas(sender, sel, ptr);
4186 } else {
4187 return 1;
4188 }
4189}
4190
4191
4192bool
4194 if (myNet && !myNet->getSavingStatus()->isNetworkSaved()) {
4195 // write warning if netedit is running in testing mode
4196 WRITE_DEBUG("Opening FXMessageBox 'Confirm close network'");
4197 // open question box
4198 const std::string header = TL("Confirm close Network");
4199 const std::string contentsA = TL("You have unsaved changes in the network.");
4200 const std::string contentsB = TL("Do you wish to close and discard all changes?");
4201 const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4202 // restore focus to view net
4203 myViewNet->setFocus();
4204 // if user close dialog box, check additionals and demand elements
4205 if (answer == GUISaveDialog::CLICKED_DISCARD) {
4206 // write warning if netedit is running in testing mode
4207 WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'Quit'");
4212 // clear undo list
4213 clearUndoList();
4214 return true;
4215 } else {
4216 return false;
4217 }
4218 } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4219 // save network
4220 onCmdSaveNetwork(nullptr, 0, nullptr);
4221 // check
4226 // clear undo list
4227 clearUndoList();
4228 return true;
4229 } else {
4230 return false;
4231 }
4232 } else {
4233 // write warning if netedit is running in testing mode
4234 if (answer == 2) {
4235 WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'No'");
4236 } else if (answer == 4) {
4237 WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'ESC'");
4238 }
4239 // return false to stop closing/reloading
4240 return false;
4241 }
4242 } else {
4247 // clear undo list
4248 clearUndoList();
4249 return true;
4250 } else {
4251 // return false to stop closing/reloading
4252 return false;
4253 }
4254 }
4255}
4256
4257
4258bool
4260 // Check if there are non saved additionals
4262 WRITE_DEBUG("Opening FXMessageBox 'Save additionals before close'");
4263 // open question box
4264 const std::string header = TL("Save additional elements before close");
4265 const std::string contentsA = TL("You have unsaved additional elements.");
4266 const std::string contentsB = TL("Do you wish to close and discard all changes?");
4267 const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4268 // restore focus to view net
4269 myViewNet->setFocus();
4270 // if answer was affirmative, but there was an error during saving additionals, return false to stop closing/reloading
4271 if (answer == GUISaveDialog::CLICKED_DISCARD) {
4272 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'Quit'");
4273 // nothing to save, return true
4274 return true;
4275 } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4276 // write warning if netedit is running in testing mode
4277 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'Yes'");
4278 if (onCmdSaveAdditionals(nullptr, 0, nullptr) == 1) {
4279 // additionals successfully saved
4280 return true;
4281 } else {
4282 // error saving additionals, abort saving
4283 return false;
4284 }
4285 } else {
4286 // write warning if netedit is running in testing mode
4287 if (answer == 2) {
4288 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'No'");
4289 } else if (answer == 4) {
4290 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'ESC'");
4291 }
4292 // abort saving
4293 return false;
4294 }
4295 } else {
4296 // nothing to save, return true
4297 return true;
4298 }
4299}
4300
4301
4302bool
4304 // Check if there are non saved demand elements
4306 WRITE_DEBUG("Opening FXMessageBox 'Save demand elements before close'");
4307 // open question box
4308 const std::string header = TL("Save demand elements before close");
4309 const std::string contentsA = TL("You have unsaved demand elements.");
4310 const std::string contentsB = TL("Do you wish to close and discard all changes?");
4311 const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4312 // restore focus to view net
4313 myViewNet->setFocus();
4314 // if answer was affirmative, but there was an error during saving demand elements, return false to stop closing/reloading
4315 if (answer == GUISaveDialog::CLICKED_DISCARD) {
4316 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'Quit'");
4317 // nothing to save, return true
4318 return true;
4319 } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4320 // write warning if netedit is running in testing mode
4321 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'Yes'");
4322 if (onCmdSaveDemandElements(nullptr, 0, nullptr) == 1) {
4323 // demand elements successfully saved
4324 return true;
4325 } else {
4326 // error saving demand elements, abort saving
4327 return false;
4328 }
4329 } else {
4330 // write warning if netedit is running in testing mode
4331 if (answer == 2) {
4332 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'No'");
4333 } else if (answer == 4) {
4334 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'ESC'");
4335 }
4336 // abort saving
4337 return false;
4338 }
4339 } else {
4340 // nothing to save, return true
4341 return true;
4342 }
4343}
4344
4345
4346bool
4348 // Check if there are non saved data elements
4350 WRITE_DEBUG("Opening FXMessageBox 'Save data elements before close'");
4351 // open question box
4352 const std::string header = TL("Save data elements before close");
4353 const std::string contentsA = TL("You have unsaved data elements.");
4354 const std::string contentsB = TL("Do you wish to close and discard all changes?");
4355 const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4356 // restore focus to view net
4357 myViewNet->setFocus();
4358 // if answer was affirmative, but there was an error during saving data elements, return false to stop closing/reloading
4359 if (answer == GUISaveDialog::CLICKED_DISCARD) {
4360 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'Quit'");
4361 // nothing to save, return true
4362 return true;
4363 } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4364 // write warning if netedit is running in testing mode
4365 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'Yes'");
4366 if (onCmdSaveDataElements(nullptr, 0, nullptr) == 1) {
4367 // data elements successfully saved
4368 return true;
4369 } else {
4370 // error saving data elements, abort saving
4371 return false;
4372 }
4373 } else {
4374 // write warning if netedit is running in testing mode
4375 if (answer == 2) {
4376 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'No'");
4377 } else if (answer == 4) {
4378 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'ESC'");
4379 }
4380 // abort saving
4381 return false;
4382 }
4383 } else {
4384 // nothing to save, return true
4385 return true;
4386 }
4387}
4388
4389
4390bool
4392 // Check if there are non saved data elements
4394 WRITE_DEBUG("Opening FXMessageBox 'Save meanData elements before close'");
4395 // open question box
4396 const std::string header = TL("Save meanData elements before close");
4397 const std::string contentsA = TL("You have unsaved meanData elements.");
4398 const std::string contentsB = TL("Do you wish to close and discard all changes?");
4399 const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4400 // restore focus to view net
4401 myViewNet->setFocus();
4402 // if answer was affirmative, but there was an error during saving meanData elements, return false to stop closing/reloading
4403 if (answer == GUISaveDialog::CLICKED_DISCARD) {
4404 WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'Quit'");
4405 // nothing to save, return true
4406 return true;
4407 } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4408 // write warning if netedit is running in testing mode
4409 WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'Yes'");
4410 if (onCmdSaveMeanDatas(nullptr, 0, nullptr) == 1) {
4411 // meanData elements successfully saved
4412 return true;
4413 } else {
4414 // error saving meanData elements, abort saving
4415 return false;
4416 }
4417 } else {
4418 // write warning if netedit is running in testing mode
4419 if (answer == 2) {
4420 WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'No'");
4421 } else if (answer == 4) {
4422 WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'ESC'");
4423 }
4424 // abort saving
4425 return false;
4426 }
4427 } else {
4428 // nothing to save, return true
4429 return true;
4430 }
4431}
4432
4433
4434void
4435GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4436 // obtain netedit option container
4437 auto& neteditOptions = OptionsCont::getOptions();
4439 // set network
4440 mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4441 // set routes
4442 if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4443 mySumoOptions.resetDefault("route-files");
4444 } else {
4445 mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4446 }
4447 // set SumoOptions depending of additionalFiles and meanData files
4448 if (ignoreAdditionals) {
4449 if (neteditOptions.getString("meandata-files").empty()) {
4450 mySumoOptions.resetDefault("additional-files");
4451 } else {
4452 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4453 }
4454 } else {
4455 if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4456 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4457 } else if (neteditOptions.getString("additional-files").size() > 0) {
4458 mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4459 } else if (neteditOptions.getString("meandata-files").size() > 0) {
4460 mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4461 } else {
4462 mySumoOptions.resetDefault("additional-files");
4463 }
4464 }
4465}
4466
4467
4468FXString
4469GNEApplicationWindow::getFolder(const std::string& folder) const {
4470 // declare folder
4471 std::string newFolder = folder;
4472 // declare stop flag
4473 bool stop = false;
4474 // continue while stop is false
4475 while (!stop) {
4476 if (newFolder.empty()) {
4477 // new folder empty, then stop
4478 stop = true;
4479 } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4480 (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4481 // removed file, then stop
4482 stop = true;
4483 } else {
4484 newFolder.pop_back();
4485 }
4486 }
4487 // if is empty, return gCurrentFolder
4488 if (newFolder.empty()) {
4489 return gCurrentFolder;
4490 }
4491 return FXString(newFolder.c_str());
4492}
4493
4494
4495void
4497 // check that view exists
4498 if (myViewNet) {
4500 }
4501}
4502
4503
4504void
4506 // remove lock hotkeys
4508 // check supermode
4509 if (supermode == Supermode::NETWORK) {
4510 // menu commands
4514 // lock
4518 // processing
4523 } else if (supermode == Supermode::DEMAND) {
4524 // menu commands
4528 // lock
4532 // processing
4537 } else if (supermode == Supermode::DATA) {
4538 // menu commands
4542 // lock
4546 // processing
4551 } else {
4552 // menu commands
4557 // lock
4561 // processing
4565 }
4566}
4567
4568
4569void
4570GNEApplicationWindow::disableUndoRedo(const std::string& reason) {
4571 myUndoRedoListEnabled = reason;
4572}
4573
4574
4575void
4579
4580
4581const std::string&
4585
4586
4591
4592
4597
4598
4599void
4601 if (myViewNet) {
4602 // destroy Popup (to avoid crashes)
4604 }
4605 // clear undo list and return true to continue with closing/reload
4606 myUndoList->clear();
4607}
4608
4609
4614
4615
4620
4621
4626
4627
4628void
4630 // get option container
4631 auto& neteditOptions = OptionsCont::getOptions();
4632 // get additional files
4633 const auto additionalFiles = neteditOptions.getStringVector("additional-files");
4634 // continue depending of network and additional files
4635 if (myNet && (additionalFiles.size() > 0)) {
4636 // use first file as output
4637 neteditOptions.resetWritable();
4638 neteditOptions.set("additional-files", additionalFiles.front());
4639 // begin undolist
4640 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4641 // iterate over every additional file
4642 for (const auto& file : additionalFiles) {
4643 WRITE_MESSAGE(TL("loading additionals from '") + file + "'");
4644 // declare general handler
4645 GNEGeneralHandler handler(myNet, file, true, false);
4646 // disable validation for additionals
4647 XMLSubSys::setValidation("never", "auto", "auto");
4648 // Run parser
4649 if (!handler.parse()) {
4650 WRITE_ERRORF(TL("Loading of % failed."), file);
4651 }
4652 // set additionals in SumoConfig
4653 setInputInSumoOptions(false, false);
4654 // disable validation for additionals
4655 XMLSubSys::setValidation("auto", "auto", "auto");
4656 }
4657 // end undo list
4658 myUndoList->end();
4659 }
4660}
4661
4662
4663void
4665 // get option container
4666 auto& neteditOptions = OptionsCont::getOptions();
4667 // get demand files
4668 const auto demandFiles = neteditOptions.getStringVector("route-files");
4669 // continue depending of network and additional files
4670 if (myNet && (demandFiles.size() > 0)) {
4671 // use first file as output
4672 neteditOptions.resetWritable();
4673 neteditOptions.set("route-files", demandFiles.front());
4674 // begin undolist
4675 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4676 // iterate over every additional file
4677 for (const auto& file : demandFiles) {
4678 WRITE_MESSAGE(TL("loading demand elements from '") + file + "'");
4679 // declare general handler
4680 GNEGeneralHandler handler(myNet, file, true, false);
4681 // disable validation for additionals
4682 XMLSubSys::setValidation("never", "auto", "auto");
4683 // Run parser
4684 if (!handler.parse()) {
4685 WRITE_ERRORF(TL("Loading of % failed."), file);
4686 }
4687 // set additionals in SumoConfig
4688 setInputInSumoOptions(false, false);
4689 // disable validation for additionals
4690 XMLSubSys::setValidation("auto", "auto", "auto");
4691 }
4692 // end undo list
4693 myUndoList->end();
4694 }
4695}
4696
4697
4698void
4700 // get option container
4701 auto& neteditOptions = OptionsCont::getOptions();
4702 // get meanData files
4703 const auto meanDataFiles = neteditOptions.getStringVector("meandata-files");
4704 // continue depending of network and additional files
4705 if (myNet && (meanDataFiles.size() > 0)) {
4706 // use first file as output
4707 neteditOptions.resetWritable();
4708 neteditOptions.set("meandata-files", meanDataFiles.front());
4709 // begin undolist
4710 myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TL("loading meanDatas from '") + toString(meanDataFiles) + "'");
4711 // iterate over every additional file
4712 for (const auto& file : meanDataFiles) {
4713 WRITE_MESSAGE(TL("loading meandatas from '") + file + "'");
4714 // declare general handler
4715 GNEGeneralHandler handler(myNet, file, true, false);
4716 // disable validation for additionals
4717 XMLSubSys::setValidation("never", "auto", "auto");
4718 // Run parser
4719 if (!handler.parse()) {
4720 WRITE_ERRORF(TL("Loading of % failed."), file);
4721 }
4722 // set additionals in sumo options
4723 setInputInSumoOptions(false, false);
4724 // disable validation for additionals
4725 XMLSubSys::setValidation("auto", "auto", "auto");
4726 }
4727 // end undo list
4728 myUndoList->end();
4729 }
4730}
4731
4732
4733void
4735 // get option container
4736 auto& neteditOptions = OptionsCont::getOptions();
4737 // get data files
4738 const auto dataFiles = neteditOptions.getStringVector("data-files");
4739 // continue depending of network and data files
4740 if (myNet && (dataFiles.size() > 0)) {
4741 // disable update data
4743 // begin undolist
4744 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + toString(dataFiles) + "'");
4745 // iterate over every data file
4746 for (const auto& dataFile : dataFiles) {
4747 WRITE_MESSAGE(TL("Loading data elements from '") + dataFile + "'");
4748 GNEDataHandler dataHandler(myNet, dataFile, true, false);
4749 // disable validation for data elements
4750 XMLSubSys::setValidation("never", "auto", "auto");
4751 if (!dataHandler.parse()) {
4752 WRITE_ERRORF(TL("Loading of % failed."), dataFile);
4753 }
4754 // set first dataElementsFiles as default file
4755 neteditOptions.resetWritable();
4756 neteditOptions.set("data-files", dataFile);
4757 // disable validation for data elements
4758 XMLSubSys::setValidation("auto", "auto", "auto");
4759 }
4760 // end undolist
4761 myUndoList->end();
4762 // enable update data
4764 }
4765}
4766
4767// ---------------------------------------------------------------------------
4768// GNEApplicationWindow - protected methods
4769// ---------------------------------------------------------------------------
4770
4772 myToolbarsGrip(this),
4773 myMenuBarFile(this),
4774 myFileMenuCommands(this),
4775 myModesMenuCommands(this),
4776 myEditMenuCommands(this),
4777 myLockMenuCommands(nullptr),
4778 myProcessingMenuCommands(this),
4779 myLocateMenuCommands(this),
4780 myToolsMenuCommands(this),
4781 myWindowsMenuCommands(this),
4782 myHelpMenuCommands(this),
4783 mySupermodeCommands(this) {
4784}
4785
4786
4787long
4788GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
4789 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
4790 if (handled == 0 && myMDIClient->numChildren() > 0) {
4791 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4792 if (w != nullptr) {
4793 w->onKeyPress(nullptr, sel, eventData);
4794 }
4795 }
4796 return 0;
4797}
4798
4799
4800long
4801GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
4802 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
4803 if (handled == 0 && myMDIClient->numChildren() > 0) {
4804 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4805 if (w != nullptr) {
4806 w->onKeyRelease(nullptr, sel, eventData);
4807 }
4808 }
4809 return 0;
4810}
4811
4812
4813/****************************************************************************/
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_TOOLBAREDIT_LOADADDITIONALS
load additionals in SUMO-GUI after press ctrl+T
Definition GUIAppEnum.h:763
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition GUIAppEnum.h:815
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition GUIAppEnum.h:741
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition GUIAppEnum.h:269
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition GUIAppEnum.h:267
@ MID_HOTKEY_CTRL_Q_CLOSE
Main window closes.
Definition GUIAppEnum.h:113
@ MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE
compute junctions with volatile options
Definition GUIAppEnum.h:265
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition GUIAppEnum.h:201
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition GUIAppEnum.h:231
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition GUIAppEnum.h:847
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition GUIAppEnum.h:825
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition GUIAppEnum.h:743
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition GUIAppEnum.h:185
@ MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO
Open current SUMO simulation/network in netedit, or current netedit simulation/network in SUMO.
Definition GUIAppEnum.h:121
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition GUIAppEnum.h:871
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition GUIAppEnum.h:769
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:789
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition GUIAppEnum.h:131
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition GUIAppEnum.h:753
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition GUIAppEnum.h:209
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition GUIAppEnum.h:735
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition GUIAppEnum.h:811
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:159
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition GUIAppEnum.h:713
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition GUIAppEnum.h:797
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition GUIAppEnum.h:795
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:151
@ MID_GNE_TOOLBAREDIT_LOADDEMAND
load demand in SUMO-GUI after press ctrl+T
Definition GUIAppEnum.h:765
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition GUIAppEnum.h:877
@ MID_HOTKEY_CTRL_W_CLOSESIMULATION
Close simulation - ID.
Definition GUIAppEnum.h:127
@ MID_HOTKEY_ALT_2_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:145
@ MID_GNE_LOCK_ALLELEMENTS
lock all element
Definition GUIAppEnum.h:823
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition GUIAppEnum.h:239
@ MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS
Perform a single simulation step in SUMO and open Demand Elements in netedit.
Definition GUIAppEnum.h:87
@ MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND
compute Network in network mode and Demand elements in demand mode
Definition GUIAppEnum.h:235
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:863
@ MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK
Open simulation in SUMO and open network in netedit.
Definition GUIAppEnum.h:109
@ MID_GNE_LOCK_MENUTITLE
selector for LockMenuTitle
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition GUIAppEnum.h:801
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition GUIAppEnum.h:849
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition GUIAppEnum.h:73
@ MID_HOTKEY_F9_EDIT_VIEWSCHEME
open edit scheme menu
Definition GUIAppEnum.h:243
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:837
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition GUIAppEnum.h:827
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:99
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition GUIAppEnum.h:699
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition GUIAppEnum.h:709
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition GUIAppEnum.h:281
@ MID_LANGUAGE_TR
change language to turkish
@ MID_CHANGELOG
changelog button
Definition GUIAppEnum.h:647
@ MID_GNE_NETWORKVIEWOPTIONS_ASKFORMERGE
ask before merging junctions
Definition GUIAppEnum.h:807
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition GUIAppEnum.h:689
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition GUIAppEnum.h:693
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in netedit.
Definition GUIAppEnum.h:83
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition GUIAppEnum.h:835
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:147
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition GUIAppEnum.h:227
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition GUIAppEnum.h:205
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition GUIAppEnum.h:739
@ MID_HOTKEY_CTRL_R_RELOAD
Reload the previously loaded simulation.
Definition GUIAppEnum.h:117
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in netedit.
Definition GUIAppEnum.h:115
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAS
reload meanDatas
Definition GUIAppEnum.h:727
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition GUIAppEnum.h:47
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition GUIAppEnum.h:813
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition GUIAppEnum.h:279
@ MID_GNE_TOOLBARFILE_SAVEDATA_AS
save data elements as
Definition GUIAppEnum.h:719
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition GUIAppEnum.h:245
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition GUIAppEnum.h:247
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition GUIAppEnum.h:241
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:869
@ 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:51
@ MID_HOTKEY_SHIFT_O_LOCATEPOI
Locate poi - button.
Definition GUIAppEnum.h:179
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition GUIAppEnum.h:65
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition GUIAppEnum.h:843
@ MID_LANGUAGE_ZHT
change language to chinese (traditional)
@ MID_LANGUAGE_ES
change language to spanish
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition GUIAppEnum.h:169
@ MID_HOTKEY_ALT_4_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:149
@ MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS
save TLS Programs as
Definition GUIAppEnum.h:707
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition GUIAppEnum.h:865
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition GUIAppEnum.h:183
@ MID_GNE_RUNPYTHONTOOL
run python
Definition GUIAppEnum.h:737
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition GUIAppEnum.h:809
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition GUIAppEnum.h:191
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition GUIAppEnum.h:717
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition GUIAppEnum.h:803
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition GUIAppEnum.h:97
@ MID_RECENTFILE
Loads a file previously loaded.
Definition GUIAppEnum.h:313
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition GUIAppEnum.h:61
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition GUIAppEnum.h:799
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition GUIAppEnum.h:851
@ MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW
open a new window (SUMO AND netedit)
Definition GUIAppEnum.h:215
@ MID_HOTKEY_SHIFT_V_LOCATEVEHICLE
Locate vehicle - button.
Definition GUIAppEnum.h:189
@ MID_LANGUAGE_HU
change language to hungarian
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition GUIAppEnum.h:233
@ MID_HOTKEY_U_MODE_TYPEDISTRIBUTION
hotkey for mode type distribution
Definition GUIAppEnum.h:67
@ MID_HOTKEY_SHIFT_L_LOCATEPOLY
Locate polygons - button.
Definition GUIAppEnum.h:177
@ MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES
clean junctions without edges in network mode and unused routes in demand mode
Definition GUIAppEnum.h:237
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALSTOP
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition GUIAppEnum.h:43
@ MID_HOTKEY_ALT_1_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:143
@ MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS
Load file with TLS Programs.
Definition GUIAppEnum.h:101
@ MID_LANGUAGE_IT
change language to italian
@ MID_GNE_LOCK_ELEMENT
lock element
Definition GUIAppEnum.h:821
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition GUIAppEnum.h:695
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition GUIAppEnum.h:173
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition GUIAppEnum.h:362
@ MID_GNE_TOOLBARFILE_OPENMEANDATAS
open meanData file
Definition GUIAppEnum.h:723
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition GUIAppEnum.h:63
@ MID_HOTKEY_W_MODE_WIRE
hotkey for mode editing overhead wires
Definition GUIAppEnum.h:71
@ MID_TUTORIAL
tutorial button
Definition GUIAppEnum.h:651
@ MID_HOTKEY_CTRL_G_GAMINGMODE_TOGGLEGRID
Toggle Gaming mode in SUMO and grid in netedit.
Definition GUIAppEnum.h:93
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition GUIAppEnum.h:873
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:153
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAS
save Mean Datas
Definition GUIAppEnum.h:213
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition GUIAppEnum.h:341
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition GUIAppEnum.h:55
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAS_AS
save meanDatas as
Definition GUIAppEnum.h:725
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALS
reload additionals
Definition GUIAppEnum.h:705
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition GUIAppEnum.h:69
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition GUIAppEnum.h:181
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition GUIAppEnum.h:53
@ MID_LANGUAGE_EN
change language to english
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition GUIAppEnum.h:791
@ MID_HOTKEY_SHIFT_J_LOCATEJUNCTION
Locate junction - button.
Definition GUIAppEnum.h:175
@ MID_HOTKEY_ALT_0_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:141
@ MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG
save netedit Config
Definition GUIAppEnum.h:207
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALS_AS
save additionals as
Definition GUIAppEnum.h:703
@ MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS
save edgeTypes as
Definition GUIAppEnum.h:711
@ MID_HOTKEYS
hotkeys button
Definition GUIAppEnum.h:649
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition GUIAppEnum.h:841
@ MID_LANGUAGE_DE
change language to german
@ MID_HOTKEY_ALT_F4_CLOSE
Main window closes.
Definition GUIAppEnum.h:161
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALS
Save Additional Elements.
Definition GUIAppEnum.h:199
@ MID_GNE_TOOLBARFILE_RELOADNETWORK
reload only network
Definition GUIAppEnum.h:687
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition GUIAppEnum.h:261
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition GUIAppEnum.h:805
@ MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALS
Start the simulation in SUMO and open Additionals Elements in netedit.
Definition GUIAppEnum.h:81
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition GUIAppEnum.h:867
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition GUIAppEnum.h:755
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition GUIAppEnum.h:49
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition GUIAppEnum.h:875
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:157
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition GUIAppEnum.h:697
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition GUIAppEnum.h:787
@ MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE
open Netconvert file
Definition GUIAppEnum.h:217
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition GUIAppEnum.h:105
@ MID_GNE_TOOLBARFILE_SAVEDEMAND_AS
save demand elements as
Definition GUIAppEnum.h:715
@ MID_GNE_TOOLBARFILE_SAVENETWORK_AS
save network as
Definition GUIAppEnum.h:701
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition GUIAppEnum.h:839
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition GUIAppEnum.h:855
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition GUIAppEnum.h:133
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
@ MID_FEEDBACK
feedback button
Definition GUIAppEnum.h:653
@ MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES
open app setting dialog in SUMO and open edge type files in netedit
Definition GUIAppEnum.h:95
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition GUIAppEnum.h:285
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition GUIAppEnum.h:219
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition GUIAppEnum.h:155
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition GUIAppEnum.h:251
@ MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG
Edit selection in SUMO and load neteditConfig in netedit.
Definition GUIAppEnum.h:89
@ MID_HOTKEY_ENTER
hot key <ENTER> accept current operation
Definition GUIAppEnum.h:283
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition GUIAppEnum.h:721
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition GUIAppEnum.h:211
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition GUIAppEnum.h:259
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition GUIAppEnum.h:187
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition GUIAppEnum.h:57
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition GUIAppEnum.h:229
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition GUIAppEnum.h:853
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition GUIAppEnum.h:271
@ MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK
open network in SUMO and create new empty network in netedit
Definition GUIAppEnum.h:107
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition GUIAppEnum.h:263
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition GUIAppEnum.h:793
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition GUIAppEnum.h:691
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition GUIAppEnum.h:845
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition GUIAppEnum.h:785
@ MID_LANGUAGE_FR
change language to french
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition GUIAppEnum.h:59
@ MID_HOTKEY_CTRL_L_SAVEASPLAINXML
save network as plain XML
Definition GUIAppEnum.h:103
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition GUIAppEnum.h:767
@ MID_WINDOW
Main window-ID.
Definition GUIAppEnum.h:293
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition GUIDesigns.h:101
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition GUIDesigns.h:335
#define GUIDesignLabelStatusBar
label used in statusBar
Definition GUIDesigns.h:277
#define GUIDesignSplitter
Definition GUIDesigns.h:463
#define GUIDesignSplitterMDI
MDI Splitter.
Definition GUIDesigns.h:466
#define GUIDesignStatusBar
design used in status bar
Definition GUIDesigns.h:435
@ MESSAGE_OCCURRED
send when a message occured
@ GLDEBUG_OCCURRED
send when a gldebug occured
@ ERROR_OCCURRED
send when a error occured
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occured
@ WARNING_OCCURRED
send when a warning occured
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_DEBUG(msg)
Definition MsgHandler.h:281
#define WRITE_ERRORF(...)
Definition MsgHandler.h:280
#define WRITE_MESSAGE(msg)
Definition MsgHandler.h:272
#define WRITE_ERROR(msg)
Definition MsgHandler.h:279
#define TL(string)
Definition MsgHandler.h:287
#define PROGRESS_FAILED_MESSAGE()
Definition MsgHandler.h:278
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
std::string gLanguage
the language for GUI elements and messages
Definition StdDefs.cpp:33
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:46
bool parse()
parse
bool isErrorCreatingElement() const
get flag for check if a element wasn't created
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:600
The application's "About" - dialog.
Definition GNEAbout.h:33
void create()
Creates the widget.
Definition GNEAbout.cpp:85
The main window of Netedit.
long onCmdSaveAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
long onCmdOpenNetgenerateDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate" button
FXMenuPane * myFileMenuMeanDataElements
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands
Supermode Commands.
FXMenuPane * myToolsImportCityBrainMenu
long onCmdSaveTLSProgramsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms as is executed
FXMenuTitle * myModesMenuTitle
menu title for modes
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 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
bool continueWithUnsavedAdditionalChanges()
warns about unsaved changes in additionals and gives the user the option to abort
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
bool continueWithUnsavedChanges()
warns about unsaved changes and gives the user the option to abort
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
void updateControls()
update control contents after undo/redo or recompute
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands
Lock Menu Commands.
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 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 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 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 onCmdOpenAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
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
long onUpdSaveAdditionalsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals as is executed
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
getEdit 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
FXMenuPane * myToolsVisualizationMenu
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
long onCmdSmartReload(FXObject *, FXSelector, void *)
called when the command/FXCall smart reload is executed
long onCmdPaste(FXObject *, FXSelector, void *)
long onUpdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements as is executed
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 *‍/
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 *)
long onUpdReloadMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
FXString getFolder(const std::string &folder) const
extract folder
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread 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 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
long onUpdReloadAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is updated
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
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 onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
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 *)
MFXSynchQue< GUIEvent * > myEvents
List of got requests.
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
long onCmdProcessButton(FXObject *, FXSelector sel, void *)
called when user press a process button (or a shortcut)
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onUpdSaveMeanDatasAs(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas as is executed
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
long onCmdSaveAdditionalsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals as is executed
GNEUndoListDialog * getUndoListDialog()
get pointer to undoList dialog
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
long onCmdUndo(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
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
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 onUpdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements as is executed
FXMenuPane * myFileMenuDemandElements
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
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
long onCmdReloadAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is executed
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 onCmdSaveMeanDatasAs(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas as 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 onCmdOpenMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall open meanDatas is executed
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
bool continueWithUnsavedDemandElementChanges()
warns about unsaved changes in demand elements and gives the user the option to abort
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
bool continueWithUnsavedDataElementChanges()
warns about unsaved changes in data elements and gives the user the option to abort
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 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 onUpdSaveAdditionals(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals is executed
long onCmdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements as is executed
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
long onCmdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements as is executed
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadMeanDataElements()
load meanData elements
void loadOSM(const std::string &OSMFile)
starts to load a OSM File
long onCmdOpenNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netedit config is executed
long onCmdOpenRecent(FXObject *, FXSelector, void *)
called when the command/FXCall open recent is executed
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
void handleEvent_NetworkLoaded(GUIEvent *e)
handle event of type Network loaded
long onCmdCopy(FXObject *, FXSelector, void *)
long onCmdSaveMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdReloadMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is executed
long onCmdOpenSUMOGUI(FXObject *sender, FXSelector sel, void *ptr)
called if the user hints ctrl + T
void disableUndoRedo(const std::string &reason)
disable undo-redo giving a string with the reason
long onCmdOpenDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall open demand is executed
void enableUndoRedo()
disable undo-redo
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
const std::string & isUndoRedoEnabled() const
check if undo-redo is enabled
long onUpdNeedsNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall needs network is executed
GNEApplicationWindowHelper::ToolbarsGrip & getToolbarsGrip()
get ToolbarsGrip
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
FXMenuPane * myFileMenuRecentNetworks
bool myConsoleOptionsLoaded
flag for check if console options was already loaded
long onCmdSetFrontElement(FXObject *, FXSelector, void *)
called if the user call set front element
GNEUndoListDialog * myUndoListDialog
undoList dialog
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 *)
long onUpdSaveMeanDatas(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
long onCmdRedo(FXObject *, FXSelector, void *)
long onCmdOpenNetgenerateOptionsDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate options" button
bool continueWithUnsavedMeanDataElementChanges()
warns about unsaved changes in meanData elements and gives the user the option to abort
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 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 onUpdSmartReload(FXObject *, FXSelector, void *)
called when the update/FXCall smart reload is executed
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 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 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
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
Dialog fix network elements.
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition GNEFrame.cpp:252
bool isErrorCreatingElement() const
get flag for check if a element wasn't created
bool isSelectingParent() const
check if we're selecting a new parent
void refreshNeteditAttributesEditor(bool forceRefresh)
refresh netedit attributes
void clearTemplate()
clear template (used by shortcut)
void setTemplate()
set template (used by shortcut)
void copyTemplate()
copy template (used by shortcut)
void inspectSingleElement(GNEAttributeCarrier *AC)
Inspect a single element.
TemplateEditor * getTemplateEditor() const
get template editor
GNEInspectorFrame::NeteditAttributesEditor * getNeteditAttributesEditor() const
get Netedit Attributes editor
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::map< SumoXMLTag, std::set< GNEDemandElement * > > & getDemandElements() const
get demand elements
int getNumberOfMeanDatas() const
get number of meanDatas
const std::set< 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 getNumberOfGenericDatas() const
Return the number of generic datas.
int getNumberOfDemandElements() const
Return the number of demand elements.
int getNumberOfAdditionals() const
get number of additionals
const std::set< GNECrossing * > & getCrossings() const
get crossings
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
void dataElementsSaved()
mark demand elements as saved
void demandElementsSaved()
mark demand elements as saved
void SumoConfigSaved()
mark SumoConfig as saved
void additionalsSaved()
mark additionals as saved
void requireSaveNeteditConfig()
inform that netedit config has to be saved
void requireSaveSumoConfig()
inform that SumoConfig has to be saved
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void requireSaveMeanDatas()
inform that mean data elements has to be saved
void meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
void requireSaveAdditionals()
inform that additionals has to be saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
bool isAdditionalsSaved() const
check if additionals are saved
void requireSaveDemandElements()
inform that demand elements has to be saved
void clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition GNENet.cpp:1971
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition GNENet.cpp:1619
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition GNENet.cpp:1430
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition GNENet.cpp:2571
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition GNENet.cpp:1225
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition GNENet.cpp:126
void enableUpdateData()
Definition GNENet.cpp:2638
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition GNENet.cpp:2592
void saveAdditionals()
save additional elements
Definition GNENet.cpp:2060
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition GNENet.cpp:1984
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition GNENet.cpp:1726
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:1272
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition GNENet.cpp:1771
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition GNENet.cpp:1636
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:120
void saveDemandElements()
save demand element elements of the network
Definition GNENet.cpp:2101
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition GNENet.cpp:2008
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition GNENet.cpp:2649
void saveDataElements()
save data set elements of the network
Definition GNENet.cpp:2143
void saveNetwork()
save the network
Definition GNENet.cpp:1182
bool isNetRecomputed() const
check if net require recomputing
Definition GNENet.cpp:1412
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition GNENet.cpp:1566
void joinRoutes(GNEUndoList *undoList)
join routes
Definition GNENet.cpp:1662
GNEPathManager * getPathManager()
get path manager
Definition GNENet.cpp:132
void savePlain(const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition GNENet.cpp:1216
GNEViewNet * getViewNet() const
get view net
Definition GNENet.cpp:2030
void saveMeanDatas()
save meanData elements of the network
Definition GNENet.cpp:2188
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition GNENet.cpp:1355
static std::pair< int, bool > Run(GNEApplicationWindow *GNEApp, GUIIcon icon, OptionsCont &optionsContainer, const OptionsCont &originalOptionsContainer, const char *titleName)
Constructor for run dialogs.
static std::pair< int, bool > Options(GNEApplicationWindow *GNEApp, GUIIcon icon, OptionsCont &optionsContainer, const OptionsCont &originalOptionsContainer, const char *titleName)
Constructor for options dialogs.
void updatePathCalculator()
update path calculator (called when SuperModes Demand or Data is selected)
bool isPathCalculatorUpdated() const
check if pathCalculator is updated
PathCalculator * getPathCalculator()
obtain instance of PathCalculator
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 modul
TAZSaveChanges * getTAZSaveChangesModule() const
get TAZ Save Changes modul
bool parseTLSPrograms(const std::string &file)
parse TLS Programs from a file
Dialog for edit rerouters.
void show()
show window
bool shown() const
check if dialog is shown
void setFocus()
Move the focus to this window.
void hide()
hide window
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...
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
const GNEAttributeCarrier * getFrontAttributeCarrier() const
get front attributeCarrier
void hotkeyBackSpace()
handle backspace keypress
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
void setFrontAttributeCarrier(GNEAttributeCarrier *AC)
set front attributeCarrier
long onCmdToggleShowDemandElementsData(FXObject *, FXSelector, void *)
toggle show demand elements (data)
void abortOperation(bool clearSelection=true)
abort current edition operation
long onCmdToggleWarnAboutMerge(FXObject *, FXSelector, void *)
toggle warn for merge
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
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
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
void forceSupermodeNetwork()
set supermode Network (used after load/create new network)
const std::vector< GNEAttributeCarrier * > & getInspectedAttributeCarriers() const
get inspected attribute carriers
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
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
void updateViewNet() const
Mark the entire GNEViewNet to be repainted later.
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
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.
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
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
const GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings (read only)
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
static FXuint question(FXApp *app, const char *caption, const char *message,...)
Show modal question message, in free floating window.
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 drawJunctionShape
whether the shape of the junction should be drawn
bool showGrid
Information whether a grid shall be shown.
bool parse()
parse
static void resetLoaded()
resets loaded location elements
bool amChecked() const
check if this MFXCheckableButton is checked
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:60
static void setupI18n(const std::string &locale="")
set up gettext stuff
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition NBFrame.cpp:724
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:384
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:136
A storage for options typed value containers)
Definition OptionsCont.h:89
void resetDefault()
Resets all options to default.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
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.
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:85
double x() const
Returns the x-position.
Definition Position.h:55
double y() const
Returns the y-position.
Definition Position.h:60
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:68
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:66
@ SEL_THREAD_EVENT
Definition fxexdefs.h:173
@ SEL_THREAD
Definition fxexdefs.h:155
Definition json.hpp:4471
DemandViewOptions demandViewOptions
demand view options
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
void buildHelpMenuCommands(FXMenuPane *helpMenu)
build menu commands
void buildLocateMenuCommands(FXMenuPane *locateMenu)
build menu commands
void buildLockMenuCommands(FXMenuPane *editMenu)
build menu commands
void hideNetworkLockMenuCommands()
show network processing menu commands
void hideDemandLockMenuCommands()
show demand processing menu commands
void hideDataLockMenuCommands()
show data processing menu commands
void showDataLockMenuCommands()
show data processing menu commands
void showNetworkLockMenuCommands()
show network processing menu commands
void showDemandLockMenuCommands()
show demand processing menu commands
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.
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 showTool(FXObject *menuCommand) const
show tool
long runNetgenerateDialog(const OptionsCont *netgenerateOptions) const
run netgenerate dialog
long runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
static bool toggleEditOptionsData(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Data menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string openRouteFileDialog(FXWindow *window, bool save, bool multi=false)
open route file dialog
static std::string openMeanDataDialog(FXWindow *window, bool save, bool multi=false)
open meandata filename dialog
static std::string openAdditionalFileDialog(FXWindow *window, bool save, bool multi=false)
open additional dialog
static std::string openOSMFileDialog(FXWindow *window)
open OSM file dialog
static bool toggleEditOptionsDemand(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Demand menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string saveJoinedJunctionsFileDialog(FXWindow *window)
open joined junctions file dialog
static bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string openTLSFileDialog(FXWindow *window, bool save)
open TLS file dialog
static std::string openDataFileDialog(FXWindow *window, bool save, bool multi=false)
open data file dialog
static std::string openNeteditConfigFileDialog(FXWindow *window, bool save)
open netedit config file dialog
static std::string savePlainXMLFileDialog(FXWindow *window)
open plain xml file dialog
static std::string openSumoConfigFileDialog(FXWindow *window, bool save, bool multi=false)
open SUMO config file dialog
static std::string openEdgeTypeFileDialog(FXWindow *window, bool save)
open edgeType file dialog
static std::string openNetworkFileDialog(FXWindow *window, bool save, bool multi=false)
open netconvert file dialog
static std::string openNetconvertFileDialog(FXWindow *window)
open netconvert file dialog
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
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
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 * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
MFXCheckableButton * menuCheckWarnAboutMerge
checkable button to we should warn about merging junctions
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