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>
43 #include <netedit/templates.h>
44 #include <netimport/NIFrame.h>
45 #include <netimport/NITypeLoader.h>
47 #include <netwrite/NWFrame.h>
52 #include <utils/gui/div/GLHelper.h>
64 #include <utils/xml/XMLSubSys.h>
65 
66 #include "GNEApplicationWindow.h"
67 #include "GNEEvent_NetworkLoaded.h"
68 #include "GNELoadThread.h"
69 #include "GNENet.h"
70 #include "GNEViewNet.h"
71 #include "GNEUndoList.h"
72 #include "GNEViewParent.h"
73 
74 #ifdef HAVE_VERSION_H
75 #include <version.h>
76 #endif
77 
78 // ===========================================================================
79 // FOX-declarations
80 // ===========================================================================
81 
82 FXDEFMAP(GNEApplicationWindow) GNEApplicationWindowMap[] = {
83  // quit calls
87  FXMAPFUNC(SEL_CLOSE, MID_WINDOW, GNEApplicationWindow::onCmdQuit),
88  // toolbar file
95  FXMAPFUNC(SEL_UPDATE, MID_RECENTFILE, GNEApplicationWindow::onUpdOpen),
100  // network
115  // NeteditConfig
123  // SumoConfig
131  // TLS
138  // edge types
147  // additionals
158  // demand elements
167  // data elements
176  // meanDatas
185  // other
190  // Toolbar supermode
194  // Toolbar modes
211  // Toolbar edit
220  // Network view options
253  // Demand view options
276  // Data view options
293  // view
310  /* Prepared for #6042
311  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_X_CUT, GNEApplicationWindow::onCmdCut),
312  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_C_COPY, GNEApplicationWindow::onCmdCopy),
313  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_CTRL_V_PASTE, GNEApplicationWindow::onCmdPaste),
314  */
315  // toolbar lock
321  // Toolbar processing
338  // Toolbar locate
363  // toolbar python tools
368  // toolbar windows
370  // toolbar help
372  FXMAPFUNC(SEL_COMMAND, MID_CHANGELOG, GNEApplicationWindow::onCmdChangelog),
373  FXMAPFUNC(SEL_COMMAND, MID_HOTKEYS, GNEApplicationWindow::onCmdHotkeys),
374  FXMAPFUNC(SEL_COMMAND, MID_TUTORIAL, GNEApplicationWindow::onCmdTutorial),
375  FXMAPFUNC(SEL_COMMAND, MID_FEEDBACK, GNEApplicationWindow::onCmdFeedback),
377  // alt + <number>
398  // key events
399  FXMAPFUNC(SEL_KEYPRESS, 0, GNEApplicationWindow::onKeyPress),
400  FXMAPFUNC(SEL_KEYRELEASE, 0, GNEApplicationWindow::onKeyRelease),
401  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ESC, GNEApplicationWindow::onCmdAbort),
402  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_DEL, GNEApplicationWindow::onCmdDel),
403  FXMAPFUNC(SEL_COMMAND, MID_HOTKEY_ENTER, GNEApplicationWindow::onCmdEnter),
405  // threads events
408  // edge template functions
412  // languages
431  // tools
434  // other
435  FXMAPFUNC(SEL_CLIPBOARD_REQUEST, 0, GNEApplicationWindow::onClipboardRequest),
442 };
443 
444 // Object implementation
445 FXIMPLEMENT(GNEApplicationWindow, FXMainWindow, GNEApplicationWindowMap, ARRAYNUMBER(GNEApplicationWindowMap))
446 
447 
448 // ===========================================================================
449 // GNEApplicationWindow method definitions
450 // ===========================================================================
451 
452 GNEApplicationWindow::GNEApplicationWindow(FXApp* a, const std::string& configPattern) :
453  GUIMainWindow(a),
454  myUndoList(new GNEUndoList(this)),
455  myConfigPattern(configPattern),
456  myToolbarsGrip(this),
457  myMenuBarFile(this),
458  myFileMenuCommands(this),
459  myModesMenuCommands(this),
460  myEditMenuCommands(this),
461  myLockMenuCommands(this),
462  myProcessingMenuCommands(this),
463  myLocateMenuCommands(this),
464  myToolsMenuCommands(this),
465  myWindowsMenuCommands(this),
466  myHelpMenuCommands(this),
467  mySupermodeCommands(this),
468  myTitlePrefix("netedit " VERSION_STRING) {
469  // init icons
471  // init Textures
473  // init cursors
475  // create undoList dialog (after initCursors)
476  myUndoListDialog = new GNEUndoListDialog(this);
477  a->setTooltipTime(1000000000);
478  a->setTooltipPause(1000000000);
479  // set SUMO Options descriptions
480  mySumoOptions.setApplicationDescription(TL("A microscopic, multi-modal traffic simulation."));
481  mySumoOptions.setApplicationName("sumo", "Eclipse SUMO sumo Version " VERSION_STRING);
482  // set default netedit options
483  GNELoadThread::fillOptions(myOriginalNeteditOptions);
484  GNELoadThread::setDefaultOptions(myOriginalNeteditOptions);
485  // parse options
486  TemplateHandler::parseTemplate(mySumoOptions, sumoTemplate);
487  TemplateHandler::parseTemplate(myOriginalSumoOptions, sumoTemplate);
488  TemplateHandler::parseTemplate(myNetgenerateOptions, netgenerateTemplate);
489  TemplateHandler::parseTemplate(myOriginalNetgenerateOptions, netgenerateTemplate);
490 }
491 
492 void
494  // do this not twice
495  if (myHadDependentBuild) {
496  // do not translate debug messages
497  WRITE_ERROR("DEBUG: GNEApplicationWindow::dependentBuild called twice");
498  return;
499  }
500  myHadDependentBuild = true;
501  setTarget(this);
502  setSelector(MID_WINDOW);
503  // build toolbar menu
505  // build the thread - io
508  // build the status bar
509  myStatusbar = new FXStatusBar(this, GUIDesignStatusBar);
510  // build geo coordinates label
511  auto requireRecomputingFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
512  myRequireRecomputingButton = new MFXButtonTooltip(requireRecomputingFrame, myStaticTooltipMenu,
513  TL("Recomputing"), nullptr, this, MID_GNE_RECOMPUTINGNEEDED, GUIDesignButtonStatusBarFixed);
514  myRequireRecomputingButton->setHelpText(TL("Recomputing is needed"));
515  // build geo coordinates label
516  myGeoFrame = new FXHorizontalFrame(myStatusbar, GUIDesignHorizontalFrameStatusBar);
517  myGeoCoordinate = new FXLabel(myGeoFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
518  myGeoCoordinate->setHelpText(TL("Original coordinate (before coordinate transformation in netconvert)"));
519  // build cartesian coordinates label
521  myCartesianCoordinate = new FXLabel(myCartesianFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
522  myCartesianCoordinate->setHelpText(TL("Network coordinate"));
523  // build test coordinates label (only if gui-testing is enabled)
525  myTestCoordinate = new FXLabel(myTestFrame, TL("N/A"), nullptr, GUIDesignLabelStatusBar);
526  myTestCoordinate->setHelpText(TL("Test coordinate"));
527  myTestCoordinate->setTextColor(FXRGB(255, 0, 0));
528  myTestFrame->hide();
529  // make the window a mdi-window
530  myMainSplitter = new FXSplitter(this, GUIDesignSplitter | SPLITTER_VERTICAL | SPLITTER_REVERSED);
531  myMDIClient = new FXMDIClient(myMainSplitter, GUIDesignSplitterMDI);
532  myMDIMenu = new FXMDIMenu(this, myMDIClient);
533  // build the message window
535  myMainSplitter->setSplit(1, 65);
536  // fill menu and tool bar
537  fillMenuBar();
538  // build additional threads
540  // set the status bar
541  setStatusBarText(TL("Ready."));
542  // set the caption
543  setTitle(myTitlePrefix);
544  // set Netedit ICON
547  // build netedit Accelerators (hotkeys)
548  GUIShortcutsSubSys::buildAccelerators(getAccelTable(), this, false);
549 }
550 
551 
552 void
554  // set windows size and position
556  // set current folder
557  gCurrentFolder = getApp()->reg().readStringEntry("SETTINGS", "basedir", "");
558  // Create main window
559  FXMainWindow::create();
560  // get text width
561  const auto textWidth = getApp()->getNormalFont()->getTextWidth("8", 1) * 22;
562  // adjust cartesian and geo frame
563  myCartesianFrame->setWidth(textWidth);
564  myGeoFrame->setWidth(textWidth);
565  // fill online maps
566  if (myOnlineMaps.empty()) {
567  myOnlineMaps["GeoHack"] = "https://geohack.toolforge.org/geohack.php?params=%lat;%lon_scale:1000";
568  myOnlineMaps["Google Maps"] = "https://www.google.com/maps?ll=%lat,%lon&t=h&z=18";
569  myOnlineMaps["OSM"] = "https://www.openstreetmap.org/?mlat=%lat&mlon=%lon&zoom=18&layers=M";
570  }
571  // show application windows
572  show(PLACEMENT_DEFAULT);
573  // check if maximice
574  if (!OptionsCont::getOptions().isSet("window-size")) {
575  if (getApp()->reg().readIntEntry("SETTINGS", "maximized", 0) == 1) {
576  maximize();
577  }
578  }
579 }
580 
581 
583  closeAllWindows();
584  // Close icons
586  // Close gifs (Textures)
589  // delete visuals
590  delete myGLVisual;
591  // must delete menus to avoid segfault on removing accelerators
592  // (http://www.fox-toolkit.net/faq#TOC-What-happens-when-the-application-s)
594  delete myFileMenuSumoConfig;
595  delete myFileMenuTLS;
596  delete myFileMenuEdgeTypes;
597  delete myFileMenuAdditionals;
600  delete myFileMenuDataElements;
603  delete myFileMenu;
604  delete myModesMenu;
605  delete myEditMenu;
606  delete myLockMenu;
607  delete myProcessingMenu;
608  delete myLocatorMenu;
609  delete myToolsMenu;
610  delete myToolsDetectorMenu;
611  delete myToolsDistrictMenu;
612  delete myToolsDRTMenu;
613  delete myToolsEmissionsMenu;
614  delete myToolsImportMenu;
616  delete myToolsImportGTFSMenu;
617  delete myToolsImportVissim;
618  delete myToolsImportVisum;
619  delete myToolsNetMenu;
620  delete myToolsRouteMenu;
621  delete myToolsOutputMenu;
622  delete myToolsShapes;
623  delete myToolsTLS;
624  delete myToolsTurnDefs;
626  delete myToolsXML;
627  delete myWindowMenu;
628  delete myHelpMenu;
629  delete myLanguageMenu;
630  // Delete load thread
631  delete myLoadThread;
632  // drop all events
633  while (!myEvents.empty()) {
634  // get the next event
635  GUIEvent* e = myEvents.top();
636  myEvents.pop();
637  delete e;
638  }
639  // delete undoList and dialog
640  delete myUndoList;
641  delete myUndoListDialog;
642 }
643 
644 
645 long
646 GNEApplicationWindow::onCmdQuit(FXObject*, FXSelector, void*) {
649  getApp()->reg().writeStringEntry("SETTINGS", "basedir", gCurrentFolder.text());
650  if (isMaximized()) {
651  getApp()->reg().writeIntEntry("SETTINGS", "maximized", 1);
652  } else {
653  getApp()->reg().writeIntEntry("SETTINGS", "maximized", 0);
654  }
655  getApp()->exit(0);
656  }
657  return 1;
658 }
659 
660 
661 long
662 GNEApplicationWindow::onCmdEditChosen(FXObject*, FXSelector, void*) {
663  GUIDialog_GLChosenEditor* chooser =
665  chooser->create();
666  chooser->show();
667  return 1;
668 }
669 
670 
671 long
672 GNEApplicationWindow::onCmdNewNetwork(FXObject*, FXSelector, void*) {
673  // check if close current simulation
674  if (onCmdClose(0, 0, 0) == 1) {
675  // create new network
677  }
678  return 1;
679 }
680 
681 
682 long
683 GNEApplicationWindow::onCmdOpenNetconvertConfig(FXObject*, FXSelector, void*) {
684  // get netconvert filename
685  const auto netconvertFile = GNEApplicationWindowHelper::openNetconvertFileDialog(this);
686  // continue depending of netconvertFile
687  if (!netconvertFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
688  // load configuration
689  loadConfiguration(netconvertFile);
690  }
691  return 1;
692 }
693 
694 
695 long
696 GNEApplicationWindow::onCmdOpenNetwork(FXObject*, FXSelector, void*) {
697  // get netconvert filename
698  const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, false);
699  // continue depending of netconvertFile
700  if (!networkFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
701  // load network
702  loadNetwork(networkFile);
703  }
704  return 0;
705 }
706 
707 
708 long
709 GNEApplicationWindow::onCmdOpenForeign(FXObject*, FXSelector, void*) {
710  // get netconvert filename
711  const auto OSMFile = GNEApplicationWindowHelper::openOSMFileDialog(this);
712  // continue depending of netconvertFile
713  if (!OSMFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
714  loadOSM(OSMFile);
715  }
716  return 1;
717 }
718 
719 
720 long
721 GNEApplicationWindow::onCmdOpenNeteditConfig(FXObject*, FXSelector, void*) {
722  auto& neteditOptions = OptionsCont::getOptions();
723  // get netconvert filename
724  const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, false);
725  // continue depending of netconvertFile
726  if (!neteditConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
727  // reset netedit options
728  myLoadThread->fillOptions(neteditOptions);
729  myLoadThread->setDefaultOptions(neteditOptions);
730  // set netedit configuration file to load
731  neteditOptions.resetWritable();
732  neteditOptions.set("configuration-file", neteditConfigFile);
733  // run load thread
735  // update view
736  update();
737  }
738  return 1;
739 }
740 
741 
742 long
743 GNEApplicationWindow::onCmdOpenSumoConfig(FXObject*, FXSelector, void*) {
744  auto& neteditOptions = OptionsCont::getOptions();
745  // get netconvert filename
746  const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, false);
747  // continue depending of netconvertFile
748  if (!sumoConfigFile.empty() && (onCmdClose(0, 0, 0) == 1)) {
749  // reset options
750  myLoadThread->fillOptions(neteditOptions);
751  myLoadThread->setDefaultOptions(neteditOptions);
752  // set sumo configuration file to load
753  neteditOptions.resetWritable();
754  neteditOptions.set("sumocfg-file", sumoConfigFile);
755  // run load thread
757  // update view
758  update();
759  }
760  return 1;
761 }
762 
763 
764 long
765 GNEApplicationWindow::onCmdReloadNeteditConfig(FXObject*, FXSelector, void*) {
766  // check if close current simulation
767  if (onCmdClose(0, 0, 0) == 1) {
768  auto& neteditOptions = OptionsCont::getOptions();
769  // get existent configuration file
770  const auto neteditConfigFile = neteditOptions.getString("configuration-file");
771  // reset options
772  myLoadThread->fillOptions(neteditOptions);
773  myLoadThread->setDefaultOptions(neteditOptions);
774  // set configuration file to load
775  neteditOptions.resetWritable();
776  neteditOptions.set("configuration-file", neteditConfigFile);
777  // run load thread
779  // update view
780  update();
781  }
782  return 1;
783 }
784 
785 
786 long
787 GNEApplicationWindow::onCmdReloadSumoConfig(FXObject*, FXSelector, void*) {
788  auto& neteditOptions = OptionsCont::getOptions();
789  // check if close current simulation
790  if (onCmdClose(0, 0, 0) == 1) {
791  const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
792  // reset options
793  myLoadThread->fillOptions(neteditOptions);
794  myLoadThread->setDefaultOptions(neteditOptions);
795  // set configuration file to load
796  neteditOptions.resetWritable();
797  neteditOptions.set("sumocfg-file", sumoConfigFile);
798  // run load thread
800  // update view
801  update();
802  }
803  return 1;
804 }
805 
806 
807 long
808 GNEApplicationWindow::onUpdReloadNeteditConfig(FXObject* sender, FXSelector, void*) {
809  // check if file exist
810  if (myViewNet && !OptionsCont::getOptions().getString("configuration-file").empty()) {
811  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
812  } else {
813  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
814  }
815 }
816 
817 
818 long
819 GNEApplicationWindow::onUpdReloadSumoConfig(FXObject* sender, FXSelector, void*) {
820  // check if file exist
821  if (myViewNet && !OptionsCont::getOptions().getString("sumocfg-file").empty()) {
822  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
823  } else {
824  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
825  }
826 }
827 
828 
829 long
830 GNEApplicationWindow::onCmdOpenTLSPrograms(FXObject*, FXSelector, void*) {
831  auto& neteditOptions = OptionsCont::getOptions();
832  // get netconvert filename
833  const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, false);
834  // continue depending of netconvertFile
835  if (!TLSFile.empty()) {
836  // set file to load
837  neteditOptions.resetWritable();
838  neteditOptions.set("tls-file", TLSFile);
839  // Run parser
840  myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + TLSFile + "'");
841  myNet->computeNetwork(this);
842  if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(TLSFile) == false) {
843  // Abort undo/redo
845  } else {
846  // commit undo/redo operation
847  myUndoList->end();
848  update();
849  }
850  } else {
851  // write debug information
852  WRITE_DEBUG("Cancel TLSProgram dialog");
853  }
854  return 1;
855 }
856 
857 
858 long
859 GNEApplicationWindow::onCmdReloadTLSPrograms(FXObject*, FXSelector, void*) {
860  // get option container
861  auto& neteditOptions = OptionsCont::getOptions();
862  // Run parser
863  myUndoList->begin(Supermode::NETWORK, GUIIcon::MODETLS, TL("loading TLS Programs from '") + neteditOptions.getString("tls-file") + "'");
864  myNet->computeNetwork(this);
865  if (myNet->getViewNet()->getViewParent()->getTLSEditorFrame()->parseTLSPrograms(neteditOptions.getString("tls-file")) == false) {
866  // Abort undo/redo
868  } else {
869  // commit undo/redo operation
870  myUndoList->end();
871  update();
872  }
873  return 1;
874 }
875 
876 
877 long
878 GNEApplicationWindow::onUpdReloadTLSPrograms(FXObject* sender, FXSelector, void*) {
879  // check if file exist
880  if (myViewNet && OptionsCont::getOptions().getString("tls-file").empty()) {
881  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
882  } else {
883  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
884  }
885 }
886 
887 
888 long
889 GNEApplicationWindow::onCmdOpenEdgeTypes(FXObject*, FXSelector, void*) {
890  auto& neteditOptions = OptionsCont::getOptions();
891  // get netconvert filename
892  const auto edgeTypeFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, false);
893  // continue depending of netconvertFile
894  if (!edgeTypeFile.empty()) {
895  // set file to load
896  neteditOptions.resetWritable();
897  neteditOptions.set("edgetypes-file", edgeTypeFile);
898  // declare type container
899  NBTypeCont typeContainerAux;
900  // declare type handler
901  NIXMLTypesHandler handler(typeContainerAux);
902  // load edge types
903  NITypeLoader::load(handler, {edgeTypeFile}, "types");
904  // write information
905  WRITE_MESSAGE(TL("Loaded edge types from '") + toString(typeContainerAux.size()) + "'");
906  // now create GNETypes based on typeContainerAux
908  // iterate over typeContainerAux
909  for (const auto& auxEdgeType : typeContainerAux) {
910  // create new edge type
911  GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
912  // add lane types
913  for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
914  edgeType->addLaneType(new GNELaneType(edgeType, laneType));
915  }
916  // add it using undoList
917  myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
918 
919  }
920  // end undo list
921  myViewNet->getUndoList()->end();
922  // refresh edge type selector
924  }
925  return 1;
926 }
927 
928 
929 long
930 GNEApplicationWindow::onCmdReloadEdgeTypes(FXObject*, FXSelector, void*) {
931  // declare type container
932  NBTypeCont typeContainerAux;
933  // declare type handler
934  NIXMLTypesHandler handler(typeContainerAux);
935  // load edge types
936  NITypeLoader::load(handler, {OptionsCont::getOptions().getString("edgetypes-file")}, "types");
937  // write information
938  WRITE_MESSAGE(TL("Reloaded edge types from '") + toString(typeContainerAux.size()) + ".");
939  // now create GNETypes based on typeContainerAux
941  // iterate over typeContainerAux
942  for (const auto& auxEdgeType : typeContainerAux) {
943  // create new edge type
944  GNEEdgeType* edgeType = new GNEEdgeType(myNet, auxEdgeType.first, auxEdgeType.second);
945  // add lane types
946  for (const auto& laneType : auxEdgeType.second->laneTypeDefinitions) {
947  edgeType->addLaneType(new GNELaneType(edgeType, laneType));
948  }
949  // add it using undoList
950  myViewNet->getUndoList()->add(new GNEChange_EdgeType(edgeType, true), true);
951 
952  }
953  // end undo list
954  myViewNet->getUndoList()->end();
955  // refresh edge type selector
957  return 0;
958 }
959 
960 
961 long
962 GNEApplicationWindow::onUpdReloadEdgeTypes(FXObject* sender, FXSelector, void*) {
963  // check if file exist
964  if (myViewNet && OptionsCont::getOptions().getString("edgetypes-file").empty()) {
965  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
966  } else {
967  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
968  }
969 }
970 
971 
972 long
973 GNEApplicationWindow::onCmdSmartReload(FXObject*, FXSelector, void*) {
974  auto& neteditOptions = OptionsCont::getOptions();
975  // check if close current file
976  if (onCmdClose(0, 0, 0) == 1) {
977  // store size, position and viewport
979  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
980  // set flag
981  myAmLoading = true;
982  // get files
983  const auto neteditConfig = neteditOptions.getString("configuration-file");
984  const auto sumoConfig = neteditOptions.getString("sumocfg-file");
985  const auto networkFile = neteditOptions.getString("net-file");
986  // fill (reset) all options
987  myLoadThread->fillOptions(neteditOptions);
988  // set default options defined in GNELoadThread::setDefaultOptions(...)
989  myLoadThread->setDefaultOptions(neteditOptions);
990  // set file to load
991  neteditOptions.resetWritable();
992  if (neteditConfig.size() > 0) {
993  neteditOptions.set("configuration-file", neteditConfig);
994  // set status bar
995  setStatusBarText(TL("Reloading netedit config file '") + neteditConfig + "'");
996  } else if (sumoConfig.size() > 0) {
997  neteditOptions.set("sumocfg-file", sumoConfig);
998  // set status bar
999  setStatusBarText(TL("Reloading sumo config file '") + sumoConfig + "'");
1000  } else if (networkFile.size() > 0) {
1001  neteditOptions.set("net-file", networkFile);
1002  // set status bar
1003  setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1004  } else {
1005  // nothing to load
1006  return 0;
1007  }
1008  // load network
1010  }
1011  return 1;
1012 }
1013 
1014 
1015 long
1016 GNEApplicationWindow::onUpdSmartReload(FXObject* sender, FXSelector, void*) {
1017  auto& neteditOptions = OptionsCont::getOptions();
1018  // declare strings
1019  FXString neteditConfig = TL("&Reload Netedit config");
1020  FXString sumoConfig = TL("&Reload Sumo config");
1021  FXString netFile = TL("&Reload Network");
1022  FXString reload = TL("&Reload");
1023  // check options
1024  if (myNet == nullptr) {
1025  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1026  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1027  } else if (neteditOptions.getString("configuration-file").size() > 0) {
1028  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1029  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &neteditConfig);
1030  } else if (neteditOptions.getString("sumocfg-file").size() > 0) {
1031  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1032  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &sumoConfig);
1033  } else if (neteditOptions.getString("net-file").size() > 0) {
1034  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1035  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &netFile);
1036  } else {
1037  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1038  sender->handle(this, FXSEL(SEL_COMMAND, ID_SETSTRINGVALUE), &reload);
1039  }
1040  return 1;
1041 }
1042 
1043 
1044 long
1045 GNEApplicationWindow::onCmdReloadNetwork(FXObject*, FXSelector, void*) {
1046  auto& neteditOptions = OptionsCont::getOptions();
1047  // check if close current file
1048  if (onCmdClose(0, 0, 0) == 1) {
1049  // store size, position and viewport
1051  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1052  // set flag
1053  myAmLoading = true;
1054  // get network
1055  const auto networkFile = neteditOptions.getString("net-file");
1056  // fill (reset) all options
1057  myLoadThread->fillOptions(neteditOptions);
1058  // set default options defined in GNELoadThread::setDefaultOptions(...)
1059  myLoadThread->setDefaultOptions(neteditOptions);
1060  // set file to load
1061  neteditOptions.resetWritable();
1062  neteditOptions.set("net-file", networkFile);
1063  // set status bar
1064  setStatusBarText(TL("Reloading network file '") + networkFile + "'");
1065  // loaad network
1067  }
1068  return 1;
1069 }
1070 
1071 
1072 long
1073 GNEApplicationWindow::onUpdReloadNetwork(FXObject* sender, FXSelector, void*) {
1074  auto& neteditOptions = OptionsCont::getOptions();
1075  if (myNet == nullptr) {
1076  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1077  sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1078  } else if ((neteditOptions.getString("net-file").size() > 0) &&
1079  ((neteditOptions.getString("configuration-file").size() > 0) || (neteditOptions.getString("sumocfg-file").size() > 0))) {
1080  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1081  sender->handle(this, FXSEL(SEL_COMMAND, ID_SHOW), nullptr);
1082  } else {
1083  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
1084  sender->handle(this, FXSEL(SEL_COMMAND, ID_HIDE), nullptr);
1085  }
1086  return 1;
1087 }
1088 
1089 
1090 long
1091 GNEApplicationWindow::onCmdOpenRecent(FXObject*, FXSelector, void* fileData) {
1092  // first check that current edited Net can be closed (und therefore the undo-list cleared, see #5753)
1093  if (myAmLoading) {
1094  myStatusbar->getStatusLine()->setText(TL("Already loading!"));
1095  } else if (onCmdClose(0, 0, 0) == 1) {
1096  // get filedata
1097  const std::string recentFile = ((const char*)fileData);
1098  // check if we're loading a network o a config
1099  if ((recentFile.find(".neteditcfg") != std::string::npos) || // neteditcfg deprecated
1100  (recentFile.find(".netecfg") != std::string::npos) ||
1101  (recentFile.find(".sumocfg") != std::string::npos) ||
1102  (recentFile.find(".netccfg") != std::string::npos)) {
1103  // load config
1104  loadConfiguration(recentFile);
1105  } else {
1106  // load network
1107  loadNetwork(recentFile);
1108  }
1109  }
1110  return 1;
1111 }
1112 
1113 
1114 long
1115 GNEApplicationWindow::onCmdClose(FXObject*, FXSelector, void*) {
1116  if (myViewNet == nullptr) {
1117  return 1;
1118  } else if (continueWithUnsavedChanges()) {
1119  closeAllWindows();
1120  // add a separator to the log
1122  // hide all menu commands
1126  // hide view options
1130  return 1;
1131  } else {
1132  return 0;
1133  }
1134 }
1135 
1136 
1137 long
1138 GNEApplicationWindow::onCmdLocate(FXObject*, FXSelector sel, void*) {
1139  if (myMDIClient->numChildren() > 0) {
1140  GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
1141  if (w != nullptr) {
1142  w->onCmdLocate(nullptr, sel, nullptr);
1143  }
1144  }
1145  return 1;
1146 }
1147 
1148 
1149 long
1150 GNEApplicationWindow::onCmdOpenPythonToolDialog(FXObject* obj, FXSelector, void*) {
1151  return myToolsMenuCommands.showTool(obj);
1152 }
1153 
1154 
1155 long
1156 GNEApplicationWindow::onCmdRunPythonTool(FXObject* obj, FXSelector, void*) {
1157  return myToolsMenuCommands.runToolDialog(obj);
1158 }
1159 
1160 
1161 long
1162 GNEApplicationWindow::onCmdPostProcessingPythonTool(FXObject* obj, FXSelector, void*) {
1163  return myToolsMenuCommands.postProcessing(obj);
1164 }
1165 
1166 
1167 long
1168 GNEApplicationWindow::onUpdPythonTool(FXObject*, FXSelector, void*) {
1169  // currently always enabled
1170  return 1;
1171 }
1172 
1173 
1174 long
1175 GNEApplicationWindow::onUpdOpen(FXObject* sender, FXSelector, void*) {
1176  sender->handle(this, myAmLoading ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
1177  return 1;
1178 }
1179 
1180 
1181 long
1182 GNEApplicationWindow::onCmdClearMsgWindow(FXObject*, FXSelector, void*) {
1184  return 1;
1185 }
1186 
1187 
1188 long
1190  // write warning if netedit is running in testing mode
1191  WRITE_DEBUG("Toggle load additionals in sumo-gui");
1192  return 1;
1193 }
1194 
1195 
1196 long
1197 GNEApplicationWindow::onCmdLoadDemandInSUMOGUI(FXObject*, FXSelector, void*) {
1198  // write warning if netedit is running in testing mode
1199  WRITE_DEBUG("Toggle load demand in sumo-gui");
1200  return 1;
1201 }
1202 
1203 
1204 long
1205 GNEApplicationWindow::onCmdAbout(FXObject*, FXSelector, void*) {
1206  // write warning if netedit is running in testing mode
1207  WRITE_DEBUG("Opening about dialog");
1208  // create and open about dialog
1209  GNEAbout* about = new GNEAbout(this);
1210  about->create();
1211  about->show(PLACEMENT_OWNER);
1212  // write warning if netedit is running in testing mode
1213  WRITE_DEBUG("Closed about dialog");
1214  return 1;
1215 }
1216 
1217 
1218 long GNEApplicationWindow::onClipboardRequest(FXObject*, FXSelector, void* ptr) {
1219  FXEvent* event = (FXEvent*)ptr;
1220  FXString string = GUIUserIO::clipped.c_str();
1221  setDNDData(FROM_CLIPBOARD, event->target, string);
1222  return 1;
1223 }
1224 
1225 
1226 long
1227 GNEApplicationWindow::onLoadThreadEvent(FXObject*, FXSelector, void*) {
1228  eventOccurred();
1229  return 1;
1230 }
1231 
1232 
1233 void
1235  while (!myEvents.empty()) {
1236  // get the next event
1237  GUIEvent* e = myEvents.top();
1238  myEvents.pop();
1239  // process
1240  switch (e->getOwnType()) {
1243  break;
1250  break;
1251  default:
1252  break;
1253  }
1254  delete e;
1255  }
1256 }
1257 
1258 
1259 void
1261  myAmLoading = false;
1262  GNEEvent_NetworkLoaded* ec = static_cast<GNEEvent_NetworkLoaded*>(e);
1263  // check whether the loading was successfull
1264  if (ec->net == nullptr) {
1265  // report failure
1266  setStatusBarText(TL("Loading of '") + ec->file + "' failed!");
1267  } else {
1268  // set new Net
1269  myNet = ec->net;
1270  // report success
1271  setStatusBarText(TL("'") + ec->file + TL("' loaded."));
1273  // build viewparent toolbar grips before creating view parent
1275  // initialise netedit View
1276  GNEViewParent* viewParent = new GNEViewParent(myMDIClient, myMDIMenu, "netedit VIEW", this, nullptr, myNet, myUndoList, nullptr, MDI_TRACKING, 10, 10, 300, 200);
1277  // create it maximized
1278  viewParent->maximize();
1279  // mark it as Active child
1280  myMDIClient->setActiveChild(viewParent);
1281  // cast pointer myViewNet
1282  myViewNet = dynamic_cast<GNEViewNet*>(viewParent->getView());
1283  // set settings in view
1284  if (viewParent->getView() && ec->settingsFile != "") {
1285  GUISettingsHandler settings(ec->settingsFile, true, true);
1286  settings.addSettings(viewParent->getView());
1287  viewParent->getView()->addDecals(settings.getDecals());
1288  settings.applyViewport(viewParent->getView());
1289  settings.setSnapshots(viewParent->getView());
1290  }
1291  // set network name on the caption
1292  setTitle(MFXUtils::getTitleText(myTitlePrefix, ec->file.c_str()));
1293  // force supermode network
1294  if (myViewNet) {
1296  }
1297  if (myViewNet && ec->viewportFromRegistry) {
1298  Position off;
1299  off.set(getApp()->reg().readRealEntry("viewport", "x"), getApp()->reg().readRealEntry("viewport", "y"), getApp()->reg().readRealEntry("viewport", "z"));
1300  Position p(off.x(), off.y(), 0);
1301  myViewNet->setViewportFromToRot(off, p, 0);
1302  }
1303  }
1305  // load elements
1308  loadDataElements();
1310  // load selection
1311  if (!OptionsCont::getOptions().isDefault("selection-file")) {
1313  }
1314  // after loading net shouldn't be saved
1315  if (myNet) {
1317  }
1318  // update app
1319  update();
1320  // restore focus
1321  setFocus();
1322 }
1323 
1324 
1325 void
1327  GUIEvent_Message* ec = static_cast<GUIEvent_Message*>(e);
1328  myMessageWindow->appendMsg(ec->getOwnType(), ec->getMsg());
1329 }
1330 
1331 // ---------------------------------------------------------------------------
1332 // private methods
1333 // ---------------------------------------------------------------------------
1334 
1335 void
1337  // build file menu
1338  myFileMenu = new FXMenuPane(this, LAYOUT_FIX_HEIGHT);
1340  myFileMenuNeteditConfig = new FXMenuPane(this);
1341  myFileMenuSumoConfig = new FXMenuPane(this);
1342  myFileMenuTLS = new FXMenuPane(this);
1343  myFileMenuEdgeTypes = new FXMenuPane(this);
1344  myFileMenuAdditionals = new FXMenuPane(this);
1345  myFileMenuDemandElements = new FXMenuPane(this);
1346  myFileMenuDataElements = new FXMenuPane(this);
1347  myFileMenuMeanDataElements = new FXMenuPane(this);
1348  myFileMenuRecentNetworks = new FXMenuPane(this);
1349  myFileMenuRecentConfigs = new FXMenuPane(this);
1353  // add separator for recent files
1354  new FXMenuSeparator(myFileMenu);
1355  // build recent files
1358  new FXMenuSeparator(myFileMenu);
1360  TL("&Quit"), "Ctrl+Q", TL("Quit the Application."),
1361  nullptr, this, MID_HOTKEY_CTRL_Q_CLOSE);
1362  // build modes menu
1363  myModesMenu = new FXMenuPane(this);
1365  myModesMenuTitle->setTarget(this);
1367  // build Supermode commands and hide it
1369  // add separator
1370  new FXSeparator(myModesMenu);
1371  // build modes menu commands
1373  // build edit menu
1374  myEditMenu = new FXMenuPane(this);
1376  // build edit menu commands
1378  // build separator
1379  new FXMenuSeparator(myEditMenu);
1380  // build view options
1384  // hide view options
1388  // build view menu commands
1390  // build separator
1391  new FXMenuSeparator(myEditMenu);
1392  // build front element menu commands
1394  // build separator
1395  new FXMenuSeparator(myEditMenu);
1396  // build open in sumo menu commands
1398  // build lock menu
1399  myLockMenu = new FXMenuPane(this);
1401  myLockMenuTitle->setTarget(this);
1403  // build lock menu commands
1405  // build processing menu (trigger netbuild computations)
1406  myProcessingMenu = new FXMenuPane(this);
1409  // build locate menu
1410  myLocatorMenu = new FXMenuPane(this);
1413  // build tools menu
1414  myToolsMenu = new FXMenuPane(this);
1415  myToolsDetectorMenu = new FXMenuPane(this);
1416  myToolsDistrictMenu = new FXMenuPane(this);
1417  myToolsDRTMenu = new FXMenuPane(this);
1418  myToolsEmissionsMenu = new FXMenuPane(this);
1419  myToolsImportMenu = new FXMenuPane(this);
1420  myToolsImportCityBrainMenu = new FXMenuPane(this);
1421  myToolsImportGTFSMenu = new FXMenuPane(this);
1422  myToolsImportVissim = new FXMenuPane(this);
1423  myToolsImportVisum = new FXMenuPane(this);
1424  myToolsNetMenu = new FXMenuPane(this);
1425  myToolsRouteMenu = new FXMenuPane(this);
1426  myToolsOutputMenu = new FXMenuPane(this);
1427  myToolsShapes = new FXMenuPane(this);
1428  myToolsTLS = new FXMenuPane(this);
1429  myToolsTurnDefs = new FXMenuPane(this);
1430  myToolsVisualizationMenu = new FXMenuPane(this);
1431  myToolsXML = new FXMenuPane(this);
1433  // build tools menu cascasde
1434  new FXMenuCascade(myToolsMenu, TL("Detectors"), GUIIconSubSys::getIcon(GUIIcon::E1), myToolsDetectorMenu);
1435  new FXMenuCascade(myToolsMenu, TL("Districts"), GUIIconSubSys::getIcon(GUIIcon::TAZ), myToolsDistrictMenu);
1437  //new FXMenuCascade(myToolsMenu, TL("Emissions"), GUIIconSubSys::getIcon(GUIIcon::TOOL_EMISSIONS), myToolsEmissionsMenu);
1446  //new FXMenuCascade(myToolsMenu, TL("Shapes"), GUIIconSubSys::getIcon(GUIIcon::MODESHAPE), myToolsShapes);
1447  new FXMenuCascade(myToolsMenu, TL("TLS"), GUIIconSubSys::getIcon(GUIIcon::MODETLS), myToolsTLS);
1448  new FXMenuCascade(myToolsMenu, TL("Turn-defs"), GUIIconSubSys::getIcon(GUIIcon::TOOL_TURNDEFS), myToolsTurnDefs);
1449  new FXMenuCascade(myToolsMenu, TL("Visualization"), GUIIconSubSys::getIcon(GUIIcon::COLORWHEEL), myToolsVisualizationMenu);
1450  new FXMenuCascade(myToolsMenu, TL("XML"), GUIIconSubSys::getIcon(GUIIcon::TOOL_XML), myToolsXML);
1451  // add separators between folders
1452  new FXMenuSeparator(myToolsMenu);
1453  new FXMenuSeparator(myToolsImportMenu);
1454  // create map with tool Menu panes and their associated folder
1460  myMenuPaneToolMaps["import/citybrain"] = myToolsImportCityBrainMenu;
1461  myMenuPaneToolMaps["import/gtfs"] = myToolsImportGTFSMenu;
1462  myMenuPaneToolMaps["import/vissim"] = myToolsImportVissim;
1463  myMenuPaneToolMaps["import/visum"] = myToolsImportVisum;
1467  myMenuPaneToolMaps["shapes"] = myToolsShapes;
1468  myMenuPaneToolMaps["tls"] = myToolsTLS;
1469  myMenuPaneToolMaps["turn-defs"] = myToolsTurnDefs;
1470  myMenuPaneToolMaps["visualization"] = myToolsVisualizationMenu;
1471  myMenuPaneToolMaps["xml"] = myToolsXML;
1472  // build tools
1474  // build windows menu
1475  myWindowMenu = new FXMenuPane(this);
1478  // build language menu
1480  // build help menu
1481  myHelpMenu = new FXMenuPane(this);
1484 }
1485 
1486 
1487 FXGLCanvas*
1489  // netedit uses only a single View, then return nullptr
1490  return nullptr;
1491 }
1492 
1493 
1494 SUMOTime
1496  return 0;
1497 }
1498 
1499 
1500 double
1502  return 1;
1503 }
1504 
1505 
1506 GNEUndoList*
1508  return myUndoList;
1509 }
1510 
1511 
1514  return myUndoListDialog;
1515 }
1516 
1517 
1518 GNEViewNet*
1520  return myViewNet;
1521 }
1522 
1523 
1526  return myToolbarsGrip;
1527 }
1528 
1529 
1530 void
1532  if (myViewNet && myViewNet->getNet()) {
1533  // show
1535  // set label depending of recomputing
1536  if (myNet->getAttributeCarriers()->getJunctions().empty() || myNet->isNetRecomputed()) {
1537  myRequireRecomputingButton->setText("");
1538  myRequireRecomputingButton->setTipText(TL("Network computed"));
1540  myRequireRecomputingButton->setBackColor(FXRGBA(240, 255, 205, 255));
1541  } else {
1542  myRequireRecomputingButton->setText(TL("Press F5"));
1543  myRequireRecomputingButton->setTipText(TL("Network requires recomputing"));
1545  myRequireRecomputingButton->setBackColor(FXRGBA(253, 255, 206, 255));
1546  }
1547  } else {
1548  // hide
1550  }
1551 }
1552 
1553 
1554 void
1556  // first check if net must be deleted
1557  if (myNet != nullptr) {
1558  delete myNet;
1559  myNet = nullptr;
1561  }
1562  // check if view has to be saved
1563  if (myViewNet) {
1565  // clear decals
1566  myViewNet->getDecals().clear();
1567  }
1568  // lock tracker
1569  myTrackerLock.lock();
1570  // remove trackers and other external windows
1571  while (!myGLWindows.empty()) {
1572  delete myGLWindows.front();
1573  }
1574  myViewNet = nullptr;
1575  for (FXMainWindow* const window : myTrackerWindows) {
1576  window->destroy();
1577  delete window;
1578  }
1579  myTrackerWindows.clear();
1580  // reset the caption
1581  setTitle(myTitlePrefix);
1582  // unlock tracker
1583  myTrackerLock.unlock();
1584  // remove coordinate information
1585  myGeoCoordinate->setText(TL("N/A"));
1586  myCartesianCoordinate->setText(TL("N/A"));
1587  myTestCoordinate->setText(TL("N/A"));
1588  myTestFrame->hide();
1590  // Reset textures
1592  // reset fonts
1594 }
1595 
1596 
1597 FXCursor*
1599  return getApp()->getDefaultCursor(DEF_ARROW_CURSOR);
1600 }
1601 
1602 
1603 void
1605  auto& neteditOptions = OptionsCont::getOptions();
1606  if (neteditOptions.getBool("new")) {
1607  createNewNetwork();
1608  } else {
1609  // set flag
1610  myAmLoading = true;
1611  // set status bar
1612  setStatusBarText(TL("Loading console arguments"));
1613  // load console arguments
1615  // add it into recent networks and configs
1616  if (neteditOptions.getString("net-file").size() > 0) {
1617  myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
1618  }
1619  if (neteditOptions.getString("configuration-file").size() > 0) {
1620  myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
1621  }
1622  }
1623 }
1624 
1625 
1626 void
1628  auto& neteditOptions = OptionsCont::getOptions();
1629  // save windows size and position
1631  // enable loading flag and disable reloading flag
1632  myAmLoading = true;
1633  // recenter view
1634  gSchemeStorage.saveViewport(0, 0, -1, 0);
1635  // fill (reset) all options
1636  GNELoadThread::fillOptions(neteditOptions);
1637  // set default options defined in GNELoadThread::setDefaultOptions(...)
1638  GNELoadThread::setDefaultOptions(neteditOptions);
1639  // update status bar
1640  setStatusBarText(TL("Creating new network."));
1641  // create new network
1643  // update window
1644  update();
1645 }
1646 
1647 
1648 void
1649 GNEApplicationWindow::loadNetwork(const std::string& networkFile) {
1650  if (networkFile.empty()) {
1651  WRITE_ERROR(TL("Trying to load an empty network"));
1652  } else {
1653  auto& neteditOptions = OptionsCont::getOptions();
1654  // store size, position and viewport
1656  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1657  // set flag
1658  myAmLoading = true;
1659  // fill (reset) all options
1660  myLoadThread->fillOptions(neteditOptions);
1661  // set default options defined in GNELoadThread::setDefaultOptions(...)
1662  myLoadThread->setDefaultOptions(neteditOptions);
1663  // set file to load
1664  neteditOptions.resetWritable();
1665  neteditOptions.set("net-file", networkFile);
1666  // set status bar
1667  setStatusBarText(TL("Loading network file '") + networkFile + "'");
1668  // load network
1670  // add it into recent nets
1671  myMenuBarFile.myRecentNetworks.appendFile(networkFile.c_str());
1672  }
1673 }
1674 
1675 
1676 void
1677 GNEApplicationWindow::loadConfiguration(const std::string& configurationFile) {
1678  if (configurationFile.empty()) {
1679  WRITE_ERROR(TL("Trying to load an empty configuration"));
1680  } else {
1681  auto& neteditOptions = OptionsCont::getOptions();
1682  // store size, position and viewport
1684  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1685  // set flag
1686  myAmLoading = true;
1687  // fill (reset) all options
1688  myLoadThread->fillOptions(neteditOptions);
1689  // set default options defined in GNELoadThread::setDefaultOptions(...)
1690  myLoadThread->setDefaultOptions(neteditOptions);
1691  // set file to load
1692  neteditOptions.resetWritable();
1693  neteditOptions.set("configuration-file", configurationFile);
1694  // set status bar
1695  setStatusBarText(TL("Loading configuration file '") + configurationFile + "'");
1696  // load config
1698  // add it into recent configs
1699  myMenuBarFile.myRecentConfigs.appendFile(configurationFile.c_str());
1700  }
1701 }
1702 
1703 
1704 void
1705 GNEApplicationWindow::loadOSM(const std::string& OSMFile) {
1706  auto& neteditOptions = OptionsCont::getOptions();
1707  // store size, position and viewport
1709  gSchemeStorage.saveViewport(0, 0, -1, 0); // recenter view
1710  // set flag
1711  myAmLoading = true;
1712  // fill (reset) all options
1713  myLoadThread->fillOptions(neteditOptions);
1714  // set default options defined in GNELoadThread::setDefaultOptions(...)
1715  myLoadThread->setDefaultOptions(neteditOptions);
1716  // recommended osm options
1717  // https://sumo.dlr.de/wiki/Networks/Import/OpenStreetMap#Recommended_NETCONVERT_Options
1718  neteditOptions.set("osm-files", OSMFile);
1719  neteditOptions.set("geometry.remove", "true");
1720  neteditOptions.set("ramps.guess", "true");
1721  neteditOptions.set("junctions.join", "true");
1722  neteditOptions.set("tls.guess-signals", "true");
1723  neteditOptions.set("tls.discard-simple", "true");
1724  // open wizard dialog
1725  if (GNEOptionsDialog::Options(this, GUIIcon::SUPERMODENETWORK, OptionsCont::getOptions(), myOriginalNeteditOptions, TL("Select Import Options")).first == TRUE) {
1726  NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
1727  // set file to load
1728  neteditOptions.resetWritable();
1729  neteditOptions.set("configuration-file", OSMFile);
1730  // set status bar
1731  setStatusBarText(TL("Loading OSM file '") + OSMFile + "'");
1732  // load config
1734  }
1735 }
1736 
1737 void
1738 GNEApplicationWindow::setStatusBarText(const std::string& statusBarText) {
1739  myStatusbar->getStatusLine()->setText(statusBarText.c_str());
1740  myStatusbar->getStatusLine()->setNormalText(statusBarText.c_str());
1741 }
1742 
1743 
1744 long
1746  // declare variable to save FXMessageBox outputs.
1747  FXuint answer = 0;
1748  // write warning if netedit is running in testing mode
1749  WRITE_DEBUG("Opening FXMessageBox 'Volatile Recomputing'");
1750  // open question dialog box
1751  answer = FXMessageBox::question(myNet->getViewNet()->getApp(), MBOX_YES_NO, TL("Recompute with volatile options"),
1752  TL("Changes produced in the net due a recomputing with volatile options cannot be undone. Continue?"));
1753  if (answer != 1) { //1:yes, 2:no, 4:esc
1754  // write warning if netedit is running in testing mode
1755  if (answer == 2) {
1756  WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'No'");
1757  } else if (answer == 4) {
1758  WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'ESC'");
1759  }
1760  // abort recompute with volatile options
1761  return 0;
1762  } else {
1763  // write warning if netedit is running in testing mode
1764  WRITE_DEBUG("Closed FXMessageBox 'Volatile Recomputing' with 'Yes'");
1765  // save all elements
1766  onCmdSaveAdditionals(nullptr, 0, nullptr);
1767  onCmdSaveDemandElements(nullptr, 0, nullptr);
1768  onCmdSaveDataElements(nullptr, 0, nullptr);
1769  onCmdSaveMeanDatas(nullptr, 0, nullptr);
1770  // compute with volatile options
1771  myNet->computeNetwork(this, true, true);
1772  updateControls();
1773  return 1;
1774  }
1775 }
1776 
1777 
1778 bool
1780  if (myConsoleOptionsLoaded) {
1781  myConsoleOptionsLoaded = false;
1782  return true;
1783  } else {
1784  return false;
1785  }
1786 }
1787 
1788 
1789 long
1790 GNEApplicationWindow::onCmdSetSuperMode(FXObject* sender, FXSelector sel, void* ptr) {
1791  // check that currently there is a View
1792  if (myViewNet) {
1793  myViewNet->onCmdSetSupermode(sender, sel, ptr);
1794  }
1795  return 1;
1796 }
1797 
1798 
1799 long
1800 GNEApplicationWindow::onCmdSetMode(FXObject* sender, FXSelector sel, void* ptr) {
1801  // check that currently there is a View
1802  if (myViewNet) {
1803  myViewNet->onCmdSetMode(sender, sel, ptr);
1804  }
1805  return 1;
1806 }
1807 
1808 
1809 long
1810 GNEApplicationWindow::onCmdLockElements(FXObject*, FXSelector, void*) {
1811  if (myViewNet) {
1813  }
1814  return 1;
1815 }
1816 
1817 
1818 long
1819 GNEApplicationWindow::onCmdLockAllElements(FXObject*, FXSelector, void*) {
1820  // lock all
1823  return 1;
1824 }
1825 
1826 
1827 long
1828 GNEApplicationWindow::onCmdUnlockAllElements(FXObject*, FXSelector, void*) {
1829  // unlock all
1832  return 1;
1833 }
1834 
1835 
1836 long
1837 GNEApplicationWindow::onCmdLockSelectElements(FXObject*, FXSelector, void*) {
1838  if (myViewNet) {
1839  myViewNet->update();
1840  }
1841  return 1;
1842 }
1843 
1844 
1845 long
1846 GNEApplicationWindow::onUpdLockMenuTitle(FXObject*, FXSelector, void*) {
1847  if (myViewNet) {
1849  // supermode network
1855  myLockMenuTitle->enable();
1856  } else {
1857  myLockMenuTitle->disable();
1858  }
1860  // supermode demand
1865  myLockMenuTitle->enable();
1866  } else {
1867  myLockMenuTitle->disable();
1868  }
1869  } else if (myViewNet->getEditModes().isCurrentSupermodeData()) {
1870  // supermode data
1874  myLockMenuTitle->enable();
1875  } else {
1876  myLockMenuTitle->disable();
1877  }
1878  } else {
1879  myLockMenuTitle->disable();
1880  }
1881  } else {
1882  myLockMenuTitle->disable();
1883  }
1884  return 1;
1885 }
1886 
1887 long
1888 GNEApplicationWindow::onCmdProcessButton(FXObject*, FXSelector sel, void*) {
1889  // first check if there is a view
1890  if (myViewNet) {
1891  // process depending of supermode
1893  // check what FXMenuCommand was called
1894  switch (FXSELID(sel)) {
1896  // show extra information for tests
1897  WRITE_DEBUG("Key F5 (Compute) pressed");
1898  myNet->computeNetwork(this, true, false);
1899  updateControls();
1900  break;
1902  // show extra information for tests
1903  WRITE_DEBUG("Keys Shift + F5 (Compute with volatile options) pressed");
1905  break;
1907  // show extra information for tests
1908  WRITE_DEBUG("Key F6 (Clean junction) pressed");
1910  break;
1912  // show extra information for tests
1913  WRITE_DEBUG("Key F7 (Join junctions) pressed");
1915  break;
1917  // show extra information for tests
1918  WRITE_DEBUG("Key F8 (Clean invalid crossings) pressed");
1920  break;
1921  default:
1922  break;
1923  }
1925  // check what FXMenuCommand was called
1926  switch (FXSELID(sel)) {
1928  // show extra information for tests
1929  WRITE_DEBUG("Key F5 (Compute) pressed");
1931  updateControls();
1932  break;
1934  // show extra information for tests
1935  WRITE_DEBUG("Key F6 (RemoveUnusedRoutes) pressed");
1937  break;
1939  // show extra information for tests
1940  WRITE_DEBUG("Key F7 (JoinRoutes) pressed");
1942  break;
1944  // show extra information for tests
1945  WRITE_DEBUG("Key F7 (AdjustPersonPlans) pressed");
1947  break;
1949  // show extra information for tests
1950  WRITE_DEBUG("Key F8 (CleanInvalidDemandElements) pressed");
1952  break;
1953  default:
1954  break;
1955  }
1956  }
1957  }
1958  // refresh to update undo-redo button
1959  myViewNet->getViewParent()->getGNEAppWindows()->forceRefresh();
1960  return 1;
1961 }
1962 
1963 
1964 long
1965 GNEApplicationWindow::onCmdNewWindow(FXObject*, FXSelector sel, void* /*ptr*/) {
1966  // get extra arguments
1967  std::string extraArg;
1968  if (sel == MID_GNE_POSTPROCESSINGNETGENERATE) {
1969  extraArg = " -s " + myNetgenerateOptions.getValueString("output-file");
1970  }
1971  FXRegistry reg("SUMO netedit", "netedit");
1972  std::string netedit = "netedit";
1973  const char* sumoPath = getenv("SUMO_HOME");
1974  if (sumoPath != nullptr) {
1975 #ifdef DEBUG
1976  std::string newPath = std::string(sumoPath) + "/bin/neteditD";
1977 #else
1978  std::string newPath = std::string(sumoPath) + "/bin/netedit";
1979 #endif
1980  if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
1981  netedit = "\"" + newPath + "\"";
1982  }
1983  }
1984  std::string cmd = netedit + extraArg;
1985  // start in background
1986 #ifndef WIN32
1987  cmd = cmd + " &";
1988 #else
1989  // see "help start" for the parameters
1990  cmd = "start /B \"\" " + cmd;
1991 #endif
1992  WRITE_MESSAGE(TL("Running ") + cmd + ".");
1993  // yay! fun with dangerous commands... Never use this over the internet
1995  return 1;
1996 }
1997 
1998 
1999 long
2000 GNEApplicationWindow::onCmdOpenSUMOGUI(FXObject* obj, FXSelector sel, void* ptr) {
2001  // get option container
2002  auto& neteditOptions = OptionsCont::getOptions();
2003  // input parameters
2004  std::string inputParameters;
2005  // if we have only a network, then load directly without creating a SumoConfig
2007  ((myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) && (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE))) {
2008  // force save network
2009  if (onCmdSaveNetwork(obj, sel, ptr) == 0) {
2010  // network wasn't saved, then stop
2011  return 0;
2012  }
2013  inputParameters = " --registry-viewport -n \"" + neteditOptions.getString("net-file") + "\"";
2014  // write info
2015  WRITE_MESSAGE(TL("Loading network '") + neteditOptions.getString("net-file") + TL("' in SUMO-GUI"));
2016  } else {
2017  // force save SumoConfig
2018  if (onCmdSaveSumoConfig(obj, sel, ptr) == 0) {
2019  // SumoConfig wasn't saved, then stop
2020  return 0;
2021  }
2022  inputParameters = " --registry-viewport -c \"" + neteditOptions.getString("sumocfg-file") + "\"";
2023  // write info
2024  WRITE_MESSAGE(TL("Loading sumo config '") + neteditOptions.getString("sumocfg-file") + TL("' in SUMO-GUI"));
2025  }
2026  // save current viewport in registry
2027  FXRegistry reg("SUMO GUI", "sumo-gui");
2028  reg.read();
2029  reg.writeRealEntry("viewport", "x", myViewNet->getChanger().getXPos());
2030  reg.writeRealEntry("viewport", "y", myViewNet->getChanger().getYPos());
2031  reg.writeRealEntry("viewport", "z", myViewNet->getChanger().getZPos());
2032  reg.write();
2033  // declare executable
2034  std::string sumoGuiExecutable = "sumo-gui";
2035  // if SUMO_HOME is defined, update executable
2036  const char* sumoHome = getenv("SUMO_HOME");
2037  if (sumoHome != nullptr) {
2038  std::string newPath = std::string(sumoHome) + "/bin/sumo-gui";
2039  if (FileHelpers::isReadable(newPath) || FileHelpers::isReadable(newPath + ".exe")) {
2040  sumoGuiExecutable = "\"" + newPath + "\"";
2041  }
2042  }
2043  // declare command
2044  std::string cmd = sumoGuiExecutable + inputParameters;
2045  // start in background
2046 #ifndef WIN32
2047  cmd = cmd + " &";
2048 #else
2049  // see "help start" for the parameters
2050  cmd = "start /B \"\" " + cmd;
2051 #endif
2052  WRITE_MESSAGE(TL("Running ") + cmd + ".");
2053  // yay! fun with dangerous commands... Never use this over the internet
2055  return 1;
2056 }
2057 
2058 
2059 long
2060 GNEApplicationWindow::onCmdAbort(FXObject*, FXSelector, void*) {
2061  // check that view exists
2062  if (myViewNet) {
2063  // show extra information for tests
2064  WRITE_DEBUG("Key ESC (abort) pressed");
2065  // first check if we're selecting a subset of edges in TAZ Frame
2067  // show extra information for tests
2068  WRITE_DEBUG("Cleaning current selected edges");
2069  // clear current selection
2071  } else if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2072  // check if stop select parent
2074  // show extra information for tests
2075  WRITE_DEBUG("Stop select new parent");
2076  // and stop select paretn
2078  } else {
2079  // show extra information for tests
2080  WRITE_DEBUG("Cleaning inspected elements");
2081  // clear inspected elements
2083  }
2084  } else {
2085  // abort current operation
2087  }
2088  }
2089  return 1;
2090 }
2091 
2092 
2093 long
2094 GNEApplicationWindow::onCmdDel(FXObject*, FXSelector, void*) {
2095  // check that view exists
2096  if (myViewNet) {
2097  // show extra information for tests
2098  WRITE_DEBUG("Key DEL (delete) pressed");
2099  myViewNet->hotkeyDel();
2100  }
2101  return 1;
2102 }
2103 
2104 
2105 long
2106 GNEApplicationWindow::onCmdEnter(FXObject*, FXSelector, void*) {
2107  // check that view exists
2108  if (myViewNet) {
2109  // show extra information for tests
2110  WRITE_DEBUG("Key ENTER pressed");
2112  }
2113  return 1;
2114 }
2115 
2116 
2117 long
2118 GNEApplicationWindow::onCmdBackspace(FXObject*, FXSelector, void*) {
2119  // check that view exists
2120  if (myViewNet) {
2121  // show extra information for tests
2122  WRITE_DEBUG("Key BACKSPACE pressed");
2124  }
2125  return 1;
2126 }
2127 
2128 
2129 long
2130 GNEApplicationWindow::onCmdFocusFrame(FXObject*, FXSelector, void*) {
2131  // check that view exists
2132  if (myViewNet) {
2134  }
2135  return 1;
2136 }
2137 
2138 
2139 long
2141  // check that view exists
2142  if (myViewNet) {
2144  }
2145  return 1;
2146 }
2147 
2148 
2149 long
2150 GNEApplicationWindow::onCmdToggleTimeFormat(FXObject*, FXSelector, void*) {
2151  // check that view exists
2152  if (myViewNet) {
2154  // refresh flow frames
2155  if (myViewNet->getViewParent()->getVehicleFrame()->shown()) {
2157  }
2158  if (myViewNet->getViewParent()->getPersonFrame()->shown()) {
2160  }
2161  if (myViewNet->getViewParent()->getContainerFrame()->shown()) {
2163  }
2164  // refresh inspector frame
2165  if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2167  }
2168  }
2169  return 1;
2170 }
2171 
2172 
2173 long
2174 GNEApplicationWindow::onUpdToggleTimeFormat(FXObject*, FXSelector, void*) {
2175  // check that view exists
2176  if (myViewNet) {
2178  }
2179  return 1;
2180 }
2181 
2182 long
2183 GNEApplicationWindow::onUpdRequireViewNet(FXObject* sender, FXSelector, void*) {
2184  // enable or disable sender element depending of viewNet
2185  return sender->handle(this, myViewNet ? FXSEL(SEL_COMMAND, ID_ENABLE) : FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2186 }
2187 
2188 
2189 long
2190 GNEApplicationWindow::onUpdRequireRecomputing(FXObject*, FXSelector, void*) {
2192  return 1;
2193 }
2194 
2195 
2196 long
2197 GNEApplicationWindow::onCmdRunNetgenerate(FXObject*, FXSelector, void*) {
2199 }
2200 
2201 
2202 long
2203 GNEApplicationWindow::onCmdPostprocessingNetgenerate(FXObject* obj, FXSelector, void* ptr) {
2205 }
2206 
2207 
2208 long
2209 GNEApplicationWindow::onCmdEditViewport(FXObject*, FXSelector, void*) {
2210  // check that view exists
2211  if (myViewNet) {
2213  }
2214  return 1;
2215 }
2216 
2217 
2218 long
2219 GNEApplicationWindow::onCmdEditViewScheme(FXObject*, FXSelector, void*) {
2220  // check that view exists
2221  if (myViewNet) {
2223  }
2224  return 1;
2225 }
2226 
2227 
2228 long
2229 GNEApplicationWindow::onCmdToggleGrid(FXObject* sender, FXSelector sel, void* ptr) {
2230  // check that view exists
2231  if (myViewNet) {
2232  // show debug info
2234  // show extra information for tests
2235  WRITE_DEBUG("Disabled grid through Ctrl+g hotkey");
2236  } else {
2237  // show extra information for tests
2238  WRITE_DEBUG("Enabled grid through Ctrl+g hotkey");
2239  }
2240  // Call manually toggle grid function
2241  myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2242  }
2243  return 1;
2244 }
2245 
2246 
2247 long
2248 GNEApplicationWindow::onCmdToggleDrawJunctionShape(FXObject* sender, FXSelector sel, void* ptr) {
2249  // check that view exists
2250  if (myViewNet) {
2251  // show debug info
2253  // show extra information for tests
2254  WRITE_DEBUG("Disabled draw junction shape through Ctrl+j hotkey");
2255  } else {
2256  // show extra information for tests
2257  WRITE_DEBUG("Enabled draw junction shape through Ctrl+j hotkey");
2258  }
2259  // Call manually toggle junction shape function
2260  myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2261  }
2262  return 1;
2263 }
2264 
2265 
2266 long
2267 GNEApplicationWindow::onCmdSetFrontElement(FXObject*, FXSelector, void*) {
2268  if (myViewNet) {
2269  if (myViewNet->getViewParent()->getInspectorFrame()->shown()) {
2270  // get inspected AC
2271  GNEAttributeCarrier* inspectedAC = (myViewNet->getInspectedAttributeCarriers().size() == 1) ? myViewNet->getInspectedAttributeCarriers().front() : nullptr;
2272  // set or clear front attribute
2273  if (myViewNet->getFrontAttributeCarrier() == inspectedAC) {
2275  } else {
2276  myViewNet->setFrontAttributeCarrier(inspectedAC);
2277  }
2279  } else {
2281  }
2282  update();
2283  }
2284  return 1;
2285 }
2286 
2287 
2288 long
2289 GNEApplicationWindow::onCmdToggleEditOptions(FXObject* sender, FXSelector sel, void* /* ptr */) {
2290  // first check that we have a ViewNet
2291  if (myViewNet) {
2292  // first check what selector was called
2293  int numericalKeyPressed = sel - FXSEL(SEL_COMMAND, MID_HOTKEY_ALT_0_TOGGLEEDITOPTION) - 1;
2294  // check that numericalKeyPressed is valid
2295  if ((numericalKeyPressed < 0) || (numericalKeyPressed > 10)) {
2296  return 1;
2297  }
2298  // declare a vector in which save visible menu commands
2299  std::vector<MFXCheckableButton*> visibleMenuCommands;
2300  // get common, network and demand visible menu commands
2304  // now check that numericalKeyPressed isn't greater than visible view options
2305  if (numericalKeyPressed >= (int)visibleMenuCommands.size()) {
2306  return 1;
2307  }
2308  // toggle edit options
2310  visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2311  return 1;
2313  visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2314  return 1;
2316  visibleMenuCommands.at(numericalKeyPressed), numericalKeyPressed, sender, sel)) {
2317  return 1;
2318  }
2319  }
2320  return 1;
2321 }
2322 
2323 
2324 long
2325 GNEApplicationWindow::onCmdHelp(FXObject*, FXSelector, void*) {
2326  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/netedit.html");
2327  return 1;
2328 }
2329 
2330 
2331 long
2332 GNEApplicationWindow::onCmdChangelog(FXObject*, FXSelector, void*) {
2333  // update in every version
2334  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/ChangeLog.html");
2335  return 1;
2336 }
2337 
2338 
2339 long
2340 GNEApplicationWindow::onCmdHotkeys(FXObject*, FXSelector, void*) {
2341  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Netedit/shortcuts.html");
2342  return 1;
2343 }
2344 
2345 
2346 long
2349  return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", true);
2350  } else {
2351  return getApp()->reg().writeBoolEntry("NETEDIT", "RecomputeData", false);
2352  }
2353 }
2354 
2355 
2356 long
2357 GNEApplicationWindow::onCmdTutorial(FXObject*, FXSelector, void*) {
2358  MFXLinkLabel::fxexecute("https://sumo.dlr.de/docs/Tutorials/index.html");
2359  return 1;
2360 }
2361 
2362 
2363 long
2364 GNEApplicationWindow::onCmdFeedback(FXObject*, FXSelector, void*) {
2365  // write warning if netedit is running in testing mode
2366  WRITE_DEBUG("Opening feedback dialog");
2367  // create and open feedback dialog
2368  GUIDialog_Feedback* feedback = new GUIDialog_Feedback(this);
2369  feedback->create();
2370  feedback->show(PLACEMENT_OWNER);
2371  // write warning if netedit is running in testing mode
2372  WRITE_DEBUG("Closed feedback dialog");
2373  return 1;
2374 }
2375 
2376 
2377 long
2378 GNEApplicationWindow::onCmdOpenOptionsDialog(FXObject*, FXSelector, void*) {
2379  auto& neteditOptions = OptionsCont::getOptions();
2380  const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::OPTIONS, neteditOptions, myOriginalNeteditOptions, TL("Netedit options"));
2381  if (dialog.first == TRUE) {
2382  NIFrame::checkOptions(neteditOptions); // needed to set projection parameters
2383  NBFrame::checkOptions(neteditOptions);
2384  NWFrame::checkOptions(neteditOptions);
2385  SystemFrame::checkOptions(neteditOptions); // needed to set precision
2386  // check if mar netedit config as unsaved
2387  if (dialog.second && myNet) {
2389  }
2390  }
2391  return 1;
2392 }
2393 
2394 
2395 long
2397  const auto dialog = GNEOptionsDialog::Options(this, GUIIcon::SUMO_MINI, mySumoOptions, myOriginalSumoOptions, TL("Sumo options"));
2398  // check if mark sumoConfig as unsaved
2399  if ((dialog.first == TRUE) && dialog.second && myNet) {
2401  }
2402  return 1;
2403 }
2404 
2405 
2406 long
2409 }
2410 
2411 
2412 long
2415 }
2416 
2417 
2418 long
2419 GNEApplicationWindow::onCmdUndo(FXObject*, FXSelector, void*) {
2420  WRITE_DEBUG("Keys Ctrl+Z (Undo) pressed");
2421  // Check conditions
2422  if (myViewNet == nullptr) {
2423  return 0;
2424  } else if (!myEditMenuCommands.undoLastChange->isEnabled()) {
2425  return 0;
2426  } else {
2427  // check supermode (currently ignore supermode data)
2430  // abort if user doesn't press "yes"
2432  return 0;
2433  }
2434  }
2435  myViewNet->getUndoList()->undo();
2436  // update current show frame after undo
2439  }
2440  // update manually undo/redo menu commands (see #6005)
2443  // update toolbar undo-redo buttons
2445  return 1;
2446  }
2447 }
2448 
2449 
2450 long
2451 GNEApplicationWindow::onCmdRedo(FXObject*, FXSelector, void*) {
2452  WRITE_DEBUG("Keys Ctrl+Y (Redo) pressed");
2453  // Check conditions
2454  if (myViewNet == nullptr) {
2455  return 0;
2456  } else if (!myEditMenuCommands.redoLastChange->isEnabled()) {
2457  return 0;
2458  } else {
2459  // check supermode (currently ignore supermode data)
2462  // abort if user doesn't press "yes"
2464  return 0;
2465  }
2466  }
2467  myViewNet->getUndoList()->redo();
2468  // update current show frame after redo
2471  }
2472  // update manually undo/redo menu commands (see #6005)
2475  // update toolbar undo-redo buttons
2477  return 1;
2478  }
2479 }
2480 
2481 
2482 long
2483 GNEApplicationWindow::onCmdOpenUndoListDialog(FXObject*, FXSelector, void*) {
2484  // avoid open two dialogs
2485  if (myUndoListDialog->shown()) {
2487  } else {
2489  }
2490  return 1;
2491 }
2492 
2493 
2494 long
2495 GNEApplicationWindow::onUpdOpenUndoListDialog(FXObject* sender, FXSelector, void*) {
2496  // check if net exist and there is something to undo/redo
2497  if (myNet && (myEditMenuCommands.undoLastChange->isEnabled() || myEditMenuCommands.redoLastChange->isEnabled())) {
2498  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2499  } else {
2500  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2501  if (myUndoListDialog->shown()) {
2503  }
2504  }
2505  return 1;
2506 }
2507 
2508 
2509 long
2510 GNEApplicationWindow::onCmdComputePathManager(FXObject*, FXSelector, void*) {
2511  // first check viewNet
2513  // update path calculator
2515  }
2516  return 1;
2517 }
2518 
2519 
2520 long
2521 GNEApplicationWindow::onCmdCut(FXObject*, FXSelector, void*) {
2522  WRITE_DEBUG("Key Ctrl+X (Cut) pressed");
2523  // Prepared for #6042
2524  return 1;
2525 }
2526 
2527 
2528 long
2529 GNEApplicationWindow::onCmdCopy(FXObject*, FXSelector, void*) {
2530  WRITE_DEBUG("Key Ctrl+C (Copy) pressed");
2531  // Prepared for #6042
2532  return 1;
2533 }
2534 
2535 
2536 long
2537 GNEApplicationWindow::onCmdPaste(FXObject*, FXSelector, void*) {
2538  WRITE_DEBUG("Key Ctrl+V (Paste) pressed");
2539  // Prepared for #6042
2540  return 1;
2541 }
2542 
2543 
2544 long
2545 GNEApplicationWindow::onCmdSetTemplate(FXObject*, FXSelector, void*) {
2546  WRITE_DEBUG("Key Ctrl+F1 (Set Template) pressed");
2547  // first check if myViewNet exist
2548  if (myViewNet) {
2549  // call set template in inspector frame
2551  }
2552  return 1;
2553 }
2554 
2555 
2556 long
2557 GNEApplicationWindow::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
2558  WRITE_DEBUG("Key Ctrl+F2 (Copy Template) pressed");
2559  // first check if myViewNet exist
2560  if (myViewNet) {
2561  // call copy template in inspector frame
2563  }
2564  return 1;
2565 }
2566 
2567 
2568 long
2569 GNEApplicationWindow::onCmdClearTemplate(FXObject*, FXSelector, void*) {
2570  WRITE_DEBUG("Key Ctrl+F3 (Clear Template) pressed");
2571  // first check if myViewNet exist
2572  if (myViewNet) {
2573  // call clear template in inspector frame
2575  }
2576  return 1;
2577 }
2578 
2579 
2580 long
2581 GNEApplicationWindow::onUpdNeedsNetwork(FXObject* sender, FXSelector, void*) {
2582  // check if net exist
2583  if (myNet) {
2585  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2586  } else {
2588  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2589  }
2590 }
2591 
2592 
2593 long
2594 GNEApplicationWindow::onUpdNeedsNetworkElement(FXObject* sender, FXSelector, void*) {
2595  // check if at least there is one edge in the network
2596  if (myNet && (myNet->getAttributeCarriers()->getEdges().size() > 0)) {
2597  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2598  } else {
2599  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2600  }
2601 }
2602 
2603 
2604 long
2605 GNEApplicationWindow::onUpdNeedsFrontElement(FXObject* sender, FXSelector, void*) {
2606  // check if net, viewnet and front attribute exist
2608  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2609  } else {
2610  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2611  }
2612 }
2613 
2614 
2615 long
2616 GNEApplicationWindow::onUpdSaveNetwork(FXObject* sender, FXSelector, void*) {
2617  if (myNet == nullptr) {
2618  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2619  } else if (myNet->getSavingStatus()->isNetworkSaved()) {
2620  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2621  } else {
2622  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2623  }
2624 }
2625 
2626 
2627 long
2628 GNEApplicationWindow::onUpdSaveAdditionals(FXObject* sender, FXSelector, void*) {
2629  if (myNet == nullptr) {
2630  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2632  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2633  } else {
2634  return sender->handle(this, myNet->getSavingStatus()->isAdditionalsSaved() ? FXSEL(SEL_COMMAND, ID_DISABLE) : FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2635  }
2636 }
2637 
2638 
2639 long
2640 GNEApplicationWindow::onUpdSaveAdditionalsAs(FXObject* sender, FXSelector, void*) {
2641  if (myNet == nullptr) {
2642  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2643  } else if (myNet->getAttributeCarriers()->getNumberOfAdditionals() == 0) {
2644  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2645  } else {
2646  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2647  }
2648 }
2649 
2650 
2651 long
2652 GNEApplicationWindow::onUpdSaveJuPedSimElementsAs(FXObject* sender, FXSelector, void*) {
2653  if (myNet == nullptr) {
2654  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2655  } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_WALKABLEAREA).size() > 0) {
2656  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2657  } else if (myNet->getAttributeCarriers()->getAdditionals().at(GNE_TAG_JPS_OBSTACLE).size() > 0) {
2658  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2659  } else {
2660  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2661  }
2662 }
2663 
2664 
2665 long
2666 GNEApplicationWindow::onUpdSaveDemandElements(FXObject* sender, FXSelector, void*) {
2667  if (myNet == nullptr) {
2668  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2669  } else if (myNet->getSavingStatus()->isDemandElementsSaved()) {
2670  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2671  } else {
2672  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2673  }
2674 
2675 }
2676 
2677 
2678 long
2679 GNEApplicationWindow::onUpdSaveDemandElementsAs(FXObject* sender, FXSelector, void*) {
2680  if (myNet == nullptr) {
2681  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2682  } else if (myNet->getAttributeCarriers()->getNumberOfDemandElements() == 0) {
2683  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2684  } else {
2685  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2686  }
2687 }
2688 
2689 
2690 long
2691 GNEApplicationWindow::onUpdSaveDataElements(FXObject* sender, FXSelector, void*) {
2692  if (myNet == nullptr) {
2693  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2694  } else if (myNet->getSavingStatus()->isDataElementsSaved()) {
2695  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2696  } else {
2697  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2698  }
2699 
2700 }
2701 
2702 
2703 long
2704 GNEApplicationWindow::onUpdSaveDataElementsAs(FXObject* sender, FXSelector, void*) {
2705  if (myNet == nullptr) {
2706  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2707  } else if (myNet->getAttributeCarriers()->getDataSets().size() == 0) {
2708  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2709  } else {
2710  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2711  }
2712 
2713 }
2714 
2715 
2716 long
2717 GNEApplicationWindow::onUpdSaveMeanDatas(FXObject* sender, FXSelector, void*) {
2718  if (myNet == nullptr) {
2719  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2720  } else if (myNet->getSavingStatus()->isMeanDatasSaved()) {
2721  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2722  } else {
2723  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2724  }
2725 }
2726 
2727 
2728 long
2729 GNEApplicationWindow::onUpdSaveMeanDatasAs(FXObject* sender, FXSelector, void*) {
2730  if (myNet == nullptr) {
2731  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2732  } else if (myNet->getAttributeCarriers()->getNumberOfMeanDatas() == 0) {
2733  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2734  } else {
2735  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2736  }
2737 
2738 }
2739 
2740 
2741 long
2742 GNEApplicationWindow::onUpdUndo(FXObject* sender, FXSelector sel, void* ptr) {
2743  return myUndoList->onUpdUndo(sender, sel, ptr);
2744 }
2745 
2746 
2747 long
2748 GNEApplicationWindow::onUpdRedo(FXObject* sender, FXSelector sel, void* ptr) {
2749  return myUndoList->onUpdRedo(sender, sel, ptr);
2750 }
2751 
2752 
2753 long
2754 GNEApplicationWindow::onUpdComputePathManager(FXObject* sender, FXSelector /*sel*/, void* /*ptr*/) {
2755  // first check viewNet
2756  if (myViewNet) {
2757  // check supermode network
2759  // disable
2760  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2762  // disable
2763  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2764  } else {
2765  // enable
2766  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
2767  }
2768  } else {
2769  // disable
2770  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
2771  }
2772 }
2773 
2774 
2775 long
2776 GNEApplicationWindow::onCmdToggleViewOption(FXObject* sender, FXSelector sel, void* ptr) {
2777  // check viewNet
2778  if (myViewNet) {
2779  // continue depending of selector
2780  switch (FXSELID(sel)) {
2781  // Network
2783  return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2785  return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2787  return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2789  return myViewNet->onCmdToggleShowDemandElementsNetwork(sender, sel, ptr);
2791  return myViewNet->onCmdToggleSelectEdges(sender, sel, ptr);
2793  return myViewNet->onCmdToggleShowConnections(sender, sel, ptr);
2795  return myViewNet->onCmdToggleHideConnections(sender, sel, ptr);
2797  return myViewNet->onCmdToggleShowAdditionalSubElements(sender, sel, ptr);
2799  return myViewNet->onCmdToggleShowTAZElements(sender, sel, ptr);
2801  return myViewNet->onCmdToggleExtendSelection(sender, sel, ptr);
2803  return myViewNet->onCmdToggleChangeAllPhases(sender, sel, ptr);
2805  return myViewNet->onCmdToggleWarnAboutMerge(sender, sel, ptr);
2807  return myViewNet->onCmdToggleShowJunctionBubbles(sender, sel, ptr);
2809  return myViewNet->onCmdToggleMoveElevation(sender, sel, ptr);
2811  return myViewNet->onCmdToggleChainEdges(sender, sel, ptr);
2813  return myViewNet->onCmdToggleAutoOppositeEdge(sender, sel, ptr);
2814  // Demand
2816  return myViewNet->onCmdToggleShowGrid(sender, sel, ptr);
2818  return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2820  return myViewNet->onCmdToggleDrawSpreadVehicles(sender, sel, ptr);
2822  return myViewNet->onCmdToggleHideNonInspecteDemandElements(sender, sel, ptr);
2824  return myViewNet->onCmdToggleHideShapes(sender, sel, ptr);
2826  return myViewNet->onCmdToggleShowTrips(sender, sel, ptr);
2828  return myViewNet->onCmdToggleShowAllPersonPlans(sender, sel, ptr);
2830  return myViewNet->onCmdToggleLockPerson(sender, sel, ptr);
2832  return myViewNet->onCmdToggleShowAllContainerPlans(sender, sel, ptr);
2834  return myViewNet->onCmdToggleLockContainer(sender, sel, ptr);
2836  return myViewNet->onCmdToggleShowOverlappedRoutes(sender, sel, ptr);
2837  // Data
2839  return myViewNet->onCmdToggleDrawJunctionShape(sender, sel, ptr);
2841  return myViewNet->onCmdToggleShowAdditionals(sender, sel, ptr);
2843  return myViewNet->onCmdToggleShowShapes(sender, sel, ptr);
2845  return myViewNet->onCmdToggleShowDemandElementsData(sender, sel, ptr);
2847  return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2849  return myViewNet->onCmdToggleTAZRelDrawing(sender, sel, ptr);
2851  return myViewNet->onCmdToggleTAZRelOnlyFrom(sender, sel, ptr);
2853  return myViewNet->onCmdToggleTAZRelOnlyTo(sender, sel, ptr);
2854  default:
2855  return 0;
2856  }
2857  } else {
2858  return 0;
2859  }
2860 }
2861 
2862 
2863 long
2864 GNEApplicationWindow::onUpdToggleViewOption(FXObject* sender, FXSelector sel, void* /*ptr*/) {
2865  // get menuCheck
2866  MFXMenuCheckIcon* menuCheck = dynamic_cast<MFXMenuCheckIcon*>(sender);
2867  // check viewNet
2868  if (myViewNet && menuCheck) {
2869  // continue depending of selector
2870  switch (FXSELID(sel)) {
2871  // Network
2874  menuCheck->setCheck(TRUE);
2875  } else {
2876  menuCheck->setCheck(FALSE);
2877  }
2878  break;
2881  menuCheck->setCheck(TRUE);
2882  } else {
2883  menuCheck->setCheck(FALSE);
2884  }
2885  break;
2888  menuCheck->setCheck(TRUE);
2889  } else {
2890  menuCheck->setCheck(FALSE);
2891  }
2892  break;
2895  menuCheck->setCheck(TRUE);
2896  } else {
2897  menuCheck->setCheck(FALSE);
2898  }
2899  break;
2902  menuCheck->setCheck(TRUE);
2903  } else {
2904  menuCheck->setCheck(FALSE);
2905  }
2906  break;
2909  menuCheck->setCheck(TRUE);
2910  } else {
2911  menuCheck->setCheck(FALSE);
2912  }
2913  break;
2916  menuCheck->setCheck(TRUE);
2917  } else {
2918  menuCheck->setCheck(FALSE);
2919  }
2920  break;
2923  menuCheck->setCheck(TRUE);
2924  } else {
2925  menuCheck->setCheck(FALSE);
2926  }
2927  break;
2930  menuCheck->setCheck(TRUE);
2931  } else {
2932  menuCheck->setCheck(FALSE);
2933  }
2934  break;
2937  menuCheck->setCheck(TRUE);
2938  } else {
2939  menuCheck->setCheck(FALSE);
2940  }
2941  break;
2944  menuCheck->setCheck(TRUE);
2945  } else {
2946  menuCheck->setCheck(FALSE);
2947  }
2948  break;
2951  menuCheck->setCheck(TRUE);
2952  } else {
2953  menuCheck->setCheck(FALSE);
2954  }
2955  break;
2958  menuCheck->setCheck(TRUE);
2959  } else {
2960  menuCheck->setCheck(FALSE);
2961  }
2962  break;
2965  menuCheck->setCheck(TRUE);
2966  } else {
2967  menuCheck->setCheck(FALSE);
2968  }
2969  break;
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;
2984  // Demand
2987  menuCheck->setCheck(TRUE);
2988  } else {
2989  menuCheck->setCheck(FALSE);
2990  }
2991  break;
2994  menuCheck->setCheck(TRUE);
2995  } else {
2996  menuCheck->setCheck(FALSE);
2997  }
2998  break;
3001  menuCheck->setCheck(TRUE);
3002  } else {
3003  menuCheck->setCheck(FALSE);
3004  }
3005  break;
3008  menuCheck->setCheck(TRUE);
3009  } else {
3010  menuCheck->setCheck(FALSE);
3011  }
3012  break;
3015  menuCheck->setCheck(TRUE);
3016  } else {
3017  menuCheck->setCheck(FALSE);
3018  }
3019  break;
3022  menuCheck->setCheck(TRUE);
3023  } else {
3024  menuCheck->setCheck(FALSE);
3025  }
3026  break;
3029  menuCheck->setCheck(TRUE);
3030  } else {
3031  menuCheck->setCheck(FALSE);
3032  }
3033  // special case for lock persons
3034  if (myViewNet->getDemandViewOptions().menuCheckLockPerson->isEnabled()) {
3035  menuCheck->enable();
3036  } else {
3037  menuCheck->disable();
3038  }
3039  break;
3042  menuCheck->setCheck(TRUE);
3043  } else {
3044  menuCheck->setCheck(FALSE);
3045  }
3046  break;
3049  menuCheck->setCheck(TRUE);
3050  } else {
3051  menuCheck->setCheck(FALSE);
3052  }
3053  // special case for lock containers
3055  menuCheck->enable();
3056  } else {
3057  menuCheck->disable();
3058  }
3059  break;
3062  menuCheck->setCheck(TRUE);
3063  } else {
3064  menuCheck->setCheck(FALSE);
3065  }
3066  break;
3069  menuCheck->setCheck(TRUE);
3070  } else {
3071  menuCheck->setCheck(FALSE);
3072  }
3073  break;
3074  // Data
3077  menuCheck->setCheck(TRUE);
3078  } else {
3079  menuCheck->setCheck(FALSE);
3080  }
3081  break;
3084  menuCheck->setCheck(TRUE);
3085  } else {
3086  menuCheck->setCheck(FALSE);
3087  }
3088  break;
3091  menuCheck->setCheck(TRUE);
3092  } else {
3093  menuCheck->setCheck(FALSE);
3094  }
3095  break;
3098  menuCheck->setCheck(TRUE);
3099  } else {
3100  menuCheck->setCheck(FALSE);
3101  }
3102  break;
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 
3120  menuCheck->setCheck(TRUE);
3121  } else {
3122  menuCheck->setCheck(FALSE);
3123  }
3124  break;
3127  menuCheck->setCheck(TRUE);
3128  } else {
3129  menuCheck->setCheck(FALSE);
3130  }
3131  break;
3132  default:
3133  break;
3134  }
3135  }
3136  return 0;
3137 }
3138 
3139 
3140 long
3141 GNEApplicationWindow::onCmdSaveNetwork(FXObject* sender, FXSelector sel, void* ptr) {
3142  auto& neteditOptions = OptionsCont::getOptions();
3143  // first check if we have to set the output filename
3144  if ((sel == MID_GNE_FORCESAVE) && neteditOptions.getString("net-file").empty()) {
3145  neteditOptions.set("net-file", *(static_cast<std::string*>(ptr)) + ".net.xml");
3146  }
3147  // function onCmdSaveNetworkAs must be executed if this is the first save
3148  if (neteditOptions.getString("net-file").empty()) {
3149  return onCmdSaveNetworkAs(sender, sel, ptr);
3150  } else {
3151  // always recompute before saving
3152  myNet->computeNetwork(this);
3153  // se net file in SUMO options
3155  mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
3156  // begin save network
3157  getApp()->beginWaitCursor();
3158  bool saved = false;
3159  try {
3160  // obtain invalid networkElements (currently only edges or crossings
3161  std::vector<GNENetworkElement*> invalidNetworkElements;
3162  // iterate over crossings and edges
3163  for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
3164  if (!edge.second->isNetworkElementValid()) {
3165  invalidNetworkElements.push_back(edge.second);
3166  }
3167  }
3168  for (const auto& crossing : myViewNet->getNet()->getAttributeCarriers()->getCrossings()) {
3169  if (!crossing.second->isNetworkElementValid()) {
3170  invalidNetworkElements.push_back(crossing.second);
3171  }
3172  }
3173  // if there are invalid network elements, open GNEFixNetworkElements
3174  if (invalidNetworkElements.size() > 0) {
3175  // 0 -> Canceled Saving, with or without selecting invalid network elements
3176  // 1 -> Invalid network elements fixed, friendlyPos enabled, or saved with invalid positions
3177  GNEFixNetworkElements fixNetworkElementsDialog(myViewNet, invalidNetworkElements);
3178  if (fixNetworkElementsDialog.execute() == 0) {
3179  // show debug information
3180  WRITE_DEBUG("network elements saving aborted");
3181  // stop
3182  return 1;
3183  } else {
3184  // Save network
3185  myNet->saveNetwork();
3186  saved = true;
3187  // show debug information
3188  WRITE_DEBUG("network elements saved after dialog");
3189  }
3190  } else {
3191  // Save network
3192  myNet->saveNetwork();
3193  saved = true;
3194  // show debug information
3195  WRITE_DEBUG("network elements saved");
3196  }
3197  } catch (IOError& e) {
3198  // write warning if netedit is running in testing mode
3199  WRITE_DEBUG("Opening FXMessageBox 'error saving network'");
3200  // open error message box
3201  FXMessageBox::error(this, MBOX_OK, TL("Saving Network failed!"), "%s", e.what());
3202  // write warning if netedit is running in testing mode
3203  WRITE_DEBUG("Closed FXMessageBox 'error saving network' with 'OK'");
3204  }
3205  if (saved) {
3206  // write info
3207  WRITE_MESSAGE(TL("Network saved in '") + neteditOptions.getString("net-file") + "'.");
3208  // After saving a net successfully, add it into Recent Nets list.
3209  myMenuBarFile.myRecentNetworks.appendFile(neteditOptions.getString("net-file").c_str());
3211  } else {
3213  WRITE_ERROR(TL("Could not save network in '") + neteditOptions.getString("net-file") + "'");
3214  }
3215  // end save network
3216  getApp()->endWaitCursor();
3217  // update view
3219  // set focus again in net
3220  myViewNet->setFocus();
3221  return 1;
3222  }
3223 }
3224 
3225 
3226 long
3227 GNEApplicationWindow::onCmdSaveNetworkAs(FXObject*, FXSelector, void*) {
3228  // get network file file
3229  const auto networkFile = GNEApplicationWindowHelper::openNetworkFileDialog(this, true);
3230  if (!networkFile.empty()) {
3231  // set ouput file in netedit configs
3232  auto& neteditOptions = OptionsCont::getOptions();
3233  neteditOptions.resetWritable();
3234  neteditOptions.set("net-file", networkFile);
3235  // update netedit title with the network name
3236  setTitle(MFXUtils::getTitleText(myTitlePrefix, networkFile.c_str()));
3237  // save network
3238  onCmdSaveNetwork(nullptr, 0, nullptr);
3239  }
3240  return 1;
3241 }
3242 
3243 
3244 long
3245 GNEApplicationWindow::onCmdSavePlainXMLAs(FXObject*, FXSelector, void*) {
3246  // get neteditConfig filename
3247  auto plainXMLFile = GNEApplicationWindowHelper::savePlainXMLFileDialog(this);
3248  // Remove extension
3249  if (!plainXMLFile.empty()) {
3250  // adjust file
3251  if (plainXMLFile.back() == '.') {
3252  plainXMLFile.pop_back();
3253  } else {
3254  plainXMLFile = StringUtils::replace(plainXMLFile, ".edg.xml", "");
3255  plainXMLFile = StringUtils::replace(plainXMLFile, ".nod.xml", "");
3256  plainXMLFile = StringUtils::replace(plainXMLFile, ".con.xml", "");
3257  plainXMLFile = StringUtils::replace(plainXMLFile, ".typ.xml", "");
3258  plainXMLFile = StringUtils::replace(plainXMLFile, ".tll.xml", "");
3259  plainXMLFile = StringUtils::replace(plainXMLFile, ".xml", "");
3260  }
3261  }
3262  // continue depending of file
3263  if (!plainXMLFile.empty()) {
3264  // start saving plain XML
3265  getApp()->beginWaitCursor();
3266  try {
3267  myNet->savePlain(plainXMLFile);
3268  // write info
3269  WRITE_MESSAGE(TL("Plain XML saved with prefix '") + plainXMLFile + "'");
3270  } catch (IOError& e) {
3271  // write warning if netedit is running in testing mode
3272  WRITE_DEBUG("Opening FXMessageBox 'Error saving plainXML'");
3273  // open message box
3274  FXMessageBox::error(this, MBOX_OK, TL("Saving plain xml failed!"), "%s", e.what());
3275  // write warning if netedit is running in testing mode
3276  WRITE_DEBUG("Closed FXMessageBox 'Error saving plainXML' with 'OK'");
3277  }
3278  // end saving plain XML
3279  getApp()->endWaitCursor();
3280 
3281  // restore focus
3282  setFocus();
3283  }
3284  return 1;
3285 }
3286 
3287 
3288 long
3290  // get neteditConfig filename
3291  const auto joinedJunctionsFile = GNEApplicationWindowHelper::saveJoinedJunctionsFileDialog(this);
3292  // continue depending of file
3293  if (joinedJunctionsFile.size() > 0) {
3294  getApp()->beginWaitCursor();
3295  try {
3296  myNet->saveJoined(joinedJunctionsFile);
3297  // write info
3298  WRITE_MESSAGE(TL("Joined junctions saved to '") + joinedJunctionsFile + "'");
3299  } catch (IOError& e) {
3300  // write warning if netedit is running in testing mode
3301  WRITE_DEBUG("Opening FXMessageBox 'error saving joined'");
3302  // opening error message
3303  FXMessageBox::error(this, MBOX_OK, TL("Saving joined junctions failed!"), "%s", e.what());
3304  // write warning if netedit is running in testing mode
3305  WRITE_DEBUG("Closed FXMessageBox 'error saving joined' with 'OK'");
3306  }
3307  getApp()->endWaitCursor();
3308 
3309  // restore focus
3310  setFocus();
3311  }
3312  return 1;
3313 }
3314 
3315 
3316 long
3317 GNEApplicationWindow::onCmdSaveNeteditConfig(FXObject*, FXSelector, void*) {
3318  // obtain netedit option container
3319  auto& neteditOptions = OptionsCont::getOptions();
3320  neteditOptions.resetWritable();
3321  // Check if configuration file was already set at start of netedit or with a previous save
3322  if (neteditOptions.getString("configuration-file").empty()) {
3323  return onCmdSaveNeteditConfigAs(nullptr, 0, nullptr);
3324  } else {
3325  // get config file
3326  const auto neteditConfigFile = neteditOptions.getString("configuration-file");
3327  // get file path
3328  const auto filePath = FileHelpers::getFilePath(neteditConfigFile);
3329  // get patter file
3330  auto patterFile = StringUtils::replace(neteditConfigFile, ".netecfg", "");
3331  // save all elements giving automatic names based on patter if their file isn't defined
3332  onCmdSaveNetwork(nullptr, MID_GNE_FORCESAVE, &patterFile);
3333  onCmdSaveAdditionals(nullptr, MID_GNE_FORCESAVE, &patterFile);
3334  onCmdSaveDemandElements(nullptr, MID_GNE_FORCESAVE, &patterFile);
3335  onCmdSaveDataElements(nullptr, MID_GNE_FORCESAVE, &patterFile);
3336  onCmdSaveMeanDatas(nullptr, MID_GNE_FORCESAVE, &patterFile);
3337  // configuration
3338  std::ofstream out(StringUtils::transcodeToLocal(neteditConfigFile));
3339  if (out.good()) {
3340  // write netedit config
3341  neteditOptions.writeConfiguration(out, true, false, false, filePath, true);
3342  // write info
3343  WRITE_MESSAGE(TL("Netedit configuration saved in '") + neteditConfigFile + "'");
3344  // config saved
3346  // After saving a config successfully, add it into recent configs
3347  myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("configuration-file").c_str());
3348  } else {
3349  WRITE_ERROR(TL("Could not save netedit configuration in '") + neteditConfigFile + "'");
3350  }
3351  out.close();
3352  return 1;
3353  }
3354 }
3355 
3356 
3357 long
3358 GNEApplicationWindow::onCmdSaveNeteditConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3359  auto& neteditOptions = OptionsCont::getOptions();
3360  // get neteditConfig filename
3361  const auto neteditConfigFile = GNEApplicationWindowHelper::openNeteditConfigFileDialog(this, true);
3362  // continue depending of file
3363  if (!neteditConfigFile.empty()) {
3364  neteditOptions.resetWritable();
3365  neteditOptions.set("configuration-file", neteditConfigFile);
3366  // continue saving netedit config
3367  return onCmdSaveNeteditConfig(sender, sel, ptr);
3368  } else {
3369  return 0;
3370  }
3371 }
3372 
3373 
3374 long
3375 GNEApplicationWindow::onUpdSaveNeteditConfig(FXObject* sender, FXSelector, void*) {
3376  // check if enable or disable save netedit config button
3377  if (myNet == nullptr) {
3378  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3379  } else if (OptionsCont::getOptions().getString("configuration-file").empty()) {
3380  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3381  } else if (!myNet->getSavingStatus()->isNeteditConfigSaved()) {
3382  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3383  } else {
3384  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3385  }
3386  // check if enable/disable save individual files
3387  if (myNet) {
3391  } else {
3393  }
3394  }
3395  return 1;
3396 }
3397 
3398 
3399 long
3400 GNEApplicationWindow::onCmdSaveSumoConfig(FXObject* sender, FXSelector sel, void* ptr) {
3401  // obtain netedit option container
3402  auto& neteditOptions = OptionsCont::getOptions();
3403  // reset containers
3404  neteditOptions.resetWritable();
3406  // Check if configuration file was already set at start of netedit or with a previous save
3407  if (neteditOptions.getString("sumocfg-file").empty()) {
3408  return onCmdSaveSumoConfigAs(sender, sel, ptr);
3409  } else {
3410  // check if ignore additionals and demand elements (only used open SUMO-GUI from netedit)
3411  const FXSelector openSUMO = FXSEL(SEL_COMMAND, MID_HOTKEY_CTRL_T_OPENNETEDIT_OPENSUMO);
3412  const bool ignoreAdditionals = (sel == openSUMO) ? (myEditMenuCommands.loadAdditionalsInSUMOGUI->getCheck() == FALSE) : false;
3413  const bool ignoreDemandElements = (sel == openSUMO) ? (myEditMenuCommands.loadDemandInSUMOGUI->getCheck() == FALSE) : false;
3414  // get SumoConfig file
3415  const auto sumoConfigFile = neteditOptions.getString("sumocfg-file");
3416  // get config file without extension
3417  auto patterFile = StringUtils::replace(sumoConfigFile, ".sumocfg", "");
3418  // save all elements giving automatic names based on patter in their file isn't defined
3419  onCmdSaveNetwork(nullptr, MID_GNE_FORCESAVE, &patterFile);
3420  onCmdSaveAdditionals(nullptr, MID_GNE_FORCESAVE, &patterFile);
3421  onCmdSaveDemandElements(nullptr, MID_GNE_FORCESAVE, &patterFile);
3422  onCmdSaveMeanDatas(nullptr, MID_GNE_FORCESAVE, &patterFile);
3423  // set input in sumo options
3424  setInputInSumoOptions(ignoreAdditionals, ignoreDemandElements);
3425  // if we have trips or flow over junctions, add option junction-taz
3428  mySumoOptions.set("junction-taz", "true");
3429  }
3430  std::ofstream out(StringUtils::transcodeToLocal(sumoConfigFile));
3431  if (out.good()) {
3432  // write SUMO config
3433  mySumoOptions.writeConfiguration(out, true, false, false, sumoConfigFile, true);
3434  // write info
3435  WRITE_MESSAGE(TL("SUMO configuration saved in '") + sumoConfigFile + "'");
3436  // if ignoreAdditionals or ignoreDemandElements is enabled, don't mark SumoConfig as saved
3437  if (!ignoreAdditionals && !ignoreDemandElements) {
3439  }
3440  // After saving a config successfully, add it into recent configs
3441  myMenuBarFile.myRecentConfigs.appendFile(neteditOptions.getString("sumocfg-file").c_str());
3442  } else {
3443  WRITE_MESSAGE(TL("Could not save SUMO configuration in '") + sumoConfigFile + "'");
3444  }
3445  out.close();
3446  return 1;
3447  }
3448 }
3449 
3450 
3451 long
3452 GNEApplicationWindow::onCmdSaveSumoConfigAs(FXObject* sender, FXSelector sel, void* ptr) {
3453  auto& neteditOptions = OptionsCont::getOptions();
3454  // get sumoConfig filename
3455  const auto sumoConfigFile = GNEApplicationWindowHelper::openSumoConfigFileDialog(this, true);
3456  // continue depending of file
3457  if (!sumoConfigFile.empty()) {
3458  // save file in netedit options
3459  neteditOptions.resetWritable();
3460  neteditOptions.set("sumocfg-file", sumoConfigFile);
3461  // continue saving SUMO Config
3462  return onCmdSaveSumoConfig(sender, sel, ptr);
3463  } else {
3464  return 0;
3465  }
3466 }
3467 
3468 
3469 long
3470 GNEApplicationWindow::onUpdSaveSumoConfig(FXObject* sender, FXSelector, void*) {
3471  if (myNet == nullptr) {
3472  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3473  } else if (OptionsCont::getOptions().getString("sumocfg-file").empty()) {
3474  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3475  } else if (!myNet->getSavingStatus()->isSumoConfigSaved()) {
3476  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3477  } else {
3478  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3479  }
3480 }
3481 
3482 
3483 long
3484 GNEApplicationWindow::onCmdSaveTLSPrograms(FXObject* obj, FXSelector sel, void* ptr) {
3485  // get option container
3486  auto& neteditOptions = OptionsCont::getOptions();
3487  // Check if TLS Programs file was already set at start of netedit or with a previous save
3488  if (neteditOptions.getString("tls-file").empty()) {
3489  return onCmdSaveTLSProgramsAs(obj, sel, ptr);
3490  } else {
3491  // Start saving TLS Programs
3492  getApp()->beginWaitCursor();
3493  try {
3494  myNet->computeNetwork(this, true); // GNEChange_TLS does not triggere GNENet:requireRecompute
3495  myNet->saveTLSPrograms(neteditOptions.getString("tls-file"));
3496  // write info
3497  WRITE_MESSAGE(TL("TLS Programs saved in '") + neteditOptions.getString("tls-file") + "'");
3498  } catch (IOError& e) {
3499  // write warning if netedit is running in testing mode
3500  WRITE_DEBUG("Opening FXMessageBox 'error saving TLS Programs'");
3501  // open error message box
3502  FXMessageBox::error(this, MBOX_OK, TL("Saving TLS Programs failed!"), "%s", e.what());
3503  // write warning if netedit is running in testing mode
3504  WRITE_DEBUG("Closed FXMessageBox 'error saving TLS Programs' with 'OK'");
3505  }
3507  getApp()->endWaitCursor();
3508  // restore focus
3509  setFocus();
3510  }
3511  return 1;
3512 }
3513 
3514 
3515 long
3516 GNEApplicationWindow::onUpdSaveTLSPrograms(FXObject* sender, FXSelector, void*) {
3517  if (myNet == nullptr) {
3518  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3519  } else {
3520  // check if there is at least one TLS
3521  for (const auto& junction : myNet->getAttributeCarriers()->getJunctions()) {
3522  if (junction.second->getNBNode()->getControllingTLS().size() > 0) {
3523  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3524  }
3525  }
3526  // no TLS, then disable
3527  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3528  }
3529 }
3530 
3531 
3532 long
3533 GNEApplicationWindow::onCmdSaveEdgeTypes(FXObject* obj, FXSelector sel, void* ptr) {
3534  // get option container
3535  auto& neteditOptions = OptionsCont::getOptions();
3536  // Check if edgeType file was already set at start of netedit or with a previous save
3537  if (neteditOptions.getString("edgetypes-file").empty()) {
3538  return onCmdSaveEdgeTypesAs(obj, sel, ptr);
3539  } else {
3540  // Start saving edgeTypes
3541  getApp()->beginWaitCursor();
3542  try {
3543  myNet->saveEdgeTypes(neteditOptions.getString("edgetypes-file"));
3544  // write info
3545  WRITE_MESSAGE(TL("EdgeType saved in '") + neteditOptions.getString("edgetypes-file") + "'");
3546  } catch (IOError& e) {
3547  // write warning if netedit is running in testing mode
3548  WRITE_DEBUG("Opening FXMessageBox 'error saving edgeTypes'");
3549  // open error message box
3550  FXMessageBox::error(this, MBOX_OK, TL("Saving edgeTypes failed!"), "%s", e.what());
3551  // write warning if netedit is running in testing mode
3552  WRITE_DEBUG("Closed FXMessageBox 'error saving edgeTypes' with 'OK'");
3553  }
3555  getApp()->endWaitCursor();
3556  // restore focus
3557  setFocus();
3558  }
3559  return 1;
3560 }
3561 
3562 
3563 long
3564 GNEApplicationWindow::onUpdSaveEdgeTypes(FXObject* sender, FXSelector, void*) {
3565  // check if net exist and there are edge types
3566  if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3567  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3568  } else {
3569  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3570  }
3571  return 1;
3572 }
3573 
3574 
3575 long
3576 GNEApplicationWindow::onCmdSaveTLSProgramsAs(FXObject*, FXSelector, void*) {
3577  // get option container
3578  auto& neteditOptions = OptionsCont::getOptions();
3579  // get TLS file
3580  const auto TLSFile = GNEApplicationWindowHelper::openTLSFileDialog(this, true);
3581  // check tat file is valid
3582  if (!TLSFile.empty()) {
3583  // change value of "tls-file"
3584  neteditOptions.resetWritable();
3585  neteditOptions.set("tls-file", TLSFile);
3586  // save TLS Programs
3587  return onCmdSaveTLSPrograms(nullptr, 0, nullptr);
3588  } else {
3589  return 1;
3590  }
3591 }
3592 
3593 
3594 long
3595 GNEApplicationWindow::onCmdSaveEdgeTypesAs(FXObject*, FXSelector, void*) {
3596  // get option container
3597  auto& neteditOptions = OptionsCont::getOptions();
3598  // get network file file
3599  const auto edgeTypesFile = GNEApplicationWindowHelper::openEdgeTypeFileDialog(this, true);
3600  // check tat file is valid
3601  if (!edgeTypesFile.empty()) {
3602  // change value of "edgetypes-file"
3603  neteditOptions.resetWritable();
3604  neteditOptions.set("edgetypes-file", edgeTypesFile);
3605  // save edgeTypes
3606  return onCmdSaveEdgeTypes(nullptr, 0, nullptr);
3607  } else {
3608  return 1;
3609  }
3610 }
3611 
3612 
3613 long
3614 GNEApplicationWindow::onUpdSaveEdgeTypesAs(FXObject* sender, FXSelector, void*) {
3615  // check if net exist and there are edge types
3616  if (myNet && (myNet->getAttributeCarriers()->getEdgeTypes().size() > 0)) {
3617  sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3618  } else {
3619  sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3620  }
3621  return 1;
3622 }
3623 
3624 
3625 long
3626 GNEApplicationWindow::onCmdOpenAdditionals(FXObject*, FXSelector, void*) {
3627  auto& neteditOptions = OptionsCont::getOptions();
3628  // get file
3629  const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, false);
3630  // check file
3631  if (!additionalFile.empty()) {
3632  // declare overwrite flag
3633  bool overwriteElements = false;
3634  // check if open question dialog box
3635  if (additionalFile == neteditOptions.getString("additional-files")) {
3636  // open overwrite dialog
3637  GNEOverwriteElementsDialog overwriteDialog(this, "additional");
3638  // continue depending of result
3639  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3640  // abort load
3641  return 0;
3642  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3643  // enable overwriteElements
3644  overwriteElements = true;
3645  }
3646  }
3647  // flag for save current saving status
3648  const auto previouslySaved = myNet->getSavingStatus()->isAdditionalsSaved();
3649  // disable validation for additionals
3650  XMLSubSys::setValidation("never", "auto", "auto");
3651  // Create additional handler
3652  GNEGeneralHandler generalHandler(myNet, additionalFile, true, overwriteElements);
3653  // begin undoList operation
3654  myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("load additionals from '") + additionalFile + "'");
3655  // Run parser
3656  if (!generalHandler.parse()) {
3657  // write error
3658  WRITE_ERROR(TL("Loading of additional file failed: ") + additionalFile);
3659  } else {
3660  // change value of "additional-files"
3661  neteditOptions.resetWritable();
3662  neteditOptions.set("additional-files", additionalFile);
3663  // write info
3664  WRITE_MESSAGE(TL("Loading of additional file successfully: ") + additionalFile);
3665  // enable save if there is errors loading additionals
3666  if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
3668  }
3669  }
3670  // end undoList operation
3671  myUndoList->end();
3672  // restore validation for additionals
3673  XMLSubSys::setValidation("auto", "auto", "auto");
3674  // update view
3675  update();
3676  }
3677  return 1;
3678 }
3679 
3680 
3681 long
3682 GNEApplicationWindow::onCmdReloadAdditionals(FXObject*, FXSelector, void*) {
3683  // get additionalFile
3684  const std::string additionalFile = OptionsCont::getOptions().getString("additional-files");
3685  // disable validation for additionals
3686  XMLSubSys::setValidation("never", "auto", "auto");
3687  // Create general handler
3688  GNEGeneralHandler generalHandler(myNet, additionalFile, true, true);
3689  // begin undoList operation
3690  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading additionals from '") + additionalFile + "'");
3691  // clear additionals
3693  // Run parser
3694  if (!generalHandler.parse()) {
3695  WRITE_ERROR(TL("Reloading of additional file failed: ") + additionalFile);
3696  }
3697  // end undoList operation
3698  myUndoList->end();
3699  // restore validation for additionals
3700  XMLSubSys::setValidation("auto", "auto", "auto");
3701  // update view
3702  update();
3703  return 1;
3704 }
3705 
3706 
3707 long
3708 GNEApplicationWindow::onUpdReloadAdditionals(FXObject* sender, FXSelector, void*) {
3709  // check if file exist
3710  if (myViewNet && OptionsCont::getOptions().getString("additional-files").empty()) {
3711  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3712  } else {
3713  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3714  }
3715 }
3716 
3717 
3718 long
3719 GNEApplicationWindow::onCmdSaveAdditionals(FXObject* sender, FXSelector sel, void* ptr) {
3720  // get option container
3721  auto& neteditOptions = OptionsCont::getOptions();
3722  // check if we have to set the output filename
3723  if ((sel == MID_GNE_FORCESAVE) && neteditOptions.getString("additional-files").empty()) {
3724  neteditOptions.set("additional-files", *(static_cast<std::string*>(ptr)) + ".add.xml");
3725  }
3727  // nothing to save
3728  return 1;
3729  } else if (neteditOptions.getString("additional-files").empty()) {
3730  // choose file to save
3731  return onCmdSaveAdditionalsAs(sender, sel, ptr);
3732  } else {
3733  // Start saving additionals
3734  getApp()->beginWaitCursor();
3735  try {
3736  // compute before saving (for detectors positions)
3737  myNet->computeNetwork(this);
3738  // save additionals
3740  // show info
3741  WRITE_MESSAGE(TL("Additionals saved in '") + neteditOptions.getString("additional-files") + "'");
3742  // end saving additionals
3743  getApp()->endWaitCursor();
3744  // restore focus
3745  setFocus();
3746  } catch (IOError& e) {
3747  // write warning if netedit is running in testing mode
3748  WRITE_DEBUG("Opening FXMessageBox 'error saving additionals'");
3749  // open error message box
3750  FXMessageBox::error(this, MBOX_OK, TL("Saving additionals failed!"), "%s", e.what());
3751  // write warning if netedit is running in testing mode
3752  WRITE_DEBUG("Closed FXMessageBox 'error saving additionals' with 'OK'");
3753  }
3754  getApp()->endWaitCursor();
3755  return 1;
3756  }
3757 }
3758 
3759 
3760 long
3761 GNEApplicationWindow::onCmdSaveAdditionalsAs(FXObject*, FXSelector, void*) {
3762  // get option container
3763  auto& neteditOptions = OptionsCont::getOptions();
3764  // declare current folder
3765  FXString currentFolder = gCurrentFolder;
3766  // set current folder
3767  if (neteditOptions.getString("configuration-file").size() > 0) {
3768  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3769  } else if (neteditOptions.getString("net-file").size() > 0) {
3770  currentFolder = getFolder(neteditOptions.getString("net-file"));
3771  }
3772  // get additional file
3773  const auto additionalFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3774  // check that file is valid
3775  if (!additionalFile.empty()) {
3776  // reset writtable flag
3777  neteditOptions.resetWritable();
3778  // change value of "additional-files"
3779  neteditOptions.set("additional-files", additionalFile);
3780  // enable save additionals
3782  // save additionals
3783  return onCmdSaveAdditionals(nullptr, 0, nullptr);
3784  } else {
3785  return 1;
3786  }
3787 }
3788 
3789 
3790 long
3792  // declare current folder
3793  FXString currentFolder = gCurrentFolder;
3794  // get juPedSim file
3795  const auto juPedSimFile = GNEApplicationWindowHelper::openAdditionalFileDialog(this, true);
3796  // check that file is valid
3797  if (!juPedSimFile.empty()) {
3798  try {
3799  // Start saving additionals
3800  getApp()->beginWaitCursor();
3801  // save additionals
3802  myNet->saveJuPedSimElements(juPedSimFile);
3803  // show info
3804  WRITE_MESSAGE(TL("JuPedSim elements saved in '") + juPedSimFile + "'");
3805  // end saving additionals
3806  getApp()->endWaitCursor();
3807  // restore focus
3808  setFocus();
3809  } catch (IOError& e) {
3810  // write warning if netedit is running in testing mode
3811  WRITE_DEBUG("Opening FXMessageBox 'error saving JuPedSim elements'");
3812  // open error message box
3813  FXMessageBox::error(this, MBOX_OK, TL("Saving JuPedSim elements failed!"), "%s", e.what());
3814  // write warning if netedit is running in testing mode
3815  WRITE_DEBUG("Closed FXMessageBox 'error saving JuPedSim elements' with 'OK'");
3816  }
3817  }
3818  return 1;
3819 }
3820 
3821 
3822 long
3823 GNEApplicationWindow::onCmdOpenDemandElements(FXObject*, FXSelector, void*) {
3824  // get option container
3825  auto& neteditOptions = OptionsCont::getOptions();
3826  // get file
3827  const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, false);
3828  // check file
3829  if (!routeFile.empty()) {
3830  // declare overwrite flag
3831  bool overwriteElements = false;
3832  // check if open question dialog box
3833  if (routeFile == neteditOptions.getString("route-files")) {
3834  // open overwrite dialog
3835  GNEOverwriteElementsDialog overwriteDialog(this, "route");
3836  // continue depending of result
3837  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
3838  // abort load
3839  return 0;
3840  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
3841  // enable overwriteElements
3842  overwriteElements = true;
3843  }
3844  }
3845  // save previous demand element status saving
3846  const auto previouslySaved = myNet->getSavingStatus()->isDemandElementsSaved();
3847  // disable validation for additionals
3848  XMLSubSys::setValidation("never", "auto", "auto");
3849  // Create generic handler
3850  GNEGeneralHandler handler(myNet, routeFile, true, overwriteElements);
3851  // begin undoList operation
3852  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + routeFile + "'");
3853  // Run parser for additionals
3854  if (!handler.parse()) {
3855  // write error
3856  WRITE_ERROR(TL("Loading of route file failed: ") + routeFile);
3857  } else {
3858  // change value of "route-files"
3859  neteditOptions.resetWritable();
3860  neteditOptions.set("route-files", routeFile);
3861  // show info
3862  WRITE_MESSAGE(TL("Loading of route file successfully: ") + routeFile);
3863  // enable demand elements if there is an error creating element
3864  if (previouslySaved && !handler.isErrorCreatingElement()) {
3866  }
3867  }
3868  // end undoList operation
3869  myUndoList->end();
3870  // restore validation
3871  XMLSubSys::setValidation("auto", "auto", "auto");
3872  // update view
3873  update();
3874  }
3875  return 1;
3876 }
3877 
3878 
3879 long
3881  // get file
3882  const std::string routeFile = OptionsCont::getOptions().getString("route-files");
3883  // disable validation for additionals
3884  XMLSubSys::setValidation("never", "auto", "auto");
3885  // Create handler
3886  GNEGeneralHandler handler(myNet, routeFile, true, true);
3887  // begin undoList operation
3888  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TLF("reloading demand elements from '%'", routeFile));
3889  // clear demand elements
3891  // Run parser for additionals
3892  if (!handler.parse()) {
3893  WRITE_ERROR(TL("Reloading of route file failed: ") + routeFile);
3894  }
3895  // end undoList operation and update view
3896  myUndoList->end();
3897  update();
3898  // restore validation for demand
3899  XMLSubSys::setValidation("auto", "auto", "auto");
3900  return 1;
3901 }
3902 
3903 
3904 long
3905 GNEApplicationWindow::onUpdReloadDemandElements(FXObject* sender, FXSelector, void*) {
3906  // check if file exist
3907  if (myViewNet && OptionsCont::getOptions().getString("route-files").empty()) {
3908  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
3909  } else {
3910  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
3911  }
3912 }
3913 
3914 
3915 long
3916 GNEApplicationWindow::onCmdSaveDemandElements(FXObject* sender, FXSelector sel, void* ptr) {
3917  // get option container
3918  auto& neteditOptions = OptionsCont::getOptions();
3919  // check if we have to set the output filename
3920  if ((sel == MID_GNE_FORCESAVE) && neteditOptions.getString("route-files").empty()) {
3921  neteditOptions.set("route-files", *(static_cast<std::string*>(ptr)) + ".rou.xml");
3922  }
3923  // check saving conditions
3925  return 1;
3926  } else if (neteditOptions.getString("route-files").empty()) {
3927  return onCmdSaveDemandElementsAs(sender, sel, ptr);
3928  } else {
3929  // Start saving demand elements
3930  getApp()->beginWaitCursor();
3931  try {
3932  // compute before saving
3933  myNet->computeNetwork(this);
3934  // save demand elements
3936  // show info
3937  WRITE_MESSAGE(TL("Demand elements saved in '") + neteditOptions.getString("route-files") + "'");
3938  // end saving demand elements
3939  getApp()->endWaitCursor();
3940  // restore focus
3941  setFocus();
3942  } catch (IOError& e) {
3943  // write warning if netedit is running in testing mode
3944  WRITE_DEBUG("Opening FXMessageBox 'error saving demand elements'");
3945  // open error message box
3946  FXMessageBox::error(this, MBOX_OK, TL("Saving demand elements failed!"), "%s", e.what());
3947  // write warning if netedit is running in testing mode
3948  WRITE_DEBUG("Closed FXMessageBox 'error saving demand elements' with 'OK'");
3949  }
3950  getApp()->endWaitCursor();
3951  return 1;
3952  }
3953 }
3954 
3955 
3956 long
3957 GNEApplicationWindow::onCmdSaveDemandElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
3958  // get option container
3959  auto& neteditOptions = OptionsCont::getOptions();
3960  // declare current folder
3961  FXString currentFolder = gCurrentFolder;
3962  // set current folder
3963  if (neteditOptions.getString("configuration-file").size() > 0) {
3964  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
3965  } else if (neteditOptions.getString("net-file").size() > 0) {
3966  currentFolder = getFolder(neteditOptions.getString("net-file"));
3967  }
3968  // get route file
3969  const auto routeFile = GNEApplicationWindowHelper::openRouteFileDialog(this, true);
3970  // check that file is correct
3971  if (!routeFile.empty()) {
3972  // reset writtable flag
3973  neteditOptions.resetWritable();
3974  // change value of "route-files"
3975  neteditOptions.set("route-files", routeFile);
3976  // requiere save demand elements
3978  // save demand elements
3979  return onCmdSaveDemandElements(sender, sel, ptr);
3980  } else {
3981  return 1;
3982  }
3983 }
3984 
3985 
3986 long
3987 GNEApplicationWindow::onCmdOpenDataElements(FXObject*, FXSelector, void*) {
3988  // get option container
3989  auto& neteditOptions = OptionsCont::getOptions();
3990  // get file
3991  const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, false);
3992  // check file
3993  if (!dataFile.empty()) {
3994  // declare overwrite flag
3995  bool overwriteElements = false;
3996  // check if open question dialog box
3997  if (dataFile == neteditOptions.getString("data-files")) {
3998  // open overwrite dialog
3999  GNEOverwriteElementsDialog overwriteDialog(this, "data");
4000  // continue depending of result
4001  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
4002  // abort load
4003  return 0;
4004  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
4005  // enable overwriteElements
4006  overwriteElements = true;
4007  }
4008  }
4009  // save previous demand element status saving
4010  const auto previouslySaved = myNet->getSavingStatus()->isDataElementsSaved();
4011  // disable update data
4013  // disable validation for data elements
4014  XMLSubSys::setValidation("never", "auto", "auto");
4015  // Create data handler
4016  GNEDataHandler dataHandler(myNet, dataFile, true, overwriteElements);
4017  // begin undoList operation
4018  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + dataFile + "'");
4019  // Run data parser
4020  if (!dataHandler.parse()) {
4021  // write error
4022  WRITE_ERROR(TL("Loading of data file failed: ") + dataFile);
4023  } else {
4024  // change value of "data-files"
4025  neteditOptions.resetWritable();
4026  neteditOptions.set("data-files", dataFile);
4027  // show info
4028  WRITE_MESSAGE(TL("Loading of data file successfully: ") + dataFile);
4029  // enable demand elements if there is an error creating element
4030  if (previouslySaved && !dataHandler.isErrorCreatingElement()) {
4032  }
4033  }
4034  // end undoList operation
4035  myUndoList->end();
4036  // enable update data
4038  // restore validation for data
4039  XMLSubSys::setValidation("auto", "auto", "auto");
4040  // update
4041  update();
4042  }
4043  return 1;
4044 }
4045 
4046 
4047 long
4048 GNEApplicationWindow::onCmdReloadDataElements(FXObject*, FXSelector, void*) {
4049  // get file
4050  const std::string dataFile = OptionsCont::getOptions().getString("data-files");
4051  // disable update data
4053  // disable validation for additionals
4054  XMLSubSys::setValidation("never", "auto", "auto");
4055  // Create additional handler
4056  GNEDataHandler dataHandler(myNet, dataFile, true, false);
4057  // begin undoList operation
4058  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("reloading data elements from '") + dataFile + "'");
4059  // clear data elements
4061  // Run data parser
4062  if (!dataHandler.parse()) {
4063  WRITE_ERROR(TL("Reloading of data file failed: ") + dataFile);
4064  }
4065  // restore validation for data
4066  XMLSubSys::setValidation("auto", "auto", "auto");
4067  // end undoList operation and update view
4068  myUndoList->end();
4069  // enable update data
4071  // update
4072  update();
4073  return 1;
4074 }
4075 
4076 
4077 long
4078 GNEApplicationWindow::onUpdReloadDataElements(FXObject* sender, FXSelector, void*) {
4079  // check if file exist
4080  if (myViewNet && OptionsCont::getOptions().getString("data-files").empty()) {
4081  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4082  } else {
4083  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4084  }
4085 }
4086 
4087 
4088 long
4089 GNEApplicationWindow::onCmdSaveDataElements(FXObject* sender, FXSelector sel, void* ptr) {
4090  // get option container
4091  auto& neteditOptions = OptionsCont::getOptions();
4092  // check if we have to set the output filename
4093  if ((sel == MID_GNE_FORCESAVE) && neteditOptions.getString("data-files").empty()) {
4094  neteditOptions.set("data-files", *(static_cast<std::string*>(ptr)) + ".dat.xml");
4095  }
4097  // nothing to save
4098  return 1;
4099  } else if (neteditOptions.getString("data-files").empty()) {
4100  return onCmdSaveDataElementsAs(sender, sel, ptr);
4101  } else {
4102  // Start saving data elements
4103  getApp()->beginWaitCursor();
4104  try {
4105  // save data elements
4107  // write einfo
4108  WRITE_MESSAGE(TL("Data elements saved in '") + neteditOptions.getString("data-files") + "'");
4109  } catch (IOError& e) {
4110  // write warning if netedit is running in testing mode
4111  WRITE_DEBUG("Opening FXMessageBox 'error saving data elements'");
4112  // open error message box
4113  FXMessageBox::error(this, MBOX_OK, TL("Saving data elements failed!"), "%s", e.what());
4114  // write warning if netedit is running in testing mode
4115  WRITE_DEBUG("Closed FXMessageBox 'error saving data elements' with 'OK'");
4116  }
4117  // end saving
4118  getApp()->endWaitCursor();
4119  // restore focus
4120  setFocus();
4121  return 1;
4122  }
4123 }
4124 
4125 
4126 long
4127 GNEApplicationWindow::onCmdSaveDataElementsAs(FXObject* sender, FXSelector sel, void* ptr) {
4128  // get option container
4129  auto& neteditOptions = OptionsCont::getOptions();
4130  // declare current folder
4131  FXString currentFolder = gCurrentFolder;
4132  // set current folder
4133  if (neteditOptions.getString("configuration-file").size() > 0) {
4134  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4135  } else if (neteditOptions.getString("net-file").size() > 0) {
4136  currentFolder = getFolder(neteditOptions.getString("net-file"));
4137  }
4138  // get data file
4139  const auto dataFile = GNEApplicationWindowHelper::openDataFileDialog(this, true);
4140  // check that file is correct
4141  if (!dataFile.empty()) {
4142  // reset writtable flag
4143  neteditOptions.resetWritable();
4144  // change value of "data-files"
4145  neteditOptions.set("data-files", dataFile);
4146  // mark data elements as unsaved
4148  // save data elements
4149  return onCmdSaveDataElements(sender, sel, ptr);
4150  } else {
4151  return 1;
4152  }
4153 }
4154 
4155 
4156 long
4157 GNEApplicationWindow::onCmdOpenMeanDatas(FXObject*, FXSelector, void*) {
4158  auto& neteditOptions = OptionsCont::getOptions();
4159  // get file
4160  const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, false);
4161  // check file
4162  if (!meanDataFile.empty()) {
4163  // declare overwrite flag
4164  bool overwriteElements = false;
4165  // check if open question dialog box
4166  if (meanDataFile == neteditOptions.getString("meandata-files")) {
4167  // open overwrite dialog
4168  GNEOverwriteElementsDialog overwriteDialog(this, "meanData");
4169  // continue depending of result
4170  if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::CANCEL) {
4171  // abort load
4172  return 0;
4173  } else if (overwriteDialog.getResult() == GNEOverwriteElementsDialog::Result::OVERWRITE) {
4174  // enable overwriteElements
4175  overwriteElements = true;
4176  }
4177  }
4178  // save previous demand element status saving
4179  const auto previouslySaved = myNet->getSavingStatus()->isMeanDatasSaved();
4180  // disable validation for meanDatas
4181  XMLSubSys::setValidation("never", "auto", "auto");
4182  // Create meanData handler
4183  GNEGeneralHandler generalHandler(myNet, meanDataFile, true, overwriteElements);
4184  // begin undoList operation
4185  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("load meanDatas from '") + meanDataFile + "'");
4186  // Run parser
4187  if (!generalHandler.parse()) {
4188  // write error
4189  WRITE_ERROR(TL("Loading of meandata file failed: ") + meanDataFile);
4190  } else {
4191  // change value of "meandata-files"
4192  neteditOptions.resetWritable();
4193  neteditOptions.set("meandata-files", meanDataFile);
4194  // show info
4195  WRITE_MESSAGE(TL("Loading of meandata file successfully: ") + meanDataFile);
4196  // enable demand elements if there is an error creating element
4197  if (previouslySaved && !generalHandler.isErrorCreatingElement()) {
4199  }
4200  }
4201  // end undoList operation
4202  myUndoList->end();
4203  // restore validation for meanDatas
4204  XMLSubSys::setValidation("auto", "auto", "auto");
4205  // update view
4206  update();
4207  }
4208  return 1;
4209 }
4210 
4211 
4212 long
4213 GNEApplicationWindow::onCmdReloadMeanDatas(FXObject*, FXSelector, void*) {
4214  // get file
4215  const std::string meanDataFile = OptionsCont::getOptions().getString("meandata-files");
4216  // disable validation for meanDatas
4217  XMLSubSys::setValidation("never", "auto", "auto");
4218  // Create general handler
4219  GNEGeneralHandler generalHandler(myNet, meanDataFile, true, true);
4220  // begin undoList operation
4221  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODENETWORK, TL("reloading meanDatas from '") + meanDataFile + "'");
4222  // clear meanDatas
4224  // Run parser
4225  if (!generalHandler.parse()) {
4226  WRITE_MESSAGE(TL("Loading of meandata file successfully: ") + meanDataFile);
4227  }
4228  // end undoList operation and update view
4229  myUndoList->end();
4230  update();
4231  // restore validation for meanDatas
4232  XMLSubSys::setValidation("auto", "auto", "auto");
4233  return 1;
4234 }
4235 
4236 
4237 long
4238 GNEApplicationWindow::onUpdReloadMeanDatas(FXObject* sender, FXSelector, void*) {
4239  // check if file exist
4240  if (myViewNet && OptionsCont::getOptions().getString("meandata-files").empty()) {
4241  return sender->handle(this, FXSEL(SEL_COMMAND, ID_DISABLE), nullptr);
4242  } else {
4243  return sender->handle(this, FXSEL(SEL_COMMAND, ID_ENABLE), nullptr);
4244  }
4245 }
4246 
4247 
4248 long
4249 GNEApplicationWindow::onCmdSaveMeanDatas(FXObject* sender, FXSelector sel, void* ptr) {
4250  // get option container
4251  auto& neteditOptions = OptionsCont::getOptions();
4252  // check saving conditions
4254  // nothing to save
4255  return 1;
4256  } else {
4257  // first check if we have to set the output filename
4258  if ((sel == MID_GNE_FORCESAVE) && neteditOptions.getString("meandata-files").empty()) {
4259  neteditOptions.set("meandata-files", *(static_cast<std::string*>(ptr)) + ".med.add.xml");
4260  }
4261  if (myNet->getSavingStatus()->isMeanDatasSaved() && (sel != MID_GNE_FORCESAVE)) {
4262  // nothing to save
4263  return 1;
4264  } else if (neteditOptions.getString("meandata-files").empty()) {
4265  return onCmdSaveMeanDatasAs(sender, sel, ptr);
4266  } else {
4267  // Start saving meanDatas
4268  getApp()->beginWaitCursor();
4269  try {
4270  // save mean datas
4271  myNet->saveMeanDatas();
4272  // write info
4273  WRITE_MESSAGE(TL("MeanDatas saved in '") + neteditOptions.getString("meandata-files") + "'");
4274  } catch (IOError& e) {
4275  // write warning if netedit is running in testing mode
4276  WRITE_DEBUG("Opening FXMessageBox 'error saving meanData'");
4277  // open error message box
4278  FXMessageBox::error(this, MBOX_OK, TL("Saving meanData failed!"), "%s", e.what());
4279  // write warning if netedit is running in testing mode
4280  WRITE_DEBUG("Closed FXMessageBox 'error saving meanDara' with 'OK'");
4281  }
4282  // end saving
4283  getApp()->endWaitCursor();
4284  // restore focus
4285  setFocus();
4286  return 1;
4287  }
4288  }
4289 }
4290 
4291 
4292 long
4293 GNEApplicationWindow::onCmdSaveMeanDatasAs(FXObject* sender, FXSelector sel, void* ptr) {
4294  // get option container
4295  auto& neteditOptions = OptionsCont::getOptions();
4296  // declare current folder
4297  FXString currentFolder = gCurrentFolder;
4298  // set current folder
4299  if (neteditOptions.getString("configuration-file").size() > 0) {
4300  currentFolder = getFolder(neteditOptions.getString("configuration-file"));
4301  } else if (neteditOptions.getString("net-file").size() > 0) {
4302  currentFolder = getFolder(neteditOptions.getString("net-file"));
4303  }
4304  // get meanData file
4305  const auto meanDataFile = GNEApplicationWindowHelper::openMeanDataDialog(this, true);
4306  // check that file is valid
4307  if (!meanDataFile.empty()) {
4308  // reset writtable flag
4309  neteditOptions.resetWritable();
4310  // change value of "meandata-files"
4311  neteditOptions.set("meandata-files", meanDataFile);
4312  // mark mean datas as unsaved
4314  // save meanDatas
4315  return onCmdSaveMeanDatas(sender, sel, ptr);
4316  } else {
4317  return 1;
4318  }
4319 }
4320 
4321 
4322 bool
4324  if (myNet && !myNet->getSavingStatus()->isNetworkSaved()) {
4325  // write warning if netedit is running in testing mode
4326  WRITE_DEBUG("Opening FXMessageBox 'Confirm close network'");
4327  // open question box
4328  const std::string header = TL("Confirm close Network");
4329  const std::string contentsA = TL("You have unsaved changes in the network.");
4330  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4331  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4332  // restore focus to view net
4333  myViewNet->setFocus();
4334  // if user close dialog box, check additionals and demand elements
4335  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4336  // write warning if netedit is running in testing mode
4337  WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'Quit'");
4342  // clear undo list
4343  clearUndoList();
4344  return true;
4345  } else {
4346  return false;
4347  }
4348  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4349  // save network
4350  onCmdSaveNetwork(nullptr, 0, nullptr);
4351  // check
4356  // clear undo list
4357  clearUndoList();
4358  return true;
4359  } else {
4360  return false;
4361  }
4362  } else {
4363  // write warning if netedit is running in testing mode
4364  if (answer == 2) {
4365  WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'No'");
4366  } else if (answer == 4) {
4367  WRITE_DEBUG("Closed FXMessageBox 'Confirm close network' with 'ESC'");
4368  }
4369  // return false to stop closing/reloading
4370  return false;
4371  }
4372  } else {
4377  // clear undo list
4378  clearUndoList();
4379  return true;
4380  } else {
4381  // return false to stop closing/reloading
4382  return false;
4383  }
4384  }
4385 }
4386 
4387 
4388 bool
4390  // Check if there are non saved additionals
4392  WRITE_DEBUG("Opening FXMessageBox 'Save additionals before close'");
4393  // open question box
4394  const std::string header = TL("Save additional elements before close");
4395  const std::string contentsA = TL("You have unsaved additional elements.");
4396  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4397  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4398  // restore focus to view net
4399  myViewNet->setFocus();
4400  // if answer was affirmative, but there was an error during saving additionals, return false to stop closing/reloading
4401  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4402  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'Quit'");
4403  // nothing to save, return true
4404  return true;
4405  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4406  // write warning if netedit is running in testing mode
4407  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'Yes'");
4408  if (onCmdSaveAdditionals(nullptr, 0, nullptr) == 1) {
4409  // additionals successfully saved
4410  return true;
4411  } else {
4412  // error saving additionals, abort saving
4413  return false;
4414  }
4415  } else {
4416  // write warning if netedit is running in testing mode
4417  if (answer == 2) {
4418  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'No'");
4419  } else if (answer == 4) {
4420  WRITE_DEBUG("Closed FXMessageBox 'Save additionals before close' with 'ESC'");
4421  }
4422  // abort saving
4423  return false;
4424  }
4425  } else {
4426  // nothing to save, return true
4427  return true;
4428  }
4429 }
4430 
4431 
4432 bool
4434  // Check if there are non saved demand elements
4436  WRITE_DEBUG("Opening FXMessageBox 'Save demand elements before close'");
4437  // open question box
4438  const std::string header = TL("Save demand elements before close");
4439  const std::string contentsA = TL("You have unsaved demand elements.");
4440  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4441  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4442  // restore focus to view net
4443  myViewNet->setFocus();
4444  // if answer was affirmative, but there was an error during saving demand elements, return false to stop closing/reloading
4445  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4446  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'Quit'");
4447  // nothing to save, return true
4448  return true;
4449  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4450  // write warning if netedit is running in testing mode
4451  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'Yes'");
4452  if (onCmdSaveDemandElements(nullptr, MID_GNE_FORCESAVE, nullptr) == 1) {
4453  // demand elements successfully saved
4454  return true;
4455  } else {
4456  // error saving demand elements, abort saving
4457  return false;
4458  }
4459  } else {
4460  // write warning if netedit is running in testing mode
4461  if (answer == 2) {
4462  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'No'");
4463  } else if (answer == 4) {
4464  WRITE_DEBUG("Closed FXMessageBox 'Save demand elements before close' with 'ESC'");
4465  }
4466  // abort saving
4467  return false;
4468  }
4469  } else {
4470  // nothing to save, return true
4471  return true;
4472  }
4473 }
4474 
4475 
4476 bool
4478  // Check if there are non saved data elements
4480  WRITE_DEBUG("Opening FXMessageBox 'Save data elements before close'");
4481  // open question box
4482  const std::string header = TL("Save data elements before close");
4483  const std::string contentsA = TL("You have unsaved data elements.");
4484  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4485  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4486  // restore focus to view net
4487  myViewNet->setFocus();
4488  // if answer was affirmative, but there was an error during saving data elements, return false to stop closing/reloading
4489  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4490  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'Quit'");
4491  // nothing to save, return true
4492  return true;
4493  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4494  // write warning if netedit is running in testing mode
4495  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'Yes'");
4496  if (onCmdSaveDataElements(nullptr, MID_GNE_FORCESAVE, nullptr) == 1) {
4497  // data elements successfully saved
4498  return true;
4499  } else {
4500  // error saving data elements, abort saving
4501  return false;
4502  }
4503  } else {
4504  // write warning if netedit is running in testing mode
4505  if (answer == 2) {
4506  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'No'");
4507  } else if (answer == 4) {
4508  WRITE_DEBUG("Closed FXMessageBox 'Save data elements before close' with 'ESC'");
4509  }
4510  // abort saving
4511  return false;
4512  }
4513  } else {
4514  // nothing to save, return true
4515  return true;
4516  }
4517 }
4518 
4519 
4520 bool
4522  // Check if there are non saved data elements
4523  if (myNet && !myNet->getSavingStatus()->isMeanDatasSaved()) {
4524  WRITE_DEBUG("Opening FXMessageBox 'Save meanData elements before close'");
4525  // open question box
4526  const std::string header = TL("Save meanData elements before close");
4527  const std::string contentsA = TL("You have unsaved meanData elements.");
4528  const std::string contentsB = TL("Do you wish to close and discard all changes?");
4529  const auto answer = GUISaveDialog::question(getApp(), header.c_str(), "%s", (contentsA + "\n" + contentsB).c_str());
4530  // restore focus to view net
4531  myViewNet->setFocus();
4532  // if answer was affirmative, but there was an error during saving meanData elements, return false to stop closing/reloading
4533  if (answer == GUISaveDialog::CLICKED_DISCARD) {
4534  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'Quit'");
4535  // nothing to save, return true
4536  return true;
4537  } else if (answer == GUISaveDialog::CLICKED_SAVE) {
4538  // write warning if netedit is running in testing mode
4539  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'Yes'");
4540  if (onCmdSaveMeanDatas(nullptr, MID_GNE_FORCESAVE, nullptr) == 1) {
4541  // meanData elements successfully saved
4542  return true;
4543  } else {
4544  // error saving meanData elements, abort saving
4545  return false;
4546  }
4547  } else {
4548  // write warning if netedit is running in testing mode
4549  if (answer == 2) {
4550  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'No'");
4551  } else if (answer == 4) {
4552  WRITE_DEBUG("Closed FXMessageBox 'Save meanData elements before close' with 'ESC'");
4553  }
4554  // abort saving
4555  return false;
4556  }
4557  } else {
4558  // nothing to save, return true
4559  return true;
4560  }
4561 }
4562 
4563 
4564 void
4565 GNEApplicationWindow::setInputInSumoOptions(const bool ignoreAdditionals, const bool ignoreRoutes) {
4566  // obtain netedit option container
4567  auto& neteditOptions = OptionsCont::getOptions();
4569  // set network
4570  mySumoOptions.set("net-file", neteditOptions.getString("net-file"));
4571  // set routes
4572  if (ignoreRoutes || neteditOptions.getString("route-files").empty()) {
4573  mySumoOptions.resetDefault("route-files");
4574  } else {
4575  mySumoOptions.set("route-files", neteditOptions.getString("route-files"));
4576  }
4577  // set SumoOptions depending of additionalFiles and meanData files
4578  if (ignoreAdditionals) {
4579  if (neteditOptions.getString("meandata-files").empty()) {
4580  mySumoOptions.resetDefault("additional-files");
4581  } else {
4582  mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4583  }
4584  } else {
4585  if ((neteditOptions.getString("additional-files").size() > 0) && (neteditOptions.getString("meandata-files").size())) {
4586  mySumoOptions.set("additional-files", neteditOptions.getString("additional-files") + "," + neteditOptions.getString("meandata-files"));
4587  } else if (neteditOptions.getString("additional-files").size() > 0) {
4588  mySumoOptions.set("additional-files", neteditOptions.getString("additional-files"));
4589  } else if (neteditOptions.getString("meandata-files").size() > 0) {
4590  mySumoOptions.set("additional-files", neteditOptions.getString("meandata-files"));
4591  } else {
4592  mySumoOptions.resetDefault("additional-files");
4593  }
4594  }
4595 }
4596 
4597 
4598 FXString
4599 GNEApplicationWindow::getFolder(const std::string& folder) const {
4600  // declare folder
4601  std::string newFolder = folder;
4602  // declare stop flag
4603  bool stop = false;
4604  // continue while stop is false
4605  while (!stop) {
4606  if (newFolder.empty()) {
4607  // new folder empty, then stop
4608  stop = true;
4609  } else if ((newFolder.back() == '\'') || (newFolder.back() == '\\') ||
4610  (newFolder.back() == '/') /* || (newFolder.back() == '//') */) {
4611  // removed file, then stop
4612  stop = true;
4613  } else {
4614  newFolder.pop_back();
4615  }
4616  }
4617  // if is empty, return gCurrentFolder
4618  if (newFolder.empty()) {
4619  return gCurrentFolder;
4620  }
4621  return FXString(newFolder.c_str());
4622 }
4623 
4624 
4625 void
4627  // check that view exists
4628  if (myViewNet) {
4630  }
4631  // update require recomputing
4633 }
4634 
4635 
4636 void
4638  // remove lock hotkeys
4640  // check supermode
4641  if (supermode == Supermode::NETWORK) {
4642  // menu commands
4646  // lock
4650  // processing
4655  } else if (supermode == Supermode::DEMAND) {
4656  // menu commands
4660  // lock
4664  // processing
4669  } else if (supermode == Supermode::DATA) {
4670  // menu commands
4674  // lock
4678  // processing
4683  } else {
4684  // menu commands
4689  // lock
4693  // processing
4697  }
4698  // continue depending of view
4699  if (myViewNet) {
4703  } else if (myViewNet->getEditModes().isJuPedSimView()) {
4706  }
4707  }
4708 }
4709 
4710 
4711 void
4712 GNEApplicationWindow::disableUndoRedo(const std::string& reason) {
4713  myUndoRedoListEnabled = reason;
4714 }
4715 
4716 
4717 void
4719  myUndoRedoListEnabled.clear();
4720 }
4721 
4722 
4723 const std::string&
4725  return myUndoRedoListEnabled;
4726 }
4727 
4728 
4729 void
4731  if (myViewNet) {
4732  // destroy Popup (to avoid crashes)
4734  }
4735  // clear undo list and return true to continue with closing/reload
4736  myUndoList->clear();
4737 }
4738 
4739 
4742  return myFileMenuCommands;
4743 }
4744 
4745 
4748  return myModesMenuCommands;
4749 }
4750 
4751 
4754  return myEditMenuCommands;
4755 }
4756 
4757 
4760  return myLockMenuCommands;
4761 }
4762 
4763 
4766  return myProcessingMenuCommands;
4767 }
4768 
4769 
4770 OptionsCont&
4772  return mySumoOptions;
4773 }
4774 
4775 
4776 OptionsCont&
4778  return myNetgenerateOptions;
4779 }
4780 
4781 
4782 void
4784  // get option container
4785  auto& neteditOptions = OptionsCont::getOptions();
4786  // get additional files
4787  const auto additionalFiles = neteditOptions.getStringVector("additional-files");
4788  // check if ignore loading of additional files
4789  const auto ignoreLoadAdditionalFiles = neteditOptions.getBool("ignore.additionalelements");
4790  // check conditions
4791  if (ignoreLoadAdditionalFiles) {
4792  // reset flag
4793  neteditOptions.resetWritable();
4794  neteditOptions.set("ignore.additionalelements", "false");
4795  } else if (myNet && (additionalFiles.size() > 0)) {
4796  // use first file as output
4797  neteditOptions.resetWritable();
4798  neteditOptions.set("additional-files", additionalFiles.front());
4799  // begin undolist
4800  myUndoList->begin(Supermode::NETWORK, GUIIcon::SUPERMODENETWORK, TL("loading additional elements from '") + toString(additionalFiles) + "'");
4801  // iterate over every additional file
4802  bool setSaved = additionalFiles.size() == 1;
4803  for (const auto& file : additionalFiles) {
4804  // check if ignore missing imputs
4805  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4806  WRITE_MESSAGE(TL("loading additionals from '") + file + "'");
4807  // declare general handler
4808  GNEGeneralHandler handler(myNet, file, true, false);
4809  // disable validation for additionals
4810  XMLSubSys::setValidation("never", "auto", "auto");
4811  // Run parser
4812  if (!handler.parse()) {
4813  WRITE_ERRORF(TL("Loading of % failed."), file);
4814  }
4815  setSaved &= !handler.isErrorCreatingElement();
4816  // set additionals in SumoConfig
4817  setInputInSumoOptions(false, false);
4818  // disable validation for additionals
4819  XMLSubSys::setValidation("auto", "auto", "auto");
4820  }
4821  }
4822  if (setSaved) {
4824  }
4825  // end undo list
4826  myUndoList->end();
4827  }
4828 }
4829 
4830 
4831 void
4833  // get option container
4834  auto& neteditOptions = OptionsCont::getOptions();
4835  // get demand files
4836  const auto demandFiles = neteditOptions.getStringVector("route-files");
4837  // check if ignore loading of additional files
4838  const auto ignoreLoadDemandFiles = neteditOptions.getBool("ignore.routeelements");
4839  // check conditions
4840  if (ignoreLoadDemandFiles) {
4841  // reset flag
4842  neteditOptions.resetWritable();
4843  neteditOptions.set("ignore.routeelements", "false");
4844  } else if (myNet && (demandFiles.size() > 0)) {
4845  // use first file as output
4846  neteditOptions.resetWritable();
4847  neteditOptions.set("route-files", demandFiles.front());
4848  // begin undolist
4849  myUndoList->begin(Supermode::DEMAND, GUIIcon::SUPERMODEDEMAND, TL("loading demand elements from '") + toString(demandFiles) + "'");
4850  // iterate over every additional file
4851  for (const auto& file : demandFiles) {
4852  // check if ignore missing imputs
4853  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4854  WRITE_MESSAGE(TL("loading demand elements from '") + file + "'");
4855  // declare general handler
4856  GNEGeneralHandler handler(myNet, file, true, false);
4857  // disable validation for additionals
4858  XMLSubSys::setValidation("never", "auto", "auto");
4859  // Run parser
4860  if (!handler.parse()) {
4861  WRITE_ERRORF(TL("Loading of % failed."), file);
4862  }
4863  // set additionals in SumoConfig
4864  setInputInSumoOptions(false, false);
4865  // disable validation for additionals
4866  XMLSubSys::setValidation("auto", "auto", "auto");
4867  }
4868  }
4869  // end undo list
4870  myUndoList->end();
4871  }
4872 }
4873 
4874 
4875 void
4877  // get option container
4878  auto& neteditOptions = OptionsCont::getOptions();
4879  // get meanData files
4880  const auto meanDataFiles = neteditOptions.getStringVector("meandata-files");
4881  // continue depending of network and additional files
4882  if (myNet && (meanDataFiles.size() > 0)) {
4883  // use first file as output
4884  neteditOptions.resetWritable();
4885  neteditOptions.set("meandata-files", meanDataFiles.front());
4886  // begin undolist
4887  myUndoList->begin(Supermode::DATA, GUIIcon::MODEMEANDATA, TL("loading meanDatas from '") + toString(meanDataFiles) + "'");
4888  // iterate over every additional file
4889  for (const auto& file : meanDataFiles) {
4890  // check if ignore missing imputs
4891  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4892  WRITE_MESSAGE(TL("loading meandatas from '") + file + "'");
4893  // declare general handler
4894  GNEGeneralHandler handler(myNet, file, true, false);
4895  // disable validation for additionals
4896  XMLSubSys::setValidation("never", "auto", "auto");
4897  // Run parser
4898  if (!handler.parse()) {
4899  WRITE_ERRORF(TL("Loading of % failed."), file);
4900  }
4901  // set additionals in sumo options
4902  setInputInSumoOptions(false, false);
4903  // disable validation for additionals
4904  XMLSubSys::setValidation("auto", "auto", "auto");
4905  }
4906  }
4907  // end undo list
4908  myUndoList->end();
4909  }
4910 }
4911 
4912 
4913 void
4915  // get option container
4916  auto& neteditOptions = OptionsCont::getOptions();
4917  // get data files
4918  const auto dataFiles = neteditOptions.getStringVector("data-files");
4919  // continue depending of network and data files
4920  if (myNet && (dataFiles.size() > 0)) {
4921  // disable update data
4923  // begin undolist
4924  myUndoList->begin(Supermode::DATA, GUIIcon::SUPERMODEDATA, TL("loading data elements from '") + toString(dataFiles) + "'");
4925  // iterate over every data file
4926  for (const auto& file : dataFiles) {
4927  // check if ignore missing imputs
4928  if (FileHelpers::isReadable(file) || !neteditOptions.getBool("ignore-missing-inputs")) {
4929  WRITE_MESSAGE(TL("Loading data elements from '") + file + "'");
4930  GNEDataHandler dataHandler(myNet, file, true, false);
4931  // disable validation for data elements
4932  XMLSubSys::setValidation("never", "auto", "auto");
4933  if (!dataHandler.parse()) {
4934  WRITE_ERRORF(TL("Loading of % failed."), file);
4935  }
4936  // set first dataElementsFiles as default file
4937  neteditOptions.resetWritable();
4938  neteditOptions.set("data-files", file);
4939  // disable validation for data elements
4940  XMLSubSys::setValidation("auto", "auto", "auto");
4941  }
4942  }
4943  // end undolist
4944  myUndoList->end();
4945  // enable update data
4947  }
4948 }
4949 
4950 // ---------------------------------------------------------------------------
4951 // GNEApplicationWindow - protected methods
4952 // ---------------------------------------------------------------------------
4953 
4955  myToolbarsGrip(this),
4956  myMenuBarFile(this),
4957  myFileMenuCommands(this),
4958  myModesMenuCommands(this),
4959  myEditMenuCommands(this),
4960  myLockMenuCommands(this),
4961  myProcessingMenuCommands(this),
4962  myLocateMenuCommands(this),
4963  myToolsMenuCommands(this),
4964  myWindowsMenuCommands(this),
4965  myHelpMenuCommands(this),
4966  mySupermodeCommands(this) {
4967 }
4968 
4969 
4970 long
4971 GNEApplicationWindow::onKeyPress(FXObject* o, FXSelector sel, void* eventData) {
4972  const long handled = FXMainWindow::onKeyPress(o, sel, eventData);
4973  if (handled == 0 && myMDIClient->numChildren() > 0) {
4974  GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4975  if (w != nullptr) {
4976  w->onKeyPress(nullptr, sel, eventData);
4977  }
4978  }
4979  return 0;
4980 }
4981 
4982 
4983 long
4984 GNEApplicationWindow::onKeyRelease(FXObject* o, FXSelector sel, void* eventData) {
4985  const long handled = FXMainWindow::onKeyRelease(o, sel, eventData);
4986  if (handled == 0 && myMDIClient->numChildren() > 0) {
4987  GNEViewParent* w = dynamic_cast<GNEViewParent*>(myMDIClient->getActiveChild());
4988  if (w != nullptr) {
4989  w->onKeyRelease(nullptr, sel, eventData);
4990  }
4991  }
4992  return 0;
4993 }
4994 
4995 
4996 /****************************************************************************/
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:843
@ MID_GNE_NETGENERATE
netgenerate dialog
Definition: GUIAppEnum.h:761
@ MID_HOTKEY_SHIFT_F10_SUMOOPTIONSMENU
open SUMO options menu (used in netedit)
Definition: GUIAppEnum.h:272
@ MID_HOTKEY_SHIFT_F7_ADJUST_PERSON_PLANS
Adjust person plans (start und end positions, arrival positions, etc.)
Definition: GUIAppEnum.h:270
@ MID_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:1600
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLPERSONPLANS
show all person plans
Definition: GUIAppEnum.h:875
@ MID_GNE_UNLOCK_ALLELEMENTS
unlock all element
Definition: GUIAppEnum.h:853
@ MID_GNE_NETGENERATEOPTIONS
netgenerate options
Definition: GUIAppEnum.h:763
@ 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:899
@ MID_GNE_TOGGLE_COMPUTE_NETWORK_DATA
enable/disable computing after switchin between supermodes
Definition: GUIAppEnum.h:795
@ MID_TOOLBAREDIT_LOADADDITIONALS
load additionals in sumo-gui/netedit after press ctrl+T
Definition: GUIAppEnum.h:681
@ MID_HOTKEY_U_MODE_DECAL_TYPEDISTRIBUTION
hotkey for mode decal AND type distribution
Definition: GUIAppEnum.h:69
@ MID_GNE_NETWORKVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:817
@ MID_HOTKEY_CTRL_Y_REDO
Undo.
Definition: GUIAppEnum.h:133
@ MID_GNE_RUNNETGENERATE
run netgenerate tool
Definition: GUIAppEnum.h:773
@ MID_HOTKEY_CTRL_SHIFT_H_SAVEEDGETYPES
save Edge Types
Definition: GUIAppEnum.h:212
@ MID_GNE_OPENPYTHONTOOLDIALOG
call tool
Definition: GUIAppEnum.h:755
@ MID_GNE_NETWORKVIEWOPTIONS_MOVEELEVATION
move elevation instead of x,y
Definition: GUIAppEnum.h:839
@ MID_HOTKEY_ALT_9_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:161
@ MID_GNE_TOOLBARFILE_RELOAD_EDGETYPES
reload edge types
Definition: GUIAppEnum.h:733
@ MID_GNE_NETWORKVIEWOPTIONS_HIDECONNECTIONS
hide connections
Definition: GUIAppEnum.h:825
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWCONNECTIONS
show connections
Definition: GUIAppEnum.h:823
@ MID_HOTKEY_ALT_5_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:153
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYTO
toggle draw TAZRel only to
Definition: GUIAppEnum.h:905
@ 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:851
@ 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:891
@ 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:1598
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWTAZELEMENTS
show TAZ elements
Definition: GUIAppEnum.h:829
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKPERSON
lock person
Definition: GUIAppEnum.h:877
@ MID_HOTKEY_Z_MODE_TAZ_TAZREL
hotkey for mode editing TAZ and TAZRel
Definition: GUIAppEnum.h:75
@ MID_HOTKEY_F9_EDIT_VIEWSCHEME
open edit scheme menu
Definition: GUIAppEnum.h:246
@ MID_GNE_DEMANDVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:865
@ MID_HOTKEY_SHIFT_ESC_CLEARSELECTION
clear selection
Definition: GUIAppEnum.h:276
@ MID_GNE_LOCK_SELECTEDELEMENTS
lock selected element
Definition: GUIAppEnum.h:855
@ MID_HOTKEY_CTRL_J_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:101
@ MID_GNE_TOOLBARFILE_SAVESUMOCONFIG_AS
save SUMOConfig as
Definition: GUIAppEnum.h:717
@ MID_GNE_TOOLBARFILE_RELOAD_TLSPROGRAMS
reload TLS Programs
Definition: GUIAppEnum.h:729
@ MID_HOTKEY_DEL
hot key delete selections or elements
Definition: GUIAppEnum.h:286
@ MID_HOTKEY_A_MODE_STARTSIMULATION_ADDITIONALS_STOPS
hotkey for start simulation in SUMO and set editing mode additionals AND stops in netedit
Definition: GUIAppEnum.h:43
@ MID_LANGUAGE_TR
change language to turkish
Definition: GUIAppEnum.h:1643
@ MID_CHANGELOG
changelog button
Definition: GUIAppEnum.h:655
@ MID_GNE_NETWORKVIEWOPTIONS_ASKFORMERGE
ask before merging junctions
Definition: GUIAppEnum.h:835
@ MID_GNE_TOOLBARFILE_OPENFOREIGN
open foreign network
Definition: GUIAppEnum.h:707
@ MID_GNE_TOGGLE_TIMEFORMAT
switch time format
Definition: GUIAppEnum.h:797
@ MID_GNE_TOOLBARFILE_RELOAD_NETEDITCONFIG
reload neteditConfig
Definition: GUIAppEnum.h:711
@ MID_HOTKEY_CTRL_B_EDITBREAKPOINT_OPENDATAELEMENTS
Edit simulation breakpoints in SUMO and open Data Elements in netedit.
Definition: GUIAppEnum.h:85
@ MID_TOOLBAREDIT_LOADDEMAND
load demand in sumo-gui/netedit after press ctrl+T
Definition: GUIAppEnum.h:683
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWGRID
show grid
Definition: GUIAppEnum.h:863
@ MID_HOTKEY_ALT_3_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:149
@ MID_HOTKEY_F1_ONLINEDOCUMENTATION
open online documentation
Definition: GUIAppEnum.h:230
@ MID_HOTKEY_CTRL_SHIFT_D_SAVEDEMANDELEMENTS
Save Demand Elements.
Definition: GUIAppEnum.h:208
@ MID_GNE_POSTPROCESSINGPYTHONTOOL
call tool for post processing
Definition: GUIAppEnum.h:759
@ MID_GNE_FORCESAVE
force save elements (using for saving netedit and sumo configs)
Definition: GUIAppEnum.h:1606
@ 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:747
@ 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:841
@ MID_HOTKEY_ESC
hot key <ESC> abort current edit operation
Definition: GUIAppEnum.h:284
@ MID_GNE_TOOLBARFILE_SAVEDATA_AS
save data elements as
Definition: GUIAppEnum.h:739
@ 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:897
@ 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:871
@ MID_LANGUAGE_ZHT
change language to chinese (traditional)
Definition: GUIAppEnum.h:1641
@ MID_LANGUAGE_ES
change language to spanish
Definition: GUIAppEnum.h:1633
@ MID_HOTKEY_SHIFT_A_LOCATEADDITIONAL
Locate additional structure - button.
Definition: GUIAppEnum.h:172
@ MID_HOTKEY_ALT_4_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:151
@ MID_GNE_TOOLBARFILE_SAVETLSPROGRAMS_AS
save TLS Programs as
Definition: GUIAppEnum.h:727
@ MID_GNE_DATAVIEWOPTIONS_SHOWADDITIONALS
show additionals
Definition: GUIAppEnum.h:893
@ MID_HOTKEY_SHIFT_R_LOCATEROUTE
Locate route - button.
Definition: GUIAppEnum.h:186
@ MID_GNE_RUNPYTHONTOOL
run python
Definition: GUIAppEnum.h:757
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWBUBBLES
show junctions as bubbles
Definition: GUIAppEnum.h:837
@ MID_HOTKEY_SHIFT_W_LOCATEWALKINGAREA
Locate edge - button.
Definition: GUIAppEnum.h:194
@ MID_GNE_TOOLBARFILE_RELOAD_DEMANDELEMENTS
reload demand elements
Definition: GUIAppEnum.h:737
@ MID_GNE_NETWORKVIEWOPTIONS_EXTENDSELECTION
extend selection
Definition: GUIAppEnum.h:831
@ MID_HOTKEY_CTRL_I_EDITVIEWPORT
Open viewport editor.
Definition: GUIAppEnum.h:99
@ MID_RECENTFILE
Loads a file previously loaded.
Definition: GUIAppEnum.h:318
@ MID_HOTKEY_S_MODE_STOPSIMULATION_SELECT
hotkey for stop simulation in SUMO and set select mode in netedit
Definition: GUIAppEnum.h:63
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWSUBADDITIONALS
show sub-additionals
Definition: GUIAppEnum.h:827
@ MID_HOTKEY_SHIFT_C_LOCATECONTAINER
Locate container - button.
Definition: GUIAppEnum.h:174
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWALLCONTAINERPLANS
show all container plans
Definition: GUIAppEnum.h:879
@ 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:1645
@ 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:1637
@ MID_GNE_LOCK_ELEMENT
lock element
Definition: GUIAppEnum.h:849
@ MID_GNE_TOOLBARFILE_SAVENETEDITCONFIG_AS
save neteditConfig as
Definition: GUIAppEnum.h:713
@ MID_HOTKEY_SHIFT_E_LOCATEEDGE
Locate edge - button.
Definition: GUIAppEnum.h:176
@ MID_CLEARMESSAGEWINDOW
Clear simulation output.
Definition: GUIAppEnum.h:367
@ MID_GNE_TOOLBARFILE_OPENMEANDATAS
open meanData file
Definition: GUIAppEnum.h:743
@ MID_HOTKEY_R_MODE_CROSSING_ROUTE_EDGERELDATA
hotkey for mode editing crossing, routes and edge rel datas
Definition: GUIAppEnum.h:65
@ MID_TUTORIAL
tutorial button
Definition: GUIAppEnum.h:659
@ MID_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:901
@ 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:346
@ 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:745
@ MID_GNE_TOOLBARFILE_RELOAD_ADDITIONALS
reload additionals
Definition: GUIAppEnum.h:725
@ 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:1629
@ MID_GNE_NETWORKVIEWOPTIONS_SHOWDEMANDELEMENTS
show demand elements
Definition: GUIAppEnum.h:819
@ 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:721
@ MID_GNE_TOOLBARFILE_SAVEEDGETYPES_AS
save edgeTypes as
Definition: GUIAppEnum.h:731
@ MID_HOTKEYS
hotkeys button
Definition: GUIAppEnum.h:657
@ MID_GNE_DEMANDVIEWOPTIONS_HIDENONINSPECTED
hide non-inspected demand element
Definition: GUIAppEnum.h:869
@ MID_LANGUAGE_DE
change language to german
Definition: GUIAppEnum.h:1631
@ 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:705
@ MID_HOTKEY_SHIFT_F2_TEMPLATE_COPY
copy template
Definition: GUIAppEnum.h:264
@ MID_GNE_NETWORKVIEWOPTIONS_CHANGEALLPHASES
change all phases
Definition: GUIAppEnum.h:833
@ 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:895
@ MID_GNE_POSTPROCESSINGNETGENERATE
postprocesing netgenerate
Definition: GUIAppEnum.h:775
@ MID_HOTKEY_E_MODE_EDGE_EDGEDATA
hotkey for mode adding edges AND edgeDatas
Definition: GUIAppEnum.h:51
@ MID_GNE_DATAVIEWOPTIONS_TAZRELONLYFROM
toggle draw TAZRel only from
Definition: GUIAppEnum.h:903
@ MID_HOTKEY_ALT_8_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:159
@ MID_GNE_TOOLBARFILE_RELOAD_SUMOCONFIG
reload SUMOConfig
Definition: GUIAppEnum.h:715
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEDRAWJUNCTIONSHAPE
toggle draw junction shape
Definition: GUIAppEnum.h:815
@ MID_HOTKEY_CTRL_SHIFT_O_OPENNETCONVERTFILE
open Netconvert file
Definition: GUIAppEnum.h:220
@ MID_GNE_RECOMPUTINGNEEDED
check if recomputing is needed
Definition: GUIAppEnum.h:1604
@ MID_HOTKEY_CTRL_M_OPENSUMOCONFIG
open sumo config
Definition: GUIAppEnum.h:107
@ MID_GNE_TOOLBARFILE_SAVEDEMAND_AS
save demand elements as
Definition: GUIAppEnum.h:735
@ MID_GNE_TOOLBARFILE_SAVENETWORK_AS
save network as
Definition: GUIAppEnum.h:719
@ MID_GNE_DEMANDVIEWOPTIONS_DRAWSPREADVEHICLES
Draw vehicles in begin position or spread in lane.
Definition: GUIAppEnum.h:867
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWOVERLAPPEDROUTES
show overlapped routes
Definition: GUIAppEnum.h:883
@ MID_HOTKEY_CTRL_Z_UNDO
Redo.
Definition: GUIAppEnum.h:135
@ MID_GNE_MODESMENUTITLE
selector for ModesMenuTitle
Definition: GUIAppEnum.h:1596
@ MID_FEEDBACK
feedback button
Definition: GUIAppEnum.h:661
@ MID_HOTKEY_CTRL_H_APPSETTINGS_OPENEDGETYPES
open app setting dialog in SUMO and open edge type files in netedit
Definition: GUIAppEnum.h:97
@ MID_HOTKEY_BACKSPACE
hot key <Backspace> remove last sub-operation
Definition: GUIAppEnum.h:290
@ MID_HOTKEY_CTRL_SHIFT_S_SAVESUMOCONFIG
save SUMOConfig (SUMO AND netedit)
Definition: GUIAppEnum.h:222
@ MID_HOTKEY_ALT_7_TOGGLEEDITOPTION
toggle edit option
Definition: GUIAppEnum.h:157
@ MID_HOTKEY_F12_ABOUT
open about dialog
Definition: GUIAppEnum.h:254
@ MID_HOTKEY_CTRL_E_EDITSELECTION_LOADNETEDITCONFIG
Edit selection in SUMO and load neteditConfig in netedit.
Definition: GUIAppEnum.h:91
@ MID_HOTKEY_ENTER
hot key <ENTER> accept current operation
Definition: GUIAppEnum.h:288
@ MID_GNE_TOOLBARFILE_RELOAD_DATAELEMENTS
reload data elements
Definition: GUIAppEnum.h:741
@ MID_HOTKEY_CTRL_SHIFT_K_SAVETLS
save TLS Programs
Definition: GUIAppEnum.h:214
@ MID_HOTKEY_SHIFT_F1_TEMPLATE_SET
set template
Definition: GUIAppEnum.h:262
@ MID_HOTKEY_SHIFT_T_LOCATETLS
Locate TLS - button.
Definition: GUIAppEnum.h:190
@ MID_HOTKEY_M_MODE_MOVE_MEANDATA
hotkey for mode moving element AND mean data
Definition: GUIAppEnum.h:59
@ MID_HOTKEY_F2_SUPERMODE_NETWORK
select network supermode in netedit
Definition: GUIAppEnum.h:232
@ MID_GNE_DEMANDVIEWOPTIONS_LOCKCONTAINER
lock container
Definition: GUIAppEnum.h:881
@ 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:821
@ MID_LANGUAGE_ZH
change language to chinese (simplified)
Definition: GUIAppEnum.h:1639
@ MID_GNE_SAVEJOINEDJUNCTIONS
save joined junctions
Definition: GUIAppEnum.h:709
@ MID_GNE_DEMANDVIEWOPTIONS_SHOWTRIPS
show all trips
Definition: GUIAppEnum.h:873
@ MID_GNE_NETWORKVIEWOPTIONS_TOGGLEGRID
show grid
Definition: GUIAppEnum.h:813
@ MID_LANGUAGE_FR
change language to french
Definition: GUIAppEnum.h:1635
@ MID_GNE_TOOLBARFILE_SAVEJUPEDSIMELEMENTS_AS
save JuPedSim as
Definition: GUIAppEnum.h:723
@ 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:793
@ MID_WINDOW
Main window-ID.
Definition: GUIAppEnum.h:298
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:671
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 onCmdClearSelectionShortcut(FXObject *sender, FXSelector sel, void *ptr)
called if the user hits key combination for clear selection
long onCmdClearMsgWindow(FXObject *, FXSelector, void *)
called when the command/FXCall clear message windows is executed
long onCmdLockElements(FXObject *, FXSelector sel, void *)
called when user press a lock menu check
MFXButtonTooltip * myRequireRecomputingButton
Button used for show if recomputing is needed.
long onCmdClearTemplate(FXObject *, FXSelector, void *)
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< 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, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
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, GNEJunction * > & getJunctions() const
get junctions
const std::map< std::string, GNEEdgeType * > & getEdgeTypes() const
map with the ID and pointer to edgeTypes of net
const std::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:2077
void removeSolitaryJunctions(GNEUndoList *undoList)
removes junctions that have no edges
Definition: GNENet.cpp:1726
bool joinSelectedJunctions(GNEUndoList *undoList)
join selected junctions
Definition: GNENet.cpp:1546
void saveTLSPrograms(const std::string &filename)
save TLS Programs elements of the network
Definition: GNENet.cpp:2726
void saveJoined(const std::string &filename)
save log of joined junctions (and nothing else)
Definition: GNENet.cpp:1342
GNENetHelper::SavingStatus * getSavingStatus() const
get saving status
Definition: GNENet.cpp:129
void enableUpdateData()
Definition: GNENet.cpp:2793
void saveEdgeTypes(const std::string &filename)
save edgeTypes elements of the network
Definition: GNENet.cpp:2747
void saveAdditionals()
save additional elements
Definition: GNENet.cpp:2166
void clearDemandElements(GNEUndoList *undoList)
clear demand elements
Definition: GNENet.cpp:2090
void adjustPersonPlans(GNEUndoList *undoList)
adjust person plans
Definition: GNENet.cpp:1832
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:1388
void cleanInvalidDemandElements(GNEUndoList *undoList)
clean invalid demand elements
Definition: GNENet.cpp:1877
void cleanUnusedRoutes(GNEUndoList *undoList)
clean unused routes
Definition: GNENet.cpp:1742
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition: GNENet.cpp:123
void saveDemandElements()
save demand element elements of the network
Definition: GNENet.cpp:2221
void clearMeanDataElements(GNEUndoList *undoList)
clear meanDatas
Definition: GNENet.cpp:2114
void disableUpdateData()
disable update data elements after inserting or removing an element in net
Definition: GNENet.cpp:2804
void saveDataElements()
save data set elements of the network
Definition: GNENet.cpp:2263
void saveJuPedSimElements(const std::string &file)
save JuPedSim elements
Definition: GNENet.cpp:2207
void saveNetwork()
save the network
Definition: GNENet.cpp:1299
bool isNetRecomputed() const
check if net require recomputing
Definition: GNENet.cpp:1528
bool cleanInvalidCrossings(GNEUndoList *undoList)
clear invalid crossings
Definition: GNENet.cpp:1673
void joinRoutes(GNEUndoList *undoList)
join routes
Definition: GNENet.cpp:1768
GNEPathManager * getPathManager()
get path manager
Definition: GNENet.cpp:135
void savePlain(const std::string &prefix)
save plain xml representation of the network (and nothing else)
Definition: GNENet.cpp:1333
GNEViewNet * getViewNet() const
get view net
Definition: GNENet.cpp:2136
void saveMeanDatas()
save meanData elements of the network
Definition: GNENet.cpp:2308
void computeDemandElements(GNEApplicationWindow *window)
compute demand elements param[in] window The window to inform about delay
Definition: GNENet.cpp:1471
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
void loadFromFile(const std::string &file) const
load from file
void clearCurrentSelection() const
clear current selection with possibility of undo/redo
GNESelectorFrame::SelectionOperation * getSelectionOperationModul() const
get selection operation modul
bool isChangesPending() const
return true if there is changes to save
const std::vector< CurrentTAZ::TAZEdgeColor > & getEdgeAndTAZChildrenSelected() const
get map with edge and TAZChildren
void clearSelectedEdges()
clear current TAZ children
TAZSelectionStatistics * getTAZSelectionStatisticsModule() const
get TAZ Selection Statistics 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:747
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:723
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:735
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:958
GNEUndoList * getUndoList() const
get the undoList object
void saveVisualizationSettings() const
Definition: GNEViewNet.cpp:695
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:910
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:964
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:741
void updateViewNet() const
Mark the entire GNEViewNet to be repainted later.
Definition: GNEViewNet.cpp:419
long onCmdToggleHideConnections(FXObject *, FXSelector, void *)
toggle hide connections
void forceSupemodeNetwork()
force supermode network(used after load/create new network)
Definition: GNEViewNet.cpp:426
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.
GNESelectorFrame * getSelectorFrame() const
get frame for select elements
GNEVehicleFrame * getVehicleFrame() const
get frame for DEMAND_VEHICLE
GNETAZFrame * getTAZFrame() const
get frame for NETWORK_TAZ
GNETLSEditorFrame * getTLSEditorFrame() const
get frame for NETWORK_TLS
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
GNEContainerFrame * getContainerFrame() const
get frame for DEMAND_CONTAINER
GNEPersonFrame * getPersonFrame() const
get frame for DEMAND_PERSON
GNEInspectorFrame * getInspectorFrame() const
get frame for inspect elements
GNECreateEdgeFrame * getCreateEdgeFrame() const
get frame for NETWORK_CREATEEDGE
GNEFrame * getCurrentShownFrame() const
get current frame (note: it can be null)
long onCmdLocate(FXObject *, FXSelector, void *)
locator-callback
long onKeyRelease(FXObject *o, FXSelector sel, void *data)
Called when user releases a key.
void saveViewport(const double x, const double y, const double z, const double rot)
Makes the given viewport the default.
static void close()
close GUICursorSubSys
static void initCursors(FXApp *a)
Initiate GUICursorSubSys.
static FXMenuTitle * buildFXMenuTitle(FXComposite *p, const std::string &text, FXIcon *icon, FXMenuPane *menuPane)
build menu title
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:744
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