Eclipse SUMO - Simulation of Urban MObility
GNEApplicationWindow.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3// Copyright (C) 2001-2022 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/****************************************************************************/
18// Functions from main window of NETEDIT
19/****************************************************************************/
20#include <netbuild/NBFrame.h>
36#include <netimport/NIFrame.h>
39#include <netwrite/NWFrame.h>
56#include <utils/xml/XMLSubSys.h>
57
60#include "GNELoadThread.h"
61#include "GNENet.h"
62#include "GNEViewNet.h"
63#include "GNEUndoList.h"
64#include "GNEViewParent.h"
65
66#ifdef HAVE_VERSION_H
67#include <version.h>
68#endif
69
70// ===========================================================================
71// FOX-declarations
72// ===========================================================================
73
74FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
75 // quit calls
79 FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
80
81 // toolbar file
92 FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
95 // network
106 // SUMOConfig
114 // TLS
121 // edge types
130 // additionals
139 // demand elements
148 // data elements
157 // other
162
163 // Toolbar supermode
167
168 // Toolbar modes
184
185 // Toolbar edit
194 // Network view options
227 // Demand view options
250 // Data view options
267 // view
282
285 /* Prepared for #6042
286 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
287 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
288 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
289 */
290
291 // toolbar lock
297
298 // Toolbar processing
313
314
315 // Toolbar locate
318 FXMAPFUNC(SEL_COMMAND, MID_LOCATEEDGE, GNEApplicationWindow::onCmdLocate),
326 FXMAPFUNC(SEL_COMMAND, MID_LOCATEROUTE, GNEApplicationWindow::onCmdLocate),
328 FXMAPFUNC(SEL_COMMAND, MID_LOCATESTOP, GNEApplicationWindow::onCmdLocate),
330 FXMAPFUNC(SEL_COMMAND, MID_LOCATETLS, GNEApplicationWindow::onCmdLocate),
332 FXMAPFUNC(SEL_COMMAND, MID_LOCATEADD, GNEApplicationWindow::onCmdLocate),
334 FXMAPFUNC(SEL_COMMAND, MID_LOCATEPOI, GNEApplicationWindow::onCmdLocate),
336 FXMAPFUNC(SEL_COMMAND, MID_LOCATEPOLY, GNEApplicationWindow::onCmdLocate),
338
339 // toolbar tools
342
343 // toolbar windows
345
346 // toolbar help
349 FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
350 FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
352
353 // alt + <number>
374
375 // key events
376 FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
377 FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
378 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
379 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
380 FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
382
383 // threads events
386
387 // Edge template functions
391
392 // Other
393 FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
401};
402
403// Object implementation
404FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
405
406
407// ===========================================================================
408// GNEApplicationWindow method definitions
409// ===========================================================================
410
411#ifdef _MSC_VER
412#pragma warning(push)
413/* Disable warning about using "this" in the constructor */
414#pragma warning(disable: 4355)
415#endif
416GNEApplicationWindow::GNEApplicationWindow(FXApp* a, const std::string& configPattern) :
417 GUIMainWindow(a),
418 myUndoList(new GNEUndoList(this)),
419 myConfigPattern(configPattern),
420 myToolbarsGrip(this),
421 myMenuBarFile(this),
422 myFileMenuCommands(this),
423 myModesMenuCommands(this),
424 myEditMenuCommands(this),
425 myLockMenuCommands(this),
426 myProcessingMenuCommands(this),
427 myLocateMenuCommands(this),
428 myToolsMenuCommands(this),
429 myWindowsMenuCommands(this),
430 mySupermodeCommands(this),
431 myTitlePrefix("NETEDIT " VERSION_STRING) {
432 // init icons
434 // init Textures
436 // init cursors
438 // create undoList dialog (after initCursors)
440 a->setTooltipTime(1000000000);
441 a->setTooltipPause(1000000000);
442}
443#ifdef _MSC_VER
444#pragma warning(pop)
445#endif
446
447
448void
450 // do this not twice
452 WRITE_ERROR(TL("DEBUG: GNEApplicationWindow::dependentBuild called twice"));
453 return;
454 }
455 myHadDependentBuild = true;
456 setTarget(this);
457 setSelector(MID_WINDOW);
458 // build toolbar menu
460 // build the thread - io
463 // build the status bar
464 myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
465 // build geo coordinates label
466 auto requiereRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
468 TL("Recomputing\t\tRecomputing is needed"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
469 // build geo coordinates label
471 myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A\t\tOriginal coordinate (before coordinate transformation in netconvert)"), nullptr, GUIDesignLabelStatusBar);
472 // build cartesian coordinates label
474 myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A\t\tNetwork coordinate"), nullptr, GUIDesignLabelStatusBar);
475 // build test coordinates label (only if gui-testing is enabled)
476 if (OptionsCont::getOptions().getBool("gui-testing")) {
478 myTestCoordinate = new FXLabel(myTestFrame, TL("N/A\t\tTest coordinate"), nullptr, GUIDesignLabelStatusBar);
479 }
480 // make the window a mdi-window
481 myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
483 myMDIMenu = new FXMDIMenu(this, myMDIClient);
484 // build the message window
486 myMainSplitter->setSplit(1, 65);
487 // fill menu and tool bar
488 fillMenuBar();
489 // build additional threads
491 // set the status bar
492 myStatusbar->getStatusLine()->setText(TL("Ready."));
493 // set the caption
494 setTitle(myTitlePrefix);
495 // set Netedit ICON
498 // build NETEDIT Accelerators (hotkeys)
500}
501
502
503void
505 // set windows size and position
507 // set current folder
508 gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
509 // Create main window
510 FXMainWindow::create();
511 // create menu panes
512 myFileMenu->create();
513 myModesMenu->create();
514 myEditMenu->create();
515 myFileMenuSUMOConfig->create();
516 myFileMenuTLS->create();
517 myFileMenuEdgeTypes->create();
518 myFileMenuAdditionals->create();
519 myFileMenuDemandElements->create();
520 myFileMenuDataElements->create();
521 myWindowMenu->create();
522 myHelpMenu->create();
523
524 FXint textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
525 myCartesianFrame->setWidth(textWidth);
526 myGeoFrame->setWidth(textWidth);
527
528 // fill online maps
529 if (myOnlineMaps.empty()) {
530 myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
531 myOnlineMaps["GoogleSat"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
532 myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
533 }
534
535 show(PLACEMENT_DEFAULT);
536 if (!OptionsCont::getOptions().isSet("window-size")) {
537 if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
538 maximize();
539 }
540 }
541
542}
543
544
547 // Close icons
549 // Close gifs (Textures)
551 // delete visuals
552 delete myGLVisual;
553 // must delete menus to avoid segfault on removing accelerators
554 // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
556 delete myFileMenuTLS;
557 delete myFileMenuEdgeTypes;
561 delete myFileMenu;
562 delete myModesMenu;
563 delete myEditMenu;
564 delete myLockMenu;
565 delete myProcessingMenu;
566 delete myLocatorMenu;
567 delete myToolsMenu;
568 delete myWindowMenu;
569 delete myHelpMenu;
570 // Delete load thread
571 delete myLoadThread;
572 // drop all events
573 while (!myEvents.empty()) {
574 // get the next event
575 GUIEvent* e = myEvents.top();
576 myEvents.pop();
577 delete e;
578 }
579 // delete undoList and dialog
580 delete myUndoList;
581 delete myUndoListDialog;
582}
583
584
585long
586GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
587 if (continueWithUnsavedChanges("quit")) {
589 getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
590 if (isMaximized()) {
591 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
592 } else {
593 getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
594 }
595 getApp()->exit(0);
596 }
597 return 1;
598}
599
600
601long
602GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
603 GUIDialog_GLChosenEditor* chooser =
605 chooser->create();
606 chooser->show();
607 return 1;
608}
609
610
611long
612GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
613 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
614 if (myViewNet && !onCmdClose(0, 0, 0)) {
615 return 1;
616 } else {
620 loadConfigOrNet("", true, false, true, true);
621 return 1;
622 }
623}
624
625
626long
627GNEApplicationWindow::onCmdOpenConfiguration(FXObject*, FXSelector, void*) {
628 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
629 if (myViewNet && !onCmdClose(0, 0, 0)) {
630 return 1;
631 } else {
632 // get the new file name
633 FXFileDialog opendialog(this, TL("Open Netconvert Configuration"));
634 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::OPEN_CONFIG));
635 opendialog.setSelectMode(SELECTFILE_EXISTING);
636 opendialog.setPatternList(myConfigPattern.c_str());
637 if (gCurrentFolder.length() != 0) {
638 opendialog.setDirectory(gCurrentFolder);
639 }
640 if (opendialog.execute()) {
641 gCurrentFolder = opendialog.getDirectory();
642 std::string file = opendialog.getFilename().text();
643 // load config
644 loadConfigOrNet(file, false);
645 // add it into recent configs
646 myMenuBarFile.myRecentNetsAndConfigs.appendFile(file.c_str());
647 }
648 return 1;
649 }
650}
651
652
653long
654GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
655 // get the new file name
656 FXFileDialog opendialog(this, TL("Open Network"));
657 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::OPEN_NET));
658 opendialog.setSelectMode(SELECTFILE_EXISTING);
659 opendialog.setPatternList("SUMO nets (*.net.xml,*.net.xml.gz)\nAll files (*)");
660 if (gCurrentFolder.length() != 0) {
661 opendialog.setDirectory(gCurrentFolder);
662 }
663 if (opendialog.execute()) {
664 // get file
665 const std::string file = opendialog.getFilename().text();
666 // check if file isn't empty first
667 if (!file.empty()) {
668 // check if current edited Net can be closed (and therefore the undo-list cleared, see #5753)
669 if (myViewNet) {
670 // call close
671 onCmdClose(0, 0, 0);
672 // if after close there is myViewNet yet, abort
673 if (myViewNet) {
674 return 0;
675 }
676 }
677 // set current folder
678 gCurrentFolder = opendialog.getDirectory();
679 // load network
680 loadConfigOrNet(file, true);
681 // add it into recent nets
682 myMenuBarFile.myRecentNetsAndConfigs.appendFile(file.c_str());
683 // when a net is loaded, save additionals and TLSPrograms are disabled
687 }
688 }
689 return 0;
690}
691
692
693long
694GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
695 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
696 if (myViewNet && !onCmdClose(0, 0, 0)) {
697 return 1;
698 } else {
699 // get the new file name
700 FXFileDialog opendialog(this, TL("Import Foreign Network"));
701 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::OPEN_NET));
702 opendialog.setSelectMode(SELECTFILE_EXISTING);
703 FXString osmPattern("OSM net (*.osm.xml,*.osm)");
704 opendialog.setPatternText(0, osmPattern);
705 if (gCurrentFolder.length() != 0) {
706 opendialog.setDirectory(gCurrentFolder);
707 }
708 if (opendialog.execute()) {
709 gCurrentFolder = opendialog.getDirectory();
710 std::string file = opendialog.getFilename().text();
711
714 if (osmPattern.contains(opendialog.getPattern())) {
715 // recommended osm options
716 // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
717 oc.set("osm-files", file);
718 oc.set("geometry.remove", "true");
719 oc.set("ramps.guess", "true");
720 oc.set("junctions.join", "true");
721 oc.set("tls.guess-signals", "true");
722 oc.set("tls.discard-simple", "true");
723 } else {
724 throw ProcessError("Attempted to import unknown file format '" + file + "'.");
725 }
726
727 GUIDialog_Options* wizard =
728 new GUIDialog_Options(this, TL("Select Import Options"), getWidth(), getHeight());
729
730 if (wizard->execute()) {
731 NIFrame::checkOptions(); // needed to set projection parameters
732 loadConfigOrNet("", false, false, false);
733 }
734 }
735 return 1;
736 }
737}
738
739
740long
741GNEApplicationWindow::onCmdOpenSUMOConfig(FXObject*, FXSelector, void*) {
742 // write debug information
743 WRITE_DEBUG("Open SUMOConfig dialog");
744 // get the SUMOConfig file name
745 FXFileDialog opendialog(this, TL("Open SUMOConfig file"));
746 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::SUMO_MINI));
747 opendialog.setSelectMode(SELECTFILE_EXISTING);
748 opendialog.setPatternList("SUMOConfig files (*.sumocfg)\nAll files (*)");
749 if (gCurrentFolder.length() != 0) {
750 opendialog.setDirectory(gCurrentFolder);
751 }
752 if (opendialog.execute()) {
753 // close additional dialog
754 WRITE_DEBUG("Close SUMOConfig dialog");
755 gCurrentFolder = opendialog.getDirectory();
756 std::string file = opendialog.getFilename().text();
757 // write info
758 WRITE_MESSAGE("Loading SUMOConfig from '" + file + "'");
759 // close all windows
761 // disable validation for additionals
762 XMLSubSys::setValidation("never", "auto", "auto");
763 // Create additional handler
764 GNEApplicationWindowHelper::GNEConfigHandler confighandler(this, file);
765 // Run parser
766 if (!confighandler.parse()) {
767 WRITE_ERROR("Loading of " + file + " failed.");
768 }
769 // update view
770 update();
771 // restore validation for additionals
772 XMLSubSys::setValidation("auto", "auto", "auto");
773 } else {
774 // write debug information
775 WRITE_DEBUG("Cancel SUMOConfig dialog");
776 }
777 return 1;
778}
779
780
781long
782GNEApplicationWindow::onCmdReloadSUMOConfig(FXObject*, FXSelector, void*) {
783 const auto file = OptionsCont::getOptions().getString("SUMOConfig-output");
784 if (file.size() > 0) {
785 // disable validation for additionals
786 XMLSubSys::setValidation("never", "auto", "auto");
787 // Create additional handler
788 GNEApplicationWindowHelper::GNEConfigHandler confighandler(this, file);
789 // Run parser
790 if (!confighandler.parse()) {
791 WRITE_ERROR("Loading of " + file + " failed.");
792 }
793 update();
794 // restore validation for additionals
795 XMLSubSys::setValidation("auto", "auto", "auto");
796 }
797 return 1;
798}
799
800
801long
802GNEApplicationWindow::onUpdReloadSUMOConfig(FXObject*, FXSelector, void*) {
803 // check if file exist
804 if (myViewNet && !OptionsCont::getOptions().getString("SUMOConfig-output").empty()) {
805 return myFileMenuCommands.reloadSUMOConfig->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
806 } else {
807 return myFileMenuCommands.reloadSUMOConfig->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
808 }
809}
810
811
812long
813GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
814 // write debug information
815 WRITE_DEBUG("Open TLSProgram dialog");
816 // get the TLSPrograms file name
817 FXFileDialog opendialog(this, TL("Open TLS Programs file"));
818 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::MODETLS));
819 opendialog.setSelectMode(SELECTFILE_EXISTING);
820 opendialog.setPatternList("TLSProgram files (*.xml,*.xml.gz)\nAll files (*)");
821 if (gCurrentFolder.length() != 0) {
822 opendialog.setDirectory(gCurrentFolder);
823 }
824 if (opendialog.execute()) {
825 // close additional dialog
826 WRITE_DEBUG("Close TLSProgram dialog");
827 gCurrentFolder = opendialog.getDirectory();
828 std::string file = opendialog.getFilename().text();
829 // Run parser
830 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, "loading TLS Programs from '" + file + "'");
831 myNet->computeNetwork(this);
832 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(file) == false) {
833 // Abort undo/redo
835 } else {
836 // commit undo/redo operation
837 myUndoList->end();
838 update();
839 }
840 } else {
841 // write debug information
842 WRITE_DEBUG("Cancel TLSProgram dialog");
843 }
844 return 1;
845}
846
847
848long
849GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
850 // Run parser
851 myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, "loading TLS Programs from '" + OptionsCont::getOptions().getString("TLSPrograms-output") + "'");
852 myNet->computeNetwork(this);
853 if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(OptionsCont::getOptions().getString("TLSPrograms-output")) == false) {
854 // Abort undo/redo
856 } else {
857 // commit undo/redo operation
858 myUndoList->end();
859 update();
860 }
861 return 1;
862}
863
864
865long
866GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject*, FXSelector, void*) {
867 // check if file exist
868 if (myViewNet && OptionsCont::getOptions().getString("TLSPrograms-output").empty()) {
869 return myFileMenuCommands.reloadTLSPrograms->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
870 } else {
871 return myFileMenuCommands.reloadTLSPrograms->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
872 }
873}
874
875
876long
877GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
878 // open dialog
879 FXFileDialog opendialog(this, TL("Load edgeType file"));
881 opendialog.setSelectMode(SELECTFILE_EXISTING);
882 opendialog.setPatternList("*.xml,*.xml.gz");
883 if (gCurrentFolder.length() != 0) {
884 opendialog.setDirectory(gCurrentFolder);
885 }
886 if (opendialog.execute()) {
887 // declare type container
888 NBTypeCont typeContainerAux;
889 // declare type handler
890 NIXMLTypesHandler* handler = new NIXMLTypesHandler(typeContainerAux);
891 // load edge types
892 NITypeLoader::load(handler, {opendialog.getFilename().text()}, "types");
893 // write information
894 WRITE_MESSAGE("Loaded " + toString(typeContainerAux.size()) + " edge types");
895 // now create GNETypes based on typeContainerAux
897 // iterate over typeContainerAux
898 for (const auto& auxEdgeType : typeContainerAux) {
899 // create new edge type
900 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
901 // add lane types
902 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
903 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
904 }
905 // add it using undoList
906 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
907
908 }
909 // end undo list
911 // refresh edge type selector
913 }
914 return 0;
915}
916
917
918long
919GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
920 // declare type container
921 NBTypeCont typeContainerAux;
922 // declare type handler
923 NIXMLTypesHandler* handler = new NIXMLTypesHandler(typeContainerAux);
924 // load edge types
925 NITypeLoader::load(handler, {OptionsCont::getOptions().getString("edgeTypes-output")}, "types");
926 // write information
927 WRITE_MESSAGE("Loaded " + toString(typeContainerAux.size()) + " edge types");
928 // now create GNETypes based on typeContainerAux
930 // iterate over typeContainerAux
931 for (const auto& auxEdgeType : typeContainerAux) {
932 // create new edge type
933 GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
934 // add lane types
935 for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
936 edgeType->addLaneType(new GNELaneType(edgeType, laneType));
937 }
938 // add it using undoList
939 myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
940
941 }
942 // end undo list
944 // refresh edge type selector
946 return 0;
947}
948
949
950long
951GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject*, FXSelector, void*) {
952 // check if file exist
953 if (myViewNet && OptionsCont::getOptions().getString("edgeTypes-output").empty()) {
954 return myFileMenuCommands.reloadEdgeTypes->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
955 } else {
956 return myFileMenuCommands.reloadEdgeTypes->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
957 }
958}
959
960
961long
962GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
963 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
964 if (myViewNet && !onCmdClose(0, 0, 0)) {
965 return 1;
966 } else if (myAmLoading) {
967 myStatusbar->getStatusLine()->setText(TL("Already loading!"));
968 return 1;
969 } else {
970 // get filedata
971 std::string file((const char*)fileData);
972 // check if we're loading a network or a config (.netccfg for configs)
973 if (file.find(".netccfg") != std::string::npos) {
974 // load config
975 loadConfigOrNet(file, false);
976 } else {
977 // load network
978 loadConfigOrNet(file, true);
979 }
980 return 1;
981 }
982}
983
984
985long
986GNEApplicationWindow::onCmdReload(FXObject*, FXSelector, void*) {
987 // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
988 if (myViewNet) {
989 // check if current network can be closed
990 if (continueWithUnsavedChanges("reload")) {
992 // disable save additionals and TLS menu
995 // disable toolbargrip modes
996 myToolbarsGrip.menu->disable();
997 // hide all Supermode, Network and demand commands
1002 // hide view options
1006 } else {
1007 // abort reloading (because "cancel button" was pressed)
1008 return 1;
1009 }
1010 }
1011 // @note. If another network has been load during this session, it might not be desirable to set useStartupOptions
1012 loadConfigOrNet(OptionsCont::getOptions().getString("sumo-net-file"), true, true);
1013 return 1;
1014}
1015
1016
1017long
1018GNEApplicationWindow::onCmdClose(FXObject*, FXSelector, void*) {
1019 if (continueWithUnsavedChanges("close")) {
1021 // add a separator to the log
1023 // disable save additionals and TLS menu
1026 // hide all Supermode, Network and demand commands
1031 // hide view options
1035 }
1036 return 1;
1037}
1038
1039
1040long
1041GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1042 if (myMDIClient->numChildren() > 0) {
1043 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1044 if (w != nullptr) {
1045 w->onCmdLocate(nullptr, sel, nullptr);
1046 }
1047 }
1048 return 1;
1049}
1050
1051
1052long
1053GNEApplicationWindow::onCmdToolNetDiff(FXObject*, FXSelector, void*) {
1054 // open a modal NetDiff tool dialog
1055 GNEToolNetDiff(this); // NOSONAR
1056
1057 /*
1058 OptionsCont& oc = OptionsCont::getOptions();
1059 // check that currently there is a View
1060 if (myViewNet == nullptr) {
1061 return 0;
1062 }
1063 #ifdef WIN32
1064 // check that python folder is defined in PATH
1065 const char* path = getenv("PATH");
1066 if ((strstr(path, "Python") == nullptr) && (strstr(path, "python") == nullptr)) {
1067 WRITE_ERROR(TL("Python folder must be defined in PATH"));
1068 return 0;
1069 }
1070 #endif
1071 // check that SUMO_HOME is defined
1072 const char* sumoPath = getenv("SUMO_HOME");
1073 if (sumoPath == nullptr) {
1074 WRITE_ERROR(TL("Enviroment variable SUMO_HOME must be defined"));
1075 return 0;
1076 }
1077 // get netdiff path
1078 const std::string netDiff = std::string(sumoPath) + "/tools/net/netdiff.py";
1079 if (!FileHelpers::isReadable(netDiff)) {
1080 WRITE_ERROR("netdiff.py cannot be found in path '" + netDiff + "'");
1081 return 0;
1082 }
1083 // check if network is saved
1084 if (!myViewNet->getNet()->isNetSaved()) {
1085 // save network
1086 onCmdSaveNetwork(nullptr, 0, nullptr);
1087 if (!myViewNet->getNet()->isNetSaved()) {
1088 return 0;
1089 }
1090 }
1091 // get the second network to ddiff
1092 FXFileDialog opendialog(this, TL("Open diff Network"));
1093 opendialog.setIcon(GUIIconSubSys::getIcon(GUIIcon::OPEN_NET));
1094 opendialog.setSelectMode(SELECTFILE_EXISTING);
1095 opendialog.setPatternList("SUMO nets (*.net.xml,*.net.xml.gz)\nAll files (*)");
1096 if (gCurrentFolder.length() != 0) {
1097 opendialog.setDirectory(gCurrentFolder);
1098 }
1099 if (opendialog.execute()) {
1100 // get file
1101 const std::string secondNet = opendialog.getFilename().text();
1102 // check if secondNet isn't empty
1103 if (secondNet.empty()) {
1104 return 0;
1105 }
1106 // extract folder
1107 const std::string secondNetFolder = getFolder(secondNet).text();
1108 // declare python command
1109 std::string cmd = "cd " + secondNetFolder + TL("&") + // folder to save diff files (the same of second net)
1110 "python " + netDiff + // netdiff.py
1111 " " + oc.getString("output-file") + // netA (current)
1112 " " + secondNet + // net B
1113 " diff"; // netdiff options
1114 // start in background
1115 #ifndef WIN32
1116 cmd = cmd + " &";
1117 #else
1118 // see "help start" for the parameters
1119 cmd = "start /B \"\" " + cmd;
1120 #endif
1121 WRITE_MESSAGE("Running " + cmd + ".");
1122 // yay! fun with dangerous commands... Never use this over the internet
1123 SysUtils::runHiddenCommand(cmd);
1124 }
1125 */
1126 return 1;
1127}
1128
1129
1130long
1131GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1132 sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1133 return 1;
1134}
1135
1136
1137long
1138GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1140 return 1;
1141}
1142
1143
1144long
1146 // write warning if netedit is running in testing mode
1147 WRITE_DEBUG("Toggle load additionals in sumo-gui");
1148 return 1;
1149}
1150
1151
1152long
1154 // write warning if netedit is running in testing mode
1155 WRITE_DEBUG("Toggle load demand in sumo-gui");
1156 return 1;
1157}
1158
1159
1160long
1161GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1162 // write warning if netedit is running in testing mode
1163 WRITE_DEBUG("Opening about dialog");
1164 // create and open about dialog
1165 GNEAbout* about = new GNEAbout(this);
1166 about->create();
1167 about->show(PLACEMENT_OWNER);
1168 // write warning if netedit is running in testing mode
1169 WRITE_DEBUG("Closed about dialog");
1170 return 1;
1171}
1172
1173
1174long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1175 FXEvent* event = (FXEvent*)ptr;
1176 FXString string = GUIUserIO::clipped.c_str();
1177 setDNDData(FROM_CLIPBOARD, event->target, string);
1178 return 1;
1179}
1180
1181
1182long
1183GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1184 eventOccurred();
1185 return 1;
1186}
1187
1188
1189void
1191 while (!myEvents.empty()) {
1192 // get the next event
1193 GUIEvent* e = myEvents.top();
1194 myEvents.pop();
1195 // process
1196 switch (e->getOwnType()) {
1199 break;
1206 break;
1207 default:
1208 break;
1209 }
1210 delete e;
1211 }
1212}
1213
1214
1215void
1218 myAmLoading = false;
1219 GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1220 // check whether the loading was successfull
1221 if (ec->net == nullptr) {
1222 // report failure
1223 setStatusBarText("Loading of '" + ec->file + "' failed!");
1224 } else {
1225 // set new Net
1226 myNet = ec->net;
1227 // report success
1228 setStatusBarText("'" + ec->file + "' loaded.");
1230 // build viewparent toolbar grips before creating view parent
1232 // initialise NETEDIT View
1233 GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "NETEDIT VIEW", this, nullptr, myNet, ec->isNewNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1234 // create it maximized
1235 viewParent->maximize();
1236 // mark it as Active child
1237 myMDIClient->setActiveChild(viewParent);
1238 // cast pointer myViewNet
1239 myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1240 // set settings in view
1241 if (viewParent->getView() && ec->settingsFile != "") {
1242 GUISettingsHandler settings(ec->settingsFile, true, true);
1243 settings.addSettings(viewParent->getView());
1244 viewParent->getView()->addDecals(settings.getDecals());
1245 settings.applyViewport(viewParent->getView());
1246 settings.setSnapshots(viewParent->getView());
1247 }
1248 // set network name on the caption
1249 setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1250 // force supermode network
1251 if (myViewNet) {
1253 }
1254 if (myViewNet && ec->viewportFromRegistry) {
1255 Position off;
1256 off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1257 Position p(off.x(), off.y(), 0);
1258 myViewNet->setViewportFromToRot(off, p, 0);
1259 }
1260 }
1261 getApp()->endWaitCursor();
1263 // check if additionals/shapes has to be loaded at start
1264 if (oc.isSet("additional-files") && !oc.getString("additional-files").empty() && myNet) {
1265 // obtain vector of additional files
1266 std::vector<std::string> additionalFiles = oc.getStringVector("additional-files");
1267 // begin undolist
1268 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, "loading additionals and shapes from '" + toString(additionalFiles) + "'");
1269 // flag for check if there is error creating elements
1270 bool errorCreatingElement = false;
1271 // iterate over every additional file
1272 for (const auto& additionalFile : additionalFiles) {
1273 WRITE_MESSAGE("loading additionals and shapes from '" + additionalFile + "'");
1274 // declare general handler
1275 GNEGeneralHandler handler(myNet, additionalFile, true, false);
1276 // disable validation for additionals
1277 XMLSubSys::setValidation("never", "auto", "auto");
1278 // Run parser
1279 if (!handler.parse()) {
1280 WRITE_ERROR("Loading of " + additionalFile + " failed.");
1281 } else {
1282 // set additional-files
1283 oc.resetWritable();
1284 oc.set("additional-files", additionalFile);
1285 }
1286 // disable validation for additionals
1287 XMLSubSys::setValidation("auto", "auto", "auto");
1288 // enable demand elements if there is an error creating element
1289 if (handler.isErrorCreatingElement()) {
1290 errorCreatingElement = true;
1291 }
1292 }
1293 // check if enable save demand elements
1294 if (errorCreatingElement) {
1296 } else {
1298 }
1299 // end undo list
1300 myUndoList->end();
1301 }
1302 // check if demand elements has to be loaded at start
1303 if (oc.isSet("route-files") && !oc.getString("route-files").empty() && myNet) {
1304 // obtain vector of route files
1305 std::vector<std::string> demandElementsFiles = oc.getStringVector("route-files");
1306 // begin undolist
1307 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, "loading demand elements from '" + toString(demandElementsFiles) + "'");
1308 // flag for check if there is error creating elements
1309 bool errorCreatingElement = false;
1310 // iterate over every route file
1311 for (const auto& demandElementsFile : demandElementsFiles) {
1312 WRITE_MESSAGE("Loading demand elements from '" + demandElementsFile + "'");
1313 GNEGeneralHandler handler(myNet, demandElementsFile, true, false);
1314 // disable validation for demand elements
1315 XMLSubSys::setValidation("never", "auto", "auto");
1316 if (!handler.parse()) {
1317 WRITE_ERROR("Loading of " + demandElementsFile + " failed.");
1318 } else {
1319 // set first demandElementsFiles as default file
1320 oc.resetWritable();
1321 oc.set("route-files", demandElementsFile);
1322 }
1323 // disable validation for demand elements
1324 XMLSubSys::setValidation("auto", "auto", "auto");
1325 // enable demand elements if there is an error creating element
1326 if (handler.isErrorCreatingElement()) {
1327 errorCreatingElement = true;
1328 }
1329 }
1330 // check if enable save demand elements
1331 if (errorCreatingElement) {
1333 } else {
1335 }
1336 // end undo list
1337 myUndoList->end();
1338 }
1339 // check if data elements has to be loaded at start
1340 if (oc.isSet("data-files") && !oc.getString("data-files").empty() && myNet) {
1341 // obtain vector of data files
1342 std::vector<std::string> dataElementsFiles = oc.getStringVector("data-files");
1343 // disable update data
1345 // begin undolist
1346 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, "loading data elements from '" + toString(dataElementsFiles) + "'");
1347 // disable save data elements (because data elements were loaded through console)
1349 // iterate over every data file
1350 for (const auto& dataElementsFile : dataElementsFiles) {
1351 WRITE_MESSAGE("Loading data elements from '" + dataElementsFile + "'");
1352 GNEDataHandler dataHandler(myNet, dataElementsFile, true);
1353 // disable validation for data elements
1354 XMLSubSys::setValidation("never", "auto", "auto");
1355 if (!dataHandler.parse()) {
1356 WRITE_ERROR("Loading of " + dataElementsFile + " failed.");
1357 } else {
1358 // set first dataElementsFiles as default file
1359 oc.resetWritable();
1360 oc.set("data-files", dataElementsFile);
1361 }
1362 // disable validation for data elements
1363 XMLSubSys::setValidation("auto", "auto", "auto");
1364 // enable demand elements if there is an error creating element
1365 if (dataHandler.isErrorCreatingElement()) {
1367 } else {
1369 }
1370 }
1371 // end undolist
1372 myUndoList->end();
1373 // enable update data
1375 }
1376 // check if additionals output must be changed
1377 if (oc.isSet("additionals-output")) {
1378 // overwrite "additional-files" with value "additionals-output"
1379 oc.resetWritable();
1380 oc.set("additional-files", oc.getString("additionals-output"));
1381 }
1382 // check if demand elements output must be changed
1383 if (oc.isSet("demandelements-output")) {
1384 // overwrite "route-files" with value "demandelements-output"
1385 oc.resetWritable();
1386 oc.set("route-files", oc.getString("demandelements-output"));
1387 }
1388 // check if data elements output must be changed
1389 if (oc.isSet("dataelements-output")) {
1390 // overwrite "data-files" with value "dataelements-output"
1391 oc.resetWritable();
1392 oc.set("data-files", oc.getString("dataelements-output"));
1393 }
1394 // after loading net shouldn't be saved
1395 if (myNet) {
1396 myNet->requireSaveNet(false);
1397 }
1398 // write reload message
1399 if (myReloading) {
1400 WRITE_MESSAGE(TL("Reload successfully"));
1401 myReloading = false;
1402 }
1403 // update app
1404 update();
1405 // restore focus
1406 setFocus();
1407}
1408
1409
1410void
1412 GUIEvent_Message* ec = static_cast<GUIEvent_Message*>(e);
1414}
1415
1416// ---------------------------------------------------------------------------
1417// private methods
1418// ---------------------------------------------------------------------------
1419
1420void
1422 // build file menu
1423 myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1425 myFileMenuSUMOConfig = new FXMenuPane(this);
1426 myFileMenuTLS = new FXMenuPane(this);
1427 myFileMenuEdgeTypes = new FXMenuPane(this);
1428 myFileMenuAdditionals = new FXMenuPane(this);
1429 myFileMenuDemandElements = new FXMenuPane(this);
1430 myFileMenuDataElements = new FXMenuPane(this);
1433 // build recent files
1435 new FXMenuSeparator(myFileMenu);
1437 TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1438 nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1439 // build modes menu
1440 myModesMenu = new FXMenuPane(this);
1442 myModesMenuTitle->setTarget(this);
1444 // build Supermode commands and hide it
1447 // build separator between supermodes y modes
1448 new FXMenuSeparator(myModesMenu);
1449 // build modes menu commands
1451 // build edit menu
1452 myEditMenu = new FXMenuPane(this);
1454 // build edit menu commands
1456 // build separator
1457 new FXMenuSeparator(myEditMenu);
1458 // build view options
1462 // hide view options
1466 // build view menu commands
1468 // build separator
1469 new FXMenuSeparator(myEditMenu);
1470 // build front element menu commands
1472 // build separator
1473 new FXMenuSeparator(myEditMenu);
1474 // build open in sumo menu commands
1476 // build lock menu
1477 myLockMenu = new FXMenuPane(this);
1479 myLockMenuTitle->setTarget(this);
1481 // build lock menu commands
1483 // build processing menu (trigger netbuild computations)
1484 myProcessingMenu = new FXMenuPane(this);
1487 // build locate menu
1488 myLocatorMenu = new FXMenuPane(this);
1491 // build tools menu
1492 myToolsMenu = new FXMenuPane(this);
1495 // build windows menu
1496 myWindowMenu = new FXMenuPane(this);
1499 // build help menu
1500 myHelpMenu = new FXMenuPane(this);
1502 // build help menu commands
1503 GUIDesigns::buildFXMenuCommandShortcut(myHelpMenu, TL("&Online Documentation"), "F1", TL("Open Online documentation."),
1504 nullptr, this, MID_HOTKEY_F1_ONLINEDOCUMENTATION);
1505 new FXMenuSeparator(myEditMenu);
1506 GUIDesigns::buildFXMenuCommandShortcut(myHelpMenu, TL("&Changelog"), "", TL("Open Changelog."),
1507 nullptr, this, MID_CHANGELOG);
1508 GUIDesigns::buildFXMenuCommandShortcut(myHelpMenu, TL("&Hotkeys"), "", TL("Open Hotkeys."),
1509 nullptr, this, MID_HOTKEYS);
1510 GUIDesigns::buildFXMenuCommandShortcut(myHelpMenu, TL("&Tutorial"), "", TL("Open Tutorial."),
1511 nullptr, this, MID_TUTORIAL);
1512 new FXMenuSeparator(myEditMenu);
1513 GUIDesigns::buildFXMenuCommandShortcut(myHelpMenu, TL("&About"), "F12", TL("About netedit."),
1515}
1516
1517
1518void
1519GNEApplicationWindow::loadConfigOrNet(const std::string file, bool isNet, bool isReload, bool useStartupOptions, bool newNet) {
1521 getApp()->beginWaitCursor();
1522 myAmLoading = true;
1523 myReloading = isReload;
1525 if (isReload) {
1526 myLoadThread->start();
1527 setStatusBarText("Reloading.");
1528 } else {
1529 gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1530 myLoadThread->loadConfigOrNet(file, isNet, useStartupOptions, newNet);
1531 setStatusBarText("Loading '" + file + "'.");
1532 }
1533 // show supermode commands menu
1535 // show Network command menus (because Network is the default supermode)
1537 // update window
1538 update();
1539}
1540
1541
1542FXGLCanvas*
1544 // NETEDIT uses only a single View, then return nullptr
1545 return nullptr;
1546}
1547
1548
1551 return 0;
1552}
1553
1554
1555double
1557 return 1;
1558}
1559
1560
1563 return myUndoList;
1564}
1565
1566
1569 return myUndoListDialog;
1570}
1571
1572
1575 return myViewNet;
1576}
1577
1578
1581 return myToolbarsGrip;
1582}
1583
1584
1585void
1587 if (myViewNet && myViewNet->getNet()) {
1588 // show
1590 // set label depending of recomputing
1592 myRequireRecomputingButton->setText("");
1593 myRequireRecomputingButton->setTipText("Network computed");
1595 myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1596 } else {
1597 myRequireRecomputingButton->setText(TL("Press F5"));
1598 myRequireRecomputingButton->setTipText("Network requires recomputing");
1600 myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1601 }
1602 } else {
1603 // hide
1605 }
1606}
1607
1608
1609void
1611 // check if view has to be saved
1612 if (myViewNet) {
1614 }
1615 // lock tracker
1616 myTrackerLock.lock();
1617 // remove trackers and other external windows
1618 while (!myGLWindows.empty()) {
1619 delete myGLWindows.front();
1620 }
1621 myViewNet = nullptr;
1622 for (FXMainWindow* const window : myTrackerWindows) {
1623 window->destroy();
1624 delete window;
1625 }
1626 myTrackerWindows.clear();
1627 // reset the caption
1628 setTitle(myTitlePrefix);
1629 // unlock tracker
1630 myTrackerLock.unlock();
1631 // remove coordinate information
1632 myGeoCoordinate->setText(TL("N/A"));
1633 myCartesianCoordinate->setText(TL("N/A"));
1634 if (myTestCoordinate) {
1635 myTestCoordinate->setText(TL("N/A"));
1636 }
1637 // check if net can be deleted
1638 if (myNet != nullptr) {
1639 delete myNet;
1640 myNet = nullptr;
1642 }
1644 // Reset textures
1646 // reset fonts
1648 // disable saving command
1650}
1651
1652
1653FXCursor*
1655 return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1656}
1657
1658
1659void
1662 // Disable normalization preserve the given network as far as possible
1663 oc.set("offset.disable-normalization", "true");
1664 loadConfigOrNet("", true, false, true, oc.getBool("new"));
1665}
1666
1667
1668void
1669GNEApplicationWindow::loadNet(const std::string& file) {
1670 loadConfigOrNet(file, true);
1671}
1672
1673
1674void
1675GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1676 myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1677 myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1678}
1679
1680
1681long
1683 // obtain option container
1685 // declare variable to save FXMessageBox outputs.
1686 FXuint answer = 0;
1687 // declare string to save paths in wich additionals, shapes demand and data elements will be saved
1688 std::string additionalsSavePath = oc.getString("additional-files");
1689 std::string demandElementsSavePath = oc.getString("route-files");
1690 std::string dataElementsSavePath = oc.getString("data-files");
1691 // write warning if netedit is running in testing mode
1692 WRITE_DEBUG("Opening FXMessageBox 'Volatile Recomputing'");
1693 // open question dialog box
1694 answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Recompute with volatile options"),
1695 "Changes produced in the net due a recomputing with volatile options cannot be undone. Continue?");
1696 if (answer != 1) { //1:yes, 2:no, 4:esc
1697 // write warning if netedit is running in testing mode
1698 if (answer == 2) {
1699 WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'No'");
1700 } else if (answer == 4) {
1701 WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'ESC'");
1702 }
1703 // abort recompute with volatile options
1704 return 0;
1705 } else {
1706 // write warning if netedit is running in testing mode
1707 WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'Yes'");
1708 // Check if there are additionals in our net
1710 // ask user if want to save additionals if weren't saved previously
1711 if (oc.getString("additional-files") == "") {
1712 // write warning if netedit is running in testing mode
1713 WRITE_DEBUG("Opening FXMessageBox 'Save additionals before recomputing'");
1714 // open question dialog box
1715 answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Save additionals before recomputing with volatile options"),
1716 "Would you like to save additionals before recomputing?");
1717 if (answer != 1) { //1:yes, 2:no, 4:esc
1718 // write warning if netedit is running in testing mode
1719 if (answer == 2) {
1720 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before recomputing' with 'No'");
1721 } else if (answer == 4) {
1722 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before recomputing' with 'ESC'");
1723 }
1724 } else {
1725 // write warning if netedit is running in testing mode
1726 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before recomputing' with 'Yes'");
1727 // Open a dialog to set filename output
1728 FXString file = MFXUtils::getFilename2Write(this,
1729 TL("Save demand element file"), ".xml",
1731 gCurrentFolder).text();
1732 // add xml extension
1733 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".rou.xml");
1734 // check that file is valid
1735 if (fileWithExtension != "") {
1736 // update additional files
1737 oc.resetWritable();
1738 oc.set("additional-files", fileWithExtension);
1739 // set obtanied filename output into additionalsSavePath (can be "")
1740 additionalsSavePath = oc.getString("additional-files");
1741 }
1742 }
1743 }
1744 // Check if additional must be saved in a temporary directory, if user didn't define a directory for additionals
1745 if (oc.getString("additional-files") == "") {
1746 // Obtain temporary directory provided by FXSystem::getCurrentDirectory()
1747 additionalsSavePath = FXSystem::getTempDirectory().text() + std::string("/tmpAdditionalsNetedit.xml");
1748 }
1749 // Start saving additionals
1750 getApp()->beginWaitCursor();
1751 try {
1752 myNet->saveAdditionals(additionalsSavePath);
1753 } catch (IOError& e) {
1754 // write warning if netedit is running in testing mode
1755 WRITE_DEBUG("Opening FXMessageBox 'Error saving additionals before recomputing'");
1756 // open error message box
1757 FXMessageBox::error(this, MBOX_OK, TL("Saving additionals in temporary folder failed!"), "%s", e.what());
1758 // write warning if netedit is running in testing mode
1759 WRITE_DEBUG("Closed FXMessageBox 'Error saving additionals before recomputing' with 'OK'");
1760 }
1761 // end saving additionals
1763 getApp()->endWaitCursor();
1764 // restore focus
1765 setFocus();
1766 } else {
1767 // clear additional path
1768 additionalsSavePath = "";
1769 }
1770 // Check if there are demand elements in our net
1772 // ask user if want to save demand elements if weren't saved previously
1773 if (oc.getString("route-files") == "") {
1774 // write warning if netedit is running in testing mode
1775 WRITE_DEBUG("Opening FXMessageBox 'Save demand elements before recomputing'");
1776 // open question dialog box
1777 answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Save demand elements before recomputing with volatile options"),
1778 "Would you like to save demand elements before recomputing?");
1779 if (answer != 1) { //1:yes, 2:no, 4:esc
1780 // write warning if netedit is running in testing mode
1781 if (answer == 2) {
1782 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before recomputing' with 'No'");
1783 } else if (answer == 4) {
1784 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before recomputing' with 'ESC'");
1785 }
1786 } else {
1787 // write warning if netedit is running in testing mode
1788 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before recomputing' with 'Yes'");
1789 // Open a dialog to set filename output
1790 FXString file = MFXUtils::getFilename2Write(this,
1791 TL("Save demand element file"), ".rou.xml",
1793 gCurrentFolder).text();
1794 // add xml extension
1795 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".rou.xml");
1796 // check that file is valid
1797 if (fileWithExtension != "") {
1798 // update route files
1799 oc.resetWritable();
1800 oc.set("route-files", fileWithExtension);
1801 // set obtanied filename output into demand elementSavePath (can be "")
1802 demandElementsSavePath = oc.getString("route-files");
1803 }
1804 }
1805 }
1806 // Check if demand element must be saved in a temporary directory, if user didn't define a directory for demand elements
1807 if (oc.getString("route-files") == "") {
1808 // Obtain temporary directory provided by FXSystem::getCurrentDirectory()
1809 demandElementsSavePath = FXSystem::getTempDirectory().text() + std::string("/tmpDemandElementsNetedit.xml");
1810 }
1811 // Start saving demand elements
1812 getApp()->beginWaitCursor();
1813 try {
1814 myNet->saveDemandElements(demandElementsSavePath);
1815 } catch (IOError& e) {
1816 // write warning if netedit is running in testing mode
1817 WRITE_DEBUG("Opening FXMessageBox 'Error saving demand elements before recomputing'");
1818 // open error message box
1819 FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements in temporary folder failed!"), "%s", e.what());
1820 // write warning if netedit is running in testing mode
1821 WRITE_DEBUG("Closed FXMessageBox 'Error saving demand elements before recomputing' with 'OK'");
1822 }
1823 // end saving demand elements
1825 getApp()->endWaitCursor();
1826 // restore focus
1827 setFocus();
1828 } else {
1829 // clear demand element path
1830 demandElementsSavePath = "";
1831 }
1832 // Check if there are data elements in our net
1833 if (myNet->getAttributeCarriers()->getDataSets().size() > 0) {
1834 // ask user if want to save data elements if weren't saved previously
1835 if (oc.getString("data-files") == "") {
1836 // write warning if netedit is running in testing mode
1837 WRITE_DEBUG("Opening FXMessageBox 'Save data elements before recomputing'");
1838 // open question dialog box
1839 answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Save data elements before recomputing with volatile options"),
1840 "Would you like to save data elements before recomputing?");
1841 if (answer != 1) { //1:yes, 2:no, 4:esc
1842 // write warning if netedit is running in testing mode
1843 if (answer == 2) {
1844 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before recomputing' with 'No'");
1845 } else if (answer == 4) {
1846 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before recomputing' with 'ESC'");
1847 }
1848 } else {
1849 // write warning if netedit is running in testing mode
1850 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before recomputing' with 'Yes'");
1851 // Open a dialog to set filename output
1852 FXString file = MFXUtils::getFilename2Write(this,
1853 TL("Save data element file"), ".rou.xml",
1855 gCurrentFolder).text();
1856 // add xml extension
1857 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".rou.xml");
1858 // check that file is valid
1859 if (fileWithExtension != "") {
1860 // update data files
1861 oc.resetWritable();
1862 oc.set("data-files", fileWithExtension);
1863 // set obtanied filename output into data elementSavePath (can be "")
1864 dataElementsSavePath = oc.getString("data-files");
1865 }
1866 }
1867 }
1868 // Check if data element must be saved in a temporary directory, if user didn't define a directory for data elements
1869 if (oc.getString("data-files") == "") {
1870 // Obtain temporary directory provided by FXSystem::getCurrentDirectory()
1871 dataElementsSavePath = FXSystem::getTempDirectory().text() + std::string("/tmpDataElementsNetedit.xml");
1872 }
1873 // Start saving data elements
1874 getApp()->beginWaitCursor();
1875 try {
1876 myNet->saveDataElements(dataElementsSavePath);
1877 } catch (IOError& e) {
1878 // write warning if netedit is running in testing mode
1879 WRITE_DEBUG("Opening FXMessageBox 'Error saving data elements before recomputing'");
1880 // open error message box
1881 FXMessageBox::error(this, MBOX_OK, TL("Saving data elements in temporary folder failed!"), "%s", e.what());
1882 // write warning if netedit is running in testing mode
1883 WRITE_DEBUG("Closed FXMessageBox 'Error saving data elements before recomputing' with 'OK'");
1884 }
1885 // end saving data elements
1887 getApp()->endWaitCursor();
1888 // restore focus
1889 setFocus();
1890 } else {
1891 // clear data element path
1892 dataElementsSavePath = "";
1893 }
1894 // compute with volatile options
1895 myNet->computeNetwork(this, true, true, additionalsSavePath, demandElementsSavePath, dataElementsSavePath);
1897 return 1;
1898 }
1899}
1900
1901
1902void
1905}
1906
1907
1908void
1912}
1913
1914
1915void
1919}
1920
1921
1922void
1926}
1927
1928
1929void
1933}
1934
1935
1936void
1940}
1941
1942
1943void
1947}
1948
1949
1950long
1951GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1952 // check that currently there is a View
1953 if (myViewNet) {
1954 myViewNet->onCmdSetSupermode(sender, sel, ptr);
1955 }
1956 return 1;
1957}
1958
1959
1960long
1961GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1962 // check that currently there is a View
1963 if (myViewNet) {
1964 myViewNet->onCmdSetMode(sender, sel, ptr);
1965 }
1966 return 1;
1967}
1968
1969
1970long
1971GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector, void*) {
1972 if (myViewNet) {
1974 }
1975 return 1;
1976}
1977
1978
1979long
1980GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1981 // lock all
1984 return 1;
1985}
1986
1987
1988long
1990 // unlock all
1993 return 1;
1994}
1995
1996
1997long
1999 if (myViewNet) {
2000 myViewNet->update();
2001 }
2002 return 1;
2003}
2004
2005
2006long
2007GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
2008 if (myViewNet) {
2010 // supermode network
2016 myLockMenuTitle->enable();
2017 } else {
2018 myLockMenuTitle->disable();
2019 }
2021 // supermode demand
2026 myLockMenuTitle->enable();
2027 } else {
2028 myLockMenuTitle->disable();
2029 }
2031 // supermode data
2035 myLockMenuTitle->enable();
2036 } else {
2037 myLockMenuTitle->disable();
2038 }
2039 } else {
2040 myLockMenuTitle->disable();
2041 }
2042 } else {
2043 myLockMenuTitle->disable();
2044 }
2045 return 1;
2046}
2047
2048long
2049GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
2050 // first check if there is a view
2051 if (myViewNet) {
2052 // process depending of supermode
2054 // check what FXMenuCommand was called
2055 switch (FXSELID(sel)) {
2057 // show extra information for tests
2058 WRITE_DEBUG("Key F5 (Compute) pressed");
2059 myNet->computeNetwork(this, true, false);
2061 break;
2063 // show extra information for tests
2064 WRITE_DEBUG("Keys Shift + F5 (Compute with volatile options) pressed");
2066 break;
2068 // show extra information for tests
2069 WRITE_DEBUG("Key F6 (Clean junction) pressed");
2071 break;
2073 // show extra information for tests
2074 WRITE_DEBUG("Key F7 (Join junctions) pressed");
2076 break;
2078 // show extra information for tests
2079 WRITE_DEBUG("Key F8 (Clean invalid crossings) pressed");
2081 break;
2082 default:
2083 break;
2084 }
2086 // check what FXMenuCommand was called
2087 switch (FXSELID(sel)) {
2089 // show extra information for tests
2090 WRITE_DEBUG("Key F5 (Compute) pressed");
2093 break;
2095 // show extra information for tests
2096 WRITE_DEBUG("Key F6 (RemoveUnusedRoutes) pressed");
2098 break;
2100 // show extra information for tests
2101 WRITE_DEBUG("Key F7 (JoinRoutes) pressed");
2103 break;
2105 // show extra information for tests
2106 WRITE_DEBUG("Key F7 (AdjustPersonPlans) pressed");
2108 break;
2110 // show extra information for tests
2111 WRITE_DEBUG("Key F8 (CleanInvalidDemandElements) pressed");
2113 break;
2114 default:
2115 break;
2116 }
2117 }
2118 }
2119 return 1;
2120}
2121
2122
2123long
2124GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector, void*) {
2125 FXRegistry reg("SUMO netedit", "netedit");
2126 std::string netedit = "netedit";
2127 const char* sumoPath = getenv("SUMO_HOME");
2128 if (sumoPath != nullptr) {
2129 std::string newPath = std::string(sumoPath) + "/bin/netedit";
2130 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2131 netedit = "\"" + newPath + "\"";
2132 }
2133 }
2134 std::string cmd = netedit;
2135 // start in background
2136#ifndef WIN32
2137 cmd = cmd + " &";
2138#else
2139 // see "help start" for the parameters
2140 cmd = "start /B \"\" " + cmd;
2141#endif
2142 WRITE_MESSAGE("Running " + cmd + ".");
2143 // yay! fun with dangerous commands... Never use this over the internet
2145 return 1;
2146}
2147
2148
2149long
2150GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject*, FXSelector, void*) {
2151 // check that currently there is a View
2152 if (myViewNet) {
2153 // first check if network is saved
2154 if (!myViewNet->getNet()->isNetSaved()) {
2155 // save network
2156 onCmdSaveNetwork(nullptr, 0, nullptr);
2157 if (!myViewNet->getNet()->isNetSaved()) {
2158 return 0;
2159 }
2160 }
2161 // now check if additionals must be loaded and are saved
2162 if ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == TRUE) &&
2164 // save additionals
2165 onCmdSaveAdditionals(nullptr, 0, nullptr);
2166 // check if additionals were successfully saved. If not, abort
2167 if (!myViewNet->getNet()->isAdditionalsSaved()) {
2168 return 0;
2169 }
2170 }
2171 // finally check if demand elements must be loaded and are saved
2172 if ((myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == TRUE) &&
2174 // save additionals
2175 onCmdSaveDemandElements(nullptr, 0, nullptr);
2176 // check if demand elements were successfully saved. If not, abort
2178 return 0;
2179 }
2180 }
2181 // obtain viewport
2182 FXRegistry reg("SUMO GUI", "sumo-gui");
2183 reg.read();
2184 reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2185 reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2186 reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2187 reg.write();
2188 std::string sumogui = "sumo-gui";
2189 const char* sumoPath = getenv("SUMO_HOME");
2190 if (sumoPath != nullptr) {
2191 std::string newPath = std::string(sumoPath) + "/bin/sumo-gui";
2192 if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2193 sumogui = "\"" + newPath + "\"";
2194 }
2195 }
2196 // declare comand
2197 std::string cmd = sumogui + " --registry-viewport" + " -n " + "\"" + OptionsCont::getOptions().getString("output-file") + "\"";
2198 // obtainer options container
2200 // if load additionals is enabled, add it to command
2201 if ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == TRUE) && (oc.getString("additional-files").size() > 0)) {
2202 cmd += " -a \"" + oc.getString("additional-files") + "\"";
2203 }
2204 // if load demand is enabled, add it to command
2205 if ((myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == TRUE) && (oc.getString("route-files").size() > 0)) {
2206 cmd += " -r \"" + oc.getString("route-files") + "\"";
2207 }
2208 // if we have trips or flow over junctions, add option junction-taz
2211 cmd += " --junction-taz";
2212 }
2213 // start in background
2214#ifndef WIN32
2215 cmd = cmd + " &";
2216#else
2217 // see "help start" for the parameters
2218 cmd = "start /B \"\" " + cmd;
2219#endif
2220 WRITE_MESSAGE("Running " + cmd + ".");
2221 // yay! fun with dangerous commands... Never use this over the internet
2223 }
2224 return 1;
2225}
2226
2227
2228long
2229GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2230 // check that view exists
2231 if (myViewNet) {
2232 // show extra information for tests
2233 WRITE_DEBUG("Key ESC (abort) pressed");
2234 // first check if we're selecting a subset of edges in TAZ Frame
2236 // show extra information for tests
2237 WRITE_DEBUG("Cleaning current selected edges");
2238 // clear current selection
2240 } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2241 // check if stop select parent
2243 // show extra information for tests
2244 WRITE_DEBUG("Stop select new parent");
2245 // and stop select paretn
2247 } else {
2248 // show extra information for tests
2249 WRITE_DEBUG("Cleaning inspected elements");
2250 // clear inspected elements
2252 }
2253 } else {
2254 // abort current operation
2256 }
2257 }
2258 return 1;
2259}
2260
2261
2262long
2263GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2264 // check that view exists
2265 if (myViewNet) {
2266 // show extra information for tests
2267 WRITE_DEBUG("Key DEL (delete) pressed");
2269 }
2270 return 1;
2271}
2272
2273
2274long
2275GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2276 // check that view exists
2277 if (myViewNet) {
2278 // show extra information for tests
2279 WRITE_DEBUG("Key ENTER pressed");
2281 }
2282 return 1;
2283}
2284
2285
2286long
2287GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2288 // check that view exists
2289 if (myViewNet) {
2290 // show extra information for tests
2291 WRITE_DEBUG("Key BACKSPACE pressed");
2293 }
2294 return 1;
2295}
2296
2297long
2298GNEApplicationWindow::onCmdForceSaveNetwork(FXObject* /*sender*/, FXSelector /*sel*/, void* /*ptr*/) {
2299 // check that view exists
2300 if (myViewNet) {
2302 myViewNet->update();
2303 }
2304 return 1;
2305}
2306
2307
2308long
2309GNEApplicationWindow::onCmdForceSaveAdditionals(FXObject* /*sender*/, FXSelector /*sel*/, void* /*ptr*/) {
2310 // check that view exists
2311 if (myViewNet) {
2313 update();
2314 }
2315 return 1;
2316}
2317
2318
2319long
2320GNEApplicationWindow::onCmdForceSaveDemandElements(FXObject* /*sender*/, FXSelector /*sel*/, void* /*ptr*/) {
2321 // check that view exists
2322 if (myViewNet) {
2324 update();
2325 }
2326 return 1;
2327}
2328
2329
2330long
2331GNEApplicationWindow::onCmdForceSaveDataElements(FXObject* /*sender*/, FXSelector /*sel*/, void* /*ptr*/) {
2332 // check that view exists
2333 if (myViewNet) {
2335 update();
2336 }
2337 return 1;
2338}
2339
2340
2341long
2342GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2343 // check that view exists
2344 if (myViewNet) {
2346 }
2347 return 1;
2348}
2349
2350
2351long
2352GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2353 // enable or disable sender element depending of viewNet
2354 sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2355 return 1;
2356}
2357
2358
2359long
2362 return 1;
2363}
2364
2365
2366long
2367GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2368 // check that view exists
2369 if (myViewNet) {
2371 }
2372 return 1;
2373}
2374
2375
2376long
2377GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2378 // check that view exists
2379 if (myViewNet) {
2381 }
2382 return 1;
2383}
2384
2385
2386long
2387GNEApplicationWindow::onCmdToggleGrid(FXObject* obj, FXSelector sel, void* ptr) {
2388 // check that view exists
2389 if (myViewNet) {
2390 // show debug info
2392 // show extra information for tests
2393 WRITE_DEBUG("Disabled grid throught Ctrl+g hotkey");
2394 } else {
2395 // show extra information for tests
2396 WRITE_DEBUG("Enabled grid throught Ctrl+g hotkey");
2397 }
2398 // Call manually toggle grid function
2399 myViewNet->onCmdToggleShowGrid(obj, sel, ptr);
2400 }
2401 return 1;
2402}
2403
2404
2405long
2406GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* obj, FXSelector sel, void* ptr) {
2407 // check that view exists
2408 if (myViewNet) {
2409 // show debug info
2411 // show extra information for tests
2412 WRITE_DEBUG("Disabled draw junction shape throught Ctrl+j hotkey");
2413 } else {
2414 // show extra information for tests
2415 WRITE_DEBUG("Enabled draw junction shape throught Ctrl+j hotkey");
2416 }
2417 // Call manually toggle junction shape function
2419 }
2420 return 1;
2421}
2422
2423
2424long
2425GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2426 if (myViewNet) {
2427 if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2428 // get inspected AC
2429 GNEAttributeCarrier* inspectedAC = (myViewNet->getInspectedAttributeCarriers().size() == 1) ? myViewNet->getInspectedAttributeCarriers().front() : nullptr;
2430 // set or clear front attribute
2431 if (myViewNet->getFrontAttributeCarrier() == inspectedAC) {
2433 } else {
2434 myViewNet->setFrontAttributeCarrier(inspectedAC);
2435 }
2437 } else {
2439 }
2440 }
2441 return 1;
2442}
2443
2444
2445long
2446GNEApplicationWindow::onCmdToggleEditOptions(FXObject* obj, FXSelector sel, void* /* ptr */) {
2447 // first check that we have a ViewNet
2448 if (myViewNet) {
2449 // first check what selector was called
2450 int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2451 // check that numericalKeyPressed is valid
2452 if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2453 return 1;
2454 }
2455 // declare a vector in which save visible menu commands
2456 std::vector<MFXCheckableButton*> visibleMenuCommands;
2457 // get common, network and demand visible menu commands
2461 // now check that numericalKeyPressed isn't greather than visible view options
2462 if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2463 return 1;
2464 }
2465 // toggle edit options
2467 visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, obj, sel)) {
2468 return 1;
2470 visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, obj, sel)) {
2471 return 1;
2473 visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, obj, sel)) {
2474 return 1;
2475 }
2476 }
2477 return 1;
2478}
2479
2480
2481long
2482GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2483 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2484 return 1;
2485}
2486
2487
2488long
2489GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2490 // update in every version
2491 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2492 return 1;
2493}
2494
2495
2496long
2497GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2498 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/sumo-gui.html#keyboard_shortcuts");
2499 return 1;
2500}
2501
2502
2503long
2506 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2507 } else {
2508 return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2509 }
2510}
2511
2512
2513long
2514GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2515 MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2516 return 1;
2517}
2518
2519
2520long
2521GNEApplicationWindow::onCmdOptions(FXObject*, FXSelector, void*) {
2522 GUIDialog_Options* wizard =
2523 new GUIDialog_Options(this, TL("Configure Options"), getWidth(), getHeight());
2524
2525 if (wizard->execute()) {
2526 NIFrame::checkOptions(); // needed to set projection parameters
2529 SystemFrame::checkOptions(); // needed to set precision
2530 }
2531 return 1;
2532}
2533
2534
2535long
2536GNEApplicationWindow::onCmdUndo(FXObject*, FXSelector, void*) {
2537 WRITE_DEBUG("Keys Ctrl+Z (Undo) pressed");
2538 // Check conditions
2539 if (myViewNet == nullptr) {
2540 return 0;
2541 } else if (!myEditMenuCommands.undoLastChange->isEnabled()) {
2542 return 0;
2543 } else {
2544 // check supermode (currently ignore supermode data)
2547 // abort if user doesn't press "yes"
2549 return 0;
2550 }
2551 }
2553 // update current show frame after undo
2556 }
2557 // update manually undo/redo menu commands (see #6005)
2560 // update toolbar undo-redo buttons
2562 return 1;
2563 }
2564}
2565
2566
2567long
2568GNEApplicationWindow::onCmdRedo(FXObject*, FXSelector, void*) {
2569 WRITE_DEBUG("Keys Ctrl+Y (Redo) pressed");
2570 // Check conditions
2571 if (myViewNet == nullptr) {
2572 return 0;
2573 } else if (!myEditMenuCommands.redoLastChange->isEnabled()) {
2574 return 0;
2575 } else {
2576 // check supermode (currently ignore supermode data)
2579 // abort if user doesn't press "yes"
2581 return 0;
2582 }
2583 }
2585 // update current show frame after redo
2588 }
2589 // update manually undo/redo menu commands (see #6005)
2592 // update toolbar undo-redo buttons
2594 return 1;
2595 }
2596}
2597
2598
2599long
2601 // avoid open two dialogs
2602 if (myUndoListDialog->shown()) {
2604 } else {
2606 }
2607 return 1;
2608}
2609
2610
2611long
2612GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2613 // check if net exist and there is something to undo/redo
2614 if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2615 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2616 } else {
2617 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2618 if (myUndoListDialog->shown()) {
2620 }
2621 }
2622 return 1;
2623}
2624
2625
2626long
2628 // first check viewNet
2630 // update path calculator
2632 }
2633 return 1;
2634}
2635
2636
2637long
2638GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2639 WRITE_DEBUG("Key Ctrl+X (Cut) pressed");
2640 // Prepared for #6042
2641 return 1;
2642}
2643
2644
2645long
2646GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2647 WRITE_DEBUG("Key Ctrl+C (Copy) pressed");
2648 // Prepared for #6042
2649 return 1;
2650}
2651
2652
2653long
2654GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2655 WRITE_DEBUG("Key Ctrl+V (Paste) pressed");
2656 // Prepared for #6042
2657 return 1;
2658}
2659
2660
2661long
2662GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2663 WRITE_DEBUG("Key Ctrl+F1 (Set Template) pressed");
2664 // first check if myViewNet exist
2665 if (myViewNet) {
2666 // call set template in inspector frame
2668 }
2669 return 1;
2670}
2671
2672
2673long
2674GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2675 WRITE_DEBUG("Key Ctrl+F2 (Copy Template) pressed");
2676 // first check if myViewNet exist
2677 if (myViewNet) {
2678 // call copy template in inspector frame
2680 }
2681 return 1;
2682}
2683
2684
2685long
2686GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2687 WRITE_DEBUG("Key Ctrl+F3 (Clear Template) pressed");
2688 // first check if myViewNet exist
2689 if (myViewNet) {
2690 // call clear template in inspector frame
2692 }
2693 return 1;
2694}
2695
2696
2697long
2698GNEApplicationWindow::onCmdSaveAsNetwork(FXObject*, FXSelector, void*) {
2699 // declar extensions
2700 const std::string netExtension = ".net.xml";
2701 const std::string zipNetExtension = netExtension + ".gz";
2702 const std::string wildcard = (netExtension + "\n*" + zipNetExtension);
2703 // open dialog
2704 FXString file = MFXUtils::getFilename2Write(this,
2705 TL("Save Network as"), wildcard.c_str(),
2708 // get file with extension
2709 std::string fileWithExtension = file.text();
2710 // clear wildcard
2711 const size_t pos = fileWithExtension.find(wildcard);
2712 if (pos != std::string::npos) {
2713 // If found then erase it from string
2714 fileWithExtension.erase(pos, wildcard.length());
2715 }
2716 // check xml extension
2717 if (!GNEApplicationWindowHelper::stringEndsWith(fileWithExtension, netExtension) &&
2718 !GNEApplicationWindowHelper::stringEndsWith(fileWithExtension, zipNetExtension)) {
2719 fileWithExtension = FileHelpers::addExtension(fileWithExtension, netExtension);
2720 }
2721 // check that file with extension is valid
2722 if (fileWithExtension != "") {
2724 oc.resetWritable();
2725 oc.set("output-file", fileWithExtension);
2726 setTitle(MFXUtils::getTitleText(myTitlePrefix, fileWithExtension.c_str()));
2727 onCmdSaveNetwork(nullptr, 0, nullptr);
2728 }
2729 return 1;
2730}
2731
2732
2733long
2734GNEApplicationWindow::onCmdSaveAsPlainXML(FXObject*, FXSelector, void*) {
2735 // obtain option container
2737 // declare current folder
2738 FXString currentFolder = gCurrentFolder;
2739 // check if there is a saved network
2740 if (oc.getString("output-file").size() > 0) {
2741 // extract folder
2742 currentFolder = getFolder(oc.getString("output-file"));
2743 }
2744 // open dialog
2745 FXString file = MFXUtils::getFilename2Write(this,
2746 TL("Save plain-xml edge-file (other names will be deduced from this)"), "",
2748 currentFolder);
2749 // check that file is valid (note: in this case we don't need to use function FileHelpers::addExtension)
2750 if (file != "") {
2751 std::string prefix = file.text();
2752 // if the name of an edg.xml file was given, remove the suffix
2753 if (StringUtils::endsWith(prefix, ".edg.xml")) {
2754 prefix = prefix.substr(0, prefix.size() - 8);
2755 }
2756 if (StringUtils::endsWith(prefix, ".")) {
2757 prefix = prefix.substr(0, prefix.size() - 1);
2758 }
2759 getApp()->beginWaitCursor();
2760 try {
2761 myNet->savePlain(oc, prefix);
2762 } catch (IOError& e) {
2763 // write warning if netedit is running in testing mode
2764 WRITE_DEBUG("Opening FXMessageBox 'Error saving plainXML'");
2765 // open message box
2766 FXMessageBox::error(this, MBOX_OK, TL("Saving plain xml failed!"), "%s", e.what());
2767 // write warning if netedit is running in testing mode
2768 WRITE_DEBUG("Closed FXMessageBox 'Error saving plainXML' with 'OK'");
2769 }
2770 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "Plain XML saved with prefix '" + prefix + "'.\n");
2772 getApp()->endWaitCursor();
2773 // restore focus
2774 setFocus();
2775 }
2776 return 1;
2777}
2778
2779
2780long
2781GNEApplicationWindow::onCmdSaveJoined(FXObject*, FXSelector, void*) {
2782 // obtain option container
2784 // declare current folder
2785 FXString currentFolder = gCurrentFolder;
2786 // check if there is a saved network
2787 if (oc.getString("output-file").size() > 0) {
2788 // extract folder
2789 currentFolder = getFolder(oc.getString("output-file"));
2790 }
2791 // open dialog
2792 FXString file = MFXUtils::getFilename2Write(this,
2793 TL("Save joined-junctions"), ".nod.xml",
2795 currentFolder);
2796 // add xml extension
2797 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
2798 // check that file with extension is valid
2799 if (fileWithExtension != "") {
2800 getApp()->beginWaitCursor();
2801 try {
2802 myNet->saveJoined(oc, fileWithExtension);
2803 } catch (IOError& e) {
2804 // write warning if netedit is running in testing mode
2805 WRITE_DEBUG("Opening FXMessageBox 'error saving joined'");
2806 // opening error message
2807 FXMessageBox::error(this, MBOX_OK, TL("Saving joined junctions failed!"), "%s", e.what());
2808 // write warning if netedit is running in testing mode
2809 WRITE_DEBUG("Closed FXMessageBox 'error saving joined' with 'OK'");
2810 }
2811 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "Joined junctions saved to '" + fileWithExtension + "'.\n");
2813 getApp()->endWaitCursor();
2814 // restore focus
2815 setFocus();
2816 }
2817 return 1;
2818}
2819
2820
2821long
2822GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2823 // check if net exist
2824 if (myNet) {
2825 // enable menu cascades
2832 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2833 } else {
2834 // disable menu cascades
2841 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2842 }
2843}
2844
2845
2846long
2847GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2848 // check if at least there is one edge in the network
2849 if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2850 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2851 } else {
2852 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2853 }
2854}
2855
2856
2857long
2858GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2859 // check if net, viewnet and front attribute exist
2861 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2862 } else {
2863 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2864 }
2865}
2866
2867
2868long
2869GNEApplicationWindow::onUpdReload(FXObject* sender, FXSelector, void*) {
2870 if ((myNet == nullptr) || !OptionsCont::getOptions().isSet("sumo-net-file")) {
2871 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2872 } else {
2873 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2874 }
2875}
2876
2877
2878long
2879GNEApplicationWindow::onUpdSaveAllElements(FXObject* sender, FXSelector, void*) {
2880 bool enable = false;
2881 if (myNet) {
2882 if (!myNet->isNetSaved()) {
2883 enable = true;
2884 }
2885 if (!myNet->isAdditionalsSaved()) {
2886 enable = true;
2887 }
2888 if (!myNet->isDemandElementsSaved()) {
2889 enable = true;
2890 }
2891 if (!myNet->isDataElementsSaved()) {
2892 enable = true;
2893 }
2894 }
2895 sender->handle(this, enable ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2896 return 1;
2897}
2898
2899
2900long
2901GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2902 return sender->handle(this, ((myNet == nullptr) || myNet->isNetSaved()) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2903}
2904
2905
2906long
2907GNEApplicationWindow::onUpdSaveAdditionals(FXObject* sender, FXSelector, void*) {
2908 if (myNet == nullptr) {
2909 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2911 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2912 } else {
2913 return sender->handle(this, myNet->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2914 }
2915}
2916
2917
2918long
2919GNEApplicationWindow::onUpdSaveAdditionalsAs(FXObject* sender, FXSelector, void*) {
2920 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2921}
2922
2923
2924long
2925GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2926 return sender->handle(this, ((myNet == nullptr) || myNet->isDemandElementsSaved()) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2927}
2928
2929
2930long
2931GNEApplicationWindow::onUpdSaveDemandElementsAs(FXObject* sender, FXSelector, void*) {
2932 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getNumberOfDemandElements() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2933}
2934
2935
2936long
2937GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2938 return sender->handle(this, ((myNet == nullptr) || myNet->isDataElementsSaved()) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2939}
2940
2941
2942long
2943GNEApplicationWindow::onUpdSaveDataElementsAs(FXObject* sender, FXSelector, void*) {
2944 return sender->handle(this, ((myNet == nullptr) || (myNet->getAttributeCarriers()->getDataSets().size() == 0)) ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2945}
2946
2947
2948long
2949GNEApplicationWindow::onUpdUndo(FXObject* obj, FXSelector sel, void* ptr) {
2950 return myUndoList->onUpdUndo(obj, sel, ptr);
2951}
2952
2953
2954long
2955GNEApplicationWindow::onUpdRedo(FXObject* obj, FXSelector sel, void* ptr) {
2956 return myUndoList->onUpdRedo(obj, sel, ptr);
2957}
2958
2959
2960long
2961GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2962 // first check viewNet
2963 if (myViewNet) {
2964 // check supermode network
2966 // disable
2967 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2969 // disable
2970 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2971 } else {
2972 // enable
2973 return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2974 }
2975 } else {
2976 // disable
2977 return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2978 }
2979}
2980
2981
2982long
2983GNEApplicationWindow::onCmdToggleViewOption(FXObject* obj, FXSelector sel, void* ptr) {
2984 // check viewNet
2985 if (myViewNet) {
2986 // continue depending of selector
2987 switch (FXSELID(sel)) {
2988 // Network
2990 return myViewNet->onCmdToggleShowGrid(obj, sel, ptr);
2992 return myViewNet->onCmdToggleDrawJunctionShape(obj, sel, ptr);
2994 return myViewNet->onCmdToggleDrawSpreadVehicles(obj, sel, ptr);
2996 return myViewNet->onCmdToggleShowDemandElementsNetwork(obj, sel, ptr);
2998 return myViewNet->onCmdToggleSelectEdges(obj, sel, ptr);
3000 return myViewNet->onCmdToggleShowConnections(obj, sel, ptr);
3002 return myViewNet->onCmdToggleHideConnections(obj, sel, ptr);
3004 return myViewNet->onCmdToggleShowAdditionalSubElements(obj, sel, ptr);
3006 return myViewNet->onCmdToggleShowTAZElements(obj, sel, ptr);
3008 return myViewNet->onCmdToggleExtendSelection(obj, sel, ptr);
3010 return myViewNet->onCmdToggleChangeAllPhases(obj, sel, ptr);
3012 return myViewNet->onCmdToggleWarnAboutMerge(obj, sel, ptr);
3014 return myViewNet->onCmdToggleShowJunctionBubbles(obj, sel, ptr);
3016 return myViewNet->onCmdToggleMoveElevation(obj, sel, ptr);
3018 return myViewNet->onCmdToggleChainEdges(obj, sel, ptr);
3020 return myViewNet->onCmdToggleAutoOppositeEdge(obj, sel, ptr);
3021 // Demand
3023 return myViewNet->onCmdToggleShowGrid(obj, sel, ptr);
3025 return myViewNet->onCmdToggleDrawJunctionShape(obj, sel, ptr);
3027 return myViewNet->onCmdToggleDrawSpreadVehicles(obj, sel, ptr);
3031 return myViewNet->onCmdToggleHideShapes(obj, sel, ptr);
3033 return myViewNet->onCmdToggleShowTrips(obj, sel, ptr);
3035 return myViewNet->onCmdToggleShowAllPersonPlans(obj, sel, ptr);
3037 return myViewNet->onCmdToggleLockPerson(obj, sel, ptr);
3039 return myViewNet->onCmdToggleShowAllContainerPlans(obj, sel, ptr);
3041 return myViewNet->onCmdToggleLockContainer(obj, sel, ptr);
3043 return myViewNet->onCmdToggleShowOverlappedRoutes(obj, sel, ptr);
3044 // Data
3046 return myViewNet->onCmdToggleDrawJunctionShape(obj, sel, ptr);
3048 return myViewNet->onCmdToggleShowAdditionals(obj, sel, ptr);
3050 return myViewNet->onCmdToggleShowShapes(obj, sel, ptr);
3052 return myViewNet->onCmdToggleShowDemandElementsData(obj, sel, ptr);
3054 return myViewNet->onCmdToggleTAZRelDrawing(obj, sel, ptr);
3056 return myViewNet->onCmdToggleTAZRelDrawing(obj, sel, ptr);
3058 return myViewNet->onCmdToggleTAZRelOnlyFrom(obj, sel, ptr);
3060 return myViewNet->onCmdToggleTAZRelOnlyTo(obj, sel, ptr);
3061 default:
3062 return 0;
3063 }
3064 } else {
3065 return 0;
3066 }
3067}
3068
3069
3070long
3071GNEApplicationWindow::onUpdToggleViewOption(FXObject* obj, FXSelector sel, void* /*ptr*/) {
3072 // get menuCheck
3073 MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(obj);
3074 // check viewNet
3075 if (myViewNet && menuCheck) {
3076 // continue depending of selector
3077 switch (FXSELID(sel)) {
3078 // Network
3081 menuCheck->setCheck(TRUE);
3082 } else {
3083 menuCheck->setCheck(FALSE);
3084 }
3085 break;
3088 menuCheck->setCheck(TRUE);
3089 } else {
3090 menuCheck->setCheck(FALSE);
3091 }
3092 break;
3095 menuCheck->setCheck(TRUE);
3096 } else {
3097 menuCheck->setCheck(FALSE);
3098 }
3099 break;
3102 menuCheck->setCheck(TRUE);
3103 } else {
3104 menuCheck->setCheck(FALSE);
3105 }
3106 break;
3109 menuCheck->setCheck(TRUE);
3110 } else {
3111 menuCheck->setCheck(FALSE);
3112 }
3113 break;
3116 menuCheck->setCheck(TRUE);
3117 } else {
3118 menuCheck->setCheck(FALSE);
3119 }
3120 break;
3123 menuCheck->setCheck(TRUE);
3124 } else {
3125 menuCheck->setCheck(FALSE);
3126 }
3127 break;
3130 menuCheck->setCheck(TRUE);
3131 } else {
3132 menuCheck->setCheck(FALSE);
3133 }
3134 break;
3137 menuCheck->setCheck(TRUE);
3138 } else {
3139 menuCheck->setCheck(FALSE);
3140 }
3141 break;
3144 menuCheck->setCheck(TRUE);
3145 } else {
3146 menuCheck->setCheck(FALSE);
3147 }
3148 break;
3151 menuCheck->setCheck(TRUE);
3152 } else {
3153 menuCheck->setCheck(FALSE);
3154 }
3155 break;
3158 menuCheck->setCheck(TRUE);
3159 } else {
3160 menuCheck->setCheck(FALSE);
3161 }
3162 break;
3165 menuCheck->setCheck(TRUE);
3166 } else {
3167 menuCheck->setCheck(FALSE);
3168 }
3169 break;
3172 menuCheck->setCheck(TRUE);
3173 } else {
3174 menuCheck->setCheck(FALSE);
3175 }
3176 break;
3179 menuCheck->setCheck(TRUE);
3180 } else {
3181 menuCheck->setCheck(FALSE);
3182 }
3183 break;
3186 menuCheck->setCheck(TRUE);
3187 } else {
3188 menuCheck->setCheck(FALSE);
3189 }
3190 break;
3191 // Demand
3194 menuCheck->setCheck(TRUE);
3195 } else {
3196 menuCheck->setCheck(FALSE);
3197 }
3198 break;
3201 menuCheck->setCheck(TRUE);
3202 } else {
3203 menuCheck->setCheck(FALSE);
3204 }
3205 break;
3208 menuCheck->setCheck(TRUE);
3209 } else {
3210 menuCheck->setCheck(FALSE);
3211 }
3212 break;
3215 menuCheck->setCheck(TRUE);
3216 } else {
3217 menuCheck->setCheck(FALSE);
3218 }
3219 break;
3222 menuCheck->setCheck(TRUE);
3223 } else {
3224 menuCheck->setCheck(FALSE);
3225 }
3226 break;
3229 menuCheck->setCheck(TRUE);
3230 } else {
3231 menuCheck->setCheck(FALSE);
3232 }
3233 break;
3236 menuCheck->setCheck(TRUE);
3237 } else {
3238 menuCheck->setCheck(FALSE);
3239 }
3240 // special case for lock persons
3242 menuCheck->enable();
3243 } else {
3244 menuCheck->disable();
3245 }
3246 break;
3249 menuCheck->setCheck(TRUE);
3250 } else {
3251 menuCheck->setCheck(FALSE);
3252 }
3253 break;
3256 menuCheck->setCheck(TRUE);
3257 } else {
3258 menuCheck->setCheck(FALSE);
3259 }
3260 // special case for lock containers
3262 menuCheck->enable();
3263 } else {
3264 menuCheck->disable();
3265 }
3266 break;
3269 menuCheck->setCheck(TRUE);
3270 } else {
3271 menuCheck->setCheck(FALSE);
3272 }
3273 break;
3276 menuCheck->setCheck(TRUE);
3277 } else {
3278 menuCheck->setCheck(FALSE);
3279 }
3280 break;
3281 // Data
3284 menuCheck->setCheck(TRUE);
3285 } else {
3286 menuCheck->setCheck(FALSE);
3287 }
3288 break;
3291 menuCheck->setCheck(TRUE);
3292 } else {
3293 menuCheck->setCheck(FALSE);
3294 }
3295 break;
3298 menuCheck->setCheck(TRUE);
3299 } else {
3300 menuCheck->setCheck(FALSE);
3301 }
3302 break;
3305 menuCheck->setCheck(TRUE);
3306 } else {
3307 menuCheck->setCheck(FALSE);
3308 }
3309 break;
3312 menuCheck->setCheck(TRUE);
3313 } else {
3314 menuCheck->setCheck(FALSE);
3315 }
3316 break;
3319 menuCheck->setCheck(TRUE);
3320 } else {
3321 menuCheck->setCheck(FALSE);
3322 }
3323 break;
3324
3327 menuCheck->setCheck(TRUE);
3328 } else {
3329 menuCheck->setCheck(FALSE);
3330 }
3331 break;
3334 menuCheck->setCheck(TRUE);
3335 } else {
3336 menuCheck->setCheck(FALSE);
3337 }
3338 break;
3339 default:
3340 break;
3341 }
3342 }
3343 return 0;
3344}
3345
3346
3347long
3348GNEApplicationWindow::onCmdSaveAllElements(FXObject*, FXSelector, void*) {
3349 // save all elements
3350 if (!myNet->isNetSaved()) {
3351 onCmdSaveNetwork(nullptr, 0, nullptr);
3352 }
3353 if (!myNet->isAdditionalsSaved()) {
3354 onCmdSaveAdditionals(nullptr, 0, nullptr);
3355 }
3356 if (!myNet->isDemandElementsSaved()) {
3357 onCmdSaveDemandElements(nullptr, 0, nullptr);
3358 }
3359 if (!myNet->isDataElementsSaved()) {
3360 onCmdSaveDataElements(nullptr, 0, nullptr);
3361 }
3362 return 1;
3363}
3364
3365
3366long
3367GNEApplicationWindow::onCmdSaveNetwork(FXObject*, FXSelector, void*) {
3369 // function onCmdSaveAsNetwork must be executed if this is the first save
3370 if (oc.getString("output-file") == "" || oc.isDefault("output-file")) {
3371 return onCmdSaveAsNetwork(nullptr, 0, nullptr);
3372 } else {
3373 getApp()->beginWaitCursor();
3374 try {
3375 // obtain invalid networkElements (currently only edges or crossings
3376 std::vector<GNENetworkElement*> invalidNetworkElements;
3377 // iterate over crossings and edges
3378 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3379 if (edge.second->isNetworkElementValid() == false) {
3380 invalidNetworkElements.push_back(edge.second);
3381 }
3382 }
3383 for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3384 if (crossing->isNetworkElementValid() == false) {
3385 invalidNetworkElements.push_back(crossing);
3386 }
3387 }
3388 // if there are invalid network elements, open GNEFixNetworkElements
3389 if (invalidNetworkElements.size() > 0) {
3390 // 0 -> Canceled Saving, with or without selecting invalid network elements
3391 // 1 -> Invalid network elements fixed, friendlyPos enabled, or saved with invalid positions
3392 GNEFixNetworkElements fixNetworkElementsDialog(myViewNet, invalidNetworkElements);
3393 if (fixNetworkElementsDialog.execute() == 0) {
3394 // show debug information
3395 WRITE_DEBUG("network elements saving aborted");
3396 // stop
3397 return 1;
3398 } else {
3399 // Save network
3400 myNet->saveNetwork(oc);
3401 // show debug information
3402 WRITE_DEBUG("network elements saved after dialog");
3403 }
3404 } else {
3405 // Save network
3406 myNet->saveNetwork(oc);
3407 // show debug information
3408 WRITE_DEBUG("network elements saved");
3409 }
3410 } catch (IOError& e) {
3411 // write warning if netedit is running in testing mode
3412 WRITE_DEBUG("Opening FXMessageBox 'error saving network'");
3413 // open error message box
3414 FXMessageBox::error(this, MBOX_OK, TL("Saving Network failed!"), "%s", e.what());
3415 // write warning if netedit is running in testing mode
3416 WRITE_DEBUG("Closed FXMessageBox 'error saving network' with 'OK'");
3417 }
3418 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "Network saved in " + oc.getString("output-file") + ".\n");
3419 // After saving a net successfully, add it into Recent Nets list.
3420 myMenuBarFile.myRecentNetsAndConfigs.appendFile(oc.getString("output-file").c_str());
3422 getApp()->endWaitCursor();
3423 // update view
3425 // set focus again in net
3426 myViewNet->setFocus();
3427 return 1;
3428 }
3429}
3430
3431
3432long
3433GNEApplicationWindow::onCmdSaveSUMOConfig(FXObject*, FXSelector, void*) {
3434 // obtain option container
3436 // check if save additional menu is enabled
3437 if (myFileMenuCommands.saveSUMOConfig->isEnabled()) {
3438 // Check if SUMOConfig file was already set at start of netedit or with a previous save
3439 if (oc.getString("SUMOConfig-output").empty()) {
3440 // declare current folder
3441 FXString currentFolder = gCurrentFolder;
3442 // check if there is a saved network
3443 if (oc.getString("output-file").size() > 0) {
3444 // extract folder
3445 currentFolder = getFolder(oc.getString("output-file"));
3446 }
3447 // open dialog
3448 FXString file = MFXUtils::getFilename2Write(this,
3449 TL("Save SUMOConfig"), ".sumocfg",
3451 currentFolder);
3452 // add xml extension
3453 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".sumocfg");
3454 // check tat file is valid
3455 if (file == "") {
3456 // None SUMOConfig file was selected, then stop function
3457 return 0;
3458 } else {
3459 // change value of "SUMOConfig-output"
3460 oc.resetWritable();
3461 oc.set("SUMOConfig-output", fileWithExtension);
3462 }
3463 }
3464 // Start saving SUMOConfig
3465 getApp()->beginWaitCursor();
3466 // save all elements
3467 onCmdSaveAllElements(nullptr, 0, nullptr);
3468 // save config
3470 getApp()->endWaitCursor();
3471 // restore focus
3472 setFocus();
3473 return 1;
3474 } else {
3475 return 0;
3476 }
3477}
3478
3479
3480long
3481GNEApplicationWindow::onCmdSaveSUMOConfigAs(FXObject*, FXSelector, void*) {
3482 // obtain option container
3484 // declare current folder
3485 FXString currentFolder = gCurrentFolder;
3486 // check if there is a saved network
3487 if (oc.getString("output-file").size() > 0) {
3488 // extract folder
3489 currentFolder = getFolder(oc.getString("output-file"));
3490 }
3491 // open dialog
3492 FXString file = MFXUtils::getFilename2Write(this,
3493 TL("Save SUMOConfig"), ".sumocfg",
3495 currentFolder);
3496 // add xml extension
3497 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".sumocfg");
3498 // check tat file is valid
3499 if (file == "") {
3500 // None SUMOConfig file was selected, then stop function
3501 return 0;
3502 } else {
3503 // change value of "SUMOConfig-output"
3504 oc.resetWritable();
3505 oc.set("SUMOConfig-output", fileWithExtension);
3506 }
3507 // Start saving SUMOConfig
3508 getApp()->beginWaitCursor();
3509 // save config
3511 getApp()->endWaitCursor();
3512 // restore focus
3513 setFocus();
3514 return 1;
3515}
3516
3517
3518long
3519GNEApplicationWindow::onUpdSaveSUMOConfig(FXObject* sender, FXSelector, void*) {
3520 // check if net exist and there is junctions
3521 if (myNet) {
3522 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3523 } else {
3524 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3525 }
3526 return 1;
3527}
3528
3529
3530long
3531GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject*, FXSelector, void*) {
3532 // obtain option container
3534 // check if save additional menu is enabled
3535 if (myFileMenuCommands.saveTLSPrograms->isEnabled()) {
3536 // Check if TLS Programs file was already set at start of netedit or with a previous save
3537 if (oc.getString("TLSPrograms-output").empty()) {
3538 // declare current folder
3539 FXString currentFolder = gCurrentFolder;
3540 // check if there is a saved network
3541 if (oc.getString("output-file").size() > 0) {
3542 // extract folder
3543 currentFolder = getFolder(oc.getString("output-file"));
3544 }
3545 // open dialog
3546 FXString file = MFXUtils::getFilename2Write(this,
3547 TL("Save TLS Programs"), ".xml",
3549 currentFolder);
3550 // add xml extension
3551 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
3552 // check tat file is valid
3553 if (file == "") {
3554 // None TLS Programs file was selected, then stop function
3555 return 0;
3556 } else {
3557 // change value of "TLSPrograms-output"
3558 oc.resetWritable();
3559 oc.set("TLSPrograms-output", fileWithExtension);
3560 }
3561 }
3562 // Start saving TLS Programs
3563 getApp()->beginWaitCursor();
3564 try {
3565 myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3566 myNet->saveTLSPrograms(oc.getString("TLSPrograms-output"));
3567 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "TLS Programs saved in " + oc.getString("TLSPrograms-output") + ".\n");
3569 } catch (IOError& e) {
3570 // write warning if netedit is running in testing mode
3571 WRITE_DEBUG("Opening FXMessageBox 'error saving TLS Programs'");
3572 // open error message box
3573 FXMessageBox::error(this, MBOX_OK, TL("Saving TLS Programs failed!"), "%s", e.what());
3574 // write warning if netedit is running in testing mode
3575 WRITE_DEBUG("Closed FXMessageBox 'error saving TLS Programs' with 'OK'");
3576 }
3578 getApp()->endWaitCursor();
3579 // restore focus
3580 setFocus();
3581 return 1;
3582 } else {
3583 return 0;
3584 }
3585}
3586
3587
3588long
3589GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3590 // check if net exist and there is junctions
3591 if (myNet && (myNet->getAttributeCarriers()->getJunctions().size() > 0)) {
3592 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3593 } else {
3594 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3595 }
3596 return 1;
3597}
3598
3599
3600long
3601GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject*, FXSelector, void*) {
3602 // obtain option container
3604 // check if save additional menu is enabled
3605 if (myFileMenuCommands.saveEdgeTypes->isEnabled()) {
3606 // Check if edgeType file was already set at start of netedit or with a previous save
3607 if (oc.getString("edgeTypes-output").empty()) {
3608 // declare current folder
3609 FXString currentFolder = gCurrentFolder;
3610 // check if there is a saved network
3611 if (oc.getString("output-file").size() > 0) {
3612 // extract folder
3613 currentFolder = getFolder(oc.getString("output-file"));
3614 }
3615 // open dialog
3616 FXString file = MFXUtils::getFilename2Write(this,
3617 TL("Save edgeType file"), ".xml",
3619 currentFolder);
3620 // add xml extension
3621 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
3622 // check tat file is valid
3623 if (file == "") {
3624 // None edgeType Programs file was selected, then stop function
3625 return 0;
3626 } else {
3627 // change value of "edgeTypes-output"
3628 oc.resetWritable();
3629 oc.set("edgeTypes-output", fileWithExtension);
3630 }
3631 }
3632 // Start saving edgeTypes
3633 getApp()->beginWaitCursor();
3634 try {
3635 myNet->saveEdgeTypes(oc.getString("edgeTypes-output"));
3636 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "EdgeType saved in " + oc.getString("edgeTypes-output") + ".\n");
3638 } catch (IOError& e) {
3639 // write warning if netedit is running in testing mode
3640 WRITE_DEBUG("Opening FXMessageBox 'error saving edgeTypes'");
3641 // open error message box
3642 FXMessageBox::error(this, MBOX_OK, TL("Saving edgeTypes failed!"), "%s", e.what());
3643 // write warning if netedit is running in testing mode
3644 WRITE_DEBUG("Closed FXMessageBox 'error saving edgeTypes' with 'OK'");
3645 }
3647 getApp()->endWaitCursor();
3648 // restore focus
3649 setFocus();
3650 return 1;
3651 } else {
3652 return 0;
3653 }
3654}
3655
3656
3657long
3658GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3659 // check if net exist and there are edge types
3660 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3661 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3662 } else {
3663 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3664 }
3665 return 1;
3666}
3667
3668
3669long
3671 // obtain option container
3673 // declare current folder
3674 FXString currentFolder = gCurrentFolder;
3675 // check if there is a saved network
3676 if (oc.getString("output-file").size() > 0) {
3677 // extract folder
3678 currentFolder = getFolder(oc.getString("output-file"));
3679 }
3680 // Open window to select TLS Programs file
3681 FXString file = MFXUtils::getFilename2Write(this,
3682 TL("Save TLS Programs as"), ".xml",
3684 currentFolder);
3685 // add xml extension
3686 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
3687 // check tat file is valid
3688 if (fileWithExtension != "") {
3689 // change value of "TLSPrograms-output"
3691 OptionsCont::getOptions().set("TLSPrograms-output", fileWithExtension);
3692 // save TLS Programs
3693 return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3694 } else {
3695 return 1;
3696 }
3697}
3698
3699
3700long
3701GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3702 // obtain option container
3704 // declare current folder
3705 FXString currentFolder = gCurrentFolder;
3706 // check if there is a saved network
3707 if (oc.getString("output-file").size() > 0) {
3708 // extract folder
3709 currentFolder = getFolder(oc.getString("output-file"));
3710 }
3711 // Open window to select edgeType file
3712 FXString file = MFXUtils::getFilename2Write(this,
3713 TL("Save edgeType file as"), ".xml",
3715 currentFolder);
3716 // add xml extension
3717 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
3718 // check tat file is valid
3719 if (fileWithExtension != "") {
3720 // change value of "edgeTypes-output"
3721 OptionsCont::getOptions().set("edgeTypes-output", fileWithExtension);
3722 // save edgeTypes
3723 return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3724 } else {
3725 return 1;
3726 }
3727}
3728
3729
3730long
3731GNEApplicationWindow::onUpdSaveEdgeTypesAs(FXObject* sender, FXSelector, void*) {
3732 // check if net exist and there are edge types
3733 if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3734 sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3735 } else {
3736 sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3737 }
3738 return 1;
3739}
3740
3741
3742long
3743GNEApplicationWindow::onCmdOpenAdditionals(FXObject*, FXSelector, void*) {
3744 // write debug information
3745 WRITE_DEBUG("Open additional dialog");
3746 // get the Additional file name
3747 FXFileDialog opendialog(this, TL("Open Additionals file"));
3749 opendialog.setSelectMode(SELECTFILE_EXISTING);
3750 opendialog.setPatternList("XML files (*.xml,*.xml.gz)\nAll files (*)");
3751 if (gCurrentFolder.length() != 0) {
3752 opendialog.setDirectory(gCurrentFolder);
3753 }
3754 if (opendialog.execute()) {
3755 // close additional dialog
3756 WRITE_DEBUG("Close additional dialog");
3757 // declare overwrite flag
3758 bool overwriteElements = false;
3759 // check if open question dialog box
3760 if (opendialog.getFilename().text() == OptionsCont::getOptions().getString("additional-files")) {
3761 // open overwrite dialog
3762 GNEOverwriteElementsDialog overwriteDialog(this, "additional");
3763 // continue depending of result
3764 if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3765 // abort load
3766 return 0;
3767 } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3768 // enable overwriteElements
3769 overwriteElements = true;
3770 }
3771 }
3772 // save previous status save
3773 const bool requireSaveAdditionals = !myNet->isAdditionalsSaved();
3774 const bool requireSaveDemandElements = !myNet->isDemandElementsSaved();
3775 const bool requireSaveDataElements = !myNet->isDataElementsSaved();
3776 // udpate current folder
3777 gCurrentFolder = opendialog.getDirectory();
3778 std::string file = opendialog.getFilename().text();
3779 // disable validation for additionals
3780 XMLSubSys::setValidation("never", "auto", "auto");
3781 // Create additional handler
3782 GNEGeneralHandler generalHandler(myNet, file, true, overwriteElements);
3783 // begin undoList operation
3784 myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, "reloading additionals from '" + file + "'");
3785 // Run parser
3786 if (!generalHandler.parse()) {
3787 WRITE_ERROR("Loading of " + file + " failed.");
3788 }
3789 // enable demand elements if there is an error creating element
3790 if (generalHandler.isErrorCreatingElement()) {
3792 }
3793 // end undoList operation and update view
3794 myUndoList->end();
3795 update();
3796 // restore validation for additionals
3797 XMLSubSys::setValidation("auto", "auto", "auto");
3798 // update require save additional elements
3799 myNet->requireSaveAdditionals(requireSaveAdditionals);
3800 myNet->requireSaveDemandElements(requireSaveDemandElements);
3801 myNet->requireSaveDataElements(requireSaveDataElements);
3802 // change value of "additional-files"
3804 oc.resetWritable();
3805 oc.set("additional-files", opendialog.getFilename().text());
3806 } else {
3807 // write debug information
3808 WRITE_DEBUG("Cancel additional dialog");
3809 }
3810 return 1;
3811}
3812
3813
3814long
3816 // get file
3817 const std::string file = OptionsCont::getOptions().getString("additional-files");
3818 // disable validation for additionals
3819 XMLSubSys::setValidation("never", "auto", "auto");
3820 // Create general handler
3821 GNEGeneralHandler generalHandler(myNet, file, true, true);
3822 // begin undoList operation
3823 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, "reloading additionals from '" + file + "'");
3824 // clear additionals
3826 // Run parser
3827 if (!generalHandler.parse()) {
3828 WRITE_ERROR("Reloading of " + file + " failed.");
3829 }
3830 // end undoList operation and update view
3831 myUndoList->end();
3832 update();
3833 // restore validation for additionals
3834 XMLSubSys::setValidation("auto", "auto", "auto");
3835 return 1;
3836}
3837
3838
3839long
3841 // check if file exist
3842 if (myViewNet && OptionsCont::getOptions().getString("additional-files").empty()) {
3843 return myFileMenuCommands.reloadAdditionals->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3844 } else {
3845 return myFileMenuCommands.reloadAdditionals->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3846 }
3847}
3848
3849
3850long
3851GNEApplicationWindow::onCmdSaveAdditionals(FXObject*, FXSelector, void*) {
3852 // obtain option container
3854 // check if save additional menu is enabled
3855 if (myFileMenuCommands.saveAdditionals->isEnabled()) {
3856 // Check if additionals file was already set at start of netedit or with a previous save
3857 if (oc.getString("additional-files").empty()) {
3858 // declare current folder
3859 FXString currentFolder = gCurrentFolder;
3860 // check if there is a saved network
3861 if (oc.getString("output-file").size() > 0) {
3862 // extract folder
3863 currentFolder = getFolder(oc.getString("output-file"));
3864 }
3865 // open dialog
3866 FXString file = MFXUtils::getFilename2Write(this,
3867 TL("Save Additionals file"), ".xml",
3869 currentFolder);
3870 // add xml extension
3871 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
3872 // check tat file is valid
3873 if (fileWithExtension != "") {
3874 // change value of "additional-files"
3875 oc.resetWritable();
3876 oc.set("additional-files", fileWithExtension);
3877 } else {
3878 // None additionals file was selected, then stop function
3879 return 0;
3880 }
3881 }
3882 // Start saving additionals
3883 getApp()->beginWaitCursor();
3884 try {
3885 // compute before saving (for detectors positions)
3886 myNet->computeNetwork(this);
3887 myNet->saveAdditionals(oc.getString("additional-files"));
3888 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "Additionals saved in " + oc.getString("additional-files") + ".\n");
3890 } catch (IOError& e) {
3891 // write warning if netedit is running in testing mode
3892 WRITE_DEBUG("Opening FXMessageBox 'error saving additionals'");
3893 // open error message box
3894 FXMessageBox::error(this, MBOX_OK, TL("Saving additionals failed!"), "%s", e.what());
3895 // write warning if netedit is running in testing mode
3896 WRITE_DEBUG("Closed FXMessageBox 'error saving additionals' with 'OK'");
3897 }
3899 getApp()->endWaitCursor();
3900 // restore focus
3901 setFocus();
3902 return 1;
3903 } else {
3904 return 0;
3905 }
3906}
3907
3908
3909long
3911 // obtain option container
3913 // declare current folder
3914 FXString currentFolder = gCurrentFolder;
3915 // check if there is a saved network
3916 if (oc.getString("output-file").size() > 0) {
3917 // extract folder
3918 currentFolder = getFolder(oc.getString("output-file"));
3919 }
3920 // Open window to select additional file
3921 FXString file = MFXUtils::getFilename2Write(this,
3922 TL("Save Additionals file as"), ".xml",
3924 currentFolder);
3925 // add xml extension
3926 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
3927 // check tat file is valid
3928 if (fileWithExtension != "") {
3929 // reset writtable flag
3931 // change value of "additional-files"
3932 OptionsCont::getOptions().set("additional-files", fileWithExtension);
3933 // change flag of menu command for save additionals
3935 // save additionals
3936 return onCmdSaveAdditionals(nullptr, 0, nullptr);
3937 } else {
3938 return 1;
3939 }
3940}
3941
3942
3943long
3945 // write debug information
3946 WRITE_DEBUG("Open demand element dialog");
3947 // get the demand element file name
3948 FXFileDialog opendialog(this, TL("Open demand element file"));
3950 opendialog.setSelectMode(SELECTFILE_EXISTING);
3951 opendialog.setPatternList("XML files (*.xml,*.xml.gz)\nDemand files (*rou.xml,*rou.xml.gz)\nAll files (*)");
3952 if (gCurrentFolder.length() != 0) {
3953 opendialog.setDirectory(gCurrentFolder);
3954 }
3955 if (opendialog.execute()) {
3956 // close additional dialog
3957 WRITE_DEBUG("Close demand element dialog");
3958 // declare overwrite flag
3959 bool overwriteElements = false;
3960 // check if open question dialog box
3961 if (opendialog.getFilename().text() == OptionsCont::getOptions().getString("route-files")) {
3962 // open overwrite dialog
3963 GNEOverwriteElementsDialog overwriteDialog(this, "route");
3964 // continue depending of result
3965 if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3966 // abort load
3967 return 0;
3968 } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3969 // enable overwriteElements
3970 overwriteElements = true;
3971 }
3972 }
3973 // save previous status save
3974 const bool requireSaveAdditionals = !myNet->isAdditionalsSaved();
3975 const bool requireSaveDemandElements = !myNet->isDemandElementsSaved();
3976 const bool requireSaveDataElements = !myNet->isDataElementsSaved();
3977 // udpate current folder
3978 gCurrentFolder = opendialog.getDirectory();
3979 std::string file = opendialog.getFilename().text();
3980 // disable validation for additionals
3981 XMLSubSys::setValidation("never", "auto", "auto");
3982 // Create generic handler
3983 GNEGeneralHandler handler(myNet, file, true, overwriteElements);
3984 // begin undoList operation
3985 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, "loading demand elements from '" + file + "'");
3986 // Run parser for additionals
3987 if (!handler.parse()) {
3988 WRITE_ERROR("Loading of " + file + " failed.");
3989 }
3990 // enable demand elements if there is an error creating element
3991 if (handler.isErrorCreatingElement()) {
3993 }
3994 // end undoList operation and update view
3995 myUndoList->end();
3996 update();
3997 // restore validation for demand
3998 XMLSubSys::setValidation("auto", "auto", "auto");
3999 // update require save additional elements
4000 myNet->requireSaveAdditionals(requireSaveAdditionals);
4001 myNet->requireSaveDemandElements(requireSaveDemandElements);
4002 myNet->requireSaveDataElements(requireSaveDataElements);
4003 // change value of "route-files"
4005 oc.resetWritable();
4006 oc.set("route-files", opendialog.getFilename().text());
4007 } else {
4008 // write debug information
4009 WRITE_DEBUG("Cancel demand element dialog");
4010 }
4011 return 1;
4012}
4013
4014
4015long
4017 // get file
4018 const std::string file = OptionsCont::getOptions().getString("route-files");
4019 // disable validation for additionals
4020 XMLSubSys::setValidation("never", "auto", "auto");
4021 // Create handler
4022 GNEGeneralHandler handler(myNet, file, true, true);
4023 // begin undoList operation
4024 myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, "reloading demand elements from '" + file + "'");
4025 // clear demand elements
4027 // Run parser for additionals
4028 if (!handler.parse()) {
4029 WRITE_ERROR("Reloading of " + file + " failed.");
4030 }
4031 // end undoList operation and update view
4032 myUndoList->end();
4033 update();
4034 // restore validation for demand
4035 XMLSubSys::setValidation("auto", "auto", "auto");
4036 return 1;
4037}
4038
4039
4040long
4042 // check if file exist
4043 if (myViewNet && OptionsCont::getOptions().getString("route-files").empty()) {
4044 return myFileMenuCommands.reloadDemandElements->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4045 } else {
4046 return myFileMenuCommands.reloadDemandElements->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4047 }
4048}
4049
4050
4051long
4053 // obtain option container
4055 // check if save demand element menu is enabled
4056 if (myFileMenuCommands.saveDemandElements->isEnabled()) {
4057 // Check if demand elements file was already set at start of netedit or with a previous save
4058 if (oc.getString("route-files").empty()) {
4059 // declare current folder
4060 FXString currentFolder = gCurrentFolder;
4061 // check if there is a saved network
4062 if (oc.getString("output-file").size() > 0) {
4063 // extract folder
4064 currentFolder = getFolder(oc.getString("output-file"));
4065 }
4066 // open dialog
4067 FXString file = MFXUtils::getFilename2Write(this,
4068 TL("Save demand element file"), ".rou.xml",
4070 currentFolder);
4071 // add xml extension
4072 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".rou.xml");
4073 // check tat file is valid
4074 if (fileWithExtension != "") {
4075 // change value of "route-files"
4076 oc.resetWritable();
4077 oc.set("route-files", fileWithExtension);
4078 } else {
4079 // None demand elements file was selected, then stop function
4080 return 0;
4081 }
4082 }
4083 // Start saving demand elements
4084 getApp()->beginWaitCursor();
4085 try {
4086 myNet->saveDemandElements(oc.getString("route-files"));
4087 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "Demand elements saved in " + oc.getString("route-files") + ".\n");
4089 } catch (IOError& e) {
4090 // write warning if netedit is running in testing mode
4091 WRITE_DEBUG("Opening FXMessageBox 'error saving demand elements'");
4092 // open error message box
4093 FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements failed!"), "%s", e.what());
4094 // write warning if netedit is running in testing mode
4095 WRITE_DEBUG("Closed FXMessageBox 'error saving demand elements' with 'OK'");
4096 }
4098 getApp()->endWaitCursor();
4099 // restore focus
4100 setFocus();
4101 return 1;
4102 } else {
4103 return 0;
4104 }
4105}
4106
4107
4108long
4110 // obtain option container
4112 // declare current folder
4113 FXString currentFolder = gCurrentFolder;
4114 // check if there is a saved network
4115 if (oc.getString("output-file").size() > 0) {
4116 // extract folder
4117 currentFolder = getFolder(oc.getString("output-file"));
4118 }
4119 // Open window to select additionasl file
4120 FXString file = MFXUtils::getFilename2Write(this,
4121 TL("Save demand element file as"), ".rou.xml",
4123 currentFolder);
4124 // add xml extension
4125 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".rou.xml");
4126 // check that file is correct
4127 if (fileWithExtension != "") {
4128 // reset writtable flag
4130 // change value of "route-files"
4131 OptionsCont::getOptions().set("route-files", fileWithExtension);
4132 // change flag of menu command for save demand elements
4134 // save demand elements
4135 return onCmdSaveDemandElements(nullptr, 0, nullptr);
4136 } else {
4137 return 1;
4138 }
4139}
4140
4141
4142long
4143GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4144 // write debug information
4145 WRITE_DEBUG("Open data element dialog");
4146 // get the data element file name
4147 FXFileDialog opendialog(this, TL("Open data element file"));
4149 opendialog.setSelectMode(SELECTFILE_EXISTING);
4150 opendialog.setPatternList("XML files (*.xml,*.xml.gz)\nData files (*dat.xml,*dat.xml.gz)\nAll files (*)");
4151 if (gCurrentFolder.length() != 0) {
4152 opendialog.setDirectory(gCurrentFolder);
4153 }
4154 if (opendialog.execute()) {
4155 // close additional dialog
4156 WRITE_DEBUG("Close data element dialog");
4157 // check if open question dialog box
4158 if (opendialog.getFilename().text() == OptionsCont::getOptions().getString("data-files")) {
4159 // open question dialog box
4160 const auto answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Load same data file"),
4161 "Selected data file was already loaded. Continue?");
4162 if (answer != 1) { //1:yes, 2:no, 4:esc
4163 // write warning if netedit is running in testing mode
4164 if (answer == 2) {
4165 WRITE_DEBUG("Closed FXMessageBox 'Load same data file' with 'No'");
4166 } else if (answer == 4) {
4167 WRITE_DEBUG("Closed FXMessageBox 'Load same data file' with 'ESC'");
4168 }
4169 return 0;
4170 }
4171 }
4172 // save previous status save
4173 const bool requireSaveAdditionals = !myNet->isAdditionalsSaved();
4174 const bool requireSaveDemandElements = !myNet->isDemandElementsSaved();
4175 const bool requireSaveDataElements = !myNet->isDataElementsSaved();
4176 // udpate current folder
4177 gCurrentFolder = opendialog.getDirectory();
4178 std::string file = opendialog.getFilename().text();
4179 // disable update data
4181 // disable validation for data elements
4182 XMLSubSys::setValidation("never", "auto", "auto");
4183 // Create data handler
4184 GNEDataHandler dataHandler(myNet, file, true);
4185 // begin undoList operation
4186 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, "loading data elements from '" + file + "'");
4187 // Run data parser
4188 if (!dataHandler.parse()) {
4189 WRITE_ERROR("Loading of " + file + " failed.");
4190 }
4191 // end undoList operation and update view
4192 myUndoList->end();
4193 // enable update data
4195 // update
4196 update();
4197 // restore validation for data
4198 XMLSubSys::setValidation("auto", "auto", "auto");
4199 // update require save additional elements
4200 myNet->requireSaveAdditionals(requireSaveAdditionals);
4201 myNet->requireSaveDemandElements(requireSaveDemandElements);
4202 myNet->requireSaveDataElements(requireSaveDataElements);
4203 // change value of "data-files"
4205 oc.resetWritable();
4206 oc.set("data-files", opendialog.getFilename().text());
4207 } else {
4208 // write debug information
4209 WRITE_DEBUG("Cancel data element dialog");
4210 }
4211 return 1;
4212}
4213
4214
4215long
4217 // get file
4218 const std::string file = OptionsCont::getOptions().getString("data-files");
4219 // disable update data
4221 // disable validation for additionals
4222 XMLSubSys::setValidation("never", "auto", "auto");
4223 // Create additional handler
4224 GNEDataHandler dataHandler(myNet, file, true);
4225 // begin undoList operation
4226 myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, "reloading data elements from '" + file + "'");
4227 // clear data elements
4229 // Run data parser
4230 if (!dataHandler.parse()) {
4231 WRITE_ERROR("Reloading of " + file + " failed.");
4232 }
4233 // enable demand elements if there is an error creating element
4234 if (dataHandler.isErrorCreatingElement()) {
4236 }
4237 // restore validation for data
4238 XMLSubSys::setValidation("auto", "auto", "auto");
4239 // end undoList operation and update view
4240 myUndoList->end();
4241 // enable update data
4243 // update
4244 update();
4245 return 1;
4246}
4247
4248
4249long
4251 // check if file exist
4252 if (myViewNet && OptionsCont::getOptions().getString("data-files").empty()) {
4253 return myFileMenuCommands.reloadDataElements->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4254 } else {
4255 return myFileMenuCommands.reloadDataElements->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4256 }
4257}
4258
4259
4260long
4261GNEApplicationWindow::onCmdSaveDataElements(FXObject*, FXSelector, void*) {
4262 // obtain option container
4264 // check if save data element menu is enabled
4265 if (myFileMenuCommands.saveDataElements->isEnabled()) {
4266 // Check if data elements file was already set at start of netedit or with a previous save
4267 if (oc.getString("data-files").empty()) {
4268 // declare current folder
4269 FXString currentFolder = gCurrentFolder;
4270 // check if there is a saved network
4271 if (oc.getString("output-file").size() > 0) {
4272 // extract folder
4273 currentFolder = getFolder(oc.getString("output-file"));
4274 }
4275 // open dialog
4276 FXString file = MFXUtils::getFilename2Write(this,
4277 TL("Save data element file"), ".xml",
4279 currentFolder);
4280 // add xml extension
4281 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
4282 // check tat file is valid
4283 if (fileWithExtension != "") {
4284 // change value of "data-files"
4285 oc.resetWritable();
4286 oc.set("data-files", fileWithExtension);
4287 } else {
4288 // None data elements file was selected, then stop function
4289 return 0;
4290 }
4291 }
4292 // Start saving data elements
4293 getApp()->beginWaitCursor();
4294 try {
4295 myNet->saveDataElements(oc.getString("data-files"));
4296 myMessageWindow->appendMsg(GUIEventType::MESSAGE_OCCURRED, "Data elements saved in " + oc.getString("data-files") + ".\n");
4298 } catch (IOError& e) {
4299 // write warning if netedit is running in testing mode
4300 WRITE_DEBUG("Opening FXMessageBox 'error saving data elements'");
4301 // open error message box
4302 FXMessageBox::error(this, MBOX_OK, TL("Saving data elements failed!"), "%s", e.what());
4303 // write warning if netedit is running in testing mode
4304 WRITE_DEBUG("Closed FXMessageBox 'error saving data elements' with 'OK'");
4305 }
4307 getApp()->endWaitCursor();
4308 // restore focus
4309 setFocus();
4310 return 1;
4311 } else {
4312 return 0;
4313 }
4314}
4315
4316
4317long
4319 // obtain option container
4321 // declare current folder
4322 FXString currentFolder = gCurrentFolder;
4323 // check if there is a saved network
4324 if (oc.getString("output-file").size() > 0) {
4325 // extract folder
4326 currentFolder = getFolder(oc.getString("output-file"));
4327 }
4328 // Open window to select additionasl file
4329 FXString file = MFXUtils::getFilename2Write(this,
4330 TL("Save data element file as"), ".xml",
4332 currentFolder);
4333 // add xml extension
4334 std::string fileWithExtension = FileHelpers::addExtension(file.text(), ".xml");
4335 // check that file is correct
4336 if (fileWithExtension != "") {
4337 // reset writtable flag
4339 // change value of "data-files"
4340 OptionsCont::getOptions().set("data-files", fileWithExtension);
4341 // change flag of menu command for save data elements
4343 // save data elements
4344 return onCmdSaveDataElements(nullptr, 0, nullptr);
4345 } else {
4346 return 1;
4347 }
4348}
4349
4350
4351bool
4353 FXuint answer = 0;
4354 if (myViewNet && myNet && !myNet->isNetSaved()) {
4355 // write warning if netedit is running in testing mode
4356 WRITE_DEBUG("Opening FXMessageBox 'Confirm " + operation + " network'");
4357 // open question box
4358 answer = FXMessageBox::question(getApp(), MBOX_QUIT_SAVE_CANCEL,
4359 ("Confirm " + operation + " Network").c_str(), "%s",
4360 ("You have unsaved changes in the network. Do you wish to " + operation + " and discard all changes?").c_str());
4361 // restore focus to view net
4362 myViewNet->setFocus();
4363 // if user close dialog box, check additionals and demand elements
4364 if (answer == MBOX_CLICKED_QUIT) {
4365 // write warning if netedit is running in testing mode
4366 WRITE_DEBUG("Closed FXMessageBox 'Confirm " + operation + " network' with 'Quit'");
4367 if (continueWithUnsavedAdditionalChanges(operation) &&
4370 // clear undo list
4371 clearUndoList();
4372 return true;
4373 } else {
4374 return false;
4375 }
4376 } else if (answer == MBOX_CLICKED_SAVE) {
4377 // save network
4378 onCmdSaveNetwork(nullptr, 0, nullptr);
4379 // check
4380 if (continueWithUnsavedAdditionalChanges(operation) &&
4383 // clear undo list
4384 clearUndoList();
4385 return true;
4386 } else {
4387 return false;
4388 }
4389 } else {
4390 // write warning if netedit is running in testing mode
4391 if (answer == 2) {
4392 WRITE_DEBUG("Closed FXMessageBox 'Confirm " + operation + " network' with 'No'");
4393 } else if (answer == 4) {
4394 WRITE_DEBUG("Closed FXMessageBox 'Confirm " + operation + " network' with 'ESC'");
4395 }
4396 // return false to stop closing/reloading
4397 return false;
4398 }
4399 } else {
4400 if (continueWithUnsavedAdditionalChanges(operation) &&
4403 // clear undo list
4404 clearUndoList();
4405 return true;
4406 } else {
4407 // return false to stop closing/reloading
4408 return false;
4409 }
4410 }
4411}
4412
4413
4414bool
4416 // Check if there are non saved additionals
4417 if (myViewNet && myFileMenuCommands.saveAdditionals->isEnabled()) {
4418 WRITE_DEBUG("Opening FXMessageBox 'Save additionals before " + operation + "'");
4419 // open question box
4420 FXuint answer = FXMessageBox::question(getApp(), MBOX_QUIT_SAVE_CANCEL,
4421 ("Save additionals before " + operation).c_str(), "%s",
4422 ("You have unsaved additionals. Do you wish to " + operation + " and discard all changes?").c_str());
4423 // restore focus to view net
4424 myViewNet->setFocus();
4425 // if answer was affirmative, but there was an error during saving additionals, return false to stop closing/reloading
4426 if (answer == MBOX_CLICKED_QUIT) {
4427 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before " + operation + "' with 'Quit'");
4428 // nothing to save, return true
4429 return true;
4430 } else if (answer == MBOX_CLICKED_SAVE) {
4431 // write warning if netedit is running in testing mode
4432 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before " + operation + "' with 'Yes'");
4433 if (onCmdSaveAdditionals(nullptr, 0, nullptr) == 1) {
4434 // additionals successfully saved
4435 return true;
4436 } else {
4437 // error saving additionals, abort saving
4438 return false;
4439 }
4440 } else {
4441 // write warning if netedit is running in testing mode
4442 if (answer == 2) {
4443 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before " + operation + "' with 'No'");
4444 } else if (answer == 4) {
4445 WRITE_DEBUG("Closed FXMessageBox 'Save additionals before " + operation + "' with 'ESC'");
4446 }
4447 // abort saving
4448 return false;
4449 }
4450 } else {
4451 // nothing to save, return true
4452 return true;
4453 }
4454}
4455
4456
4457bool
4459 // Check if there are non saved demand elements
4460 if (myViewNet && myFileMenuCommands.saveDemandElements->isEnabled()) {
4461 WRITE_DEBUG("Opening FXMessageBox 'Save demand elements before " + operation + "'");
4462 // open question box
4463 FXuint answer = FXMessageBox::question(getApp(), MBOX_QUIT_SAVE_CANCEL,
4464 ("Save demand elements before " + operation).c_str(), "%s",
4465 ("You have unsaved demand elements. Do you wish to " + operation + " and discard all changes?").c_str());
4466 // restore focus to view net
4467 myViewNet->setFocus();
4468 // if answer was affirmative, but there was an error during saving demand elements, return false to stop closing/reloading
4469 if (answer == MBOX_CLICKED_QUIT) {
4470 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before " + operation + "' with 'Quit'");
4471 // nothing to save, return true
4472 return true;
4473 } else if (answer == MBOX_CLICKED_SAVE) {
4474 // write warning if netedit is running in testing mode
4475 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before " + operation + "' with 'Yes'");
4476 if (onCmdSaveDemandElements(nullptr, 0, nullptr) == 1) {
4477 // demand elements successfully saved
4478 return true;
4479 } else {
4480 // error saving demand elements, abort saving
4481 return false;
4482 }
4483 } else {
4484 // write warning if netedit is running in testing mode
4485 if (answer == 2) {
4486 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before " + operation + "' with 'No'");
4487 } else if (answer == 4) {
4488 WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before " + operation + "' with 'ESC'");
4489 }
4490 // abort saving
4491 return false;
4492 }
4493 } else {
4494 // nothing to save, return true
4495 return true;
4496 }
4497}
4498
4499
4500bool
4502 // Check if there are non saved data elements
4503 if (myViewNet && myFileMenuCommands.saveDataElements->isEnabled()) {
4504 WRITE_DEBUG("Opening FXMessageBox 'Save data elements before " + operation + "'");
4505 // open question box
4506 FXuint answer = FXMessageBox::question(getApp(), MBOX_QUIT_SAVE_CANCEL,
4507 ("Save data elements before " + operation).c_str(), "%s",
4508 ("You have unsaved data elements. Do you wish to " + operation + " and discard all changes?").c_str());
4509 // restore focus to view net
4510 myViewNet->setFocus();
4511 // if answer was affirmative, but there was an error during saving data elements, return false to stop closing/reloading
4512 if (answer == MBOX_CLICKED_QUIT) {
4513 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before " + operation + "' with 'Quit'");
4514 // nothing to save, return true
4515 return true;
4516 } else if (answer == MBOX_CLICKED_SAVE) {
4517 // write warning if netedit is running in testing mode
4518 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before " + operation + "' with 'Yes'");
4519 if (onCmdSaveDataElements(nullptr, 0, nullptr) == 1) {
4520 // data elements successfully saved
4521 return true;
4522 } else {
4523 // error saving data elements, abort saving
4524 return false;
4525 }
4526 } else {
4527 // write warning if netedit is running in testing mode
4528 if (answer == 2) {
4529 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before " + operation + "' with 'No'");
4530 } else if (answer == 4) {
4531 WRITE_DEBUG("Closed FXMessageBox 'Save data elements before " + operation + "' with 'ESC'");
4532 }
4533 // abort saving
4534 return false;
4535 }
4536 } else {
4537 // nothing to save, return true
4538 return true;
4539 }
4540}
4541
4542
4543FXString
4544GNEApplicationWindow::getFolder(const std::string& folder) const {
4545 // declare folder
4546 std::string newFolder = folder;
4547 // declare stop flag
4548 bool stop = false;
4549 // continue while stop is false
4550 while (!stop) {
4551 if (newFolder.empty()) {
4552 // new folder empty, then stop
4553 stop = true;
4554 } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4555 (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4556 // removed file, then stop
4557 stop = true;
4558 } else {
4559 newFolder.pop_back();
4560 }
4561 }
4562 // if is empty, return gCurrentFolder
4563 if (newFolder.empty()) {
4564 return gCurrentFolder;
4565 }
4566 return FXString(newFolder.c_str());
4567}
4568
4569
4570void
4572 // check that view exists
4573 if (myViewNet) {
4575 }
4576}
4577
4578
4579void
4581 // remove lock hotkeys
4583 // check supermode
4584 if (supermode == Supermode::NETWORK) {
4585 // menu commands
4589 // lock
4593 // processing
4598 } else if (supermode == Supermode::DEMAND) {
4599 // menu commands
4603 // lock
4607 // processing
4612 } else if (supermode == Supermode::DATA) {
4613 // menu commands
4617 // lock
4621 // processing
4626 } else {
4627 // menu commands
4632 // lock
4636 // processing
4640 }
4641}
4642
4643
4644void
4645GNEApplicationWindow::disableUndoRedo(const std::string& reason) {
4646 myUndoRedoListEnabled = reason;
4647}
4648
4649
4650void
4652 myUndoRedoListEnabled.clear();
4653}
4654
4655
4656const std::string&
4658 return myUndoRedoListEnabled;
4659}
4660
4661
4664 return myEditMenuCommands;
4665}
4666
4667
4670 return myLockMenuCommands;
4671}
4672
4673
4674void
4676 if (myViewNet) {
4677 // destroy Popup (to avoid crashes)
4679 }
4680 // clear undo list and return true to continue with closing/reload
4681 myUndoList->clear();
4682}
4683
4684
4688}
4689
4690// ---------------------------------------------------------------------------
4691// GNEApplicationWindow - protected methods
4692// ---------------------------------------------------------------------------
4693
4694#ifdef _MSC_VER
4695#pragma warning(push)
4696/* Disable warning about using "this" in the constructor */
4697#pragma warning(disable: 4355)
4698#endif
4700 myToolbarsGrip(this),
4701 myMenuBarFile(this),
4702 myFileMenuCommands(this),
4703 myModesMenuCommands(this),
4704 myEditMenuCommands(this),
4705 myLockMenuCommands(nullptr),
4706 myProcessingMenuCommands(this),
4707 myLocateMenuCommands(this),
4708 myToolsMenuCommands(this),
4709 myWindowsMenuCommands(this),
4710 mySupermodeCommands(this) {
4711}
4712#ifdef _MSC_VER
4713#pragma warning(pop)
4714#endif
4715
4716
4717long
4718GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
4719 const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
4720 if (handled == 0 && myMDIClient->numChildren() > 0) {
4721 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4722 if (w != nullptr) {
4723 w->onKeyPress(nullptr, sel, eventData);
4724 }
4725 }
4726 return 0;
4727}
4728
4729
4730long
4731GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
4732 const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
4733 if (handled == 0 && myMDIClient->numChildren() > 0) {
4734 GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4735 if (w != nullptr) {
4736 w->onKeyRelease(nullptr, sel, eventData);
4737 }
4738 }
4739 return 0;
4740}
4741
4742
4743/****************************************************************************/
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:725
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition: GUIAppEnum.h:777
@ MID_HOTKEY_A_MODE_ADDITIONAL_STOP
hotkey for mode editing additionals AND stops
Definition: GUIAppEnum.h:43
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition: GUIAppEnum.h:228
@ MID_HOTKEY_CTRL_Q_CLOSE
Main window closes.
Definition: GUIAppEnum.h:105
@ MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE
compute junctions with volatile options
Definition: GUIAppEnum.h:226
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition: GUIAppEnum.h:163
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in NETEDIT
Definition: GUIAppEnum.h:193
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
Definition: GUIAppEnum.h:1433
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition: GUIAppEnum.h:809
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition: GUIAppEnum.h:787
@ MID_HOTKEY_CTRL_SHIFT_M_SAVESUMOCONFIG
save SUMOConfig
Definition: GUIAppEnum.h:171
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition: GUIAppEnum.h:833
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition: GUIAppEnum.h:731
@ MID_LOCATEPERSON
Locate person - button.
Definition: GUIAppEnum.h:369
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:751
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition: GUIAppEnum.h:121
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition: GUIAppEnum.h:161
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition: GUIAppEnum.h:773
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:149
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition: GUIAppEnum.h:693
@ MID_LOCATEJUNCTION
Locate junction - button.
Definition: GUIAppEnum.h:357
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition: GUIAppEnum.h:759
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition: GUIAppEnum.h:757
@ MID_GNE_SAVEALLELEMENTS
save all element
Definition: GUIAppEnum.h:683
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:141
@ MID_GNE_TOOLBAREDIT_LOADDEMAND
load demand in SUMO-GUI after press ctrl+T
Definition: GUIAppEnum.h:727
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition: GUIAppEnum.h:839
@ MID_OPEN_CONFIG
Open configuration - ID.
Definition: GUIAppEnum.h:270
@ MID_HOTKEY_M_MODE_MOVE
hotkey for mode moving element
Definition: GUIAppEnum.h:57
@ MID_HOTKEY_CTRL_W_CLOSESIMULATION
Close simulation - ID.
Definition: GUIAppEnum.h:117
@ MID_HOTKEY_ALT_2_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:135
@ MID_GNE_LOCK_ALLELEMENTS
lock all element
Definition: GUIAppEnum.h:785
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition: GUIAppEnum.h:201
@ MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS
Perform a single simulation step in SUMO and open Demand Elements in NETEDIT.
Definition: GUIAppEnum.h:85
@ MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND
compute Network in network mode and Demand elements in demand mode
Definition: GUIAppEnum.h:197
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:825
@ MID_GNE_LOCK_MENUTITLE
selector for LockMenuTitle
Definition: GUIAppEnum.h:1431
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition: GUIAppEnum.h:763
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition: GUIAppEnum.h:811
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition: GUIAppEnum.h:71
@ MID_HOTKEY_F9_EDIT_VIEWSCHEME
open edit scheme menu
Definition: GUIAppEnum.h:205
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:799
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition: GUIAppEnum.h:789
@ MID_LOCATEPOLY
Locate polygons - button.
Definition: GUIAppEnum.h:379
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:95
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition: GUIAppEnum.h:699
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition: GUIAppEnum.h:689
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition: GUIAppEnum.h:239
@ MID_HOTKEY_CTRL_N_NEWNETWORK
create new empty network
Definition: GUIAppEnum.h:103
@ MID_HOTKEY_CTRL_SHIFT_S_SAVENETWORK_AS
save network as
Definition: GUIAppEnum.h:173
@ MID_CHANGELOG
changelog button
Definition: GUIAppEnum.h:643
@ MID_GNE_NETWORKVIEWOPTIONS_ASKFORMERGE
ask before merging junctions
Definition: GUIAppEnum.h:769
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition: GUIAppEnum.h:681
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in NETEDIT.
Definition: GUIAppEnum.h:81
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition: GUIAppEnum.h:797
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:137
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition: GUIAppEnum.h:189
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition: GUIAppEnum.h:165
@ MID_HOTKEY_CTRL_R_RELOAD
Reload the previously loaded simulation.
Definition: GUIAppEnum.h:109
@ MID_HOTKEY_CTRL_SHIFT_V_FORCESAVEDEMANDELEMENTS
Force save demand elements (flag)
Definition: GUIAppEnum.h:179
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in NETEDIT.
Definition: GUIAppEnum.h:107
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition: GUIAppEnum.h:775
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition: GUIAppEnum.h:237
@ MID_GNE_TOOLBARFILE_SAVEDATA_AS
save data elements as
Definition: GUIAppEnum.h:707
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition: GUIAppEnum.h:207
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition: GUIAppEnum.h:209
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition: GUIAppEnum.h:203
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:831
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition: GUIAppEnum.h:53
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition: GUIAppEnum.h:65
@ MID_LOCATEADD
Locate additional structure - button.
Definition: GUIAppEnum.h:375
@ MID_LOCATEPOI
Locate poi - button.
Definition: GUIAppEnum.h:377
@ MID_HOTKEY_CTRL_SHIFT_W_FORCESAVEDATAELEMENTS
Force save data elements (flag)
Definition: GUIAppEnum.h:181
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition: GUIAppEnum.h:805
@ MID_OPEN_NETWORK
Open network - ID.
Definition: GUIAppEnum.h:272
@ MID_HOTKEY_CTRL_SHIFT_U_FORCESAVEADDITIONALS
Force save additionals (flag)
Definition: GUIAppEnum.h:177
@ MID_HOTKEY_ALT_4_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:139
@ MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS
save TLS Programs as
Definition: GUIAppEnum.h:697
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition: GUIAppEnum.h:827
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition: GUIAppEnum.h:771
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition: GUIAppEnum.h:705
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition: GUIAppEnum.h:765
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition: GUIAppEnum.h:91
@ MID_HOTKEY_S_MODE_SELECT
hotkey for mode selecting objects
Definition: GUIAppEnum.h:61
@ MID_RECENTFILE
Loads a file previously loaded.
Definition: GUIAppEnum.h:278
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition: GUIAppEnum.h:761
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition: GUIAppEnum.h:813
@ MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW
Open a New Window.
Definition: GUIAppEnum.h:169
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in NETEDIT
Definition: GUIAppEnum.h:195
@ MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES
clean junctions without edges in network mode and unused routes in demand mode
Definition: GUIAppEnum.h:199
@ MID_LOCATESTOP
Locate stop - button.
Definition: GUIAppEnum.h:367
@ MID_HOTKEY_ALT_1_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:133
@ MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS
Load file with TLS Programs.
Definition: GUIAppEnum.h:97
@ MID_GNE_LOCK_ELEMENT
lock element
Definition: GUIAppEnum.h:783
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition: GUIAppEnum.h:339
@ 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:69
@ MID_TUTORIAL
tutorial button
Definition: GUIAppEnum.h:647
@ MID_HOTKEY_CTRL_G_GAMINGMODE_TOGGLEGRID
Toggle Gaming mode in SUMO and grid in NETEDIT.
Definition: GUIAppEnum.h:87
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition: GUIAppEnum.h:835
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:143
@ MID_HOTKEY_D_MODE_DELETE
hotkey for mode deleting things
Definition: GUIAppEnum.h:47
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition: GUIAppEnum.h:306
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALS
reload additionals
Definition: GUIAppEnum.h:695
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition: GUIAppEnum.h:67
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition: GUIAppEnum.h:55
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:753
@ MID_HOTKEY_ALT_0_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:131
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALS_AS
save additionals as
Definition: GUIAppEnum.h:687
@ MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS
save edgeTypes as
Definition: GUIAppEnum.h:701
@ MID_HOTKEYS
hotkeys button
Definition: GUIAppEnum.h:645
@ MID_HOTKEY_C_MODE_CONNECT_PERSONPLAN
hotkey for mode connecting lanes ABD person plan
Definition: GUIAppEnum.h:45
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition: GUIAppEnum.h:803
@ MID_HOTKEY_ALT_F4_CLOSE
Main window closes.
Definition: GUIAppEnum.h:151
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALS
Save Additional Elements.
Definition: GUIAppEnum.h:159
@ MID_LOCATEWALKINGAREA
Locate edge - button.
Definition: GUIAppEnum.h:361
@ MID_LOCATEEDGE
Locate edge - button.
Definition: GUIAppEnum.h:359
@ MID_HOTKEY_G_MODE_CONTAINER
hotkey for mode container
Definition: GUIAppEnum.h:51
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition: GUIAppEnum.h:222
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition: GUIAppEnum.h:767
@ MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALS
Start the simulation in SUMO and open Additionals Elements in NETEDIT.
Definition: GUIAppEnum.h:79
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition: GUIAppEnum.h:829
@ 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:837
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:147
@ MID_GNE_TOOLBARTOOLS_NETDIFF
call tool netdiff
Definition: GUIAppEnum.h:717
@ MID_LOCATEVEHICLE
Locate vehicle - button.
Definition: GUIAppEnum.h:363
@ MID_LOCATETLS
Locate TLS - button.
Definition: GUIAppEnum.h:373
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition: GUIAppEnum.h:691
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:749
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
Definition: GUIAppEnum.h:1437
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition: GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVEDEMAND_AS
save demand elements as
Definition: GUIAppEnum.h:703
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:801
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition: GUIAppEnum.h:817
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition: GUIAppEnum.h:123
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
Definition: GUIAppEnum.h:1429
@ MID_HOTKEY_CTRL_SHIFT_T_FORCESAVENETEWORK
Force save network (flag)
Definition: GUIAppEnum.h:175
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition: GUIAppEnum.h:243
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:145
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition: GUIAppEnum.h:213
@ MID_HOTKEY_ENTER
hot key <ENTER> accept current operation
Definition: GUIAppEnum.h:241
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition: GUIAppEnum.h:709
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition: GUIAppEnum.h:167
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition: GUIAppEnum.h:220
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in NETEDIT
Definition: GUIAppEnum.h:191
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition: GUIAppEnum.h:815
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in NETEDIT)
Definition: GUIAppEnum.h:230
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition: GUIAppEnum.h:224
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition: GUIAppEnum.h:755
@ MID_HOTKEY_CTRL_H_OPENEDGETYPES
open edge type files
Definition: GUIAppEnum.h:89
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition: GUIAppEnum.h:685
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition: GUIAppEnum.h:807
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition: GUIAppEnum.h:747
@ MID_LOCATEROUTE
Locate route - button.
Definition: GUIAppEnum.h:365
@ 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:99
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition: GUIAppEnum.h:729
@ MID_HOTKEY_CTRL_T_OPENSUMONETEDIT
Open current network in SUMO or in NETEDIT.
Definition: GUIAppEnum.h:113
@ MID_WINDOW
Main window-ID.
Definition: GUIAppEnum.h:251
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:344
#define GUIDesignLabelStatusBar
label used in statusBar
Definition: GUIDesigns.h:286
#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.
@ MODEADDITIONAL
@ SUPERMODEDEMAND
@ NETEDIT_MINI
@ MODECREATEEDGE
@ SUPERMODENETWORK
@ SUPERMODEDATA
#define WRITE_DEBUG(msg)
Definition: MsgHandler.h:276
#define WRITE_MESSAGE(msg)
Definition: MsgHandler.h:267
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:274
#define TL(string)
Definition: MsgHandler.h:282
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions (used in NETEDIT)
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions (used in NETEDIT)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
bool parse()
parse
bool parse()
parse
Definition: DataHandler.cpp:42
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 std::string addExtension(const std::string &path, const std::string &extension)
Add an extension to the given file path.
Definition: FileHelpers.cpp:93
static bool isReadable(std::string path)
Checks whether the given file is readable.
Definition: FileHelpers.cpp:51
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 the Netedit.
long onCmdReloadSUMOConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SUMOConfig is executed
long onCmdSaveAsNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall save network as is executed
long onCmdSaveAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands
Supermode Commands.
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 *)
void handleEvent_Message(GUIEvent *e)
handle event of type message
long onCmdOpenSUMOConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SUMOConfig is executed
bool continueWithUnsavedDemandElementChanges(const std::string &operation)
warns about unsaved changes in demand elements and gives the user the option to abort
long onCmdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is executed
long onCmdLoadAdditionalsInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load additionals"
long onCmdOpenTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall open TLS programs is executed
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
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 onCmdNewNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall new network is executed
GNEApplicationWindow()
FOX needs this for static members.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
called when the command/FXCall clipboard request is executed
FXMenuPane * myFileMenuAdditionals
long onCmdSaveSUMOConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SUMOConfig 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::string myConfigPattern
Input file pattern.
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
void enableSaveAdditionalsMenu()
enable save additionals
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
long onCmdOpenAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
long onCmdForceSaveDataElements(FXObject *sender, FXSelector sel, void *ptr)
force save data elements (flag)
long onCmdForceSaveAdditionals(FXObject *sender, FXSelector sel, void *ptr)
force save additionals (flag)
long onUpdSaveSUMOConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SUMOConfig is updated
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
long onUpdReload(FXObject *, FXSelector, void *)
called when the update/FXCall reload is executed
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands
Processing Menu Commands.
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
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
long onCmdPaste(FXObject *, FXSelector, void *)
long onCmdSaveAsPlainXML(FXObject *, FXSelector, void *)
called when the command/FXCall save as plain xml is executed
void disableSaveDemandElementsMenu()
disable save demand elements
long onUpdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements as is executed
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall open network is executed
long onUpdReloadSUMOConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SUMOConfig is updated
void closeAllWindows()
this method closes all windows and deletes the current simulation *‍/
long onCmdForceSaveNetwork(FXObject *sender, FXSelector sel, void *ptr)
force save network (flag)
long onCmdComputePathManager(FXObject *, FXSelector, void *)
bool continueWithUnsavedDataElementChanges(const std::string &operation)
warns about unsaved changes in data elements and gives the user the option to abort
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
void enableSaveDataElementsMenu()
enable save data elements
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 requiere 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
void loadConfigOrNet(const std::string file, bool isNet, bool isReload=false, bool useStartupOptions=false, bool newNet=false)
starts to load a netimport configuration or a network *‍/
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 onCmdOptions(FXObject *, FXSelector, void *)
called if the user selects Processing->Configure Options
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
void disableSaveAdditionalsMenu()
disable save additionals
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 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 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.
bool continueWithUnsavedChanges(const std::string &operation)
warns about unsaved changes and gives the user the option to abort
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 dependentBuild()
build dependent
long onUpdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements as is executed
FXMenuPane * myFileMenuDemandElements
void loadNet(const std::string &file)
load network
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
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands
Edit Menu Commands.
long onCmdForceSaveDemandElements(FXObject *sender, FXSelector sel, void *ptr)
force save demand elements (flag)
long onCmdSetSuperMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-supermode hotkey
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
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 newtork element is executed
const FXString myTitlePrefix
the prefix for the window title
void enableSaveTLSProgramsMenu()
enable save TLS Programs
double getTrackerInterval() const
get current tracker interval (pure virtual but we don't need it)
long onCmdReload(FXObject *, FXSelector, void *)
called when the command/FXCall reload is executed
void disableSaveDataElementsMenu()
disable save data elements
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
GNEApplicationWindowHelper::LockMenuCommands & getLockMenuCommands()
get lock Menu Commands
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
long onUpdRequireViewNet(FXObject *sender, FXSelector sel, void *ptr)
enable or disable sender object depending if viewNet exist
long onCmdSaveDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements is executed
long onCmdCut(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdNewWindow(FXObject *, FXSelector, void *)
long onCmdOpenEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall open edgeType is executed
bool myReloading
information whether the gui is currently reloading
void enableSaveDemandElementsMenu()
enable save demand elements
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 onCmdOpenConfiguration(FXObject *, FXSelector, void *)
called when the command/FXCall open configuration is executed
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.
long onCmdSaveAllElements(FXObject *, FXSelector, void *)
called when the command/FXCall save all elements 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 onCmdOpenSUMOGUI(FXObject *sender, FXSelector sel, void *ptr)
called if the user hints ctrl + T
long onUpdSaveAllElements(FXObject *, FXSelector, void *)
called when the update/FXCall save all elements is executed
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
long onCmdToogleComputeNetworkData(FXObject *, FXSelector, void *)
called when toogle checkbox compute network when swichting between supermodes
void enableUndoRedo()
disable undo-redo
bool continueWithUnsavedAdditionalChanges(const std::string &operation)
warns about unsaved changes in additionals and gives the user the option to abort
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
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 onCmdSaveDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements is executed
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
void updateSuperModeMenuCommands(const Supermode supermode)
update FXMenuCommands depending of supermode
long onCmdToolNetDiff(FXObject *, FXSelector, void *)
called when the command/FXCall run NetDiff is executed
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
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 onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
long onCmdRedo(FXObject *, FXSelector, void *)
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
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
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 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 onCmdSaveJoined(FXObject *, FXSelector, void *)
called when the command/FXCall save joined 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.
FXMenuPane * myFileMenuDataElements
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 onCmdOpenForeign(FXObject *, FXSelector, void *)
called when the command/FXCall open foreign is executed
long onCmdSaveSUMOConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SUMOConfig as is executed
void refreshEdgeTypeSelector()
refresh edge type selector
EdgeTypeSelector * getEdgeTypeSelector() const
get edgeType selector
void addLaneType(GNELaneType *laneType)
add laneType
const bool viewportFromRegistry
whether loading viewport from registry
const std::string file
the name of the loaded file
const bool isNewNet
flag for new net
GNENet *const net
the loaded net
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:251
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 stopSelectParent()
stop select new parent
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 loadConfigOrNet(const std::string &file, const bool isNet, const bool useStartupOptions, const bool newNet=false)
begins the loading of a netconvert configuration or a a network
static void fillOptions(OptionsCont &oc)
clears and initializes the OptionsCont
static void setDefaultOptions(OptionsCont &oc)
sets required options for proper functioning
const std::map< SumoXMLTag, std::set< GNEDemandElement * > > & getDemandElements() const
get demand elements
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 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 clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition: GNENet.cpp:1941
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition: GNENet.cpp:1589
void saveJoined(OptionsCont &oc, const std::string &filename)
save log of joined junctions (and nothing else)
Definition: GNENet.cpp:1222
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition: GNENet.cpp:1400
void saveDemandElements(const std::string &filename)
save demand element elements of the network
Definition: GNENet.cpp:2096
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition: GNENet.cpp:2550
bool isNetSaved() const
return if net has to be saved
Definition: GNENet.cpp:1185
void enableUpdateData()
Definition: GNENet.cpp:2617
void savePlain(OptionsCont &oc, const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition: GNENet.cpp:1214
void requireSaveNet(bool value)
inform that net has to be saved
Definition: GNENet.cpp:1179
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition: GNENet.cpp:2571
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition: GNENet.cpp:1954
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition: GNENet.cpp:1696
void requireSaveAdditionals(bool value)
inform that additionals has to be saved
Definition: GNENet.cpp:2017
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition: GNENet.cpp:1741
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition: GNENet.cpp:1606
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:132
void computeNetwork(GNEApplicationWindow *window, bool force=false, bool volatileOptions=false, std::string additionalPath="", std::string demandPath="", std::string dataPath="")
trigger full netbuild computation param[in] window The window to inform about delay param[in] force W...
Definition: GNENet.cpp:1269
bool isAdditionalsSaved() const
check if additionals are saved
Definition: GNENet.cpp:2077
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition: GNENet.cpp:2628
bool isNetRecomputed() const
check if net require recomputing
Definition: GNENet.cpp:1382
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition: GNENet.cpp:1537
void joinRoutes(GNEUndoList *undoList)
join routes
Definition: GNENet.cpp:1632
void requireSaveDemandElements(bool value)
inform that demand elements has to be saved
Definition: GNENet.cpp:2083
GNEPathManager * getPathManager()
get path manager
Definition: GNENet.cpp:138
void requireSaveDataElements(bool value)
inform that data sets has to be saved
Definition: GNENet.cpp:2150
void saveDataElements(const std::string &filename)
save data set elements of the network
Definition: GNENet.cpp:2163
void saveAdditionals(const std::string &filename)
save additional elements of the network
Definition: GNENet.cpp:2030
void saveNetwork(OptionsCont &oc)
save the network
Definition: GNENet.cpp:1191
bool isDataElementsSaved() const
check if data sets are saved
Definition: GNENet.cpp:2178
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:1987
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition: GNENet.cpp:1325
bool isDemandElementsSaved() const
check if demand elements are saved
Definition: GNENet.cpp:2144
Dialog for edit rerouters.
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
Definition: GNEViewNet.cpp:656
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
Definition: GNEViewNet.cpp:632
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
Definition: GNEViewNet.cpp:644
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
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
Definition: GNEViewNet.cpp:604
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
Definition: GNEViewNet.cpp:846
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)
Definition: GNEViewNet.cpp:421
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
Definition: GNEViewNet.cpp:650
void updateViewNet() const
Mark the entire GNEViewNet to be repainted later.
Definition: GNEViewNet.cpp:414
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:84
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 initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
Definition: GUIDesigns.cpp:31
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
Definition: GUIDesigns.cpp:53
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:83
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
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.
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
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
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
void destroyPopup()
destroys the popup
An XML-handler for visualisation schemes.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
static void buildNETEDITAccelerators(GNEApplicationWindow *GNEApp)
build NETEDIT 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)
void pop()
Definition: MFXSynchQue.h:65
bool empty()
Definition: MFXSynchQue.h:128
static FXString getFilename2Write(FXWindow *parent, const FXString &header, const FXString &extension, FXIcon *icon, FXString &currentFolder)
Returns the file name to write.
Definition: MFXUtils.cpp:82
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependance to an optional file name.
Definition: MFXUtils.cpp:60
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NBFrame.cpp:696
A storage for available edgeTypes of edges.
Definition: NBTypeCont.h:52
int size() const
Returns the number of known edgeTypes.
Definition: NBTypeCont.cpp:255
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NIFrame.cpp:370
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()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NWFrame.cpp:125
A storage for options typed value containers)
Definition: OptionsCont.h:89
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const StringVector & getStringVector(const std::string &name) const
Returns the list of string-value of the named option (only for Option_StringVector)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:59
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 bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition: SysUtils.cpp:72
static bool checkOptions()
checks shared options and sets StdDefs
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition: XMLSubSys.cpp:65
@ SEL_THREAD_EVENT
Definition: fxexdefs.h:173
@ SEL_THREAD
Definition: fxexdefs.h:155
void buildDataViewOptionsMenuChecks(FXMenuPane *editMenu)
build menu checks
void buildDemandViewOptionsMenuChecks(FXMenuPane *editMenu)
build menu checks
void buildNetworkViewOptionsMenuChecks(FXMenuPane *editMenu)
build menu checks
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
FXMenuCascade * dataMenuCascade
FXMenuCascade for data.
FXMenuCascade * TLSMenuCascade
FXMenuCascade for TLS.
FXMenuCommand * saveSUMOConfig
FXMenuCommand for enable or disable save SUMOConfig.
FXMenuCommand * saveTLSPrograms
FXMenuCommand for enable or disable save TLS Programs.
FXMenuCascade * demandMenuCascade
FXMenuCascade for demand.
FXMenuCommand * saveEdgeTypes
FXMenuCommand for enable or disable save edgeTypes.
FXMenuCommand * reloadTLSPrograms
FXMenuCommand for reload TLS Programs.
FXMenuCascade * additionalMenuCascade
FXMenuCascade for additional.
FXMenuCommand * saveDemandElementsAs
FXMenuCommand for enable or disable save demand elements as.
FXMenuCommand * saveDataElementsAs
FXMenuCommand for enable or disable save data elements as.
FXMenuCascade * SUMOConfigMenuCascade
FXMenuCascade for SUMOConfig.
FXMenuCommand * saveAdditionals
FXMenuCommand for enable or disable save additionals.
FXMenuCommand * saveDemandElements
FXMenuCommand for enable or disable save demand elements.
FXMenuCommand * reloadSUMOConfig
FXMenuCommand for reload SUMOConfig.
FXMenuCommand * saveDataElements
FXMenuCommand for enable or disable save data elements.
FXMenuCommand * reloadAdditionals
FXMenuCommand for reload additionals.
FXMenuCommand * reloadDataElements
FXMenuCommand for reload data elements.
void buildFileMenuCommands(FXMenuPane *fileMenu, FXMenuPane *fileMenuSUMOConfig, FXMenuPane *fileMenuTLS, FXMenuPane *fileMenuEdgeTypes, FXMenuPane *fileMenuAdditionals, FXMenuPane *fileMenuDemandElements, FXMenuPane *fileMenuDataElements)
build menu commands
FXMenuCommand * reloadDemandElements
FXMenuCommand for reload demand elements.
FXMenuCommand * reloadEdgeTypes
FXMenuCommand for reload Edge Types.
FXMenuCommand * saveAdditionalsAs
FXMenuCommand for enable or disable save additionals As.
FXMenuCascade * edgeTypesMenuCascade
FXMenuCascade for edgeTypes.
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 buildRecentFiles(FXMenuPane *fileMenu)
build recent files
MFXRecentNetworks myRecentNetsAndConfigs
List of recent nets and config files.
void buildModesMenuCommands(FXMenuPane *modesMenu)
build modes menu commands
DemandMenuCommands demandMenuCommands
Demand Menu Commands.
DataMenuCommands dataMenuCommands
Data 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
void buildMenuToolbarsGrip()
build menu toolbar grips
FXMenuBar * menu
The application menu bar (for file, edit, processing...)
void buildToolsMenuCommands(FXMenuPane *locateMenu)
build menu commands
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 bool stringEndsWith(const std::string &str, const std::string &suffix)
check if a string ends with another string
static void saveSUMOConfig()
save SUMOConfig
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 bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckLockContainer
Lock Container.
DataEditMode dataEditMode
the current Data edit mode
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