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.dev/sumo
3 // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials are made available under the
5 // terms of the Eclipse Public License 2.0 which is available at
6 // https://www.eclipse.org/legal/epl-2.0/
7 // This Source Code may also be made available under the following Secondary
8 // Licenses when the conditions for such availability set forth in the Eclipse
9 // Public License 2.0 are satisfied: GNU General Public License, version 2
10 // or later which is available at
11 // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12 // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13 /****************************************************************************/
19 // Functions from main window of netedit
20 /****************************************************************************/
21 
23 #include <netbuild/NBFrame.h>
42 #include <netedit/templates.h>
43 #include <netimport/NIFrame.h>
44 #include <netimport/NITypeLoader.h>
46 #include <netwrite/NWFrame.h>
51 #include <utils/gui/div/GLHelper.h>
63 #include <utils/xml/XMLSubSys.h>
64 
65 #include "GNEApplicationWindow.h"
66 #include "GNEEvent_NetworkLoaded.h"
67 #include "GNELoadThread.h"
68 #include "GNENet.h"
69 #include "GNEViewNet.h"
70 #include "GNEUndoList.h"
71 #include "GNEViewParent.h"
72 
73 #ifdef HAVE_VERSION_H
74 #include <version.h>
75 #endif
76 
77 // ===========================================================================
78 // FOX-declarations
79 // ===========================================================================
80 
81 FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
82  // quit calls
86  FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
87  // toolbar file
94  FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
99  // network
114  // NeteditConfig
122  // SumoConfig
130  // TLS
137  // edge types
146  // additionals
157  // demand elements
166  // data elements
175  // meanDatas
184  // other
189  // Toolbar supermode
193  // Toolbar modes
210  // Toolbar edit
219  // Network view options
252  // Demand view options
275  // Data view options
292  // view
309  /* Prepared for #6042
310  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
311  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
312  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
313  */
314  // toolbar lock
320  // Toolbar processing
337  // Toolbar locate
362  // toolbar python tools
367  // toolbar windows
369  // toolbar help
371  FXMAPFUNC(SEL_COMMAND, MID_CHANGELOG, GNEApplicationWindow::onCmdChangelog),
372  FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
373  FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
374  FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
376  // alt + <number>
397  // key events
398  FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
399  FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
400  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
401  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
402  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
404  // threads events
407  // edge template functions
411  // languages
430  // tools
433  // other
434  FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
440 };
441 
442 // Object implementation
443 FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
444 
445 
446 // ===========================================================================
447 // GNEApplicationWindow method definitions
448 // ===========================================================================
449 
450 GNEApplicationWindow::GNEApplicationWindow(FXApp* a, const std::string& configPattern) :
451  GUIMainWindow(a),
452  myUndoList(new GNEUndoList(this)),
453  myConfigPattern(configPattern),
454  myToolbarsGrip(this),
455  myMenuBarFile(this),
456  myFileMenuCommands(this),
457  myModesMenuCommands(this),
458  myEditMenuCommands(this),
459  myLockMenuCommands(this),
460  myProcessingMenuCommands(this),
461  myLocateMenuCommands(this),
462  myToolsMenuCommands(this),
463  myWindowsMenuCommands(this),
464  myHelpMenuCommands(this),
465  mySupermodeCommands(this),
466  myTitlePrefix("netedit " VERSION_STRING) {
467  // init icons
469  // init Textures
471  // init cursors
473  // create undoList dialog (after initCursors)
474  myUndoListDialog = new GNEUndoListDialog(this);
475  a->setTooltipTime(1000000000);
476  a->setTooltipPause(1000000000);
477  // set SUMO Options descriptions
478  mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
479  mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo Version " VERSION_STRING);
480  // set default netedit options
481  GNELoadThread::fillOptions(myOriginalNeteditOptions);
482  GNELoadThread::setDefaultOptions(myOriginalNeteditOptions);
483  // parse options
484  TemplateHandler::parseTemplate(mySumoOptions, sumoTemplate);
485  TemplateHandler::parseTemplate(myOriginalSumoOptions, sumoTemplate);
486  TemplateHandler::parseTemplate(myNetgenerateOptions, netgenerateTemplate);
487  TemplateHandler::parseTemplate(myOriginalNetgenerateOptions, netgenerateTemplate);
488 }
489 
490 void
492  // do this not twice
493  if (myHadDependentBuild) {
494  // do not translate debug messages
495  WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
496  return;
497  }
498  myHadDependentBuild = true;
499  setTarget(this);
500  setSelector(MID_WINDOW);
501  // build toolbar menu
503  // build the thread - io
506  // build the status bar
507  myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
508  // build geo coordinates label
509  auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
510  myRequireRecomputingButton = new MFXButtonTooltip(requireRecomputingFrame, myStaticTooltipMenu,
511  TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
512  myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
513  // build geo coordinates label
514  myGeoFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
515  myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
516  myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
517  // build cartesian coordinates label
519  myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
520  myCartesianCoordinate->setHelpText(TL("Network coordinate"));
521  // build test coordinates label (only if gui-testing is enabled)
523  myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
524  myTestCoordinate->setHelpText(TL("Test coordinate"));
525  myTestCoordinate->setTextColor(FXRGB(255, 0, 0));
526  myTestFrame->hide();
527  // make the window a mdi-window
528  myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
529  myMDIClient = new FXMDIClient(myMainSplitter, GUIDesignSplitterMDI);
530  myMDIMenu = new FXMDIMenu(this, myMDIClient);
531  // build the message window
533  myMainSplitter->setSplit(1, 65);
534  // fill menu and tool bar
535  fillMenuBar();
536  // build additional threads
538  // set the status bar
539  setStatusBarText(TL("Ready."));
540  // set the caption
541  setTitle(myTitlePrefix);
542  // set Netedit ICON
545  // build netedit Accelerators (hotkeys)
546  GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
547 }
548 
549 
550 void
552  // set windows size and position
554  // set current folder
555  gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
556  // Create main window
557  FXMainWindow::create();
558  // get text width
559  const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
560  // adjust cartesian and geo frame
561  myCartesianFrame->setWidth(textWidth);
562  myGeoFrame->setWidth(textWidth);
563  // fill online maps
564  if (myOnlineMaps.empty()) {
565  myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
566  myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
567  myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
568  }
569  // show application windows
570  show(PLACEMENT_DEFAULT);
571  // check if maximice
572  if (!OptionsCont::getOptions().isSet("window-size")) {
573  if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
574  maximize();
575  }
576  }
577 }
578 
579 
581  closeAllWindows();
582  // Close icons
584  // Close gifs (Textures)
587  // delete visuals
588  delete myGLVisual;
589  // must delete menus to avoid segfault on removing accelerators
590  // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
592  delete myFileMenuSumoConfig;
593  delete myFileMenuTLS;
594  delete myFileMenuEdgeTypes;
595  delete myFileMenuAdditionals;
598  delete myFileMenuDataElements;
601  delete myFileMenu;
602  delete myModesMenu;
603  delete myEditMenu;
604  delete myLockMenu;
605  delete myProcessingMenu;
606  delete myLocatorMenu;
607  delete myToolsMenu;
608  delete myToolsDetectorMenu;
609  delete myToolsDistrictMenu;
610  delete myToolsDRTMenu;
611  delete myToolsEmissionsMenu;
612  delete myToolsImportMenu;
614  delete myToolsImportGTFSMenu;
615  delete myToolsImportVissim;
616  delete myToolsImportVisum;
617  delete myToolsNetMenu;
618  delete myToolsRouteMenu;
619  delete myToolsOutputMenu;
620  delete myToolsShapes;
621  delete myToolsTLS;
622  delete myToolsTurnDefs;
624  delete myToolsXML;
625  delete myWindowMenu;
626  delete myHelpMenu;
627  delete myLanguageMenu;
628  // Delete load thread
629  delete myLoadThread;
630  // drop all events
631  while (!myEvents.empty()) {
632  // get the next event
633  GUIEvent* e = myEvents.top();
634  myEvents.pop();
635  delete e;
636  }
637  // delete undoList and dialog
638  delete myUndoList;
639  delete myUndoListDialog;
640 }
641 
642 
643 long
644 GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
647  getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
648  if (isMaximized()) {
649  getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
650  } else {
651  getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
652  }
653  getApp()->exit(0);
654  }
655  return 1;
656 }
657 
658 
659 long
660 GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
661  GUIDialog_GLChosenEditor* chooser =
663  chooser->create();
664  chooser->show();
665  return 1;
666 }
667 
668 
669 long
670 GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
671  // check if close current simulation
672  if (onCmdClose(0, 0, 0) == 1) {
673  // create new network
675  }
676  return 1;
677 }
678 
679 
680 long
681 GNEApplicationWindow::onCmdOpenNetconvertConfig(FXObject*, FXSelector, void*) {
682  // get netconvert filename
683  const auto netconvertFile = GNEApplicationWindowHelper::openNetconvertFileDialog(this);
684  // continue depending of netconvertFile
685  if (!netconvertFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
686  // load configuration
687  loadConfiguration(netconvertFile);
688  }
689  return 1;
690 }
691 
692 
693 long
694 GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
695  // get netconvert filename
696  const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, false);
697  // continue depending of netconvertFile
698  if (!networkFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
699  // load network
700  loadNetwork(networkFile);
701  }
702  return 0;
703 }
704 
705 
706 long
707 GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
708  // get netconvert filename
709  const auto OSMFile = GNEApplicationWindowHelper::openOSMFileDialog(this);
710  // continue depending of netconvertFile
711  if (!OSMFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
712  loadOSM(OSMFile);
713  }
714  return 1;
715 }
716 
717 
718 long
719 GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
720  auto& neteditOptions = OptionsCont::getOptions();
721  // get netconvert filename
722  const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, false);
723  // continue depending of netconvertFile
724  if (!neteditConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
725  // reset netedit options
726  myLoadThread->fillOptions(neteditOptions);
727  myLoadThread->setDefaultOptions(neteditOptions);
728  // set netedit configuration file to load
729  neteditOptions.resetWritable();
730  neteditOptions.set("configuration-file", neteditConfigFile);
731  // run load thread
733  // update view
734  update();
735  }
736  return 1;
737 }
738 
739 
740 long
741 GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
742  auto& neteditOptions = OptionsCont::getOptions();
743  // get netconvert filename
744  const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, false);
745  // continue depending of netconvertFile
746  if (!sumoConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
747  // reset options
748  myLoadThread->fillOptions(neteditOptions);
749  myLoadThread->setDefaultOptions(neteditOptions);
750  // set sumo configuration file to load
751  neteditOptions.resetWritable();
752  neteditOptions.set("sumocfg-file", sumoConfigFile);
753  // run load thread
755  // update view
756  update();
757  }
758  return 1;
759 }
760 
761 
762 long
763 GNEApplicationWindow::onCmdReloadNeteditConfig(FXObject*, FXSelector, void*) {
764  // check if close current simulation
765  if (onCmdClose(0, 0, 0) == 1) {
766  auto& neteditOptions = OptionsCont::getOptions();
767  // get existent configuration file
768  const auto neteditConfigFile = neteditOptions.getString("configuration-file");
769  // reset options
770  myLoadThread->fillOptions(neteditOptions);
771  myLoadThread->setDefaultOptions(neteditOptions);
772  // set configuration file to load
773  neteditOptions.resetWritable();
774  neteditOptions.set("configuration-file", neteditConfigFile);
775  // run load thread
777  // update view
778  update();
779  }
780  return 1;
781 }
782 
783 
784 long
785 GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
786  auto& neteditOptions = OptionsCont::getOptions();
787  // check if close current simulation
788  if (onCmdClose(0, 0, 0) == 1) {
789  const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
790  // reset options
791  myLoadThread->fillOptions(neteditOptions);
792  myLoadThread->setDefaultOptions(neteditOptions);
793  // set configuration file to load
794  neteditOptions.resetWritable();
795  neteditOptions.set("sumocfg-file", sumoConfigFile);
796  // run load thread
798  // update view
799  update();
800  }
801  return 1;
802 }
803 
804 
805 long
806 GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
807  // check if file exist
808  if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
809  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
810  } else {
811  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
812  }
813 }
814 
815 
816 long
817 GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
818  // check if file exist
819  if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
820  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
821  } else {
822  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
823  }
824 }
825 
826 
827 long
828 GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
829  auto& neteditOptions = OptionsCont::getOptions();
830  // get netconvert filename
831  const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, false);
832  // continue depending of netconvertFile
833  if (!TLSFile.empty()) {
834  // set file to load
835  neteditOptions.resetWritable();
836  neteditOptions.set("tls-file", TLSFile);
837  // Run parser
838  myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + TLSFile + "'");
839  myNet->computeNetwork(this);
840  if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(TLSFile) == false) {
841  // Abort undo/redo
843  } else {
844  // commit undo/redo operation
845  myUndoList->end();
846  update();
847  }
848  } else {
849  // write debug information
850  WRITE_DEBUG("Cancel TLSProgram dialog");
851  }
852  return 1;
853 }
854 
855 
856 long
857 GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
858  // get option container
859  auto& neteditOptions = OptionsCont::getOptions();
860  // Run parser
861  myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + neteditOptions.getString("tls-file") + "'");
862  myNet->computeNetwork(this);
863  if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(neteditOptions.getString("tls-file")) == false) {
864  // Abort undo/redo
866  } else {
867  // commit undo/redo operation
868  myUndoList->end();
869  update();
870  }
871  return 1;
872 }
873 
874 
875 long
876 GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
877  // check if file exist
878  if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
879  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
880  } else {
881  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
882  }
883 }
884 
885 
886 long
887 GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
888  auto& neteditOptions = OptionsCont::getOptions();
889  // get netconvert filename
890  const auto edgeTypeFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, false);
891  // continue depending of netconvertFile
892  if (!edgeTypeFile.empty()) {
893  // set file to load
894  neteditOptions.resetWritable();
895  neteditOptions.set("edgetypes-file", edgeTypeFile);
896  // declare type container
897  NBTypeCont typeContainerAux;
898  // declare type handler
899  NIXMLTypesHandler handler(typeContainerAux);
900  // load edge types
901  NITypeLoader::load(handler, {edgeTypeFile}, "types");
902  // write information
903  WRITE_MESSAGE(TL("Loaded edge types from '") + toString(typeContainerAux.size()) + "'");
904  // now create GNETypes based on typeContainerAux
906  // iterate over typeContainerAux
907  for (const auto& auxEdgeType : typeContainerAux) {
908  // create new edge type
909  GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
910  // add lane types
911  for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
912  edgeType->addLaneType(new GNELaneType(edgeType, laneType));
913  }
914  // add it using undoList
915  myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
916 
917  }
918  // end undo list
919  myViewNet->getUndoList()->end();
920  // refresh edge type selector
922  }
923  return 1;
924 }
925 
926 
927 long
928 GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
929  // declare type container
930  NBTypeCont typeContainerAux;
931  // declare type handler
932  NIXMLTypesHandler handler(typeContainerAux);
933  // load edge types
934  NITypeLoader::load(handler, {OptionsCont::getOptions().getString("edgetypes-file")}, "types");
935  // write information
936  WRITE_MESSAGE(TL("Reloaded edge types from '") + toString(typeContainerAux.size()) + ".");
937  // now create GNETypes based on typeContainerAux
939  // iterate over typeContainerAux
940  for (const auto& auxEdgeType : typeContainerAux) {
941  // create new edge type
942  GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
943  // add lane types
944  for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
945  edgeType->addLaneType(new GNELaneType(edgeType, laneType));
946  }
947  // add it using undoList
948  myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
949 
950  }
951  // end undo list
952  myViewNet->getUndoList()->end();
953  // refresh edge type selector
955  return 0;
956 }
957 
958 
959 long
960 GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
961  // check if file exist
962  if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
963  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
964  } else {
965  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
966  }
967 }
968 
969 
970 long
971 GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector, void*) {
972  auto& neteditOptions = OptionsCont::getOptions();
973  // check if close current file
974  if (onCmdClose(0, 0, 0) == 1) {
975  // store size, position and viewport
977  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
978  // set flag
979  myAmLoading = true;
980  // get files
981  const auto neteditConfig = neteditOptions.getString("configuration-file");
982  const auto sumoConfig = neteditOptions.getString("sumocfg-file");
983  const auto networkFile = neteditOptions.getString("net-file");
984  // fill (reset) all options
985  myLoadThread->fillOptions(neteditOptions);
986  // set default options defined in GNELoadThread::setDefaultOptions(...)
987  myLoadThread->setDefaultOptions(neteditOptions);
988  // set file to load
989  neteditOptions.resetWritable();
990  if (neteditConfig.size() > 0) {
991  neteditOptions.set("configuration-file", neteditConfig);
992  // set status bar
993  setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
994  } else if (sumoConfig.size() > 0) {
995  neteditOptions.set("sumocfg-file", sumoConfig);
996  // set status bar
997  setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
998  } else if (networkFile.size() > 0) {
999  neteditOptions.set("net-file", networkFile);
1000  // set status bar
1001  setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1002  } else {
1003  // nothing to load
1004  return 0;
1005  }
1006  // load network
1008  }
1009  return 1;
1010 }
1011 
1012 
1013 long
1014 GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1015  auto& neteditOptions = OptionsCont::getOptions();
1016  // declare strings
1017  FXString neteditConfig = TL("&Reload Netedit config");
1018  FXString sumoConfig = TL("&Reload Sumo config");
1019  FXString netFile = TL("&Reload Network");
1020  FXString reload = TL("&Reload");
1021  // check options
1022  if (myNet == nullptr) {
1023  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1024  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1025  } else if (neteditOptions.getString("configuration-file").size() > 0) {
1026  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1027  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1028  } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1029  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1030  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1031  } else if (neteditOptions.getString("net-file").size() > 0) {
1032  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1033  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1034  } else {
1035  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1036  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1037  }
1038  return 1;
1039 }
1040 
1041 
1042 long
1043 GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector, void*) {
1044  auto& neteditOptions = OptionsCont::getOptions();
1045  // check if close current file
1046  if (onCmdClose(0, 0, 0) == 1) {
1047  // store size, position and viewport
1049  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1050  // set flag
1051  myAmLoading = true;
1052  // get network
1053  const auto networkFile = neteditOptions.getString("net-file");
1054  // fill (reset) all options
1055  myLoadThread->fillOptions(neteditOptions);
1056  // set default options defined in GNELoadThread::setDefaultOptions(...)
1057  myLoadThread->setDefaultOptions(neteditOptions);
1058  // set file to load
1059  neteditOptions.resetWritable();
1060  neteditOptions.set("net-file", networkFile);
1061  // set status bar
1062  setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1063  // loaad network
1065  }
1066  return 1;
1067 }
1068 
1069 
1070 long
1071 GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1072  auto& neteditOptions = OptionsCont::getOptions();
1073  if (myNet == nullptr) {
1074  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1075  sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1076  } else if ((neteditOptions.getString("net-file").size() > 0) &&
1077  ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1078  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1079  sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1080  } else {
1081  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1082  sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1083  }
1084  return 1;
1085 }
1086 
1087 
1088 long
1089 GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1090  // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1091  if (myAmLoading) {
1092  myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1093  } else if (onCmdClose(0, 0, 0) == 1) {
1094  // get filedata
1095  const std::string recentFile = ((const char*)fileData);
1096  // check if we're loading a network o a config
1097  if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1098  (recentFile.find(".netecfg") != std::string::npos) ||
1099  (recentFile.find(".sumocfg") != std::string::npos) ||
1100  (recentFile.find(".netccfg") != std::string::npos)) {
1101  // load config
1102  loadConfiguration(recentFile);
1103  } else {
1104  // load network
1105  loadNetwork(recentFile);
1106  }
1107  }
1108  return 1;
1109 }
1110 
1111 
1112 long
1113 GNEApplicationWindow::onCmdClose(FXObject*, FXSelector, void*) {
1114  if (myViewNet == nullptr) {
1115  return 1;
1116  } else if (continueWithUnsavedChanges()) {
1117  closeAllWindows();
1118  // add a separator to the log
1120  // hide all menu commands
1124  // hide view options
1128  return 1;
1129  } else {
1130  return 0;
1131  }
1132 }
1133 
1134 
1135 long
1136 GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1137  if (myMDIClient->numChildren() > 0) {
1138  GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1139  if (w != nullptr) {
1140  w->onCmdLocate(nullptr, sel, nullptr);
1141  }
1142  }
1143  return 1;
1144 }
1145 
1146 
1147 long
1148 GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1149  return myToolsMenuCommands.showTool(obj);
1150 }
1151 
1152 
1153 long
1154 GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1155  return myToolsMenuCommands.runToolDialog(obj);
1156 }
1157 
1158 
1159 long
1160 GNEApplicationWindow::onCmdPostProcessingPythonTool(FXObject* obj, FXSelector, void*) {
1161  return myToolsMenuCommands.postProcessing(obj);
1162 }
1163 
1164 
1165 long
1166 GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1167  // currently always enabled
1168  return 1;
1169 }
1170 
1171 
1172 long
1173 GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1174  sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1175  return 1;
1176 }
1177 
1178 
1179 long
1180 GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1182  return 1;
1183 }
1184 
1185 
1186 long
1188  // write warning if netedit is running in testing mode
1189  WRITE_DEBUG("Toggle load additionals in sumo-gui");
1190  return 1;
1191 }
1192 
1193 
1194 long
1195 GNEApplicationWindow::onCmdLoadDemandInSUMOGUI(FXObject*, FXSelector, void*) {
1196  // write warning if netedit is running in testing mode
1197  WRITE_DEBUG("Toggle load demand in sumo-gui");
1198  return 1;
1199 }
1200 
1201 
1202 long
1203 GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1204  // write warning if netedit is running in testing mode
1205  WRITE_DEBUG("Opening about dialog");
1206  // create and open about dialog
1207  GNEAbout* about = new GNEAbout(this);
1208  about->create();
1209  about->show(PLACEMENT_OWNER);
1210  // write warning if netedit is running in testing mode
1211  WRITE_DEBUG("Closed about dialog");
1212  return 1;
1213 }
1214 
1215 
1216 long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1217  FXEvent* event = (FXEvent*)ptr;
1218  FXString string = GUIUserIO::clipped.c_str();
1219  setDNDData(FROM_CLIPBOARD, event->target, string);
1220  return 1;
1221 }
1222 
1223 
1224 long
1225 GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1226  eventOccurred();
1227  return 1;
1228 }
1229 
1230 
1231 void
1233  while (!myEvents.empty()) {
1234  // get the next event
1235  GUIEvent* e = myEvents.top();
1236  myEvents.pop();
1237  // process
1238  switch (e->getOwnType()) {
1241  break;
1248  break;
1249  default:
1250  break;
1251  }
1252  delete e;
1253  }
1254 }
1255 
1256 
1257 void
1259  myAmLoading = false;
1260  GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1261  // check whether the loading was successfull
1262  if (ec->net == nullptr) {
1263  // report failure
1264  setStatusBarText(TL("Loading of '") + ec->file + "' failed!");
1265  } else {
1266  // set new Net
1267  myNet = ec->net;
1268  // report success
1269  setStatusBarText(TL("'") + ec->file + TL("' loaded."));
1271  // build viewparent toolbar grips before creating view parent
1273  // initialise netedit View
1274  GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1275  // create it maximized
1276  viewParent->maximize();
1277  // mark it as Active child
1278  myMDIClient->setActiveChild(viewParent);
1279  // cast pointer myViewNet
1280  myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1281  // set settings in view
1282  if (viewParent->getView() && ec->settingsFile != "") {
1283  GUISettingsHandler settings(ec->settingsFile, true, true);
1284  settings.addSettings(viewParent->getView());
1285  viewParent->getView()->addDecals(settings.getDecals());
1286  settings.applyViewport(viewParent->getView());
1287  settings.setSnapshots(viewParent->getView());
1288  }
1289  // set network name on the caption
1290  setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1291  // force supermode network
1292  if (myViewNet) {
1294  }
1295  if (myViewNet && ec->viewportFromRegistry) {
1296  Position off;
1297  off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1298  Position p(off.x(), off.y(), 0);
1299  myViewNet->setViewportFromToRot(off, p, 0);
1300  }
1301  }
1303  // load elements
1306  loadDataElements();
1308  // after loading net shouldn't be saved
1309  if (myNet) {
1311  }
1312  // update app
1313  update();
1314  // restore focus
1315  setFocus();
1316 }
1317 
1318 
1319 void
1321  GUIEvent_Message* ec = static_cast<GUIEvent_Message*>(e);
1322  myMessageWindow->appendMsg(ec->getOwnType(), ec->getMsg());
1323 }
1324 
1325 // ---------------------------------------------------------------------------
1326 // private methods
1327 // ---------------------------------------------------------------------------
1328 
1329 void
1331  // build file menu
1332  myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1334  myFileMenuNeteditConfig = new FXMenuPane(this);
1335  myFileMenuSumoConfig = new FXMenuPane(this);
1336  myFileMenuTLS = new FXMenuPane(this);
1337  myFileMenuEdgeTypes = new FXMenuPane(this);
1338  myFileMenuAdditionals = new FXMenuPane(this);
1339  myFileMenuDemandElements = new FXMenuPane(this);
1340  myFileMenuDataElements = new FXMenuPane(this);
1341  myFileMenuMeanDataElements = new FXMenuPane(this);
1342  myFileMenuRecentNetworks = new FXMenuPane(this);
1343  myFileMenuRecentConfigs = new FXMenuPane(this);
1347  // add separator for recent files
1348  new FXMenuSeparator(myFileMenu);
1349  // build recent files
1352  new FXMenuSeparator(myFileMenu);
1354  TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1355  nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1356  // build modes menu
1357  myModesMenu = new FXMenuPane(this);
1359  myModesMenuTitle->setTarget(this);
1361  // build Supermode commands and hide it
1363  // add separator
1364  new FXSeparator(myModesMenu);
1365  // build modes menu commands
1367  // build edit menu
1368  myEditMenu = new FXMenuPane(this);
1370  // build edit menu commands
1372  // build separator
1373  new FXMenuSeparator(myEditMenu);
1374  // build view options
1378  // hide view options
1382  // build view menu commands
1384  // build separator
1385  new FXMenuSeparator(myEditMenu);
1386  // build front element menu commands
1388  // build separator
1389  new FXMenuSeparator(myEditMenu);
1390  // build open in sumo menu commands
1392  // build lock menu
1393  myLockMenu = new FXMenuPane(this);
1395  myLockMenuTitle->setTarget(this);
1397  // build lock menu commands
1399  // build processing menu (trigger netbuild computations)
1400  myProcessingMenu = new FXMenuPane(this);
1403  // build locate menu
1404  myLocatorMenu = new FXMenuPane(this);
1407  // build tools menu
1408  myToolsMenu = new FXMenuPane(this);
1409  myToolsDetectorMenu = new FXMenuPane(this);
1410  myToolsDistrictMenu = new FXMenuPane(this);
1411  myToolsDRTMenu = new FXMenuPane(this);
1412  myToolsEmissionsMenu = new FXMenuPane(this);
1413  myToolsImportMenu = new FXMenuPane(this);
1414  myToolsImportCityBrainMenu = new FXMenuPane(this);
1415  myToolsImportGTFSMenu = new FXMenuPane(this);
1416  myToolsImportVissim = new FXMenuPane(this);
1417  myToolsImportVisum = new FXMenuPane(this);
1418  myToolsNetMenu = new FXMenuPane(this);
1419  myToolsRouteMenu = new FXMenuPane(this);
1420  myToolsOutputMenu = new FXMenuPane(this);
1421  myToolsShapes = new FXMenuPane(this);
1422  myToolsTLS = new FXMenuPane(this);
1423  myToolsTurnDefs = new FXMenuPane(this);
1424  myToolsVisualizationMenu = new FXMenuPane(this);
1425  myToolsXML = new FXMenuPane(this);
1427  // build tools menu cascasde
1428  new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1429  new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1431  //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1440  //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1441  new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1442  new FXMenuCascade(myToolsMenu, TL("Turn-defs"), GUIIconSubSys::getIcon(GUIIcon::TOOL_TURNDEFS), myToolsTurnDefs);
1443  new FXMenuCascade(myToolsMenu, TL("Visualization"), GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), myToolsVisualizationMenu);
1444  new FXMenuCascade(myToolsMenu, TL("XML"), GUIIconSubSys::getIcon(GUIIcon::TOOL_XML), myToolsXML);
1445  // add separators between folders
1446  new FXMenuSeparator(myToolsMenu);
1447  new FXMenuSeparator(myToolsImportMenu);
1448  // create map with tool Menu panes and their associated folder
1454  myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1455  myMenuPaneToolMaps["import/gtfs"] = myToolsImportGTFSMenu;
1456  myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1457  myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1461  myMenuPaneToolMaps["shapes"] = myToolsShapes;
1462  myMenuPaneToolMaps["tls"] = myToolsTLS;
1463  myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1464  myMenuPaneToolMaps["visualization"] = myToolsVisualizationMenu;
1465  myMenuPaneToolMaps["xml"] = myToolsXML;
1466  // build tools
1468  // build windows menu
1469  myWindowMenu = new FXMenuPane(this);
1472  // build language menu
1474  // build help menu
1475  myHelpMenu = new FXMenuPane(this);
1478 }
1479 
1480 
1481 FXGLCanvas*
1483  // netedit uses only a single View, then return nullptr
1484  return nullptr;
1485 }
1486 
1487 
1488 SUMOTime
1490  return 0;
1491 }
1492 
1493 
1494 double
1496  return 1;
1497 }
1498 
1499 
1500 GNEUndoList*
1502  return myUndoList;
1503 }
1504 
1505 
1508  return myUndoListDialog;
1509 }
1510 
1511 
1512 GNEViewNet*
1514  return myViewNet;
1515 }
1516 
1517 
1520  return myToolbarsGrip;
1521 }
1522 
1523 
1524 void
1526  if (myViewNet && myViewNet->getNet()) {
1527  // show
1529  // set label depending of recomputing
1530  if (myNet->getAttributeCarriers()->getJunctions().empty() || myNet->isNetRecomputed()) {
1531  myRequireRecomputingButton->setText("");
1532  myRequireRecomputingButton->setTipText(TL("Network computed"));
1534  myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1535  } else {
1536  myRequireRecomputingButton->setText(TL("Press F5"));
1537  myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1539  myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1540  }
1541  } else {
1542  // hide
1544  }
1545 }
1546 
1547 
1548 void
1550  // first check if net must be deleted
1551  if (myNet != nullptr) {
1552  delete myNet;
1553  myNet = nullptr;
1555  }
1556  // check if view has to be saved
1557  if (myViewNet) {
1559  // clear decals
1560  myViewNet->getDecals().clear();
1561  }
1562  // lock tracker
1563  myTrackerLock.lock();
1564  // remove trackers and other external windows
1565  while (!myGLWindows.empty()) {
1566  delete myGLWindows.front();
1567  }
1568  myViewNet = nullptr;
1569  for (FXMainWindow* const window : myTrackerWindows) {
1570  window->destroy();
1571  delete window;
1572  }
1573  myTrackerWindows.clear();
1574  // reset the caption
1575  setTitle(myTitlePrefix);
1576  // unlock tracker
1577  myTrackerLock.unlock();
1578  // remove coordinate information
1579  myGeoCoordinate->setText(TL("N/A"));
1580  myCartesianCoordinate->setText(TL("N/A"));
1581  myTestCoordinate->setText(TL("N/A"));
1582  myTestFrame->hide();
1584  // Reset textures
1586  // reset fonts
1588 }
1589 
1590 
1591 FXCursor*
1593  return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1594 }
1595 
1596 
1597 void
1599  auto& neteditOptions = OptionsCont::getOptions();
1600  if (neteditOptions.getBool("new")) {
1601  createNewNetwork();
1602  } else {
1603  // set flag
1604  myAmLoading = true;
1605  // set status bar
1606  setStatusBarText(TL("Loading console arguments"));
1607  // load console arguments
1609  // add it into recent networks and configs
1610  if (neteditOptions.getString("net-file").size() > 0) {
1611  myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
1612  }
1613  if (neteditOptions.getString("configuration-file").size() > 0) {
1614  myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
1615  }
1616  }
1617 }
1618 
1619 
1620 void
1622  auto& neteditOptions = OptionsCont::getOptions();
1623  // save windows size and position
1625  // enable loading flag and disable reloading flag
1626  myAmLoading = true;
1627  // recenter view
1628  gSchemeStorage.saveViewport(0, 0, -1, 0);
1629  // fill (reset) all options
1630  GNELoadThread::fillOptions(neteditOptions);
1631  // set default options defined in GNELoadThread::setDefaultOptions(...)
1632  GNELoadThread::setDefaultOptions(neteditOptions);
1633  // update status bar
1634  setStatusBarText(TL("Creating new network."));
1635  // create new network
1637  // update window
1638  update();
1639 }
1640 
1641 
1642 void
1643 GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1644  if (networkFile.empty()) {
1645  WRITE_ERROR(TL("Trying to load an empty network"));
1646  } else {
1647  auto& neteditOptions = OptionsCont::getOptions();
1648  // store size, position and viewport
1650  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1651  // set flag
1652  myAmLoading = true;
1653  // fill (reset) all options
1654  myLoadThread->fillOptions(neteditOptions);
1655  // set default options defined in GNELoadThread::setDefaultOptions(...)
1656  myLoadThread->setDefaultOptions(neteditOptions);
1657  // set file to load
1658  neteditOptions.resetWritable();
1659  neteditOptions.set("net-file", networkFile);
1660  // set status bar
1661  setStatusBarText(TL("Loading network file '") + networkFile + "'");
1662  // load network
1664  // add it into recent nets
1665  myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1666  }
1667 }
1668 
1669 
1670 void
1671 GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1672  if (configurationFile.empty()) {
1673  WRITE_ERROR(TL("Trying to load an empty configuration"));
1674  } else {
1675  auto& neteditOptions = OptionsCont::getOptions();
1676  // store size, position and viewport
1678  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1679  // set flag
1680  myAmLoading = true;
1681  // fill (reset) all options
1682  myLoadThread->fillOptions(neteditOptions);
1683  // set default options defined in GNELoadThread::setDefaultOptions(...)
1684  myLoadThread->setDefaultOptions(neteditOptions);
1685  // set file to load
1686  neteditOptions.resetWritable();
1687  neteditOptions.set("configuration-file", configurationFile);
1688  // set status bar
1689  setStatusBarText(TL("Loading configuration file '") + configurationFile + "'");
1690  // load config
1692  // add it into recent configs
1693  myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1694  }
1695 }
1696 
1697 
1698 void
1699 GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1700  auto& neteditOptions = OptionsCont::getOptions();
1701  // store size, position and viewport
1703  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1704  // set flag
1705  myAmLoading = true;
1706  // fill (reset) all options
1707  myLoadThread->fillOptions(neteditOptions);
1708  // set default options defined in GNELoadThread::setDefaultOptions(...)
1709  myLoadThread->setDefaultOptions(neteditOptions);
1710  // recommended osm options
1711  // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1712  neteditOptions.set("osm-files", OSMFile);
1713  neteditOptions.set("geometry.remove", "true");
1714  neteditOptions.set("ramps.guess", "true");
1715  neteditOptions.set("junctions.join", "true");
1716  neteditOptions.set("tls.guess-signals", "true");
1717  neteditOptions.set("tls.discard-simple", "true");
1718  // open wizard dialog
1719  if (GNEOptionsDialog::Options(this, GUIIcon::SUPERMODENETWORK, OptionsCont::getOptions(), myOriginalNeteditOptions, TL("Select Import Options")).first == TRUE) {
1720  NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
1721  // set file to load
1722  neteditOptions.resetWritable();
1723  neteditOptions.set("configuration-file", OSMFile);
1724  // set status bar
1725  setStatusBarText(TL("Loading OSM file '") + OSMFile + "'");
1726  // load config
1728  }
1729 }
1730 
1731 void
1732 GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1733  myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1734  myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1735 }
1736 
1737 
1738 long
1740  // declare variable to save FXMessageBox outputs.
1741  FXuint answer = 0;
1742  // write warning if netedit is running in testing mode
1743  WRITE_DEBUG("Opening FXMessageBox 'Volatile Recomputing'");
1744  // open question dialog box
1745  answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Recompute with volatile options"),
1746  TL("Changes produced in the net due a recomputing with volatile options cannot be undone. Continue?"));
1747  if (answer != 1) { //1:yes, 2:no, 4:esc
1748  // write warning if netedit is running in testing mode
1749  if (answer == 2) {
1750  WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'No'");
1751  } else if (answer == 4) {
1752  WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'ESC'");
1753  }
1754  // abort recompute with volatile options
1755  return 0;
1756  } else {
1757  // write warning if netedit is running in testing mode
1758  WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'Yes'");
1759  // save additionals
1760  onCmdSaveAdditionals(nullptr, 0, nullptr);
1761  // save demand elements
1762  onCmdSaveDemandElements(nullptr, 0, nullptr);
1763  // save data elements
1764  onCmdSaveDataElements(nullptr, 0, nullptr);
1765  // save mean datas
1766  onCmdSaveMeanDatas(nullptr, 0, nullptr);
1767  // compute with volatile options
1768  myNet->computeNetwork(this, true, true);
1769  updateControls();
1770  return 1;
1771  }
1772 }
1773 
1774 
1775 bool
1777  if (myConsoleOptionsLoaded) {
1778  myConsoleOptionsLoaded = false;
1779  return true;
1780  } else {
1781  return false;
1782  }
1783 }
1784 
1785 
1786 long
1787 GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1788  // check that currently there is a View
1789  if (myViewNet) {
1790  myViewNet->onCmdSetSupermode(sender, sel, ptr);
1791  }
1792  return 1;
1793 }
1794 
1795 
1796 long
1797 GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1798  // check that currently there is a View
1799  if (myViewNet) {
1800  myViewNet->onCmdSetMode(sender, sel, ptr);
1801  }
1802  return 1;
1803 }
1804 
1805 
1806 long
1807 GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector, void*) {
1808  if (myViewNet) {
1810  }
1811  return 1;
1812 }
1813 
1814 
1815 long
1816 GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1817  // lock all
1820  return 1;
1821 }
1822 
1823 
1824 long
1825 GNEApplicationWindow::onCmdUnlockAllElements(FXObject*, FXSelector, void*) {
1826  // unlock all
1829  return 1;
1830 }
1831 
1832 
1833 long
1834 GNEApplicationWindow::onCmdLockSelectElements(FXObject*, FXSelector, void*) {
1835  if (myViewNet) {
1836  myViewNet->update();
1837  }
1838  return 1;
1839 }
1840 
1841 
1842 long
1843 GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
1844  if (myViewNet) {
1846  // supermode network
1852  myLockMenuTitle->enable();
1853  } else {
1854  myLockMenuTitle->disable();
1855  }
1857  // supermode demand
1862  myLockMenuTitle->enable();
1863  } else {
1864  myLockMenuTitle->disable();
1865  }
1866  } else if (myViewNet->getEditModes().isCurrentSupermodeData()) {
1867  // supermode data
1871  myLockMenuTitle->enable();
1872  } else {
1873  myLockMenuTitle->disable();
1874  }
1875  } else {
1876  myLockMenuTitle->disable();
1877  }
1878  } else {
1879  myLockMenuTitle->disable();
1880  }
1881  return 1;
1882 }
1883 
1884 long
1885 GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
1886  // first check if there is a view
1887  if (myViewNet) {
1888  // process depending of supermode
1890  // check what FXMenuCommand was called
1891  switch (FXSELID(sel)) {
1893  // show extra information for tests
1894  WRITE_DEBUG("Key F5 (Compute) pressed");
1895  myNet->computeNetwork(this, true, false);
1896  updateControls();
1897  break;
1899  // show extra information for tests
1900  WRITE_DEBUG("Keys Shift + F5 (Compute with volatile options) pressed");
1902  break;
1904  // show extra information for tests
1905  WRITE_DEBUG("Key F6 (Clean junction) pressed");
1907  break;
1909  // show extra information for tests
1910  WRITE_DEBUG("Key F7 (Join junctions) pressed");
1912  break;
1914  // show extra information for tests
1915  WRITE_DEBUG("Key F8 (Clean invalid crossings) pressed");
1917  break;
1918  default:
1919  break;
1920  }
1922  // check what FXMenuCommand was called
1923  switch (FXSELID(sel)) {
1925  // show extra information for tests
1926  WRITE_DEBUG("Key F5 (Compute) pressed");
1928  updateControls();
1929  break;
1931  // show extra information for tests
1932  WRITE_DEBUG("Key F6 (RemoveUnusedRoutes) pressed");
1934  break;
1936  // show extra information for tests
1937  WRITE_DEBUG("Key F7 (JoinRoutes) pressed");
1939  break;
1941  // show extra information for tests
1942  WRITE_DEBUG("Key F7 (AdjustPersonPlans) pressed");
1944  break;
1946  // show extra information for tests
1947  WRITE_DEBUG("Key F8 (CleanInvalidDemandElements) pressed");
1949  break;
1950  default:
1951  break;
1952  }
1953  }
1954  }
1955  return 1;
1956 }
1957 
1958 
1959 long
1960 GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
1961  // get extra arguments
1962  std::string extraArg;
1963  if (sel == MID_GNE_POSTPROCESSINGNETGENERATE) {
1964  extraArg = " -s " + myNetgenerateOptions.getValueString("output-file");
1965  }
1966  FXRegistry reg("SUMO netedit", "netedit");
1967  std::string netedit = "netedit";
1968  const char* sumoPath = getenv("SUMO_HOME");
1969  if (sumoPath != nullptr) {
1970 #ifdef DEBUG
1971  std::string newPath = std::string(sumoPath) + "/bin/neteditD";
1972 #else
1973  std::string newPath = std::string(sumoPath) + "/bin/netedit";
1974 #endif
1975  if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
1976  netedit = "\"" + newPath + "\"";
1977  }
1978  }
1979  std::string cmd = netedit + extraArg;
1980  // start in background
1981 #ifndef WIN32
1982  cmd = cmd + " &";
1983 #else
1984  // see "help start" for the parameters
1985  cmd = "start /B \"\" " + cmd;
1986 #endif
1987  WRITE_MESSAGE(TL("Running ") + cmd + ".");
1988  // yay! fun with dangerous commands... Never use this over the internet
1990  return 1;
1991 }
1992 
1993 
1994 long
1995 GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
1996  // get option container
1997  auto& neteditOptions = OptionsCont::getOptions();
1998  // input parameters
1999  std::string inputParameters;
2000  // if we have only a network, then load directly without creating a SumoConfig
2002  ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2003  // force save network
2004  if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2005  // network wasn't saved, then stop
2006  return 0;
2007  }
2008  inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2009  // write info
2010  WRITE_MESSAGE(TL("Loading network '") + neteditOptions.getString("net-file") + TL("' in SUMO-GUI"));
2011  } else {
2012  // force save SumoConfig
2013  if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2014  // SumoConfig wasn't saved, then stop
2015  return 0;
2016  }
2017  inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2018  // write info
2019  WRITE_MESSAGE(TL("Loading sumo config '") + neteditOptions.getString("sumocfg-file") + TL("' in SUMO-GUI"));
2020  }
2021  // save current viewport in registry
2022  FXRegistry reg("SUMO GUI", "sumo-gui");
2023  reg.read();
2024  reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2025  reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2026  reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2027  reg.write();
2028  // declare executable
2029  std::string sumoGuiExecutable = "sumo-gui";
2030  // if SUMO_HOME is defined, update executable
2031  const char* sumoHome = getenv("SUMO_HOME");
2032  if (sumoHome != nullptr) {
2033  std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2034  if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2035  sumoGuiExecutable = "\"" + newPath + "\"";
2036  }
2037  }
2038  // declare command
2039  std::string cmd = sumoGuiExecutable + inputParameters;
2040  // start in background
2041 #ifndef WIN32
2042  cmd = cmd + " &";
2043 #else
2044  // see "help start" for the parameters
2045  cmd = "start /B \"\" " + cmd;
2046 #endif
2047  WRITE_MESSAGE(TL("Running ") + cmd + ".");
2048  // yay! fun with dangerous commands... Never use this over the internet
2050  return 1;
2051 }
2052 
2053 
2054 long
2055 GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2056  // check that view exists
2057  if (myViewNet) {
2058  // show extra information for tests
2059  WRITE_DEBUG("Key ESC (abort) pressed");
2060  // first check if we're selecting a subset of edges in TAZ Frame
2062  // show extra information for tests
2063  WRITE_DEBUG("Cleaning current selected edges");
2064  // clear current selection
2066  } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2067  // check if stop select parent
2069  // show extra information for tests
2070  WRITE_DEBUG("Stop select new parent");
2071  // and stop select paretn
2073  } else {
2074  // show extra information for tests
2075  WRITE_DEBUG("Cleaning inspected elements");
2076  // clear inspected elements
2078  }
2079  } else {
2080  // abort current operation
2082  }
2083  }
2084  return 1;
2085 }
2086 
2087 
2088 long
2089 GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2090  // check that view exists
2091  if (myViewNet) {
2092  // show extra information for tests
2093  WRITE_DEBUG("Key DEL (delete) pressed");
2094  myViewNet->hotkeyDel();
2095  }
2096  return 1;
2097 }
2098 
2099 
2100 long
2101 GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2102  // check that view exists
2103  if (myViewNet) {
2104  // show extra information for tests
2105  WRITE_DEBUG("Key ENTER pressed");
2107  }
2108  return 1;
2109 }
2110 
2111 
2112 long
2113 GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2114  // check that view exists
2115  if (myViewNet) {
2116  // show extra information for tests
2117  WRITE_DEBUG("Key BACKSPACE pressed");
2119  }
2120  return 1;
2121 }
2122 
2123 
2124 long
2125 GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2126  // check that view exists
2127  if (myViewNet) {
2129  }
2130  return 1;
2131 }
2132 
2133 
2134 long
2135 GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2136  // check that view exists
2137  if (myViewNet) {
2139  // refresh flow frames
2140  if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2142  }
2143  if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2145  }
2146  if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2148  }
2149  // refresh inspector frame
2150  if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2152  }
2153  }
2154  return 1;
2155 }
2156 
2157 
2158 long
2159 GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2160  // check that view exists
2161  if (myViewNet) {
2163  }
2164  return 1;
2165 }
2166 
2167 long
2168 GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2169  // enable or disable sender element depending of viewNet
2170  return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2171 }
2172 
2173 
2174 long
2175 GNEApplicationWindow::onUpdRequireRecomputing(FXObject*, FXSelector, void*) {
2177  return 1;
2178 }
2179 
2180 
2181 long
2182 GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2184 }
2185 
2186 
2187 long
2188 GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2190 }
2191 
2192 
2193 long
2194 GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2195  // check that view exists
2196  if (myViewNet) {
2198  }
2199  return 1;
2200 }
2201 
2202 
2203 long
2204 GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2205  // check that view exists
2206  if (myViewNet) {
2208  }
2209  return 1;
2210 }
2211 
2212 
2213 long
2214 GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2215  // check that view exists
2216  if (myViewNet) {
2217  // show debug info
2219  // show extra information for tests
2220  WRITE_DEBUG("Disabled grid through Ctrl+g hotkey");
2221  } else {
2222  // show extra information for tests
2223  WRITE_DEBUG("Enabled grid through Ctrl+g hotkey");
2224  }
2225  // Call manually toggle grid function
2226  myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2227  }
2228  return 1;
2229 }
2230 
2231 
2232 long
2233 GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2234  // check that view exists
2235  if (myViewNet) {
2236  // show debug info
2238  // show extra information for tests
2239  WRITE_DEBUG("Disabled draw junction shape through Ctrl+j hotkey");
2240  } else {
2241  // show extra information for tests
2242  WRITE_DEBUG("Enabled draw junction shape through Ctrl+j hotkey");
2243  }
2244  // Call manually toggle junction shape function
2245  myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2246  }
2247  return 1;
2248 }
2249 
2250 
2251 long
2252 GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2253  if (myViewNet) {
2254  if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2255  // get inspected AC
2256  GNEAttributeCarrier* inspectedAC = (myViewNet->getInspectedAttributeCarriers().size() == 1) ? myViewNet->getInspectedAttributeCarriers().front() : nullptr;
2257  // set or clear front attribute
2258  if (myViewNet->getFrontAttributeCarrier() == inspectedAC) {
2260  } else {
2261  myViewNet->setFrontAttributeCarrier(inspectedAC);
2262  }
2264  } else {
2266  }
2267  update();
2268  }
2269  return 1;
2270 }
2271 
2272 
2273 long
2274 GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2275  // first check that we have a ViewNet
2276  if (myViewNet) {
2277  // first check what selector was called
2278  int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2279  // check that numericalKeyPressed is valid
2280  if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2281  return 1;
2282  }
2283  // declare a vector in which save visible menu commands
2284  std::vector<MFXCheckableButton*> visibleMenuCommands;
2285  // get common, network and demand visible menu commands
2289  // now check that numericalKeyPressed isn't greater than visible view options
2290  if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2291  return 1;
2292  }
2293  // toggle edit options
2295  visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2296  return 1;
2298  visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2299  return 1;
2301  visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2302  return 1;
2303  }
2304  }
2305  return 1;
2306 }
2307 
2308 
2309 long
2310 GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2311  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2312  return 1;
2313 }
2314 
2315 
2316 long
2317 GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2318  // update in every version
2319  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2320  return 1;
2321 }
2322 
2323 
2324 long
2325 GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2326  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2327  return 1;
2328 }
2329 
2330 
2331 long
2334  return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2335  } else {
2336  return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2337  }
2338 }
2339 
2340 
2341 long
2342 GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2343  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2344  return 1;
2345 }
2346 
2347 
2348 long
2349 GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2350  // write warning if netedit is running in testing mode
2351  WRITE_DEBUG("Opening feedback dialog");
2352  // create and open feedback dialog
2353  GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2354  feedback->create();
2355  feedback->show(PLACEMENT_OWNER);
2356  // write warning if netedit is running in testing mode
2357  WRITE_DEBUG("Closed feedback dialog");
2358  return 1;
2359 }
2360 
2361 
2362 long
2363 GNEApplicationWindow::onCmdOpenOptionsDialog(FXObject*, FXSelector, void*) {
2364  auto& neteditOptions = OptionsCont::getOptions();
2365  const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::OPTIONS, neteditOptions, myOriginalNeteditOptions, TL("Netedit options"));
2366  if (dialog.first == TRUE) {
2367  NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2368  NBFrame::checkOptions(neteditOptions);
2369  NWFrame::checkOptions(neteditOptions);
2370  SystemFrame::checkOptions(neteditOptions); // needed to set precision
2371  // check if mar netedit config as unsaved
2372  if (dialog.second && myNet) {
2374  }
2375  }
2376  return 1;
2377 }
2378 
2379 
2380 long
2382  const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::SUMO_MINI, mySumoOptions, myOriginalSumoOptions, TL("Sumo options"));
2383  // check if mark sumoConfig as unsaved
2384  if ((dialog.first == TRUE) && dialog.second && myNet) {
2386  }
2387  return 1;
2388 }
2389 
2390 
2391 long
2394 }
2395 
2396 
2397 long
2400 }
2401 
2402 
2403 long
2404 GNEApplicationWindow::onCmdUndo(FXObject*, FXSelector, void*) {
2405  WRITE_DEBUG("Keys Ctrl+Z (Undo) pressed");
2406  // Check conditions
2407  if (myViewNet == nullptr) {
2408  return 0;
2409  } else if (!myEditMenuCommands.undoLastChange->isEnabled()) {
2410  return 0;
2411  } else {
2412  // check supermode (currently ignore supermode data)
2415  // abort if user doesn't press "yes"
2417  return 0;
2418  }
2419  }
2420  myViewNet->getUndoList()->undo();
2421  // update current show frame after undo
2424  }
2425  // update manually undo/redo menu commands (see #6005)
2428  // update toolbar undo-redo buttons
2430  return 1;
2431  }
2432 }
2433 
2434 
2435 long
2436 GNEApplicationWindow::onCmdRedo(FXObject*, FXSelector, void*) {
2437  WRITE_DEBUG("Keys Ctrl+Y (Redo) pressed");
2438  // Check conditions
2439  if (myViewNet == nullptr) {
2440  return 0;
2441  } else if (!myEditMenuCommands.redoLastChange->isEnabled()) {
2442  return 0;
2443  } else {
2444  // check supermode (currently ignore supermode data)
2447  // abort if user doesn't press "yes"
2449  return 0;
2450  }
2451  }
2452  myViewNet->getUndoList()->redo();
2453  // update current show frame after redo
2456  }
2457  // update manually undo/redo menu commands (see #6005)
2460  // update toolbar undo-redo buttons
2462  return 1;
2463  }
2464 }
2465 
2466 
2467 long
2468 GNEApplicationWindow::onCmdOpenUndoListDialog(FXObject*, FXSelector, void*) {
2469  // avoid open two dialogs
2470  if (myUndoListDialog->shown()) {
2472  } else {
2474  }
2475  return 1;
2476 }
2477 
2478 
2479 long
2480 GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2481  // check if net exist and there is something to undo/redo
2482  if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2483  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2484  } else {
2485  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2486  if (myUndoListDialog->shown()) {
2488  }
2489  }
2490  return 1;
2491 }
2492 
2493 
2494 long
2495 GNEApplicationWindow::onCmdComputePathManager(FXObject*, FXSelector, void*) {
2496  // first check viewNet
2498  // update path calculator
2500  }
2501  return 1;
2502 }
2503 
2504 
2505 long
2506 GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2507  WRITE_DEBUG("Key Ctrl+X (Cut) pressed");
2508  // Prepared for #6042
2509  return 1;
2510 }
2511 
2512 
2513 long
2514 GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2515  WRITE_DEBUG("Key Ctrl+C (Copy) pressed");
2516  // Prepared for #6042
2517  return 1;
2518 }
2519 
2520 
2521 long
2522 GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2523  WRITE_DEBUG("Key Ctrl+V (Paste) pressed");
2524  // Prepared for #6042
2525  return 1;
2526 }
2527 
2528 
2529 long
2530 GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2531  WRITE_DEBUG("Key Ctrl+F1 (Set Template) pressed");
2532  // first check if myViewNet exist
2533  if (myViewNet) {
2534  // call set template in inspector frame
2536  }
2537  return 1;
2538 }
2539 
2540 
2541 long
2542 GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2543  WRITE_DEBUG("Key Ctrl+F2 (Copy Template) pressed");
2544  // first check if myViewNet exist
2545  if (myViewNet) {
2546  // call copy template in inspector frame
2548  }
2549  return 1;
2550 }
2551 
2552 
2553 long
2554 GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2555  WRITE_DEBUG("Key Ctrl+F3 (Clear Template) pressed");
2556  // first check if myViewNet exist
2557  if (myViewNet) {
2558  // call clear template in inspector frame
2560  }
2561  return 1;
2562 }
2563 
2564 
2565 long
2566 GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2567  // check if net exist
2568  if (myNet) {
2570  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2571  } else {
2573  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2574  }
2575 }
2576 
2577 
2578 long
2579 GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2580  // check if at least there is one edge in the network
2581  if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2582  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2583  } else {
2584  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2585  }
2586 }
2587 
2588 
2589 long
2590 GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2591  // check if net, viewnet and front attribute exist
2593  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2594  } else {
2595  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2596  }
2597 }
2598 
2599 
2600 long
2601 GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2602  if (myNet == nullptr) {
2603  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2604  } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2605  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2606  } else {
2607  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2608  }
2609 }
2610 
2611 
2612 long
2613 GNEApplicationWindow::onUpdSaveAdditionals(FXObject* sender, FXSelector, void*) {
2614  if (myNet == nullptr) {
2615  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2617  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2618  } else {
2619  return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2620  }
2621 }
2622 
2623 
2624 long
2625 GNEApplicationWindow::onUpdSaveAdditionalsAs(FXObject* sender, FXSelector, void*) {
2626  if (myNet == nullptr) {
2627  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2628  } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2629  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2630  } else {
2631  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2632  }
2633 }
2634 
2635 
2636 long
2637 GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2638  if (myNet == nullptr) {
2639  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2640  } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2641  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2642  } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2643  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2644  } else {
2645  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2646  }
2647 }
2648 
2649 
2650 long
2651 GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2652  if (myNet == nullptr) {
2653  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2654  } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2655  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2656  } else {
2657  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2658  }
2659 
2660 }
2661 
2662 
2663 long
2664 GNEApplicationWindow::onUpdSaveDemandElementsAs(FXObject* sender, FXSelector, void*) {
2665  if (myNet == nullptr) {
2666  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2667  } else if (myNet->getAttributeCarriers()->getNumberOfDemandElements() == 0) {
2668  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2669  } else {
2670  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2671  }
2672 }
2673 
2674 
2675 long
2676 GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2677  if (myNet == nullptr) {
2678  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2679  } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2680  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2681  } else {
2682  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2683  }
2684 
2685 }
2686 
2687 
2688 long
2689 GNEApplicationWindow::onUpdSaveDataElementsAs(FXObject* sender, FXSelector, void*) {
2690  if (myNet == nullptr) {
2691  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2692  } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2693  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2694  } else {
2695  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2696  }
2697 
2698 }
2699 
2700 
2701 long
2702 GNEApplicationWindow::onUpdSaveMeanDatas(FXObject* sender, FXSelector, void*) {
2703  if (myNet == nullptr) {
2704  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2705  } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2706  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2707  } else {
2708  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2709  }
2710 }
2711 
2712 
2713 long
2714 GNEApplicationWindow::onUpdSaveMeanDatasAs(FXObject* sender, FXSelector, void*) {
2715  if (myNet == nullptr) {
2716  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2717  } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2718  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2719  } else {
2720  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2721  }
2722 
2723 }
2724 
2725 
2726 long
2727 GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2728  return myUndoList->onUpdUndo(sender, sel, ptr);
2729 }
2730 
2731 
2732 long
2733 GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2734  return myUndoList->onUpdRedo(sender, sel, ptr);
2735 }
2736 
2737 
2738 long
2739 GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2740  // first check viewNet
2741  if (myViewNet) {
2742  // check supermode network
2744  // disable
2745  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2747  // disable
2748  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2749  } else {
2750  // enable
2751  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2752  }
2753  } else {
2754  // disable
2755  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2756  }
2757 }
2758 
2759 
2760 long
2761 GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2762  // check viewNet
2763  if (myViewNet) {
2764  // continue depending of selector
2765  switch (FXSELID(sel)) {
2766  // Network
2768  return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2770  return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2772  return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2774  return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2776  return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2778  return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2780  return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2782  return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2784  return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2786  return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2788  return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2790  return myViewNet->onCmdToggleWarnAboutMerge(sender, sel, ptr);
2792  return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2794  return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2796  return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2798  return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2799  // Demand
2801  return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2803  return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2805  return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2807  return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2809  return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2811  return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2813  return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2815  return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2817  return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2819  return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2821  return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2822  // Data
2824  return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2826  return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
2828  return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
2830  return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
2832  return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2834  return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2836  return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
2838  return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
2839  default:
2840  return 0;
2841  }
2842  } else {
2843  return 0;
2844  }
2845 }
2846 
2847 
2848 long
2849 GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
2850  // get menuCheck
2851  MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
2852  // check viewNet
2853  if (myViewNet && menuCheck) {
2854  // continue depending of selector
2855  switch (FXSELID(sel)) {
2856  // Network
2859  menuCheck->setCheck(TRUE);
2860  } else {
2861  menuCheck->setCheck(FALSE);
2862  }
2863  break;
2866  menuCheck->setCheck(TRUE);
2867  } else {
2868  menuCheck->setCheck(FALSE);
2869  }
2870  break;
2873  menuCheck->setCheck(TRUE);
2874  } else {
2875  menuCheck->setCheck(FALSE);
2876  }
2877  break;
2880  menuCheck->setCheck(TRUE);
2881  } else {
2882  menuCheck->setCheck(FALSE);
2883  }
2884  break;
2887  menuCheck->setCheck(TRUE);
2888  } else {
2889  menuCheck->setCheck(FALSE);
2890  }
2891  break;
2894  menuCheck->setCheck(TRUE);
2895  } else {
2896  menuCheck->setCheck(FALSE);
2897  }
2898  break;
2901  menuCheck->setCheck(TRUE);
2902  } else {
2903  menuCheck->setCheck(FALSE);
2904  }
2905  break;
2908  menuCheck->setCheck(TRUE);
2909  } else {
2910  menuCheck->setCheck(FALSE);
2911  }
2912  break;
2915  menuCheck->setCheck(TRUE);
2916  } else {
2917  menuCheck->setCheck(FALSE);
2918  }
2919  break;
2922  menuCheck->setCheck(TRUE);
2923  } else {
2924  menuCheck->setCheck(FALSE);
2925  }
2926  break;
2929  menuCheck->setCheck(TRUE);
2930  } else {
2931  menuCheck->setCheck(FALSE);
2932  }
2933  break;
2936  menuCheck->setCheck(TRUE);
2937  } else {
2938  menuCheck->setCheck(FALSE);
2939  }
2940  break;
2943  menuCheck->setCheck(TRUE);
2944  } else {
2945  menuCheck->setCheck(FALSE);
2946  }
2947  break;
2950  menuCheck->setCheck(TRUE);
2951  } else {
2952  menuCheck->setCheck(FALSE);
2953  }
2954  break;
2957  menuCheck->setCheck(TRUE);
2958  } else {
2959  menuCheck->setCheck(FALSE);
2960  }
2961  break;
2964  menuCheck->setCheck(TRUE);
2965  } else {
2966  menuCheck->setCheck(FALSE);
2967  }
2968  break;
2969  // Demand
2972  menuCheck->setCheck(TRUE);
2973  } else {
2974  menuCheck->setCheck(FALSE);
2975  }
2976  break;
2979  menuCheck->setCheck(TRUE);
2980  } else {
2981  menuCheck->setCheck(FALSE);
2982  }
2983  break;
2986  menuCheck->setCheck(TRUE);
2987  } else {
2988  menuCheck->setCheck(FALSE);
2989  }
2990  break;
2993  menuCheck->setCheck(TRUE);
2994  } else {
2995  menuCheck->setCheck(FALSE);
2996  }
2997  break;
3000  menuCheck->setCheck(TRUE);
3001  } else {
3002  menuCheck->setCheck(FALSE);
3003  }
3004  break;
3007  menuCheck->setCheck(TRUE);
3008  } else {
3009  menuCheck->setCheck(FALSE);
3010  }
3011  break;
3014  menuCheck->setCheck(TRUE);
3015  } else {
3016  menuCheck->setCheck(FALSE);
3017  }
3018  // special case for lock persons
3019  if (myViewNet->getDemandViewOptions().menuCheckLockPerson->isEnabled()) {
3020  menuCheck->enable();
3021  } else {
3022  menuCheck->disable();
3023  }
3024  break;
3027  menuCheck->setCheck(TRUE);
3028  } else {
3029  menuCheck->setCheck(FALSE);
3030  }
3031  break;
3034  menuCheck->setCheck(TRUE);
3035  } else {
3036  menuCheck->setCheck(FALSE);
3037  }
3038  // special case for lock containers
3040  menuCheck->enable();
3041  } else {
3042  menuCheck->disable();
3043  }
3044  break;
3047  menuCheck->setCheck(TRUE);
3048  } else {
3049  menuCheck->setCheck(FALSE);
3050  }
3051  break;
3054  menuCheck->setCheck(TRUE);
3055  } else {
3056  menuCheck->setCheck(FALSE);
3057  }
3058  break;
3059  // Data
3062  menuCheck->setCheck(TRUE);
3063  } else {
3064  menuCheck->setCheck(FALSE);
3065  }
3066  break;
3069  menuCheck->setCheck(TRUE);
3070  } else {
3071  menuCheck->setCheck(FALSE);
3072  }
3073  break;
3076  menuCheck->setCheck(TRUE);
3077  } else {
3078  menuCheck->setCheck(FALSE);
3079  }
3080  break;
3083  menuCheck->setCheck(TRUE);
3084  } else {
3085  menuCheck->setCheck(FALSE);
3086  }
3087  break;
3090  menuCheck->setCheck(TRUE);
3091  } else {
3092  menuCheck->setCheck(FALSE);
3093  }
3094  break;
3097  menuCheck->setCheck(TRUE);
3098  } else {
3099  menuCheck->setCheck(FALSE);
3100  }
3101  break;
3102 
3105  menuCheck->setCheck(TRUE);
3106  } else {
3107  menuCheck->setCheck(FALSE);
3108  }
3109  break;
3112  menuCheck->setCheck(TRUE);
3113  } else {
3114  menuCheck->setCheck(FALSE);
3115  }
3116  break;
3117  default:
3118  break;
3119  }
3120  }
3121  return 0;
3122 }
3123 
3124 
3125 long
3126 GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3127  auto& neteditOptions = OptionsCont::getOptions();
3128  // function onCmdSaveNetworkAs must be executed if this is the first save
3129  if (neteditOptions.getString("net-file").empty()) {
3130  return onCmdSaveNetworkAs(sender, sel, ptr);
3131  } else {
3132  // always recompute before saving
3133  myNet->computeNetwork(this);
3134  // se net file in SUMO options
3136  mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3137  // begin save network
3138  getApp()->beginWaitCursor();
3139  bool saved = false;
3140  try {
3141  // obtain invalid networkElements (currently only edges or crossings
3142  std::vector<GNENetworkElement*> invalidNetworkElements;
3143  // iterate over crossings and edges
3144  for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3145  if (!edge.second.second->isNetworkElementValid()) {
3146  invalidNetworkElements.push_back(edge.second.second);
3147  }
3148  }
3149  for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3150  if (!crossing.second->isNetworkElementValid()) {
3151  invalidNetworkElements.push_back(crossing.second);
3152  }
3153  }
3154  // if there are invalid network elements, open GNEFixNetworkElements
3155  if (invalidNetworkElements.size() > 0) {
3156  // 0 -> Canceled Saving, with or without selecting invalid network elements
3157  // 1 -> Invalid network elements fixed, friendlyPos enabled, or saved with invalid positions
3158  GNEFixNetworkElements fixNetworkElementsDialog(myViewNet, invalidNetworkElements);
3159  if (fixNetworkElementsDialog.execute() == 0) {
3160  // show debug information
3161  WRITE_DEBUG("network elements saving aborted");
3162  // stop
3163  return 1;
3164  } else {
3165  // Save network
3166  myNet->saveNetwork();
3167  saved = true;
3168  // show debug information
3169  WRITE_DEBUG("network elements saved after dialog");
3170  }
3171  } else {
3172  // Save network
3173  myNet->saveNetwork();
3174  saved = true;
3175  // show debug information
3176  WRITE_DEBUG("network elements saved");
3177  }
3178  } catch (IOError& e) {
3179  // write warning if netedit is running in testing mode
3180  WRITE_DEBUG("Opening FXMessageBox 'error saving network'");
3181  // open error message box
3182  FXMessageBox::error(this, MBOX_OK, TL("Saving Network failed!"), "%s", e.what());
3183  // write warning if netedit is running in testing mode
3184  WRITE_DEBUG("Closed FXMessageBox 'error saving network' with 'OK'");
3185  }
3186  if (saved) {
3187  // write info
3188  WRITE_MESSAGE(TL("Network saved in '") + neteditOptions.getString("net-file") + "'.");
3189  // After saving a net successfully, add it into Recent Nets list.
3190  myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3192  } else {
3194  WRITE_ERROR(TL("Could not save network in '") + neteditOptions.getString("net-file") + "'");
3195  }
3196  // end save network
3197  getApp()->endWaitCursor();
3198  // update view
3200  // set focus again in net
3201  myViewNet->setFocus();
3202  return 1;
3203  }
3204 }
3205 
3206 
3207 long
3208 GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3209  // get network file file
3210  const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, true);
3211  if (!networkFile.empty()) {
3212  // set ouput file in netedit configs
3213  auto& neteditOptions = OptionsCont::getOptions();
3214  neteditOptions.resetWritable();
3215  neteditOptions.set("net-file", networkFile);
3216  // update netedit title with the network name
3217  setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFile.c_str()));
3218  // save network
3219  onCmdSaveNetwork(nullptr, 0, nullptr);
3220  }
3221  return 1;
3222 }
3223 
3224 
3225 long
3226 GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3227  // get neteditConfig filename
3228  auto plainXMLFile = GNEApplicationWindowHelper::savePlainXMLFileDialog(this);
3229  // Remove extension
3230  if (!plainXMLFile.empty()) {
3231  // adjust file
3232  if (plainXMLFile.back() == '.') {
3233  plainXMLFile.pop_back();
3234  } else {
3235  plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3236  plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3237  plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3238  plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3239  plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3240  plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3241  }
3242  }
3243  // continue depending of file
3244  if (!plainXMLFile.empty()) {
3245  // start saving plain XML
3246  getApp()->beginWaitCursor();
3247  try {
3248  myNet->savePlain(plainXMLFile);
3249  // write info
3250  WRITE_MESSAGE(TL("Plain XML saved with prefix '") + plainXMLFile + "'");
3251  } catch (IOError& e) {
3252  // write warning if netedit is running in testing mode
3253  WRITE_DEBUG("Opening FXMessageBox 'Error saving plainXML'");
3254  // open message box
3255  FXMessageBox::error(this, MBOX_OK, TL("Saving plain xml failed!"), "%s", e.what());
3256  // write warning if netedit is running in testing mode
3257  WRITE_DEBUG("Closed FXMessageBox 'Error saving plainXML' with 'OK'");
3258  }
3259  // end saving plain XML
3260  getApp()->endWaitCursor();
3261 
3262  // restore focus
3263  setFocus();
3264  }
3265  return 1;
3266 }
3267 
3268 
3269 long
3271  // get neteditConfig filename
3272  const auto joinedJunctionsFile = GNEApplicationWindowHelper::saveJoinedJunctionsFileDialog(this);
3273  // continue depending of file
3274  if (joinedJunctionsFile.size() > 0) {
3275  getApp()->beginWaitCursor();
3276  try {
3277  myNet->saveJoined(joinedJunctionsFile);
3278  // write info
3279  WRITE_MESSAGE(TL("Joined junctions saved to '") + joinedJunctionsFile + "'");
3280  } catch (IOError& e) {
3281  // write warning if netedit is running in testing mode
3282  WRITE_DEBUG("Opening FXMessageBox 'error saving joined'");
3283  // opening error message
3284  FXMessageBox::error(this, MBOX_OK, TL("Saving joined junctions failed!"), "%s", e.what());
3285  // write warning if netedit is running in testing mode
3286  WRITE_DEBUG("Closed FXMessageBox 'error saving joined' with 'OK'");
3287  }
3288  getApp()->endWaitCursor();
3289 
3290  // restore focus
3291  setFocus();
3292  }
3293  return 1;
3294 }
3295 
3296 
3297 long
3298 GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject*, FXSelector, void*) {
3299  // obtain netedit option container
3300  auto& neteditOptions = OptionsCont::getOptions();
3301  neteditOptions.resetWritable();
3302  // Check if configuration file was already set at start of netedit or with a previous save
3303  if (neteditOptions.getString("configuration-file").empty()) {
3304  return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3305  } else {
3306  // get config file
3307  const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3308  // get file path
3309  const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3310  // get patter file
3311  const auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3312  // get config file without extension
3313  if (neteditOptions.getString("net-file").empty()) {
3314  neteditOptions.set("net-file", patterFile + ".net.xml");
3315  }
3316  onCmdSaveNetwork(nullptr, 0, nullptr);
3317  // save all element giving automatic names
3319  if (neteditOptions.getString("additional-files").empty()) {
3320  neteditOptions.set("additional-files", patterFile + ".add.xml");
3321  }
3322  onCmdSaveAdditionals(nullptr, 0, nullptr);
3323  }
3325  if (neteditOptions.getString("route-files").empty()) {
3326  neteditOptions.set("route-files", patterFile + ".rou.xml");
3327  }
3328  onCmdSaveDemandElements(nullptr, 0, nullptr);
3329  }
3331  if (neteditOptions.getString("data-files").empty()) {
3332  neteditOptions.set("data-files", patterFile + ".dat.xml");
3333  }
3334  onCmdSaveDataElements(nullptr, 0, nullptr);
3335  }
3337  if (neteditOptions.getString("meandata-files").empty()) {
3338  neteditOptions.set("meandata-files", patterFile + ".med.add.xml");
3339  }
3340  onCmdSaveMeanDatas(nullptr, 0, nullptr);
3341  }
3342  std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3343  if (out.good()) {
3344  // write netedit config
3345  neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3346  // write info
3347  WRITE_MESSAGE(TL("Netedit configuration saved in '") + neteditConfigFile + "'");
3348  // config saved
3350  // After saving a config successfully, add it into recent configs
3351  myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3352  } else {
3353  WRITE_ERROR(TL("Could not save netedit configuration in '") + neteditConfigFile + "'");
3354  }
3355  out.close();
3356  return 1;
3357  }
3358 }
3359 
3360 
3361 long
3362 GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3363  auto& neteditOptions = OptionsCont::getOptions();
3364  // get neteditConfig filename
3365  const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, true);
3366  // continue depending of file
3367  if (!neteditConfigFile.empty()) {
3368  neteditOptions.resetWritable();
3369  neteditOptions.set("configuration-file", neteditConfigFile);
3370  // continue saving netedit config
3371  return onCmdSaveNeteditConfig(sender, sel, ptr);
3372  } else {
3373  return 0;
3374  }
3375 }
3376 
3377 
3378 long
3379 GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3380  // check if enable or disable save netedit config button
3381  if (myNet == nullptr) {
3382  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3383  } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3384  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3385  } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3386  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3387  } else {
3388  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3389  }
3390  // check if enable/disable save individual files
3391  if (myNet) {
3395  } else {
3397  }
3398  }
3399  return 1;
3400 }
3401 
3402 
3403 long
3404 GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3405  // obtain netedit option container
3406  auto& neteditOptions = OptionsCont::getOptions();
3407  // reset containers
3408  neteditOptions.resetWritable();
3410  // Check if configuration file was already set at start of netedit or with a previous save
3411  if (neteditOptions.getString("sumocfg-file").empty()) {
3412  return onCmdSaveSumoConfigAs(sender, sel, ptr);
3413  } else {
3414  // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3415  const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3416  const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3417  const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3418  // get SumoConfig file
3419  const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3420  // get config file without extension
3421  const auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3422  // save all element giving automatic names
3423  if (neteditOptions.getString("net-file").empty()) {
3424  neteditOptions.set("net-file", patterFile + ".net.xml");
3425  }
3426  onCmdSaveNetwork(nullptr, 0, nullptr);
3428  if (neteditOptions.getString("additional-files").empty()) {
3429  neteditOptions.set("additional-files", patterFile + ".add.xml");
3430  }
3431  onCmdSaveAdditionals(nullptr, 0, nullptr);
3432  }
3434  if (neteditOptions.getString("route-files").empty()) {
3435  neteditOptions.set("route-files", patterFile + ".rou.xml");
3436  }
3437  onCmdSaveDemandElements(nullptr, 0, nullptr);
3438  }
3440  if (neteditOptions.getString("meandata-files").empty()) {
3441  neteditOptions.set("meandata-files", patterFile + ".med.add.xml");
3442  }
3443  onCmdSaveMeanDatas(nullptr, 0, nullptr);
3444  }
3445  // set input in sumo options
3446  setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3447  // if we have trips or flow over junctions, add option junction-taz
3450  mySumoOptions.set("junction-taz", "true");
3451  }
3452  std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3453  if (out.good()) {
3454  // write SUMO config
3455  mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3456  // write info
3457  WRITE_MESSAGE(TL("SUMO configuration saved in '") + sumoConfigFile + "'");
3458  // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3459  if (!ignoreAdditionals && !ignoreDemandElements) {
3461  }
3462  // After saving a config successfully, add it into recent configs
3463  myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3464  } else {
3465  WRITE_MESSAGE(TL("Could not save SUMO configuration in '") + sumoConfigFile + "'");
3466  }
3467  out.close();
3468  return 1;
3469  }
3470 }
3471 
3472 
3473 long
3474 GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3475  auto& neteditOptions = OptionsCont::getOptions();
3476  // get sumoConfig filename
3477  const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, true);
3478  // continue depending of file
3479  if (!sumoConfigFile.empty()) {
3480  // save file in netedit options
3481  neteditOptions.resetWritable();
3482  neteditOptions.set("sumocfg-file", sumoConfigFile);
3483  // continue saving SUMO Config
3484  return onCmdSaveSumoConfig(sender, sel, ptr);
3485  } else {
3486  return 0;
3487  }
3488 }
3489 
3490 
3491 long
3492 GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3493  if (myNet == nullptr) {
3494  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3495  } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3496  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3497  } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3498  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3499  } else {
3500  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3501  }
3502 }
3503 
3504 
3505 long
3506 GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3507  // get option container
3508  auto& neteditOptions = OptionsCont::getOptions();
3509  // Check if TLS Programs file was already set at start of netedit or with a previous save
3510  if (neteditOptions.getString("tls-file").empty()) {
3511  return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3512  } else {
3513  // Start saving TLS Programs
3514  getApp()->beginWaitCursor();
3515  try {
3516  myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3517  myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3518  // write info
3519  WRITE_MESSAGE(TL("TLS Programs saved in '") + neteditOptions.getString("tls-file") + "'");
3520  } catch (IOError& e) {
3521  // write warning if netedit is running in testing mode
3522  WRITE_DEBUG("Opening FXMessageBox 'error saving TLS Programs'");
3523  // open error message box
3524  FXMessageBox::error(this, MBOX_OK, TL("Saving TLS Programs failed!"), "%s", e.what());
3525  // write warning if netedit is running in testing mode
3526  WRITE_DEBUG("Closed FXMessageBox 'error saving TLS Programs' with 'OK'");
3527  }
3529  getApp()->endWaitCursor();
3530  // restore focus
3531  setFocus();
3532  }
3533  return 1;
3534 }
3535 
3536 
3537 long
3538 GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3539  if (myNet == nullptr) {
3540  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3541  } else {
3542  // check if there is at least one TLS
3543  for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3544  if (junction.second.second->getNBNode()->getControllingTLS().size() > 0) {
3545  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3546  }
3547  }
3548  // no TLS, then disable
3549  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3550  }
3551 }
3552 
3553 
3554 long
3555 GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3556  // get option container
3557  auto& neteditOptions = OptionsCont::getOptions();
3558  // Check if edgeType file was already set at start of netedit or with a previous save
3559  if (neteditOptions.getString("edgetypes-file").empty()) {
3560  return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3561  } else {
3562  // Start saving edgeTypes
3563  getApp()->beginWaitCursor();
3564  try {
3565  myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3566  // write info
3567  WRITE_MESSAGE(TL("EdgeType saved in '") + neteditOptions.getString("edgetypes-file") + "'");
3568  } catch (IOError& e) {
3569  // write warning if netedit is running in testing mode
3570  WRITE_DEBUG("Opening FXMessageBox 'error saving edgeTypes'");
3571  // open error message box
3572  FXMessageBox::error(this, MBOX_OK, TL("Saving edgeTypes failed!"), "%s", e.what());
3573  // write warning if netedit is running in testing mode
3574  WRITE_DEBUG("Closed FXMessageBox 'error saving edgeTypes' with 'OK'");
3575  }
3577  getApp()->endWaitCursor();
3578  // restore focus
3579  setFocus();
3580  }
3581  return 1;
3582 }
3583 
3584 
3585 long
3586 GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3587  // check if net exist and there are edge types
3588  if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3589  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3590  } else {
3591  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3592  }
3593  return 1;
3594 }
3595 
3596 
3597 long
3598 GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject*, FXSelector, void*) {
3599  // get option container
3600  auto& neteditOptions = OptionsCont::getOptions();
3601  // get TLS file
3602  const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, true);
3603  // check tat file is valid
3604  if (!TLSFile.empty()) {
3605  // change value of "tls-file"
3606  neteditOptions.resetWritable();
3607  neteditOptions.set("tls-file", TLSFile);
3608  // save TLS Programs
3609  return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3610  } else {
3611  return 1;
3612  }
3613 }
3614 
3615 
3616 long
3617 GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3618  // get option container
3619  auto& neteditOptions = OptionsCont::getOptions();
3620  // get network file file
3621  const auto edgeTypesFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, true);
3622  // check tat file is valid
3623  if (!edgeTypesFile.empty()) {
3624  // change value of "edgetypes-file"
3625  neteditOptions.resetWritable();
3626  neteditOptions.set("edgetypes-file", edgeTypesFile);
3627  // save edgeTypes
3628  return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3629  } else {
3630  return 1;
3631  }
3632 }
3633 
3634 
3635 long
3636 GNEApplicationWindow::onUpdSaveEdgeTypesAs(FXObject* sender, FXSelector, void*) {
3637  // check if net exist and there are edge types
3638  if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3639  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3640  } else {
3641  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3642  }
3643  return 1;
3644 }
3645 
3646 
3647 long
3648 GNEApplicationWindow::onCmdOpenAdditionals(FXObject*, FXSelector, void*) {
3649  auto& neteditOptions = OptionsCont::getOptions();
3650  // get file
3651  const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, false);
3652  // check file
3653  if (!additionalFile.empty()) {
3654  // declare overwrite flag
3655  bool overwriteElements = false;
3656  // check if open question dialog box
3657  if (additionalFile == neteditOptions.getString("additional-files")) {
3658  // open overwrite dialog
3659  GNEOverwriteElementsDialog overwriteDialog(this, "additional");
3660  // continue depending of result
3661  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3662  // abort load
3663  return 0;
3664  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3665  // enable overwriteElements
3666  overwriteElements = true;
3667  }
3668  }
3669  // flag for save current saving status
3670  const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3671  // disable validation for additionals
3672  XMLSubSys::setValidation("never", "auto", "auto");
3673  // Create additional handler
3674  GNEGeneralHandler generalHandler(myNet, additionalFile, true, overwriteElements);
3675  // begin undoList operation
3676  myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("load additionals from '") + additionalFile + "'");
3677  // Run parser
3678  if (!generalHandler.parse()) {
3679  // write error
3680  WRITE_ERROR(TL("Loading of additional file failed: ") + additionalFile);
3681  } else {
3682  // change value of "additional-files"
3683  neteditOptions.resetWritable();
3684  neteditOptions.set("additional-files", additionalFile);
3685  // write info
3686  WRITE_MESSAGE(TL("Loading of additional file successfully: ") + additionalFile);
3687  // enable save if there is errors loading additionals
3688  if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3690  }
3691  }
3692  // end undoList operation
3693  myUndoList->end();
3694  // restore validation for additionals
3695  XMLSubSys::setValidation("auto", "auto", "auto");
3696  // update view
3697  update();
3698  }
3699  return 1;
3700 }
3701 
3702 
3703 long
3704 GNEApplicationWindow::onCmdReloadAdditionals(FXObject*, FXSelector, void*) {
3705  // get additionalFile
3706  const std::string additionalFile = OptionsCont::getOptions().getString("additional-files");
3707  // disable validation for additionals
3708  XMLSubSys::setValidation("never", "auto", "auto");
3709  // Create general handler
3710  GNEGeneralHandler generalHandler(myNet, additionalFile, true, true);
3711  // begin undoList operation
3712  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals from '") + additionalFile + "'");
3713  // clear additionals
3715  // Run parser
3716  if (!generalHandler.parse()) {
3717  WRITE_ERROR(TL("Reloading of additional file failed: ") + additionalFile);
3718  }
3719  // end undoList operation
3720  myUndoList->end();
3721  // restore validation for additionals
3722  XMLSubSys::setValidation("auto", "auto", "auto");
3723  // update view
3724  update();
3725  return 1;
3726 }
3727 
3728 
3729 long
3730 GNEApplicationWindow::onUpdReloadAdditionals(FXObject* sender, FXSelector, void*) {
3731  // check if file exist
3732  if (myViewNet && OptionsCont::getOptions().getString("additional-files").empty()) {
3733  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3734  } else {
3735  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3736  }
3737 }
3738 
3739 
3740 long
3741 GNEApplicationWindow::onCmdSaveAdditionals(FXObject* sender, FXSelector sel, void* ptr) {
3742  // get option container
3743  auto& neteditOptions = OptionsCont::getOptions();
3744  // check saving conditions
3746  // nothing to save
3747  return 1;
3748  } else if (neteditOptions.getString("additional-files").empty()) {
3749  // choose file to save
3750  return onCmdSaveAdditionalsAs(sender, sel, ptr);
3751  } else {
3752  // Start saving additionals
3753  getApp()->beginWaitCursor();
3754  try {
3755  // compute before saving (for detectors positions)
3756  myNet->computeNetwork(this);
3757  // save additionals
3759  // show info
3760  WRITE_MESSAGE(TL("Additionals saved in '") + neteditOptions.getString("additional-files") + "'");
3761  // end saving additionals
3762  getApp()->endWaitCursor();
3763  // restore focus
3764  setFocus();
3765  } catch (IOError& e) {
3766  // write warning if netedit is running in testing mode
3767  WRITE_DEBUG("Opening FXMessageBox 'error saving additionals'");
3768  // open error message box
3769  FXMessageBox::error(this, MBOX_OK, TL("Saving additionals failed!"), "%s", e.what());
3770  // write warning if netedit is running in testing mode
3771  WRITE_DEBUG("Closed FXMessageBox 'error saving additionals' with 'OK'");
3772  }
3773  getApp()->endWaitCursor();
3774  return 1;
3775  }
3776 }
3777 
3778 
3779 long
3780 GNEApplicationWindow::onCmdSaveAdditionalsAs(FXObject*, FXSelector, void*) {
3781  // get option container
3782  auto& neteditOptions = OptionsCont::getOptions();
3783  // declare current folder
3784  FXString currentFolder = gCurrentFolder;
3785  // set current folder
3786  if (neteditOptions.getString("configuration-file").size() > 0) {
3787  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3788  } else if (neteditOptions.getString("net-file").size() > 0) {
3789  currentFolder = getFolder(neteditOptions.getString("net-file"));
3790  }
3791  // get additional file
3792  const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3793  // check that file is valid
3794  if (!additionalFile.empty()) {
3795  // reset writtable flag
3796  neteditOptions.resetWritable();
3797  // change value of "additional-files"
3798  neteditOptions.set("additional-files", additionalFile);
3799  // enable save additionals
3801  // save additionals
3802  return onCmdSaveAdditionals(nullptr, 0, nullptr);
3803  } else {
3804  return 1;
3805  }
3806 }
3807 
3808 
3809 long
3811  // declare current folder
3812  FXString currentFolder = gCurrentFolder;
3813  // get juPedSim file
3814  const auto juPedSimFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3815  // check that file is valid
3816  if (!juPedSimFile.empty()) {
3817  try {
3818  // Start saving additionals
3819  getApp()->beginWaitCursor();
3820  // save additionals
3821  myNet->saveJuPedSimElements(juPedSimFile);
3822  // show info
3823  WRITE_MESSAGE(TL("JuPedSim elements saved in '") + juPedSimFile + "'");
3824  // end saving additionals
3825  getApp()->endWaitCursor();
3826  // restore focus
3827  setFocus();
3828  } catch (IOError& e) {
3829  // write warning if netedit is running in testing mode
3830  WRITE_DEBUG("Opening FXMessageBox 'error saving JuPedSim elements'");
3831  // open error message box
3832  FXMessageBox::error(this, MBOX_OK, TL("Saving JuPedSim elements failed!"), "%s", e.what());
3833  // write warning if netedit is running in testing mode
3834  WRITE_DEBUG("Closed FXMessageBox 'error saving JuPedSim elements' with 'OK'");
3835  }
3836  }
3837  return 1;
3838 }
3839 
3840 
3841 long
3842 GNEApplicationWindow::onCmdOpenDemandElements(FXObject*, FXSelector, void*) {
3843  // get option container
3844  auto& neteditOptions = OptionsCont::getOptions();
3845  // get file
3846  const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, false);
3847  // check file
3848  if (!routeFile.empty()) {
3849  // declare overwrite flag
3850  bool overwriteElements = false;
3851  // check if open question dialog box
3852  if (routeFile == neteditOptions.getString("route-files")) {
3853  // open overwrite dialog
3854  GNEOverwriteElementsDialog overwriteDialog(this, "route");
3855  // continue depending of result
3856  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3857  // abort load
3858  return 0;
3859  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3860  // enable overwriteElements
3861  overwriteElements = true;
3862  }
3863  }
3864  // save previous demand element status saving
3865  const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
3866  // disable validation for additionals
3867  XMLSubSys::setValidation("never", "auto", "auto");
3868  // Create generic handler
3869  GNEGeneralHandler handler(myNet, routeFile, true, overwriteElements);
3870  // begin undoList operation
3871  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + routeFile + "'");
3872  // Run parser for additionals
3873  if (!handler.parse()) {
3874  // write error
3875  WRITE_ERROR(TL("Loading of route file failed: ") + routeFile);
3876  } else {
3877  // change value of "route-files"
3878  neteditOptions.resetWritable();
3879  neteditOptions.set("route-files", routeFile);
3880  // show info
3881  WRITE_MESSAGE(TL("Loading of route file successfully: ") + routeFile);
3882  // enable demand elements if there is an error creating element
3883  if (previouslySaved && !handler.isErrorCreatingElement()) {
3885  }
3886  }
3887  // end undoList operation
3888  myUndoList->end();
3889  // restore validation
3890  XMLSubSys::setValidation("auto", "auto", "auto");
3891  // update view
3892  update();
3893  }
3894  return 1;
3895 }
3896 
3897 
3898 long
3900  // get file
3901  const std::string routeFile = OptionsCont::getOptions().getString("route-files");
3902  // disable validation for additionals
3903  XMLSubSys::setValidation("never", "auto", "auto");
3904  // Create handler
3905  GNEGeneralHandler handler(myNet, routeFile, true, true);
3906  // begin undoList operation
3907  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("reloading demand elements from '%'", routeFile));
3908  // clear demand elements
3910  // Run parser for additionals
3911  if (!handler.parse()) {
3912  WRITE_ERROR(TL("Reloading of route file failed: ") + routeFile);
3913  }
3914  // end undoList operation and update view
3915  myUndoList->end();
3916  update();
3917  // restore validation for demand
3918  XMLSubSys::setValidation("auto", "auto", "auto");
3919  return 1;
3920 }
3921 
3922 
3923 long
3924 GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
3925  // check if file exist
3926  if (myViewNet && OptionsCont::getOptions().getString("route-files").empty()) {
3927  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3928  } else {
3929  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3930  }
3931 }
3932 
3933 
3934 long
3935 GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
3936  // get option container
3937  auto& neteditOptions = OptionsCont::getOptions();
3938  // check if requiere save demand elements
3940  // nothing to save
3941  return 1;
3942  } else if (neteditOptions.getString("route-files").empty()) {
3943  return onCmdSaveDemandElementsAs(sender, sel, ptr);
3944  } else {
3945  // Start saving demand elements
3946  getApp()->beginWaitCursor();
3947  try {
3948  // compute before saving
3949  myNet->computeNetwork(this);
3950  // save demand elements
3952  // show info
3953  WRITE_MESSAGE(TL("Demand elements saved in '") + neteditOptions.getString("route-files") + "'");
3954  // end saving demand elements
3955  getApp()->endWaitCursor();
3956  // restore focus
3957  setFocus();
3958  } catch (IOError& e) {
3959  // write warning if netedit is running in testing mode
3960  WRITE_DEBUG("Opening FXMessageBox 'error saving demand elements'");
3961  // open error message box
3962  FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements failed!"), "%s", e.what());
3963  // write warning if netedit is running in testing mode
3964  WRITE_DEBUG("Closed FXMessageBox 'error saving demand elements' with 'OK'");
3965  }
3966  getApp()->endWaitCursor();
3967  return 1;
3968  }
3969 }
3970 
3971 
3972 long
3973 GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
3974  // get option container
3975  auto& neteditOptions = OptionsCont::getOptions();
3976  // declare current folder
3977  FXString currentFolder = gCurrentFolder;
3978  // set current folder
3979  if (neteditOptions.getString("configuration-file").size() > 0) {
3980  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3981  } else if (neteditOptions.getString("net-file").size() > 0) {
3982  currentFolder = getFolder(neteditOptions.getString("net-file"));
3983  }
3984  // get route file
3985  const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, true);
3986  // check that file is correct
3987  if (!routeFile.empty()) {
3988  // reset writtable flag
3989  neteditOptions.resetWritable();
3990  // change value of "route-files"
3991  neteditOptions.set("route-files", routeFile);
3992  // requiere save demand elements
3994  // save demand elements
3995  return onCmdSaveDemandElements(sender, sel, ptr);
3996  } else {
3997  return 1;
3998  }
3999 }
4000 
4001 
4002 long
4003 GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
4004  // get option container
4005  auto& neteditOptions = OptionsCont::getOptions();
4006  // get file
4007  const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, false);
4008  // check file
4009  if (!dataFile.empty()) {
4010  // declare overwrite flag
4011  bool overwriteElements = false;
4012  // check if open question dialog box
4013  if (dataFile == neteditOptions.getString("data-files")) {
4014  // open overwrite dialog
4015  GNEOverwriteElementsDialog overwriteDialog(this, "data");
4016  // continue depending of result
4017  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
4018  // abort load
4019  return 0;
4020  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
4021  // enable overwriteElements
4022  overwriteElements = true;
4023  }
4024  }
4025  // save previous demand element status saving
4026  const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4027  // disable update data
4029  // disable validation for data elements
4030  XMLSubSys::setValidation("never", "auto", "auto");
4031  // Create data handler
4032  GNEDataHandler dataHandler(myNet, dataFile, true, overwriteElements);
4033  // begin undoList operation
4034  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + dataFile + "'");
4035  // Run data parser
4036  if (!dataHandler.parse()) {
4037  // write error
4038  WRITE_ERROR(TL("Loading of data file failed: ") + dataFile);
4039  } else {
4040  // change value of "data-files"
4041  neteditOptions.resetWritable();
4042  neteditOptions.set("data-files", dataFile);
4043  // show info
4044  WRITE_MESSAGE(TL("Loading of data file successfully: ") + dataFile);
4045  // enable demand elements if there is an error creating element
4046  if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4048  }
4049  }
4050  // end undoList operation
4051  myUndoList->end();
4052  // enable update data
4054  // restore validation for data
4055  XMLSubSys::setValidation("auto", "auto", "auto");
4056  // update
4057  update();
4058  }
4059  return 1;
4060 }
4061 
4062 
4063 long
4064 GNEApplicationWindow::onCmdReloadDataElements(FXObject*, FXSelector, void*) {
4065  // get file
4066  const std::string dataFile = OptionsCont::getOptions().getString("data-files");
4067  // disable update data
4069  // disable validation for additionals
4070  XMLSubSys::setValidation("never", "auto", "auto");
4071  // Create additional handler
4072  GNEDataHandler dataHandler(myNet, dataFile, true, false);
4073  // begin undoList operation
4074  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements from '") + dataFile + "'");
4075  // clear data elements
4077  // Run data parser
4078  if (!dataHandler.parse()) {
4079  WRITE_ERROR(TL("Reloading of data file failed: ") + dataFile);
4080  }
4081  // restore validation for data
4082  XMLSubSys::setValidation("auto", "auto", "auto");
4083  // end undoList operation and update view
4084  myUndoList->end();
4085  // enable update data
4087  // update
4088  update();
4089  return 1;
4090 }
4091 
4092 
4093 long
4094 GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4095  // check if file exist
4096  if (myViewNet && OptionsCont::getOptions().getString("data-files").empty()) {
4097  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4098  } else {
4099  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4100  }
4101 }
4102 
4103 
4104 long
4105 GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4106  // get option container
4107  auto& neteditOptions = OptionsCont::getOptions();
4108  // check conditions
4110  // nothing to save
4111  return 1;
4112  } else if (neteditOptions.getString("data-files").empty()) {
4113  return onCmdSaveDataElementsAs(sender, sel, ptr);
4114  } else {
4115  // Start saving data elements
4116  getApp()->beginWaitCursor();
4117  try {
4118  // save data elements
4120  // write einfo
4121  WRITE_MESSAGE(TL("Data elements saved in '") + neteditOptions.getString("data-files") + "'");
4122  } catch (IOError& e) {
4123  // write warning if netedit is running in testing mode
4124  WRITE_DEBUG("Opening FXMessageBox 'error saving data elements'");
4125  // open error message box
4126  FXMessageBox::error(this, MBOX_OK, TL("Saving data elements failed!"), "%s", e.what());
4127  // write warning if netedit is running in testing mode
4128  WRITE_DEBUG("Closed FXMessageBox 'error saving data elements' with 'OK'");
4129  }
4130  // end saving
4131  getApp()->endWaitCursor();
4132  // restore focus
4133  setFocus();
4134  return 1;
4135  }
4136 }
4137 
4138 
4139 long
4140 GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4141  // get option container
4142  auto& neteditOptions = OptionsCont::getOptions();
4143  // declare current folder
4144  FXString currentFolder = gCurrentFolder;
4145  // set current folder
4146  if (neteditOptions.getString("configuration-file").size() > 0) {
4147  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4148  } else if (neteditOptions.getString("net-file").size() > 0) {
4149  currentFolder = getFolder(neteditOptions.getString("net-file"));
4150  }
4151  // get data file
4152  const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, true);
4153  // check that file is correct
4154  if (!dataFile.empty()) {
4155  // reset writtable flag
4156  neteditOptions.resetWritable();
4157  // change value of "data-files"
4158  neteditOptions.set("data-files", dataFile);
4159  // mark data elements as unsaved
4161  // save data elements
4162  return onCmdSaveDataElements(sender, sel, ptr);
4163  } else {
4164  return 1;
4165  }
4166 }
4167 
4168 
4169 long
4170 GNEApplicationWindow::onCmdOpenMeanDatas(FXObject*, FXSelector, void*) {
4171  auto& neteditOptions = OptionsCont::getOptions();
4172  // get file
4173  const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, false);
4174  // check file
4175  if (!meanDataFile.empty()) {
4176  // declare overwrite flag
4177  bool overwriteElements = false;
4178  // check if open question dialog box
4179  if (meanDataFile == neteditOptions.getString("meandata-files")) {
4180  // open overwrite dialog
4181  GNEOverwriteElementsDialog overwriteDialog(this, "meanData");
4182  // continue depending of result
4183  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
4184  // abort load
4185  return 0;
4186  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
4187  // enable overwriteElements
4188  overwriteElements = true;
4189  }
4190  }
4191  // save previous demand element status saving
4192  const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4193  // disable validation for meanDatas
4194  XMLSubSys::setValidation("never", "auto", "auto");
4195  // Create meanData handler
4196  GNEGeneralHandler generalHandler(myNet, meanDataFile, true, overwriteElements);
4197  // begin undoList operation
4198  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("load meanDatas from '") + meanDataFile + "'");
4199  // Run parser
4200  if (!generalHandler.parse()) {
4201  // write error
4202  WRITE_ERROR(TL("Loading of meandata file failed: ") + meanDataFile);
4203  } else {
4204  // change value of "meandata-files"
4205  neteditOptions.resetWritable();
4206  neteditOptions.set("meandata-files", meanDataFile);
4207  // show info
4208  WRITE_MESSAGE(TL("Loading of meandata file successfully: ") + meanDataFile);
4209  // enable demand elements if there is an error creating element
4210  if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4212  }
4213  }
4214  // end undoList operation
4215  myUndoList->end();
4216  // restore validation for meanDatas
4217  XMLSubSys::setValidation("auto", "auto", "auto");
4218  // update view
4219  update();
4220  }
4221  return 1;
4222 }
4223 
4224 
4225 long
4226 GNEApplicationWindow::onCmdReloadMeanDatas(FXObject*, FXSelector, void*) {
4227  // get file
4228  const std::string meanDataFile = OptionsCont::getOptions().getString("meandata-files");
4229  // disable validation for meanDatas
4230  XMLSubSys::setValidation("never", "auto", "auto");
4231  // Create general handler
4232  GNEGeneralHandler generalHandler(myNet, meanDataFile, true, true);
4233  // begin undoList operation
4234  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading meanDatas from '") + meanDataFile + "'");
4235  // clear meanDatas
4237  // Run parser
4238  if (!generalHandler.parse()) {
4239  WRITE_MESSAGE(TL("Loading of meandata file successfully: ") + meanDataFile);
4240  }
4241  // end undoList operation and update view
4242  myUndoList->end();
4243  update();
4244  // restore validation for meanDatas
4245  XMLSubSys::setValidation("auto", "auto", "auto");
4246  return 1;
4247 }
4248 
4249 
4250 long
4251 GNEApplicationWindow::onUpdReloadMeanDatas(FXObject* sender, FXSelector, void*) {
4252  // check if file exist
4253  if (myViewNet && OptionsCont::getOptions().getString("meandata-files").empty()) {
4254  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4255  } else {
4256  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4257  }
4258 }
4259 
4260 
4261 long
4262 GNEApplicationWindow::onCmdSaveMeanDatas(FXObject* sender, FXSelector sel, void* ptr) {
4263  // get option container
4264  auto& neteditOptions = OptionsCont::getOptions();
4265  // check conditions
4267  // nothing to save
4268  return 1;
4269  } else if (neteditOptions.getString("meandata-files").empty()) {
4270  return onCmdSaveMeanDatasAs(sender, sel, ptr);
4271  } else {
4272  // Start saving meanDatas
4273  getApp()->beginWaitCursor();
4274  try {
4275  // save mean datas
4276  myNet->saveMeanDatas();
4277  // write info
4278  WRITE_MESSAGE(TL("MeanDatas saved in '") + neteditOptions.getString("meandata-files") + "'");
4279  } catch (IOError& e) {
4280  // write warning if netedit is running in testing mode
4281  WRITE_DEBUG("Opening FXMessageBox 'error saving meanData'");
4282  // open error message box
4283  FXMessageBox::error(this, MBOX_OK, TL("Saving meanData failed!"), "%s", e.what());
4284  // write warning if netedit is running in testing mode
4285  WRITE_DEBUG("Closed FXMessageBox 'error saving meanDara' with 'OK'");
4286  }
4287  // end saving
4288  getApp()->endWaitCursor();
4289  // restore focus
4290  setFocus();
4291  return 1;
4292  }
4293 }
4294 
4295 
4296 long
4297 GNEApplicationWindow::onCmdSaveMeanDatasAs(FXObject* sender, FXSelector sel, void* ptr) {
4298  // get option container
4299  auto& neteditOptions = OptionsCont::getOptions();
4300  // declare current folder
4301  FXString currentFolder = gCurrentFolder;
4302  // set current folder
4303  if (neteditOptions.getString("configuration-file").size() > 0) {
4304  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4305  } else if (neteditOptions.getString("net-file").size() > 0) {
4306  currentFolder = getFolder(neteditOptions.getString("net-file"));
4307  }
4308  // get meanData file
4309  const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, true);
4310  // check that file is valid
4311  if (!meanDataFile.empty()) {
4312  // reset writtable flag
4313  neteditOptions.resetWritable();
4314  // change value of "meandata-files"
4315  neteditOptions.set("meandata-files", meanDataFile);
4316  // mark mean datas as unsaved
4318  // save meanDatas
4319  return onCmdSaveMeanDatas(sender, sel, ptr);
4320  } else {
4321  return 1;
4322  }
4323 }
4324 
4325 
4326 bool
4328  if (myNet && !myNet->getSavingStatus()->isNetworkSaved()) {
4329  // write warning if netedit is running in testing mode
4330  WRITE_DEBUG("Opening FXMessageBox 'Confirm close network'");
4331  // open question box
4332  const std::string header = TL("Confirm close Network");
4333  const std::string contentsA = TL("You have unsaved changes in the network.");
4334  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4335  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4336  // restore focus to view net
4337  myViewNet->setFocus();
4338  // if user close dialog box, check additionals and demand elements
4339  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4340  // write warning if netedit is running in testing mode
4341  WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'Quit'");
4346  // clear undo list
4347  clearUndoList();
4348  return true;
4349  } else {
4350  return false;
4351  }
4352  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4353  // save network
4354  onCmdSaveNetwork(nullptr, 0, nullptr);
4355  // check
4360  // clear undo list
4361  clearUndoList();
4362  return true;
4363  } else {
4364  return false;
4365  }
4366  } else {
4367  // write warning if netedit is running in testing mode
4368  if (answer == 2) {
4369  WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'No'");
4370  } else if (answer == 4) {
4371  WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'ESC'");
4372  }
4373  // return false to stop closing/reloading
4374  return false;
4375  }
4376  } else {
4381  // clear undo list
4382  clearUndoList();
4383  return true;
4384  } else {
4385  // return false to stop closing/reloading
4386  return false;
4387  }
4388  }
4389 }
4390 
4391 
4392 bool
4394  // Check if there are non saved additionals
4396  WRITE_DEBUG("Opening FXMessageBox 'Save additionals before close'");
4397  // open question box
4398  const std::string header = TL("Save additional elements before close");
4399  const std::string contentsA = TL("You have unsaved additional elements.");
4400  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4401  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4402  // restore focus to view net
4403  myViewNet->setFocus();
4404  // if answer was affirmative, but there was an error during saving additionals, return false to stop closing/reloading
4405  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4406  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'Quit'");
4407  // nothing to save, return true
4408  return true;
4409  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4410  // write warning if netedit is running in testing mode
4411  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'Yes'");
4412  if (onCmdSaveAdditionals(nullptr, 0, nullptr) == 1) {
4413  // additionals successfully saved
4414  return true;
4415  } else {
4416  // error saving additionals, abort saving
4417  return false;
4418  }
4419  } else {
4420  // write warning if netedit is running in testing mode
4421  if (answer == 2) {
4422  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'No'");
4423  } else if (answer == 4) {
4424  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'ESC'");
4425  }
4426  // abort saving
4427  return false;
4428  }
4429  } else {
4430  // nothing to save, return true
4431  return true;
4432  }
4433 }
4434 
4435 
4436 bool
4438  // Check if there are non saved demand elements
4440  WRITE_DEBUG("Opening FXMessageBox 'Save demand elements before close'");
4441  // open question box
4442  const std::string header = TL("Save demand elements before close");
4443  const std::string contentsA = TL("You have unsaved demand elements.");
4444  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4445  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4446  // restore focus to view net
4447  myViewNet->setFocus();
4448  // if answer was affirmative, but there was an error during saving demand elements, return false to stop closing/reloading
4449  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4450  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'Quit'");
4451  // nothing to save, return true
4452  return true;
4453  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4454  // write warning if netedit is running in testing mode
4455  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'Yes'");
4456  if (onCmdSaveDemandElements(nullptr, 0, nullptr) == 1) {
4457  // demand elements successfully saved
4458  return true;
4459  } else {
4460  // error saving demand elements, abort saving
4461  return false;
4462  }
4463  } else {
4464  // write warning if netedit is running in testing mode
4465  if (answer == 2) {
4466  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'No'");
4467  } else if (answer == 4) {
4468  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'ESC'");
4469  }
4470  // abort saving
4471  return false;
4472  }
4473  } else {
4474  // nothing to save, return true
4475  return true;
4476  }
4477 }
4478 
4479 
4480 bool
4482  // Check if there are non saved data elements
4484  WRITE_DEBUG("Opening FXMessageBox 'Save data elements before close'");
4485  // open question box
4486  const std::string header = TL("Save data elements before close");
4487  const std::string contentsA = TL("You have unsaved data elements.");
4488  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4489  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4490  // restore focus to view net
4491  myViewNet->setFocus();
4492  // if answer was affirmative, but there was an error during saving data elements, return false to stop closing/reloading
4493  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4494  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'Quit'");
4495  // nothing to save, return true
4496  return true;
4497  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4498  // write warning if netedit is running in testing mode
4499  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'Yes'");
4500  if (onCmdSaveDataElements(nullptr, 0, nullptr) == 1) {
4501  // data elements successfully saved
4502  return true;
4503  } else {
4504  // error saving data elements, abort saving
4505  return false;
4506  }
4507  } else {
4508  // write warning if netedit is running in testing mode
4509  if (answer == 2) {
4510  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'No'");
4511  } else if (answer == 4) {
4512  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'ESC'");
4513  }
4514  // abort saving
4515  return false;
4516  }
4517  } else {
4518  // nothing to save, return true
4519  return true;
4520  }
4521 }
4522 
4523 
4524 bool
4526  // Check if there are non saved data elements
4527  if (myNet && !myNet->getSavingStatus()->isMeanDatasSaved()) {
4528  WRITE_DEBUG("Opening FXMessageBox 'Save meanData elements before close'");
4529  // open question box
4530  const std::string header = TL("Save meanData elements before close");
4531  const std::string contentsA = TL("You have unsaved meanData elements.");
4532  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4533  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4534  // restore focus to view net
4535  myViewNet->setFocus();
4536  // if answer was affirmative, but there was an error during saving meanData elements, return false to stop closing/reloading
4537  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4538  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'Quit'");
4539  // nothing to save, return true
4540  return true;
4541  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4542  // write warning if netedit is running in testing mode
4543  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'Yes'");
4544  if (onCmdSaveMeanDatas(nullptr, 0, nullptr) == 1) {
4545  // meanData elements successfully saved
4546  return true;
4547  } else {
4548  // error saving meanData elements, abort saving
4549  return false;
4550  }
4551  } else {
4552  // write warning if netedit is running in testing mode
4553  if (answer == 2) {
4554  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'No'");
4555  } else if (answer == 4) {
4556  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'ESC'");
4557  }
4558  // abort saving
4559  return false;
4560  }
4561  } else {
4562  // nothing to save, return true
4563  return true;
4564  }
4565 }
4566 
4567 
4568 void
4569 GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4570  // obtain netedit option container
4571  auto& neteditOptions = OptionsCont::getOptions();
4573  // set network
4574  mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4575  // set routes
4576  if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4577  mySumoOptions.resetDefault("route-files");
4578  } else {
4579  mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4580  }
4581  // set SumoOptions depending of additionalFiles and meanData files
4582  if (ignoreAdditionals) {
4583  if (neteditOptions.getString("meandata-files").empty()) {
4584  mySumoOptions.resetDefault("additional-files");
4585  } else {
4586  mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4587  }
4588  } else {
4589  if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4590  mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4591  } else if (neteditOptions.getString("additional-files").size() > 0) {
4592  mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4593  } else if (neteditOptions.getString("meandata-files").size() > 0) {
4594  mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4595  } else {
4596  mySumoOptions.resetDefault("additional-files");
4597  }
4598  }
4599 }
4600 
4601 
4602 FXString
4603 GNEApplicationWindow::getFolder(const std::string& folder) const {
4604  // declare folder
4605  std::string newFolder = folder;
4606  // declare stop flag
4607  bool stop = false;
4608  // continue while stop is false
4609  while (!stop) {
4610  if (newFolder.empty()) {
4611  // new folder empty, then stop
4612  stop = true;
4613  } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4614  (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4615  // removed file, then stop
4616  stop = true;
4617  } else {
4618  newFolder.pop_back();
4619  }
4620  }
4621  // if is empty, return gCurrentFolder
4622  if (newFolder.empty()) {
4623  return gCurrentFolder;
4624  }
4625  return FXString(newFolder.c_str());
4626 }
4627 
4628 
4629 void
4631  // check that view exists
4632  if (myViewNet) {
4634  }
4635  // update require recomputing
4637 }
4638 
4639 
4640 void
4642  // remove lock hotkeys
4644  // check supermode
4645  if (supermode == Supermode::NETWORK) {
4646  // menu commands
4650  // lock
4654  // processing
4659  } else if (supermode == Supermode::DEMAND) {
4660  // menu commands
4664  // lock
4668  // processing
4673  } else if (supermode == Supermode::DATA) {
4674  // menu commands
4678  // lock
4682  // processing
4687  } else {
4688  // menu commands
4693  // lock
4697  // processing
4701  }
4702  // continue depending of view
4703  if (myViewNet) {
4707  } else if (myViewNet->getEditModes().isJuPedSimView()) {
4710  }
4711  }
4712 }
4713 
4714 
4715 void
4716 GNEApplicationWindow::disableUndoRedo(const std::string& reason) {
4717  myUndoRedoListEnabled = reason;
4718 }
4719 
4720 
4721 void
4723  myUndoRedoListEnabled.clear();
4724 }
4725 
4726 
4727 const std::string&
4729  return myUndoRedoListEnabled;
4730 }
4731 
4732 
4733 void
4735  if (myViewNet) {
4736  // destroy Popup (to avoid crashes)
4738  }
4739  // clear undo list and return true to continue with closing/reload
4740  myUndoList->clear();
4741 }
4742 
4743 
4746  return myFileMenuCommands;
4747 }
4748 
4749 
4752  return myModesMenuCommands;
4753 }
4754 
4755 
4758  return myEditMenuCommands;
4759 }
4760 
4761 
4764  return myLockMenuCommands;
4765 }
4766 
4767 
4770  return myProcessingMenuCommands;
4771 }
4772 
4773 
4774 OptionsCont&
4776  return mySumoOptions;
4777 }
4778 
4779 
4780 OptionsCont&
4782  return myNetgenerateOptions;
4783 }
4784 
4785 
4786 void
4788  // get option container
4789  auto& neteditOptions = OptionsCont::getOptions();
4790  // get additional files
4791  const auto additionalFiles = neteditOptions.getStringVector("additional-files");
4792  // check if ignore loading of additional files
4793  const auto ignoreLoadAdditionalFiles = neteditOptions.getBool("ignore.additionalelements");
4794  // check conditions
4795  if (ignoreLoadAdditionalFiles) {
4796  // reset flag
4797  neteditOptions.resetWritable();
4798  neteditOptions.set("ignore.additionalelements", "false");
4799  } else if (myNet && (additionalFiles.size() > 0)) {
4800  // use first file as output
4801  neteditOptions.resetWritable();
4802  neteditOptions.set("additional-files", additionalFiles.front());
4803  // begin undolist
4804  myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4805  // iterate over every additional file
4806  bool setSaved = additionalFiles.size() == 1;
4807  for (const auto& file : additionalFiles) {
4808  // check if ignore missing imputs
4809  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4810  WRITE_MESSAGE(TL("loading additionals from '") + file + "'");
4811  // declare general handler
4812  GNEGeneralHandler handler(myNet, file, true, false);
4813  // disable validation for additionals
4814  XMLSubSys::setValidation("never", "auto", "auto");
4815  // Run parser
4816  if (!handler.parse()) {
4817  WRITE_ERRORF(TL("Loading of % failed."), file);
4818  }
4819  setSaved &= !handler.isErrorCreatingElement();
4820  // set additionals in SumoConfig
4821  setInputInSumoOptions(false, false);
4822  // disable validation for additionals
4823  XMLSubSys::setValidation("auto", "auto", "auto");
4824  }
4825  }
4826  if (setSaved) {
4828  }
4829  // end undo list
4830  myUndoList->end();
4831  }
4832 }
4833 
4834 
4835 void
4837  // get option container
4838  auto& neteditOptions = OptionsCont::getOptions();
4839  // get demand files
4840  const auto demandFiles = neteditOptions.getStringVector("route-files");
4841  // check if ignore loading of additional files
4842  const auto ignoreLoadDemandFiles = neteditOptions.getBool("ignore.routeelements");
4843  // check conditions
4844  if (ignoreLoadDemandFiles) {
4845  // reset flag
4846  neteditOptions.resetWritable();
4847  neteditOptions.set("ignore.routeelements", "false");
4848  } else if (myNet && (demandFiles.size() > 0)) {
4849  // use first file as output
4850  neteditOptions.resetWritable();
4851  neteditOptions.set("route-files", demandFiles.front());
4852  // begin undolist
4853  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4854  // iterate over every additional file
4855  for (const auto& file : demandFiles) {
4856  // check if ignore missing imputs
4857  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4858  WRITE_MESSAGE(TL("loading demand elements from '") + file + "'");
4859  // declare general handler
4860  GNEGeneralHandler handler(myNet, file, true, false);
4861  // disable validation for additionals
4862  XMLSubSys::setValidation("never", "auto", "auto");
4863  // Run parser
4864  if (!handler.parse()) {
4865  WRITE_ERRORF(TL("Loading of % failed."), file);
4866  }
4867  // set additionals in SumoConfig
4868  setInputInSumoOptions(false, false);
4869  // disable validation for additionals
4870  XMLSubSys::setValidation("auto", "auto", "auto");
4871  }
4872  }
4873  // end undo list
4874  myUndoList->end();
4875  }
4876 }
4877 
4878 
4879 void
4881  // get option container
4882  auto& neteditOptions = OptionsCont::getOptions();
4883  // get meanData files
4884  const auto meanDataFiles = neteditOptions.getStringVector("meandata-files");
4885  // continue depending of network and additional files
4886  if (myNet && (meanDataFiles.size() > 0)) {
4887  // use first file as output
4888  neteditOptions.resetWritable();
4889  neteditOptions.set("meandata-files", meanDataFiles.front());
4890  // begin undolist
4891  myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TL("loading meanDatas from '") + toString(meanDataFiles) + "'");
4892  // iterate over every additional file
4893  for (const auto& file : meanDataFiles) {
4894  // check if ignore missing imputs
4895  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4896  WRITE_MESSAGE(TL("loading meandatas from '") + file + "'");
4897  // declare general handler
4898  GNEGeneralHandler handler(myNet, file, true, false);
4899  // disable validation for additionals
4900  XMLSubSys::setValidation("never", "auto", "auto");
4901  // Run parser
4902  if (!handler.parse()) {
4903  WRITE_ERRORF(TL("Loading of % failed."), file);
4904  }
4905  // set additionals in sumo options
4906  setInputInSumoOptions(false, false);
4907  // disable validation for additionals
4908  XMLSubSys::setValidation("auto", "auto", "auto");
4909  }
4910  }
4911  // end undo list
4912  myUndoList->end();
4913  }
4914 }
4915 
4916 
4917 void
4919  // get option container
4920  auto& neteditOptions = OptionsCont::getOptions();
4921  // get data files
4922  const auto dataFiles = neteditOptions.getStringVector("data-files");
4923  // continue depending of network and data files
4924  if (myNet && (dataFiles.size() > 0)) {
4925  // disable update data
4927  // begin undolist
4928  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + toString(dataFiles) + "'");
4929  // iterate over every data file
4930  for (const auto& file : dataFiles) {
4931  // check if ignore missing imputs
4932  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4933  WRITE_MESSAGE(TL("Loading data elements from '") + file + "'");
4934  GNEDataHandler dataHandler(myNet, file, true, false);
4935  // disable validation for data elements
4936  XMLSubSys::setValidation("never", "auto", "auto");
4937  if (!dataHandler.parse()) {
4938  WRITE_ERRORF(TL("Loading of % failed."), file);
4939  }
4940  // set first dataElementsFiles as default file
4941  neteditOptions.resetWritable();
4942  neteditOptions.set("data-files", file);
4943  // disable validation for data elements
4944  XMLSubSys::setValidation("auto", "auto", "auto");
4945  }
4946  }
4947  // end undolist
4948  myUndoList->end();
4949  // enable update data
4951  }
4952 }
4953 
4954 // ---------------------------------------------------------------------------
4955 // GNEApplicationWindow - protected methods
4956 // ---------------------------------------------------------------------------
4957 
4959  myToolbarsGrip(this),
4960  myMenuBarFile(this),
4961  myFileMenuCommands(this),
4962  myModesMenuCommands(this),
4963  myEditMenuCommands(this),
4964  myLockMenuCommands(this),
4965  myProcessingMenuCommands(this),
4966  myLocateMenuCommands(this),
4967  myToolsMenuCommands(this),
4968  myWindowsMenuCommands(this),
4969  myHelpMenuCommands(this),
4970  mySupermodeCommands(this) {
4971 }
4972 
4973 
4974 long
4975 GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
4976  const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
4977  if (handled == 0 && myMDIClient->numChildren() > 0) {
4978  GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4979  if (w != nullptr) {
4980  w->onKeyPress(nullptr, sel, eventData);
4981  }
4982  }
4983  return 0;
4984 }
4985 
4986 
4987 long
4988 GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
4989  const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
4990  if (handled == 0 && myMDIClient->numChildren() > 0) {
4991  GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4992  if (w != nullptr) {
4993  w->onKeyRelease(nullptr, sel, eventData);
4994  }
4995  }
4996  return 0;
4997 }
4998 
4999 
5000 /****************************************************************************/
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:35
@ MID_GNE_NETWORKVIEWOPTIONS_AUTOOPPOSITEEDGES
automatically create opposite edge
Definition: GUIAppEnum.h:838
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition: GUIAppEnum.h:756
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition: GUIAppEnum.h:272
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition: GUIAppEnum.h:270
@ MID_HOTKEY_CTRL_Q_CLOSE
Main window closes.
Definition: GUIAppEnum.h:115
@ MID_HOTKEY_SHIFT_F5_COMPUTEJUNCTIONS_VOLATILE
compute junctions with volatile options
Definition: GUIAppEnum.h:268
@ MID_HOTKEY_CTRL_SHIFT_B_SAVEDATAELEMENTS
save Data Elements
Definition: GUIAppEnum.h:204
@ MID_HOTKEY_F3_SUPERMODE_DEMAND
select demand supermode in netedit
Definition: GUIAppEnum.h:234
@ MID_GNE_UNDOLISTDIALOG
open undo list dialog
Definition: GUIAppEnum.h:1573
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition: GUIAppEnum.h:870
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition: GUIAppEnum.h:848
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition: GUIAppEnum.h:758
@ MID_HOTKEY_SHIFT_S_LOCATESTOP
Locate stop - button.
Definition: GUIAppEnum.h:188
@ MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO
Open current SUMO simulation/network in netedit, or current netedit simulation/network in SUMO.
Definition: GUIAppEnum.h:123
@ MID_GNE_DATAVIEWOPTIONS_TAZRELDRAWING
toggle TAZRel drawing
Definition: GUIAppEnum.h:894
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition: GUIAppEnum.h:790
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition: GUIAppEnum.h:676
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition: GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:812
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition: GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition: GUIAppEnum.h:768
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition: GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition: GUIAppEnum.h:750
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition: GUIAppEnum.h:834
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:161
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition: GUIAppEnum.h:728
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition: GUIAppEnum.h:820
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition: GUIAppEnum.h:818
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition: GUIAppEnum.h:900
@ MID_HOTKEY_CTRL_W_CLOSESIMULATION
Close simulation - ID.
Definition: GUIAppEnum.h:129
@ MID_HOTKEY_ALT_2_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:147
@ MID_GNE_LOCK_ALLELEMENTS
lock all element
Definition: GUIAppEnum.h:846
@ MID_HOTKEY_F7_JOIN_SELECTEDJUNCTIONS_ROUTES
join selected junctions in network mode and normalice demand element ids in demand mode
Definition: GUIAppEnum.h:242
@ MID_HOTKEY_CTRL_D_SINGLESIMULATIONSTEP_OPENDEMANDELEMENTS
Perform a single simulation step in SUMO and open Demand Elements in netedit.
Definition: GUIAppEnum.h:89
@ MID_HOTKEY_F5_COMPUTE_NETWORK_DEMAND
compute Network in network mode and Demand elements in demand mode
Definition: GUIAppEnum.h:238
@ MID_GNE_DATAVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:886
@ MID_HOTKEY_CTRL_O_OPENSIMULATION_OPENNETWORK
Open simulation in SUMO and open network in netedit.
Definition: GUIAppEnum.h:111
@ MID_GNE_LOCK_MENUTITLE
selector for LockMenuTitle
Definition: GUIAppEnum.h:1571
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition: GUIAppEnum.h:824
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition: GUIAppEnum.h:872
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition: GUIAppEnum.h:75
@ MID_HOTKEY_F9_EDIT_VIEWSCHEME
open edit scheme menu
Definition: GUIAppEnum.h:246
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:860
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition: GUIAppEnum.h:850
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition: GUIAppEnum.h:712
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition: GUIAppEnum.h:724
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition: GUIAppEnum.h:284
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition: GUIAppEnum.h:43
@ MID_LANGUAGE_TR
change language to turkish
Definition: GUIAppEnum.h:1614
@ MID_CHANGELOG
changelog button
Definition: GUIAppEnum.h:650
@ MID_GNE_NETWORKVIEWOPTIONS_ASKFORMERGE
ask before merging junctions
Definition: GUIAppEnum.h:830
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition: GUIAppEnum.h:702
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition: GUIAppEnum.h:792
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition: GUIAppEnum.h:706
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in netedit.
Definition: GUIAppEnum.h:85
@ MID_TOOLBAREDIT_LOADDEMAND
load demand in sumo-gui/netedit after press ctrl+T
Definition: GUIAppEnum.h:678
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition: GUIAppEnum.h:858
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:149
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition: GUIAppEnum.h:230
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition: GUIAppEnum.h:208
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition: GUIAppEnum.h:754
@ MID_HOTKEY_CTRL_R_RELOAD
Reload the previously loaded simulation.
Definition: GUIAppEnum.h:119
@ MID_HOTKEY_CTRL_S_STOPSIMULATION_SAVENETWORK
Stop the simulation in SUMO and save network in netedit.
Definition: GUIAppEnum.h:117
@ MID_GNE_TOOLBARFILE_RELOAD_MEANDATAS
reload meanDatas
Definition: GUIAppEnum.h:742
@ MID_HOTKEY_D_MODE_SINGLESIMULATIONSTEP_DELETE
hotkey for perform a single simulation step in SUMO and set delete mode in netedit
Definition: GUIAppEnum.h:49
@ MID_GNE_NETWORKVIEWOPTIONS_CHAINEDGES
create edges in chain mode
Definition: GUIAppEnum.h:836
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition: GUIAppEnum.h:282
@ MID_GNE_TOOLBARFILE_SAVEDATA_AS
save data elements as
Definition: GUIAppEnum.h:734
@ MID_HOTKEY_F10_OPTIONSMENU
open options menu
Definition: GUIAppEnum.h:248
@ MID_HOTKEY_F11_FRONTELEMENT
set/clear front element
Definition: GUIAppEnum.h:250
@ MID_HOTKEY_F8_CLEANINVALID_CROSSINGS_DEMANDELEMENTS
clean invalid crossings in network mode and demand elements in demand mode
Definition: GUIAppEnum.h:244
@ MID_GNE_DATAVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:892
@ MID_HOTKEY_C_MODE_CONNECT_CONTAINER
hotkey for mode connecting lanes AND container
Definition: GUIAppEnum.h:45
@ MID_HOTKEY_H_MODE_PROHIBITION_CONTAINERPLAN
hotkey for mode prohibition AND container plan
Definition: GUIAppEnum.h:53
@ MID_HOTKEY_SHIFT_O_LOCATEPOI
Locate poi - button.
Definition: GUIAppEnum.h:182
@ MID_HOTKEY_W_MODE_WIRE_ROUTEDISTRIBUTION
hotkey for mode editing overhead wires AND route distributions
Definition: GUIAppEnum.h:73
@ MID_HOTKEY_T_MODE_TLS_TYPE
hotkey for mode editing TLS AND Vehicle Types
Definition: GUIAppEnum.h:67
@ MID_GNE_DEMANDVIEWOPTIONS_HIDESHAPES
hide shapes
Definition: GUIAppEnum.h:866
@ MID_LANGUAGE_ZHT
change language to chinese (traditional)
Definition: GUIAppEnum.h:1612
@ MID_LANGUAGE_ES
change language to spanish
Definition: GUIAppEnum.h:1604
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition: GUIAppEnum.h:172
@ MID_HOTKEY_ALT_4_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:151
@ MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS
save TLS Programs as
Definition: GUIAppEnum.h:722
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition: GUIAppEnum.h:888
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition: GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition: GUIAppEnum.h:752
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition: GUIAppEnum.h:832
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition: GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition: GUIAppEnum.h:732
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition: GUIAppEnum.h:826
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition: GUIAppEnum.h:99
@ MID_RECENTFILE
Loads a file previously loaded.
Definition: GUIAppEnum.h:316
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition: GUIAppEnum.h:63
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition: GUIAppEnum.h:822
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition: GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition: GUIAppEnum.h:874
@ MID_HOTKEY_CTRL_SHIFT_N_NEWWINDOW
open a new window (SUMO AND netedit)
Definition: GUIAppEnum.h:218
@ MID_HOTKEY_SHIFT_V_LOCATEVEHICLE
Locate vehicle - button.
Definition: GUIAppEnum.h:192
@ MID_LANGUAGE_HU
change language to hungarian
Definition: GUIAppEnum.h:1616
@ MID_HOTKEY_F4_SUPERMODE_DATA
select data supermode in netedit
Definition: GUIAppEnum.h:236
@ MID_HOTKEY_SHIFT_L_LOCATEPOLY
Locate polygons - button.
Definition: GUIAppEnum.h:180
@ MID_HOTKEY_F6_CLEAN_SOLITARYJUNCTIONS_UNUSEDROUTES
clean junctions without edges in network mode and unused routes in demand mode
Definition: GUIAppEnum.h:240
@ MID_HOTKEY_ALT_1_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:145
@ MID_HOTKEY_CTRL_K_OPENTLSPROGRAMS
Load file with TLS Programs.
Definition: GUIAppEnum.h:103
@ MID_LANGUAGE_IT
change language to italian
Definition: GUIAppEnum.h:1608
@ MID_GNE_LOCK_ELEMENT
lock element
Definition: GUIAppEnum.h:844
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition: GUIAppEnum.h:708
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition: GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition: GUIAppEnum.h:365
@ MID_GNE_TOOLBARFILE_OPENMEANDATAS
open meanData file
Definition: GUIAppEnum.h:738
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition: GUIAppEnum.h:65
@ MID_TUTORIAL
tutorial button
Definition: GUIAppEnum.h:654
@ MID_HOTKEY_CTRL_G_GAMINGMODE_TOGGLEGRID
Toggle Gaming mode in SUMO and grid in netedit.
Definition: GUIAppEnum.h:95
@ MID_GNE_DATAVIEWOPTIONS_TAZDRAWFILL
toggle draw TAZ fill
Definition: GUIAppEnum.h:896
@ MID_HOTKEY_ALT_6_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:155
@ MID_HOTKEY_CTRL_SHIFT_M_SAVEMEANDATAS
save Mean Datas
Definition: GUIAppEnum.h:216
@ ID_LOADTHREAD_EVENT
The loading thread.
Definition: GUIAppEnum.h:344
@ MID_HOTKEY_L_MODE_PERSONPLAN
hotkey for mode person plan
Definition: GUIAppEnum.h:57
@ MID_GNE_TOOLBARFILE_SAVEMEANDATAS_AS
save meanDatas as
Definition: GUIAppEnum.h:740
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALS
reload additionals
Definition: GUIAppEnum.h:720
@ MID_HOTKEY_V_MODE_VEHICLE
hotkey for mode create vehicles
Definition: GUIAppEnum.h:71
@ MID_HOTKEY_SHIFT_P_LOCATEPERSON
Locate person - button.
Definition: GUIAppEnum.h:184
@ MID_HOTKEY_I_MODE_INSPECT
hotkey for mode inspecting object attributes
Definition: GUIAppEnum.h:55
@ MID_LANGUAGE_EN
change language to english
Definition: GUIAppEnum.h:1600
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:814
@ MID_HOTKEY_SHIFT_J_LOCATEJUNCTION
Locate junction - button.
Definition: GUIAppEnum.h:178
@ MID_HOTKEY_ALT_0_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:143
@ MID_HOTKEY_CTRL_SHIFT_E_SAVENETEDITCONFIG
save netedit Config
Definition: GUIAppEnum.h:210
@ MID_GNE_TOOLBARFILE_SAVEADDITIONALS_AS
save additionals as
Definition: GUIAppEnum.h:716
@ MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS
save edgeTypes as
Definition: GUIAppEnum.h:726
@ MID_HOTKEYS
hotkeys button
Definition: GUIAppEnum.h:652
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition: GUIAppEnum.h:864
@ MID_LANGUAGE_DE
change language to german
Definition: GUIAppEnum.h:1602
@ MID_HOTKEY_ALT_F4_CLOSE
Main window closes.
Definition: GUIAppEnum.h:163
@ MID_HOTKEY_CTRL_SHIFT_A_SAVEADDITIONALS
Save Additional Elements.
Definition: GUIAppEnum.h:202
@ MID_GNE_TOOLBARFILE_RELOADNETWORK
reload only network
Definition: GUIAppEnum.h:700
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition: GUIAppEnum.h:264
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition: GUIAppEnum.h:828
@ MID_HOTKEY_CTRL_A_STARTSIMULATION_OPENADDITIONALS
Start the simulation in SUMO and open Additionals Elements in netedit.
Definition: GUIAppEnum.h:83
@ MID_GNE_DATAVIEWOPTIONS_SHOWSHAPES
show shapes
Definition: GUIAppEnum.h:890
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition: GUIAppEnum.h:770
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition: GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition: GUIAppEnum.h:898
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:159
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition: GUIAppEnum.h:710
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:810
@ MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE
open Netconvert file
Definition: GUIAppEnum.h:220
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
Definition: GUIAppEnum.h:1577
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition: GUIAppEnum.h:107
@ MID_GNE_TOOLBARFILE_SAVEDEMAND_AS
save demand elements as
Definition: GUIAppEnum.h:730
@ MID_GNE_TOOLBARFILE_SAVENETWORK_AS
save network as
Definition: GUIAppEnum.h:714
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:862
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition: GUIAppEnum.h:878
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition: GUIAppEnum.h:135
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
Definition: GUIAppEnum.h:1569
@ MID_FEEDBACK
feedback button
Definition: GUIAppEnum.h:656
@ MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES
open app setting dialog in SUMO and open edge type files in netedit
Definition: GUIAppEnum.h:97
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition: GUIAppEnum.h:288
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition: GUIAppEnum.h:222
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:157
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition: GUIAppEnum.h:254
@ MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG
Edit selection in SUMO and load neteditConfig in netedit.
Definition: GUIAppEnum.h:91
@ MID_HOTKEY_ENTER
hot key <ENTER> accept current operation
Definition: GUIAppEnum.h:286
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition: GUIAppEnum.h:736
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition: GUIAppEnum.h:214
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition: GUIAppEnum.h:262
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition: GUIAppEnum.h:190
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition: GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition: GUIAppEnum.h:232
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition: GUIAppEnum.h:876
@ MID_HOTKEY_SHIFT_F12_FOCUSUPPERELEMENT
focus upper element of current frame (only used in netedit)
Definition: GUIAppEnum.h:274
@ MID_HOTKEY_CTRL_N_OPENNETWORK_NEWNETWORK
open network in SUMO and create new empty network in netedit
Definition: GUIAppEnum.h:109
@ MID_HOTKEY_SHIFT_F3_TEMPLATE_CLEAR
clear template
Definition: GUIAppEnum.h:266
@ MID_GNE_NETWORKVIEWOPTIONS_SELECTEDGES
select edges
Definition: GUIAppEnum.h:816
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
Definition: GUIAppEnum.h:1610
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition: GUIAppEnum.h:704
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition: GUIAppEnum.h:868
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition: GUIAppEnum.h:808
@ MID_LANGUAGE_FR
change language to french
Definition: GUIAppEnum.h:1606
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition: GUIAppEnum.h:718
@ MID_HOTKEY_P_MODE_POLYGON_PERSON
hotkey for mode creating polygons
Definition: GUIAppEnum.h:61
@ MID_HOTKEY_CTRL_L_SAVEASPLAINXML
save network as plain XML
Definition: GUIAppEnum.h:105
@ MID_GNE_TOOLBAREDIT_COMPUTEPATHMANAGER
compute path manager
Definition: GUIAppEnum.h:788
@ MID_WINDOW
Main window-ID.
Definition: GUIAppEnum.h:296
GUICompleteSchemeStorage gSchemeStorage
#define GUIDesignButtonStatusBarFixed
button rectangular with thick and raise frame with a width of 100
Definition: GUIDesigns.h:112
#define GUIDesignHorizontalFrameStatusBar
Horizontal frame used in status bar.
Definition: GUIDesigns.h:346
#define GUIDesignLabelStatusBar
label used in statusBar
Definition: GUIDesigns.h:288
#define GUIDesignSplitter
Definition: GUIDesigns.h:477
#define GUIDesignSplitterMDI
MDI Splitter.
Definition: GUIDesigns.h:480
#define GUIDesignStatusBar
design used in status bar
Definition: GUIDesigns.h:449
@ MESSAGE_OCCURRED
send when a message occured
@ GLDEBUG_OCCURRED
send when a gldebug occured
@ ERROR_OCCURRED
send when a error occured
@ SIMULATION_LOADED
send when a simulation has been loaded
@ DEBUG_OCCURRED
send when a debug occured
@ WARNING_OCCURRED
send when a warning occured
GUISelectedStorage gSelected
A global holder of selected objects.
FXString gCurrentFolder
The folder used as last.
@ MODEMEANDATA
@ MODEADDITIONAL
@ SUPERMODEDEMAND
@ NETEDIT_MINI
@ VCLASS_SMALL_TAXI
@ MODECREATEEDGE
@ TOOL_TURNDEFS
@ SUPERMODENETWORK
@ SUPERMODEDATA
@ TOOL_CITYBRAIN
#define WRITE_DEBUG(msg)
Definition: MsgHandler.h:306
#define WRITE_ERRORF(...)
Definition: MsgHandler.h:305
#define WRITE_MESSAGE(msg)
Definition: MsgHandler.h:297
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:304
#define TL(string)
Definition: MsgHandler.h:315
#define TLF(string,...)
Definition: MsgHandler.h:317
#define PROGRESS_FAILED_MESSAGE()
Definition: MsgHandler.h:303
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:46
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 bool isReadable(std::string path)
Checks whether the given file is readable.
Definition: FileHelpers.cpp:51
static std::string getFilePath(const std::string &path)
Removes the file information from the given path.
Definition: FileHelpers.cpp:83
static void resetFont()
to be called when the font context is invalidated
Definition: GLHelper.cpp:672
The application's "About" - dialog.
Definition: GNEAbout.h:33
void create()
Creates the widget.
Definition: GNEAbout.cpp:85
The main window of Netedit.
long onCmdSaveAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals is executed
long onCmdOpenNetgenerateDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate" button
FXMenuPane * myFileMenuMeanDataElements
GNEApplicationWindowHelper::SupermodeCommands mySupermodeCommands
Supermode Commands.
FXMenuPane * myToolsImportCityBrainMenu
long onCmdSaveTLSProgramsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms as is executed
FXMenuTitle * myModesMenuTitle
menu title for modes
void create()
Creates the main window (required by FOX)
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + J to toggle draw junction shape
GNEApplicationWindowHelper::WindowsMenuCommands myWindowsMenuCommands
Windows Menu Commands.
GNELoadThread * myLoadThread
the thread that loads the network
void clearUndoList()
clear undo list
GNENet * myNet
we are responsible for the net
long onCmdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is executed
long onCmdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onCmdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is executed
void handleEvent_Message(GUIEvent *e)
handle event of type message
void setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes)
set input files in sumo options
long onCmdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is executed
bool continueWithUnsavedAdditionalChanges()
warns about unsaved changes in additionals and gives the user the option to abort
long onCmdLoadAdditionalsInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load additionals"
long onCmdOpenTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall open TLS programs is executed
bool continueWithUnsavedChanges()
warns about unsaved changes and gives the user the option to abort
long onUpdComputePathManager(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall compute path manager is executed
void updateControls()
update control contents after undo/redo or recompute
GNEApplicationWindowHelper::LockMenuCommands myLockMenuCommands
Lock Menu Commands.
long computeJunctionWithVolatileOptions()
called if the user selects Processing->compute junctions with volatile options
long onCmdFeedback(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->feedback
long onCmdNewNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall new network is executed
long onCmdSavePlainXMLAs(FXObject *, FXSelector, void *)
called when the command/FXCall save as plain xml is executed
long onCmdOpenOptionsDialog(FXObject *, FXSelector, void *)
called when user press "options" button
GNEApplicationWindowHelper::HelpMenuCommands myHelpMenuCommands
Help Menu Commands.
GNEApplicationWindow()
FOX needs this for static members.
long onClipboardRequest(FXObject *sender, FXSelector sel, void *ptr)
called when the command/FXCall clipboard request is executed
long onCmdSaveNeteditConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config as is executed
FXMenuPane * myFileMenuAdditionals
long onUpdSaveNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall save network is executed
std::string myUndoRedoListEnabled
string to check if undo/redo list is enabled (a String is used to keep the disabling reason)
long onUpdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is updated
std::map< std::string, FXMenuPane * > myMenuPaneToolMaps
map with menu pane tools and strings
long onCmdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is executed
long onUpdReloadDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload data elements is updated
long onCmdClose(FXObject *, FXSelector, void *)
called when the command/FXCall close is executed
long onCmdEditViewport(FXObject *, FXSelector, void *)
Called on menu Edit->Viewport.
long onCmdToggleViewOption(FXObject *, FXSelector, void *)
toggle viewOption
FXEX::MFXThreadEvent myLoadThreadEvent
io-event with the load-thread
FXMenuPane * myFileMenuRecentConfigs
OptionsCont myOriginalNetgenerateOptions
original netgenerate options container
long onCmdToggleEditOptions(FXObject *, FXSelector, void *)
called if the user press key combination Alt + <0-9>
GNEApplicationWindowHelper::MenuBarFile myMenuBarFile
MenuBarFile.
OptionsCont myOriginalNeteditOptions
original netedit options container
long onCmdOpenAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall open additionals is executed
long onUpdRedo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall redo is executed
GNEApplicationWindowHelper::ModesMenuCommands & getModesMenuCommands()
get modes Menu Commands (needed for show/hide menu commands)
long onCmdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
called if the user press the toggle time format button
long onCmdRunNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
called when run netgenerate is called
GNEApplicationWindowHelper::ProcessingMenuCommands myProcessingMenuCommands
Processing Menu Commands.
OptionsCont & getSumoOptions()
get SUMO options container
long onUpdSaveAdditionalsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals as is executed
GNEApplicationWindowHelper::EditMenuCommands & getEditMenuCommands()
get Edit Menu Commands (needed for show/hide menu commands)
void setStatusBarText(const std::string &statusBarText)
set text of the statusBar
GNEUndoList * myUndoList
the one and only undo list
FXMenuPane * myToolsVisualizationMenu
long onUpdSaveDataElements(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements is executed
long onCmdSmartReload(FXObject *, FXSelector, void *)
called when the command/FXCall smart reload is executed
long onCmdPaste(FXObject *, FXSelector, void *)
long onUpdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements as is executed
long onUpdPythonTool(FXObject *, FXSelector, void *)
called when the command/FXCall python tool is updated
long onCmdOpenNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall open network is executed
void closeAllWindows()
this method closes all windows and deletes the current simulation *‍/
long onCmdComputePathManager(FXObject *, FXSelector, void *)
long onCmdToggleComputeNetworkData(FXObject *, FXSelector, void *)
called when toggle checkbox compute network when switching between supermodes
long onCmdCopyTemplate(FXObject *, FXSelector, void *)
long onUpdReloadMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is updated
FXString getFolder(const std::string &folder) const
extract folder
long onLoadThreadEvent(FXObject *, FXSelector, void *)
called when the command/FXCall load thread is executed
long onUpdRequireRecomputing(FXObject *sender, FXSelector sel, void *ptr)
update label for require recomputing
FXMDIMenu * myMDIMenu
The menu used for the MDI-windows.
long onCmdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is executed
long onUpdSaveDemandElements(FXObject *, FXSelector, void *)
called when the update/FXCall save demand elements is executed
OptionsCont myOriginalSumoOptions
original sumo options container
OptionsCont myNetgenerateOptions
netgenerate options container
long onUpdReloadAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is updated
SUMOTime getCurrentSimTime() const
get current simulation time (pure virtual but we don't need it)
long onCmdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is executed
long onCmdLockAllElements(FXObject *, FXSelector sel, void *)
called when user press lock all elements button
long onKeyPress(FXObject *o, FXSelector sel, void *data)
called when a key is pressed
long onCmdQuit(FXObject *, FXSelector, void *)
Called by FOX if the application shall be closed.
long onCmdSaveEdgeTypesAs(FXObject *, FXSelector, void *)
called when the command/FXCall save edgeTypes as is executed
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
FXMenuPane * myToolsImportGTFSMenu
MFXSynchQue< GUIEvent * > myEvents
List of got requests.
GNEUndoList * getUndoList()
get pointer to undoList
long onUpdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is updated
long onUpdNeedsFrontElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs front element is executed
long onCmdProcessButton(FXObject *, FXSelector sel, void *)
called when user press a process button (or a shortcut)
FXMenuTitle * myLockMenuTitle
menu title for lock
void loadOptionOnStartup()
load net on startup
GNEViewNet * getViewNet()
get pointer to viewNet
long onUpdSaveMeanDatasAs(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas as is executed
long onCmdOpenSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open SumoConfig is executed
long onCmdSaveAdditionalsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save additionals as is executed
GNEUndoListDialog * getUndoListDialog()
get pointer to undoList dialog
GNEApplicationWindowHelper::LocateMenuCommands myLocateMenuCommands
Locate Menu Commands.
long onCmdUndo(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdAbout(FXObject *, FXSelector, void *)
called when the command/FXCall show about dialog is executed
long onUpdReloadEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall reload edge types is updated
long onCmdToggleGrid(FXObject *, FXSelector, void *)
called if the user press key combination Ctrl + G to toggle grid
void loadDataElements()
load data elements
void dependentBuild()
build dependent
long onUpdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save data elements as is executed
FXMenuPane * myFileMenuDemandElements
long onCmdEditChosen(FXObject *, FXSelector, void *)
called when the command/FXCall edit chosen is executed
long onUpdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is updated
long onCmdOpenSumoOptionsDialog(FXObject *, FXSelector, void *)
called when user press "sumo options" button
GNEApplicationWindowHelper::EditMenuCommands myEditMenuCommands
Edit Menu Commands.
long onCmdSetSuperMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-supermode hotkey
long onUpdSaveSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig is updated
long onCmdAbort(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits esc
void loadDemandElements()
load demand elements
void loadAdditionalElements()
load additional elements
GNEViewNet * myViewNet
pointer to current view net
long onCmdReloadAdditionals(FXObject *, FXSelector, void *)
called when the command/FXCall reload additionals is executed
long onUpdOpenUndoListDialog(FXObject *, FXSelector, void *)
long onUpdNeedsNetworkElement(FXObject *, FXSelector, void *)
called when the update/FXCall needs at least one network element is executed
const FXString myTitlePrefix
the prefix for the window title
long onCmdSaveMeanDatasAs(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas as is executed
long onCmdSaveNetworkAs(FXObject *, FXSelector, void *)
called when the command/FXCall save network as is executed
double getTrackerInterval() const
get current tracker interval (pure virtual but we don't need it)
void fillMenuBar()
Builds the menu bar.
long onCmdFocusFrame(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for focus on frame
void loadConfiguration(const std::string &configurationFile)
starts to load a configuration
GNEApplicationWindowHelper::LockMenuCommands & getLockMenuCommands()
get lock Menu Commands
long onCmdOpenMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall open meanDatas is executed
long onCmdPostprocessingNetgenerate(FXObject *sender, FXSelector sel, void *ptr)
postprocessing netgenerate
long onCmdHelp(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Documentation
long onCmdSaveNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall save netedit config is executed
long onUpdRequireViewNet(FXObject *sender, FXSelector sel, void *ptr)
enable or disable sender object depending if viewNet exist
bool continueWithUnsavedDemandElementChanges()
warns about unsaved changes in demand elements and gives the user the option to abort
long onUpdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is updated
OptionsCont & getNetgenerateOptions()
get netgenerate options container
long onCmdSaveDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements is executed
bool continueWithUnsavedDataElementChanges()
warns about unsaved changes in data elements and gives the user the option to abort
long onCmdCut(FXObject *, FXSelector, void *)
called when user press Ctrl+Z
long onCmdNewWindow(FXObject *, FXSelector, void *)
FXMenuPane * myFileMenuNeteditConfig
long onCmdSaveJoinedJunctionsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save joined is executed
long onCmdOpenEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall open edgeType is executed
long onCmdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save JuPedSim elements as is executed
long onCmdLoadDemandInSUMOGUI(FXObject *, FXSelector, void *)
called when user toggle windows checkbox "load demand"
long onUpdLockMenuTitle(FXObject *, FXSelector sel, void *)
enable or disable lock menu title
bool myAmLoading
information whether the gui is currently loading and the load-options shall be greyed out
long onUpdSaveAdditionals(FXObject *, FXSelector, void *)
called when the update/FXCall save additionals is executed
long onCmdSaveDemandElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save demand elements as is executed
long onCmdReloadTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall reload TLS programs is executed
long onCmdSaveDataElementsAs(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements as is executed
GNEApplicationWindowHelper::FileMenuCommands myFileMenuCommands
File Menu Commands.
void loadMeanDataElements()
load meanData elements
void loadOSM(const std::string &OSMFile)
starts to load a OSM File
long onCmdOpenNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netedit config is executed
long onCmdOpenRecent(FXObject *, FXSelector, void *)
called when the command/FXCall open recent is executed
long onCmdChangelog(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Changelog
long onUpdOpen(FXObject *, FXSelector, void *)
called when the command/FXCall on update open executed
long onCmdSetMode(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits an edit-mode hotkey
bool myHadDependentBuild
check if had dependent build
long onCmdBackspace(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits backspace
void updateRecomputingLabel()
update recomputing label
void handleEvent_NetworkLoaded(GUIEvent *e)
handle event of type Network loaded
long onCmdCopy(FXObject *, FXSelector, void *)
long onCmdSaveMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall save meanDatas is executed
long onCmdReloadMeanDatas(FXObject *, FXSelector, void *)
called when the command/FXCall reload meanDatas is executed
long onCmdOpenSUMOGUI(FXObject *sender, FXSelector sel, void *ptr)
called if the user hints ctrl + T
void disableUndoRedo(const std::string &reason)
disable undo-redo giving a string with the reason
long onCmdOpenDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall open demand is executed
void enableUndoRedo()
disable undo-redo
void loadNetwork(const std::string &networkFile)
load network
long onUpdToggleViewOption(FXObject *, FXSelector, void *)
update viewOption
GNEApplicationWindowHelper::ToolsMenuCommands myToolsMenuCommands
Tools Menu Commands.
long onCmdUnlockAllElements(FXObject *, FXSelector sel, void *)
called when user press unlock all elements button
long onUpdReloadSumoConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload SumoConfig is updated
const std::string & isUndoRedoEnabled() const
check if undo-redo is enabled
long onUpdNeedsNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall needs network is executed
GNEApplicationWindowHelper::ToolbarsGrip & getToolbarsGrip()
get ToolbarsGrip
long onUpdSaveJuPedSimElementsAs(FXObject *, FXSelector, void *)
called when the update/FXCall save juPedSim as is executed
long onUpdReloadNetwork(FXObject *, FXSelector, void *)
called when the update/FXCall network reload is executed
OptionsCont mySumoOptions
sumo options container
bool consoleOptionsLoaded()
check if console options was already loaded
long onCmdSaveDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall save data elements is executed
long onCmdOpenPythonToolDialog(FXObject *obj, FXSelector, void *)
called when user press over a tool dialog button
long onCmdLocate(FXObject *, FXSelector, void *)
called when the command/FXCall locate is executed
long onCmdDel(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits del
long onCmdHotkeys(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Hotkeys
long onCmdOpenDataElements(FXObject *, FXSelector, void *)
called when the command/FXCall open data is executed
long onCmdRunPythonTool(FXObject *obj, FXSelector, void *)
called when user run a tool
void updateSuperModeMenuCommands(const Supermode supermode)
update FXMenuCommands depending of supermode
FXMenuPane * myFileMenuRecentNetworks
bool myConsoleOptionsLoaded
flag for check if console options was already loaded
long onCmdSetFrontElement(FXObject *, FXSelector, void *)
called if the user call set front element
GNEUndoListDialog * myUndoListDialog
undoList dialog
long onUpdReloadDemandElements(FXObject *, FXSelector, void *)
called when the command/FXCall reload demand elements is updated
void createNewNetwork()
create new network
long onCmdEnter(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits enter
FXCursor * getDefaultCursor()
get default cursor
long onCmdSetTemplate(FXObject *, FXSelector, void *)
GNEApplicationWindowHelper::FileMenuCommands & getFileMenuCommands()
get file Menu Commands (needed for show/hide menu commands)
long onUpdSaveMeanDatas(FXObject *, FXSelector, void *)
called when the update/FXCall save meanDatas is executed
long onCmdTutorial(FXObject *sender, FXSelector sel, void *ptr)
called if the user selects help->Tutorial
long onCmdRedo(FXObject *, FXSelector, void *)
long onCmdOpenNetgenerateOptionsDialog(FXObject *, FXSelector, void *)
called when user press "netgenerate options" button
bool continueWithUnsavedMeanDataElementChanges()
warns about unsaved changes in meanData elements and gives the user the option to abort
long onUpdUndo(FXObject *obj, FXSelector sel, void *ptr)
called when the update/FXCall undo is executed
const GNEApplicationWindowHelper::ProcessingMenuCommands & getProcessingMenuCommands() const
get processing Menu Commands
long onCmdPostProcessingPythonTool(FXObject *obj, FXSelector, void *)
post processing after run tool
GUIMessageWindow * myMessageWindow
A window to display messages, warnings and error in.
long onCmdReloadNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall network reload is executed
long onUpdSmartReload(FXObject *, FXSelector, void *)
called when the update/FXCall smart reload is executed
FXSplitter * myMainSplitter
The splitter that divides the main window into view and the log window.
long onCmdLockSelectElements(FXObject *, FXSelector sel, void *)
called when user press lock select elements button
long onCmdOpenNetconvertConfig(FXObject *, FXSelector, void *)
called when the command/FXCall open netconvertconfiguration is executed
long onCmdSaveTLSPrograms(FXObject *, FXSelector, void *)
called when the command/FXCall save TLSPrograms is executed
long onUpdSaveEdgeTypes(FXObject *, FXSelector, void *)
called when the command/FXCall save edge types is updated
long onCmdReloadNeteditConfig(FXObject *, FXSelector, void *)
called when the command/FXCall reload netedit config is executed
long onCmdSaveNetwork(FXObject *, FXSelector, void *)
called when the command/FXCall save network is executed
FXMenuPane * myFileMenu
the submenus
GNEApplicationWindowHelper::ToolbarsGrip myToolbarsGrip
Toolbars Grip.
long onUpdToggleTimeFormat(FXObject *sender, FXSelector sel, void *ptr)
update toggle time format button
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 onCmdSaveSumoConfigAs(FXObject *, FXSelector, void *)
called when the command/FXCall save SumoConfig as is executed
long onCmdOpenForeign(FXObject *, FXSelector, void *)
called when the command/FXCall open foreign is executed
void refreshAttributesCreator()
refresh attribute creator
GNEAttributesCreator * getContainerAttributes() const
get attributes creator
void refreshEdgeTypeSelector()
refresh edge type selector
EdgeTypeSelector * getEdgeTypeSelector() const
get edgeType selector
void addLaneType(GNELaneType *laneType)
add laneType
GNENet * net
the loaded net
const bool viewportFromRegistry
whether loading viewport from registry
const std::string file
the name of the loaded file
const std::string settingsFile
the name of the settings file to load
Dialog fix network elements.
virtual void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame (can be reimplemented in frame children)
Definition: GNEFrame.cpp:252
bool isErrorCreatingElement() const
get flag for check if a element wasn't created
bool isSelectingParent() const
check if we're selecting a new parent
void refreshNeteditAttributesEditor(bool forceRefresh)
refresh netedit attributes
void 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 inspectMultisection(const std::vector< GNEAttributeCarrier * > &ACs)
Inspect the given multi-selection.
void newNetwork()
begins the creation of an empty network
static void fillOptions(OptionsCont &neteditOptions)
clears and initializes the OptionsCont
void loadNetworkOrConfig()
begins the loading of an existent network or config
static void setDefaultOptions(OptionsCont &neteditOptions)
sets required options for proper functioning
int getNumberOfMeanDatas() const
get number of meanDatas
const std::map< std::string, std::pair< const GUIGlObject *, GNEEdge * > > & getEdges() const
map with the ID and pointer to edges of net
const std::map< SumoXMLTag, std::map< const GUIGlObject *, GNEAdditional * > > & getAdditionals() const
get additionals
const std::map< const std::string, GNEDataSet * > & getDataSets() const
get demand elements
const std::map< std::string, std::pair< const GUIGlObject *, GNEJunction * > > & getJunctions() const
get junctions
int getNumberOfGenericDatas() const
Return the number of generic datas.
const std::map< const GUIGlObject *, GNECrossing * > & getCrossings() const
get crossings
int getNumberOfDemandElements() const
Return the number of demand elements.
int getNumberOfAdditionals() const
get number of additionals
const std::map< std::string, GNEEdgeType * > & getEdgeTypes() const
map with the ID and pointer to edgeTypes of net
const std::map< SumoXMLTag, std::map< const GUIGlObject *, GNEDemandElement * > > & getDemandElements() const
get demand elements
void dataElementsSaved()
mark demand elements as saved
void demandElementsSaved()
mark demand elements as saved
void SumoConfigSaved()
mark SumoConfig as saved
void additionalsSaved()
mark additionals as saved
void requireSaveNeteditConfig()
inform that netedit config has to be saved
void requireSaveSumoConfig()
inform that SumoConfig has to be saved
bool isSumoConfigSaved() const
check if SumoConfig is saved
void neteditConfigSaved()
mark netedit config as saved
void requireSaveMeanDatas()
inform that mean data elements has to be saved
void meanDatasSaved()
mark mean data elements as saved
bool isDemandElementsSaved() const
check if demand elements are saved
void requireSaveAdditionals()
inform that additionals has to be saved
bool isDataElementsSaved() const
check if data elements are saved
bool isNetworkSaved() const
check if network is saved
bool isMeanDatasSaved() const
check if mean data elements are saved
void requireSaveDataElements()
inform that data elements has to be saved
bool isNeteditConfigSaved() const
check if netedit config is saved
void networkSaved()
mark network as saved
bool isAdditionalsSaved() const
check if additionals are saved
void requireSaveDemandElements()
inform that demand elements has to be saved
void clearAdditionalElements(GNEUndoList *undoList)
clear additionals
Definition: GNENet.cpp:1997
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition: GNENet.cpp:1646
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition: GNENet.cpp:1457
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition: GNENet.cpp:2646
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition: GNENet.cpp:1255
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition: GNENet.cpp:127
void enableUpdateData()
Definition: GNENet.cpp:2713
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition: GNENet.cpp:2667
void saveAdditionals()
save additional elements
Definition: GNENet.cpp:2086
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition: GNENet.cpp:2010
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition: GNENet.cpp:1752
void computeNetwork(GNEApplicationWindow *window, bool force=false, bool volatileOptions=false)
trigger full netbuild computation param[in] window The window to inform about delay param[in] force W...
Definition: GNENet.cpp:1299
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition: GNENet.cpp:1797
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition: GNENet.cpp:1662
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:121
void saveDemandElements()
save demand element elements of the network
Definition: GNENet.cpp:2141
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition: GNENet.cpp:2034
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition: GNENet.cpp:2724
void saveDataElements()
save data set elements of the network
Definition: GNENet.cpp:2183
void saveJuPedSimElements(const std::string &file)
save JuPedSim elements
Definition: GNENet.cpp:2127
void saveNetwork()
save the network
Definition: GNENet.cpp:1212
bool isNetRecomputed() const
check if net require recomputing
Definition: GNENet.cpp:1439
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition: GNENet.cpp:1593
void joinRoutes(GNEUndoList *undoList)
join routes
Definition: GNENet.cpp:1688
GNEPathManager * getPathManager()
get path manager
Definition: GNENet.cpp:133
void savePlain(const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition: GNENet.cpp:1246
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:2056
void saveMeanDatas()
save meanData elements of the network
Definition: GNENet.cpp:2228
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition: GNENet.cpp:1382
static std::pair< int, bool > Run(GNEApplicationWindow *GNEApp, GUIIcon icon, OptionsCont &optionsContainer, const OptionsCont &originalOptionsContainer, const char *titleName)
Constructor for run dialogs.
static std::pair< int, bool > Options(GNEApplicationWindow *GNEApp, GUIIcon icon, OptionsCont &optionsContainer, const OptionsCont &originalOptionsContainer, const char *titleName)
Constructor for options dialogs.
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
GNEAttributesCreator * getPersonAttributes() const
get attributes creator
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...
GNEAttributesCreator * getVehicleAttributes() const
get attributes creator
long onCmdToggleShowDemandElementsNetwork(FXObject *, FXSelector, void *)
toggle show demand elements (network)
const GNEViewNetHelper::DataViewOptions & getDataViewOptions() const
get data view options
Definition: GNEViewNet.cpp:727
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:703
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:715
void hotkeyFocusFrame()
handle focus frame keypress
long onCmdToggleChainEdges(FXObject *, FXSelector, void *)
toggle chain edges
long onCmdToggleLockContainer(FXObject *, FXSelector, void *)
toggle lock container in super mode demand
long onCmdToggleShowGrid(FXObject *, FXSelector, void *)
toggle show grid
long onCmdToggleHideNonInspecteDemandElements(FXObject *, FXSelector, void *)
toggle hide non inspected demand elements
GNEViewParent * getViewParent() const
get the net object
long onCmdToggleDrawJunctionShape(FXObject *, FXSelector, void *)
toggle draw junction shape
long onCmdToggleShowShapes(FXObject *, FXSelector, void *)
toggle show shapes in super mode data
GNEViewNetHelper::SaveElements & getSaveElements()
get variable used to save elements
Definition: GNEViewNet.cpp:963
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
Definition: GNEViewNet.cpp:675
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:915
long onCmdSetMode(FXObject *, FXSelector sel, void *)
called when user press a mode button (Network or demand)
void hotkeyEnter()
handle enter keypress
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
GNEViewNetHelper::TimeFormat & getTimeFormat()
get variable used to switch between time formats
Definition: GNEViewNet.cpp:969
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:721
void updateViewNet() const
Mark the entire GNEViewNet to be repainted later.
Definition: GNEViewNet.cpp:410
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
Definition: GNEViewNet.cpp:417
A single child window which contains a view of the simulation area.
Definition: GNEViewParent.h:88
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.
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
static void close()
close GUICursorSubSys
static void initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
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:74
The application's "Feedback" dialog.
void create()
Creates the widget.
Editor for the list of chosen objects.
const std::string & getMsg() const
Returns the message.
GUIEventType getOwnType() const
returns the event type
Definition: GUIEvent.h:89
GUISUMOAbstractView * getView() const
return GUISUMOAbstractView
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static void initIcons(FXApp *a)
Initiate GUIIconSubSys.
static void close()
close GUIIconSubSys
void setWindowSizeAndPos()
perform initial window positioning and sizing according to user options / previous call
std::vector< FXMainWindow * > myTrackerWindows
list of tracker windows
FXMenuPane * myLanguageMenu
Language menu common to all applications.
FXLabel * myCartesianCoordinate
Labels for the current cartesian, geo-coordinate and test coordinates.
std::map< std::string, std::string > myOnlineMaps
online mapping services for the context menu
MFXStaticToolTip * myStaticTooltipMenu
static toolTip used in menus
FXMDIClient * myMDIClient
The multi view panel.
void buildLanguageMenu(FXMenuBar *menuBar)
long onCmdChangeLanguage(FXObject *, FXSelector, void *)
FXHorizontalFrame * myGeoFrame
FXHorizontalFrame * myTestFrame
FXHorizontalFrame * myCartesianFrame
FXLabel * myTestCoordinate
FXMutex myTrackerLock
A lock to make the removal and addition of trackers secure.
void storeWindowSizeAndPos()
record window position and size in registry
FXLabel * myGeoCoordinate
FXStatusBar * myStatusbar
The status bar.
FXGLVisual * myGLVisual
The gl-visual used.
std::vector< GUIGlChildWindow * > myGLWindows
list of GLWindows
long onUpdChangeLanguage(FXObject *, FXSelector, void *)
A logging window for the gui.
void addSeparator()
Adds a a separator to this log window.
void unregisterMsgHandlers()
unregister message handlers
void clear()
Clears the window.
void appendMsg(GUIEventType eType, const std::string &msg)
Adds new text to the window.
void registerMsgHandlers()
register message handlers
virtual double getXPos() const =0
Returns the x-offset of the field to show stored in this changer.
virtual double getYPos() const =0
Returns the y-offset of the field to show stored in this changer.
virtual double getZPos() const =0
Returns the camera height corresponding to the current zoom factor.
void addDecals(const std::vector< Decal > &decals)
add decals
void showViewschemeEditor()
show viewsscheme editor
virtual void showViewportEditor()
show viewport editor
const GUIVisualizationSettings & getVisualisationSettings() const
get visualization settings (read only)
GUIPerspectiveChanger & getChanger() const
get changer
std::vector< Decal > & getDecals()
The list of decals to show.
virtual void setViewportFromToRot(const Position &lookFrom, const Position &lookAt, double rotation)
applies the given viewport settings
void destroyPopup()
destroys the popup
static FXuint question(FXApp *app, const char *caption, const char *message,...)
Show modal question message, in free floating window.
An XML-handler for visualisation schemes.
const std::vector< std::string > & addSettings(GUISUMOAbstractView *view=0) const
Adds the parsed settings to the global list of settings.
void applyViewport(GUISUMOAbstractView *view) const
Sets the viewport which has been parsed.
void setSnapshots(GUISUMOAbstractView *view) const
Makes a snapshot if it has been parsed.
const std::vector< GUISUMOAbstractView::Decal > & getDecals() const
Returns the parsed decals.
static void buildAccelerators(FXAccelTable *accelTable, FXObject *target, const bool sumogui)
build accelerators
static void close()
close GUITextureSubSys
static void resetTextures()
Reset textures.
static void initTextures(FXApp *a)
Initiate GUITextureSubSys for textures.
static std::string clipped
Definition: GUIUserIO.h:58
bool drawJunctionShape
whether the shape of the junction should be drawn
bool showGrid
Information whether a grid shall be shown.
bool parse()
parse
static void resetLoaded()
resets loaded location elements
bool amChecked() const
check if this MFXCheckableButton is checked
FXbool getCheck() const
Get check state (TRUE, FALSE or MAYBE)
void setCheck(FXbool s=TRUE)
Set check state (TRUE, FALSE or MAYBE)
void pop()
Definition: MFXSynchQue.h:64
bool empty()
Definition: MFXSynchQue.h:127
static FXString getTitleText(const FXString &appname, FXString filename="")
Returns the title text in dependence to an optional file name.
Definition: MFXUtils.cpp:60
static bool checkOptions(OptionsCont &oc)
Checks set options from the OptionsCont-singleton for being valid.
Definition: NBFrame.cpp:732
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(OptionsCont &oc)
Checks set options for being valid.
Definition: NIFrame.cpp:391
static bool load(SUMOSAXHandler &handler, const std::vector< std::string > &files, const std::string &type, const bool stringParse=false)
Importer for edge type information stored in XML.
static bool checkOptions(OptionsCont &oc)
Checks set options for being valid.
Definition: NWFrame.cpp:139
A storage for options typed value containers)
Definition: OptionsCont.h:89
void resetDefault()
Resets all options to default.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
void writeConfiguration(std::ostream &os, const bool filled, const bool complete, const bool addComments, const std::string &relativeTo="", const bool forceRelative=false, const bool inComment=false) const
Writes the configuration.
std::string getValueString(const std::string &name) const
Returns the string-value of the named option (all options)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:60
A point in 2D or 3D with translation and scaling methods.
Definition: Position.h:37
void set(double x, double y)
set positions x and y
Definition: Position.h:85
double x() const
Returns the x-position.
Definition: Position.h:55
double y() const
Returns the y-position.
Definition: Position.h:60
static std::string replace(std::string str, const std::string &what, const std::string &by)
Replaces all occurrences of the second string by the third string within the first string.
static std::string transcodeToLocal(const std::string &utf8String)
convert a string from UTF-8 to the local codepage
static unsigned long runHiddenCommand(const std::string &cmd)
run a shell command without popping up any windows (particuarly on win32)
Definition: SysUtils.cpp:69
static bool checkOptions(OptionsCont &oc)
checks shared options and sets StdDefs
static void parseTemplate(OptionsCont &options, const std::string &templateString)
run parser
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition: XMLSubSys.cpp:83
@ SEL_THREAD_EVENT
Definition: fxexdefs.h:173
@ SEL_THREAD
Definition: fxexdefs.h:155
Definition: json.hpp:4471
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
void buildFileMenuCommands(FXMenuPane *fileMenu, FXMenuPane *fileMenuNEEDITConfig, FXMenuPane *fileMenuSumoConfig, FXMenuPane *fileMenuTLS, FXMenuPane *fileMenuEdgeTypes, FXMenuPane *fileMenuAdditionals, FXMenuPane *fileMenuDemandElements, FXMenuPane *fileMenuDataElements, FXMenuPane *fileMenuMeanDataElements)
build menu commands
void buildHelpMenuCommands(FXMenuPane *helpMenu)
build menu commands
void buildLocateMenuCommands(FXMenuPane *locateMenu)
build menu commands
void buildLockMenuCommands(FXMenuPane *editMenu)
build menu commands
void hideNetworkLockMenuCommands()
show network processing menu commands
void hideDemandLockMenuCommands()
show demand processing menu commands
void hideDataLockMenuCommands()
show data processing menu commands
void showDataLockMenuCommands()
show data processing menu commands
void showNetworkLockMenuCommands()
show network processing menu commands
void showDemandLockMenuCommands()
show demand processing menu commands
void buildRecentConfigFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentConfigFiles)
build recent config
MFXRecentNetworks myRecentConfigs
List of recent configs.
MFXRecentNetworks myRecentNetworks
List of recent networks.
void buildRecentNetworkFiles(FXMenuPane *fileMenu, FXMenuPane *fileMenuRecentNetworkFiles)
build recent network
void buildModesMenuCommands(FXMenuPane *modesMenu)
build modes menu commands
DemandMenuCommands demandMenuCommands
Demand Menu Commands.
void setDefaultView(Supermode supermode)
set default view
void setJuPedSimView(Supermode supermode)
set JuPedSim view
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...)
long postProcessing(FXObject *menuCommand) const
run postprocessing
void buildTools(FXMenuPane *toolsMenu, const std::map< std::string, FXMenuPane * > &menuPaneToolMaps)
build tools (and menu commands)
long showNetgenerateDialog() const
show netgenerate dialog
long showTool(FXObject *menuCommand) const
show tool
long runNetgenerateDialog(const OptionsCont *netgenerateOptions) const
run netgenerate dialog
long runToolDialog(FXObject *menuCommand) const
run tool dialog
void buildWindowsMenuCommands(FXMenuPane *windowsMenu, FXStatusBar *statusbar, GUIMessageWindow *messageWindow)
build menu commands
static bool toggleEditOptionsData(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Data menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string openRouteFileDialog(FXWindow *window, bool save, bool multi=false)
open route file dialog
static std::string openMeanDataDialog(FXWindow *window, bool save, bool multi=false)
open meandata filename dialog
static std::string openAdditionalFileDialog(FXWindow *window, bool save, bool multi=false)
open additional dialog
static std::string openOSMFileDialog(FXWindow *window)
open OSM file dialog
static bool toggleEditOptionsDemand(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Demand menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string saveJoinedJunctionsFileDialog(FXWindow *window)
open joined junctions file dialog
static bool toggleEditOptionsNetwork(GNEViewNet *viewNet, const MFXCheckableButton *menuCheck, const int numericalKeyPressed, FXObject *obj, FXSelector sel)
toggle edit options Network menu commands (called in GNEApplicationWindow::onCmdToggleEditOptions)
static std::string openTLSFileDialog(FXWindow *window, bool save)
open TLS file dialog
static std::string openDataFileDialog(FXWindow *window, bool save, bool multi=false)
open data file dialog
static std::string openNeteditConfigFileDialog(FXWindow *window, bool save)
open netedit config file dialog
static std::string savePlainXMLFileDialog(FXWindow *window)
open plain xml file dialog
static std::string openSumoConfigFileDialog(FXWindow *window, bool save, bool multi=false)
open SUMO config file dialog
static std::string openEdgeTypeFileDialog(FXWindow *window, bool save)
open edgeType file dialog
static std::string openNetworkFileDialog(FXWindow *window, bool save, bool multi=false)
open netconvert file dialog
static std::string openNetconvertFileDialog(FXWindow *window)
open netconvert file dialog
MFXCheckableButton * menuCheckToggleTAZDrawFill
menu check to toggle TAZ draw fill
MFXCheckableButton * menuCheckShowAdditionals
menu check to show Additionals
MFXCheckableButton * menuCheckShowShapes
menu check to show Shapes
MFXCheckableButton * menuCheckToggleTAZRelOnlyFrom
menu check to toggle TAZRel only from
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
void getVisibleDataMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckToggleTAZRelDrawing
menu check to toggle TAZ Rel drawing
MFXCheckableButton * menuCheckShowDemandElements
menu check to show Demand Elements
MFXCheckableButton * menuCheckToggleTAZRelOnlyTo
menu check to toggle TAZRel only to
MFXCheckableButton * menuCheckShowAllTrips
show all trips
MFXCheckableButton * menuCheckToggleGrid
menu check to show grid button
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckDrawSpreadVehicles
menu check to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowOverlappedRoutes
show overlapped routes
MFXCheckableButton * menuCheckShowAllPersonPlans
show all person plans
MFXCheckableButton * menuCheckShowAllContainerPlans
show all container plans
MFXCheckableButton * menuCheckHideNonInspectedDemandElements
Hide non inspected demand elements.
MFXCheckableButton * menuCheckHideShapes
Hide shapes (Polygons and POIs)
MFXCheckableButton * menuCheckLockPerson
Lock Person.
void getVisibleDemandMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible demand menu commands
MFXCheckableButton * menuCheckLockContainer
Lock Container.
DataEditMode dataEditMode
the current Data edit mode
bool isDefaultView() const
check if default view is enabled
DemandEditMode demandEditMode
the current Demand edit mode
Supermode currentSupermode
the current supermode
NetworkEditMode networkEditMode
the current Network edit mode
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
bool isJuPedSimView() const
check if default view is enabled
MFXCheckableButton * menuCheckSelectEdges
checkable button to select only edges
MFXCheckableButton * menuCheckChainEdges
checkable button to the endpoint for a created edge should be set as the new source
MFXCheckableButton * menuCheckShowDemandElements
checkable button to show Demand Elements
MFXCheckableButton * menuCheckMoveElevation
checkable button to apply movement to elevation
MFXCheckableButton * menuCheckShowTAZElements
checkable button to show TAZ elements
void getVisibleNetworkMenuCommands(std::vector< MFXCheckableButton * > &commands) const
get visible network menu commands
MFXCheckableButton * menuCheckAutoOppositeEdge
check checkable to create auto create opposite edge
MFXCheckableButton * menuCheckDrawSpreadVehicles
checkable button to draw vehicles in begin position or spread in lane
MFXCheckableButton * menuCheckShowConnections
checkable button to show connections
MFXCheckableButton * menuCheckHideConnections
checkable button to hide connections in connect mode
MFXCheckableButton * menuCheckToggleDrawJunctionShape
checkable button to show junction shapes
MFXCheckableButton * menuCheckToggleGrid
checkable button to show grid button
MFXCheckableButton * menuCheckShowJunctionBubble
checkable button to show connection as bubble in "Move" mode.
MFXCheckableButton * menuCheckWarnAboutMerge
checkable button to we should warn about merging junctions
MFXCheckableButton * menuCheckShowAdditionalSubElements
checkable button to show additional sub-elements
MFXCheckableButton * menuCheckChangeAllPhases
checkable button to set change all phases
MFXCheckableButton * menuCheckExtendSelection
checkable button to extend to edge nodes
void setSaveIndividualFiles(bool value)
enable or disable save individual files
void switchTimeFormat()
switch time format
void updateButtonLabel()
update button label