/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.3// This program and the accompanying materials are made available under the4// terms of the Eclipse Public License 2.0 which is available at5// https://www.eclipse.org/legal/epl-2.0/6// This Source Code may also be made available under the following Secondary7// Licenses when the conditions for such availability set forth in the Eclipse8// Public License 2.0 are satisfied: GNU General Public License, version 29// or later which is available at10// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html11// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later12/****************************************************************************/13/// @file GNEViewNet.h14/// @author Jakob Erdmann15/// @date Feb 201116///17// A view on the network being edited (adapted from GUIViewTraffic)18/****************************************************************************/19#pragma once20#include <config.h>2122#include <utils/gui/windows/GUISUMOAbstractView.h>2324#include "GNEViewNetHelper.h"2526// ===========================================================================27// class definitions28// ===========================================================================2930class GNEViewNet : public GUISUMOAbstractView {31/// @brief FOX-declaration32FXDECLARE_OVERRIDE(GNEViewNet)3334/// @brief declare GNEViewNetHelper as friend struct35friend struct GNEViewNetHelper;3637public:38/* @brief constructor39* @param[in] tmpParent temporal FXFrame parent so that we can add items to view area in the desired order40* @param[in] actualParent FXFrame parent of GNEViewNet41* @param[in] app main windows42* @param[in] viewParent viewParent of this viewNet43* @param[in] net traffic net44* @param[in] undoList pointer to UndoList module45* @param[in] glVis a reference to GLVisuals46* @param[in] share a reference to FXCanvas47*/48GNEViewNet(FXComposite* tmpParent, FXComposite* actualParent, GUIMainWindow& app,49GNEViewParent* viewParent, GNENet* net, GNEUndoList* undoList,50FXGLVisual* glVis, FXGLCanvas* share);5152/// @brief destructor53~GNEViewNet();5455/// @brief recalculate boundaries56void recalculateBoundaries() override;5758/// @brief builds the view toolbars59void buildViewToolBars(GUIGlChildWindow* v) override;6061/// @brief Mark the entire GNEViewNet to be repainted later62void updateViewNet(const bool ignoreViewUpdater = true) const;6364/// @brief force supermode network(used after load/create new network)65void forceSupemodeNetwork();6667/// @brief called when view is updated68void viewUpdated();6970/// @brief get objects under cursor71const GNEViewNetHelper::ViewObjectsSelector& getViewObjectsSelector() const;7273/// @brief get move single element values74const GNEViewNetHelper::MoveSingleElementModul& getMoveSingleElementValues() const;7576/// @brief get move multiple element values77const GNEViewNetHelper::MoveMultipleElementModul& getMoveMultipleElementValues() const;7879/// @brief update objects and boundaries in position80void updateObjectsInPosition(const Position& pos);8182/// @brief get objects in the given shape (using triangulation)83void updateObjectsInShape(const PositionVector& shape);8485/// @brief redraw elements only for calculating boundary86void redrawPathElementContours();8788/// @brief set color scheme89bool setColorScheme(const std::string& name) override;9091///@brief recalibrate color scheme according to the current value range92void buildColorRainbow(const GUIVisualizationSettings& s, GUIColorScheme& scheme, int active, GUIGlObjectType objectType,93const GUIVisualizationRainbowSettings& rs) override;9495/// @brief return list of available edge parameters96std::vector<std::string> getEdgeLaneParamKeys(bool edgeKeys) const override;9798/// @brief return list of loaded edgeData attributes99std::vector<std::string> getEdgeDataAttrs() const override;100101/// @brief return list of loaded edgeRelation and tazRelation attributes102std::vector<std::string> getRelDataAttrs() const override;103104/// @brief return list of available POI parameters105std::vector<std::string> getPOIParamKeys() const override;106107/// @brief get draw toggle (used to avoid drawing junctions twice)108int getDrawingToggle() const;109110/// @brief check if select edges (toggle using button or shift)111bool checkSelectEdges() const;112113/// @brief open object dialog114void openObjectDialogAtCursor(const FXEvent* ev) override;115116/// @brief open delete dialog at cursor117void openDeleteDialogAtCursor(const std::vector<GUIGlObject*>& GLObjects);118119/// @brief open select dialog at cursor120void openSelectDialogAtCursor(const std::vector<GUIGlObject*>& GLObjects);121122// save visualization settings123void saveVisualizationSettings() const;124125/// @brief get edit modes126const GNEViewNetHelper::EditModes& getEditModes() const;127128/// @brief get testing mode129const GNEViewNetHelper::TestingMode& getTestingMode() const;130131/// @brief get network view options132const GNEViewNetHelper::NetworkViewOptions& getNetworkViewOptions() const;133134/// @brief get demand view options135const GNEViewNetHelper::DemandViewOptions& getDemandViewOptions() const;136137/// @brief get data view options138const GNEViewNetHelper::DataViewOptions& getDataViewOptions() const;139140/// @brief get Key Pressed module141const GNEViewNetHelper::MouseButtonKeyPressed& getMouseButtonKeyPressed() const;142143/// @brief get Edit Shape module144const GNEViewNetHelper::EditNetworkElementShapes& getEditNetworkElementShapes() const;145146/// @name overloaded handlers147/// @{148/// @brief called when user press mouse's left button149long onLeftBtnPress(FXObject*, FXSelector, void*) override;150151/// @brief called when user releases mouse's left button152long onLeftBtnRelease(FXObject*, FXSelector, void*) override;153154/// @brief called when user press mouse's left button155long onMiddleBtnPress(FXObject*, FXSelector, void*) override;156157/// @brief called when user releases mouse's left button158long onMiddleBtnRelease(FXObject*, FXSelector, void*) override;159160/// @brief called when user press mouse's right button161long onRightBtnPress(FXObject*, FXSelector, void*) override;162163/// @brief called when user releases mouse's right button164long onRightBtnRelease(FXObject*, FXSelector, void*) override;165166/// @brief called when user moves mouse167long onMouseMove(FXObject*, FXSelector, void*) override;168169/// @brief called when user press a key170long onKeyPress(FXObject* o, FXSelector sel, void* data) override;171172/// @brief called when user release a key173long onKeyRelease(FXObject* o, FXSelector sel, void* data) override;174/// @}175176/// @name set modes call backs177/// @{178/// @brief called when user press a supermode button179long onCmdSetSupermode(FXObject*, FXSelector sel, void*);180181/// @brief called when user press a mode button (Network or demand)182long onCmdSetMode(FXObject*, FXSelector sel, void*);183184/// @}185186/// @brief split edge at cursor position187long onCmdSplitEdge(FXObject*, FXSelector, void*);188189/// @brief split edge at cursor position190long onCmdSplitEdgeBidi(FXObject*, FXSelector, void*);191192/// @brief reverse edge193long onCmdReverseEdge(FXObject*, FXSelector, void*);194195/// @brief add reversed edge196long onCmdAddReversedEdge(FXObject*, FXSelector, void*);197198/// @brief add reversed edge disconnected199long onCmdAddReversedEdgeDisconnected(FXObject*, FXSelector, void*);200201/// @brief change geometry endpoint202long onCmdEditEdgeEndpoint(FXObject*, FXSelector, void*);203204/// @brief change geometry endpoint205long onCmdResetEdgeEndpoint(FXObject*, FXSelector, void*);206207/// @brief makes selected edges straight208long onCmdStraightenEdges(FXObject*, FXSelector, void*);209210/// @brief smooth geometry211long onCmdSmoothEdges(FXObject*, FXSelector, void*);212213/// @brief interpolate z values linear between junctions214long onCmdStraightenEdgesElevation(FXObject*, FXSelector, void*);215216/// @brief smooth elevation with regard to adjoining edges217long onCmdSmoothEdgesElevation(FXObject*, FXSelector, void*);218219/// @brief reset custom edge lengths220long onCmdResetLength(FXObject*, FXSelector, void*);221222/// @brief use edge as template223long onCmdEdgeUseAsTemplate(FXObject*, FXSelector, void*);224225/// @brief apply template to edge226long onCmdEgeApplyTemplate(FXObject*, FXSelector, void*);227228/// @name specific of shape edited229/// @{230231/// @brief simply shape of current polygon232long onCmdSimplifyShape(FXObject*, FXSelector, void*);233234/// @brief delete the closes geometry point235long onCmdDeleteGeometryPoint(FXObject*, FXSelector, void*);236237/// @brief close opened polygon238long onCmdClosePolygon(FXObject*, FXSelector, void*);239240/// @brief open closed polygon241long onCmdOpenPolygon(FXObject*, FXSelector, void*);242243/// @brief select elements within polygon boundary244long onCmdSelectPolygonElements(FXObject*, FXSelector, void*);245246/// @brief triangulate polygon247long onCmdTriangulatePolygon(FXObject*, FXSelector, void*);248249/// @brief set as first geometry point the closes geometry point250long onCmdSetFirstGeometryPoint(FXObject*, FXSelector, void*);251252/// @}253254/// @name specific of shape edited255/// @{256/// @brief simply shape edited257long onCmdSimplifyShapeEdited(FXObject*, FXSelector, void*);258259/// @brief straight shape edited260long onCmdStraightenShapeEdited(FXObject*, FXSelector, void*);261262/// @brief close opened shape edited263long onCmdCloseShapeEdited(FXObject*, FXSelector, void*);264265/// @brief open closed shape edited266long onCmdOpenShapeEdited(FXObject*, FXSelector, void*);267268/// @brief set first geometry point in shape edited269long onCmdSetFirstGeometryPointShapeEdited(FXObject*, FXSelector, void*);270271/// @brief delete the closes geometry point in shape edited272long onCmdDeleteGeometryPointShapeEdited(FXObject*, FXSelector, void*);273274/// @brief reset shape edited275long onCmdResetShapeEdited(FXObject*, FXSelector, void*);276277/// @brief finish shape edited278long onCmdFinishShapeEdited(FXObject*, FXSelector, void*);279280/// @}281282/// @brief attach POI in lane283long onCmdAttachPOI(FXObject*, FXSelector, void*);284285/// @brief release POI from lane286long onCmdReleasePOI(FXObject*, FXSelector, void*);287288/// @brief transform to POI289long onCmdTransformPOI(FXObject*, FXSelector, void*);290291/// @brief transform to POIGEO292long onCmdTransformPOIGEO(FXObject*, FXSelector, void*);293294/// @brief reverse current demand element295long onCmdReverse(FXObject*, FXSelector, void*);296297/// @brief add a reverse demand element298long onCmdAddReverse(FXObject*, FXSelector, void*);299300/// @brief set custom geometry point301long onCmdSetCustomGeometryPoint(FXObject*, FXSelector, void*);302303/// @brief reset edge end points304long onCmdResetEndPoints(FXObject*, FXSelector, void*);305306/// @brief duplicate selected lane307long onCmdDuplicateLane(FXObject*, FXSelector, void*);308309/// @brief edit lane shape310long onCmdEditLaneShape(FXObject*, FXSelector, void*);311312/// @brief reset custom shapes of selected lanes313long onCmdResetLaneCustomShape(FXObject*, FXSelector, void*);314315/// @brief reset oppositeLane of current lane316long onCmdResetOppositeLane(FXObject*, FXSelector, void*);317318/// @brief add/remove/restrict lane319long onCmdLaneOperation(FXObject*, FXSelector sel, void*);320321/// @brief show lane reachability322long onCmdLaneReachability(FXObject*, FXSelector sel, void*);323324/// @brief open additional dialog325long onCmdOpenAdditionalDialog(FXObject*, FXSelector, void*);326327/// @brief edit junction shape328long onCmdResetEdgeEndPoints(FXObject*, FXSelector, void*);329330/// @brief edit junction shape331long onCmdEditJunctionShape(FXObject*, FXSelector, void*);332333/// @brief reset junction shape334long onCmdResetJunctionShape(FXObject*, FXSelector, void*);335336/// @brief replace node by geometry337long onCmdReplaceJunction(FXObject*, FXSelector, void*);338339/// @brief split junction into multiple junctions340long onCmdSplitJunction(FXObject*, FXSelector, void*);341342/// @brief split junction into multiple junctions and reconnect them343long onCmdSplitJunctionReconnect(FXObject*, FXSelector, void*);344345/// @brief select all roundabout nodes and edges346long onCmdSelectRoundabout(FXObject*, FXSelector, void*);347348/// @brief convert junction to roundabout349long onCmdConvertRoundabout(FXObject*, FXSelector, void*);350351/// @brief enter to convert junction to roundabout352long onEnterConvertRoundabout(FXObject*, FXSelector, void*);353354/// @brief leave to convert junction to roundabout355long onLeaveConvertRoundabout(FXObject*, FXSelector, void*);356357/// @brief clear junction connections358long onCmdClearConnections(FXObject*, FXSelector, void*);359360/// @brief reset junction connections361long onCmdResetConnections(FXObject*, FXSelector, void*);362363/// @brief add TLS364long onCmdAddTLS(FXObject*, FXSelector, void*);365366/// @brief add Join TLS367long onCmdAddJoinTLS(FXObject*, FXSelector, void*);368369/// @brief edit connection shape370long onCmdEditConnectionShape(FXObject*, FXSelector, void*);371372/// @brief edit connection shape373long onCmdSmoothConnectionShape(FXObject*, FXSelector, void*);374375/// @brief edit crossing shape376long onCmdEditCrossingShape(FXObject*, FXSelector, void*);377378/// @brief edit walkingArea shape379long onCmdEditWalkingAreaShape(FXObject*, FXSelector, void*);380381/// @name View options network call backs382/// @{383384/// @brief toggle select edges385long onCmdToggleSelectEdges(FXObject*, FXSelector, void*);386387/// @brief toggle show connections388long onCmdToggleShowConnections(FXObject*, FXSelector, void*);389390/// @brief toggle hide connections391long onCmdToggleHideConnections(FXObject*, FXSelector, void*);392393/// @brief toggle show additional sub-elements394long onCmdToggleShowAdditionalSubElements(FXObject*, FXSelector, void*);395396/// @brief toggle show TAZ elements397long onCmdToggleShowTAZElements(FXObject*, FXSelector, void*);398399/// @brief toggle extend selection400long onCmdToggleExtendSelection(FXObject*, FXSelector, void*);401402/// @brief toggle change all phases403long onCmdToggleChangeAllPhases(FXObject*, FXSelector, void*);404405/// @brief toggle show grid406long onCmdToggleShowGrid(FXObject*, FXSelector, void*);407408/// @brief toggle draw junction shape409long onCmdToggleDrawJunctionShape(FXObject*, FXSelector, void*);410411/// @brief toggle draw vehicles in begin position or spread in lane412long onCmdToggleDrawSpreadVehicles(FXObject*, FXSelector, void*);413414/// @brief toggle warn for merge415long onCmdToggleMergeAutomatically(FXObject*, FXSelector, void*);416417/// @brief toggle show junction bubbles418long onCmdToggleShowJunctionBubbles(FXObject*, FXSelector, void*);419420/// @brief toggle move elevation421long onCmdToggleMoveElevation(FXObject*, FXSelector, void*);422423/// @brief toggle chain edges424long onCmdToggleChainEdges(FXObject*, FXSelector, void*);425426/// @brief toggle autoOpposite edge427long onCmdToggleAutoOppositeEdge(FXObject*, FXSelector, void*);428429/// @brief toggle hide non inspected demand elements430long onCmdToggleHideNonInspecteDemandElements(FXObject*, FXSelector, void*);431432/// @brief toggle hide non inspected demand elements433long onCmdToggleShowOverlappedRoutes(FXObject*, FXSelector, void*);434435/// @brief toggle hide shapes in super mode demand436long onCmdToggleHideShapes(FXObject*, FXSelector, void*);437438/// @brief toggle show all trips in super mode demand439long onCmdToggleShowTrips(FXObject*, FXSelector, void*);440441/// @brief toggle show all person plans in super mode demand442long onCmdToggleShowAllPersonPlans(FXObject*, FXSelector, void*);443444/// @brief toggle lock person in super mode demand445long onCmdToggleLockPerson(FXObject*, FXSelector, void*);446447/// @brief toggle show all container plans in super mode demand448long onCmdToggleShowAllContainerPlans(FXObject*, FXSelector, void*);449450/// @brief toggle lock container in super mode demand451long onCmdToggleLockContainer(FXObject*, FXSelector, void*);452453/// @brief toggle show additionals in super mode data454long onCmdToggleShowAdditionals(FXObject*, FXSelector, void*);455456/// @brief toggle show shapes in super mode data457long onCmdToggleShowShapes(FXObject*, FXSelector, void*);458459/// @brief toggle show demand elements (network)460long onCmdToggleShowDemandElementsNetwork(FXObject*, FXSelector, void*);461462/// @brief toggle show demand elements (data)463long onCmdToggleShowDemandElementsData(FXObject*, FXSelector, void*);464465/// @brief toggle TAZRel drawing466long onCmdToggleTAZRelDrawing(FXObject*, FXSelector, void*);467468/// @brief toggle TAZdrawFill469long onCmdToggleTAZDrawFill(FXObject*, FXSelector, void*);470471/// @brief toggle TAZRez only from472long onCmdToggleTAZRelOnlyFrom(FXObject*, FXSelector, void*);473474/// @brief toggle TAZRez only to475long onCmdToggleTAZRelOnlyTo(FXObject*, FXSelector, void*);476477/// @}478479//// @name interval bar functions480/// @{481482/// @brief change generic data type in interval bar483long onCmdIntervalBarGenericDataType(FXObject*, FXSelector, void*);484485/// @brief change data set in interval bar486long onCmdIntervalBarDataSet(FXObject*, FXSelector, void*);487488/// @brief change limit interval in interval bar489long onCmdIntervalBarLimit(FXObject*, FXSelector, void*);490491/// @brief change begin in interval bar492long onCmdIntervalBarSetBegin(FXObject*, FXSelector, void*);493494/// @brief change end in interval bar495long onCmdIntervalBarSetEnd(FXObject*, FXSelector, void*);496497/// @brief change parameter in interval bar498long onCmdIntervalBarSetParameter(FXObject*, FXSelector, void*);499500/// @}501502/// @brief select AC under cursor503long onCmdAddSelected(FXObject*, FXSelector, void*);504505/// @brief unselect AC under cursor506long onCmdRemoveSelected(FXObject*, FXSelector, void*);507508/// @brief select Edge under cursor509long onCmdAddEdgeSelected(FXObject*, FXSelector, void*);510511/// @brief unselect Edge under cursor512long onCmdRemoveEdgeSelected(FXObject*, FXSelector, void*);513514/// @brief called when a new view is set515long onCmdSetNeteditView(FXObject*, FXSelector sel, void*);516517/// @brief abort current edition operation518void abortOperation(bool clearSelection = true);519520/// @brief handle del keypress521void hotkeyDel();522523/// @brief handle enter keypress524void hotkeyEnter();525526/// @brief handle backspace keypress527void hotkeyBackSpace();528529/// @brief handle focus frame keypress530void hotkeyFocusFrame();531532/// @brief get the net object533GNEViewParent* getViewParent() const;534535/// @brief get the net object536GNENet* getNet() const;537538/// @brief get the undoList object539GNEUndoList* getUndoList() const;540541/// @brief get interval bar542GNEViewNetHelper::IntervalBar& getIntervalBar();543544/// @brief get lock manager545GNEViewNetHelper::LockManager& getLockManager();546547/// @brief get inspected elements548GNEViewNetHelper::InspectedElements& getInspectedElements();549550/// @brief get marked for drawing front elements551GNEViewNetHelper::MarkFrontElements& getMarkFrontElements();552553/// @brief check if an element is being moved554bool isCurrentlyMovingElements() const;555556/// @brief check if given element is locked (used for drawing select and delete contour)557bool checkOverLockedElement(const GUIGlObject* GLObject, const bool isSelected) const;558559/// @brief get last created route560GNEDemandElement* getLastCreatedRoute() const;561562/// @brief set last created route563void setLastCreatedRoute(GNEDemandElement* lastCreatedRoute);564565/// @brief set statusBar text566void setStatusBarText(const std::string& text);567568/// @brief whether to autoselect nodes or to lanes569bool autoSelectNodes();570571/// @brief set selection scaling (in GNESelectorFrame)572void setSelectorFrameScale(double selectionScale);573574/// @brief update control contents after undo/redo or recompute575void updateControls();576577/// @brief change all phases578bool changeAllPhases() const;579580/// @brief return true if junction must be showed as bubbles581bool showJunctionAsBubbles() const;582583/// @brief ask merge junctions584bool askMergeJunctions(const GNEJunction* movedJunction, const GNEJunction* targetJunction, bool& alreadyAsked);585586/// @brief ask about change supermode587bool aksChangeSupermode(const std::string& operation, Supermode expectedSupermode);588589/// @brief check if we're selecting detectors in TLS mode590bool selectingDetectorsTLSMode() const;591592/// @brief check if we're selecting junctions in TLS mode593bool selectingJunctionsTLSMode() const;594595/// @brief get variable used to save elements596GNEViewNetHelper::SaveElements& getSaveElements();597598/// @brief get variable used to switch between time formats599GNEViewNetHelper::TimeFormat& getTimeFormat();600601/// @brief restrict lane602bool restrictLane(GNELane* lane, SUMOVehicleClass vclass);603604/// @brief add restricted lane605bool addRestrictedLane(GNELane* lane, SUMOVehicleClass vclass, const bool insertAtFront);606607/// @brief remove restricted lane608bool removeRestrictedLane(GNELane* lane, SUMOVehicleClass vclass);609610protected:611/// @brief FOX needs this612GNEViewNet();613614/// @brief do paintGL615int doPaintGL(int mode, const Boundary& drawingBoundary) override;616617/// @brief called after some features are already initialized618void doInit() override;619620/// @brief returns the id of object under cursor to show their tooltip621GUIGlID getToolTipID() override;622623private:624/// @brief variable use to select objects in view625GNEViewNetHelper::ViewObjectsSelector myViewObjectsSelector;626627/// @name structs related with modes and testing mode628/// @{629630/// @brief variable used to save variables related with edit moves modes631GNEViewNetHelper::EditModes myEditModes;632633/// @brief variable used to save variables related with testing mode634GNEViewNetHelper::TestingMode myTestingMode;635636/// @}637638/// @name structs related with input (keyboard and mouse)639/// @{640641/// @brief variable used to save key status after certain events642GNEViewNetHelper::MouseButtonKeyPressed myMouseButtonKeyPressed;643644/// @}645646/// @name structs related with checkable buttons647/// @{648649/// @brief variable used to save checkable buttons for common supermodes650GNEViewNetHelper::CommonCheckableButtons myCommonCheckableButtons;651652/// @brief variable used to save checkable buttons for Supermode Network653GNEViewNetHelper::NetworkCheckableButtons myNetworkCheckableButtons;654655/// @brief variable used to save checkable buttons for Supermode Demand656GNEViewNetHelper::DemandCheckableButtons myDemandCheckableButtons;657658/// @brief variable used to save checkable buttons for Supermode Data659GNEViewNetHelper::DataCheckableButtons myDataCheckableButtons;660661/// @}662663/// @name structs related with view options664/// @{665666/// @brief variable used to save variables related with view options in supermode Network667GNEViewNetHelper::NetworkViewOptions myNetworkViewOptions;668669/// @brief variable used to save variables related with view options in supermode Demand670GNEViewNetHelper::DemandViewOptions myDemandViewOptions;671672/// @brief variable used to save variables related with view options in supermode Data673GNEViewNetHelper::DataViewOptions myDataViewOptions;674675/// @}676677/// @brief variable used to save IntervalBar678GNEViewNetHelper::IntervalBar myIntervalBar;679680/// @name structs related with move elements681/// @{682683/// @brief modul used for moving single element684GNEViewNetHelper::MoveSingleElementModul myMoveSingleElement;685686/// @brief modul used for moving multiple elements687GNEViewNetHelper::MoveMultipleElementModul myMoveMultipleElements;688689// @}690691/// @name structs related with Demand options692/// @{693694/// @brief variable used to save variables related with vehicle options695GNEViewNetHelper::VehicleOptions myVehicleOptions;696697/// @brief variable used to save variables related with vehicle type options698GNEViewNetHelper::VehicleTypeOptions myVehicleTypeOptions;699700// @}701702/// @brief variable used for grouping all variables related with salve elements703GNEViewNetHelper::SaveElements mySaveElements;704705/// @brief variable used for grouping all variables related with switch time706GNEViewNetHelper::TimeFormat myTimeFormat;707708/// @brief variable used for grouping all variables related with selecting areas709GNEViewNetHelper::SelectingArea mySelectingArea;710711/// @brief struct for grouping all variables related with edit shapes712GNEViewNetHelper::EditNetworkElementShapes myEditNetworkElementShapes;713714/// @brief lock manager715GNEViewNetHelper::LockManager myLockManager;716717/// @brief inspected element718GNEViewNetHelper::InspectedElements myInspectedElements;719720/// @brief front element721GNEViewNetHelper::MarkFrontElements myMarkFrontElements;722723/// @brief view parent724GNEViewParent* myViewParent = nullptr;725726/// @brief Pointer to current net. (We are not responsible for deletion)727GNENet* myNet = nullptr;728729/// @brief the current frame730GNEFrame* myCurrentFrame = nullptr;731732/// @brief a reference to the undolist maintained in the application733GNEUndoList* myUndoList = nullptr;734735/// @brief last created route736GNEDemandElement* myLastCreatedRoute = nullptr;737738/// @brief draw preview roundabout739bool myDrawPreviewRoundabout = false;740741/// @brief flag for mark if during this frame a popup was created (needed to avoid problems in linux with CursorDialogs)742bool myCreatedPopup = false;743744/// @brief drawin toggle (used in drawGLElements to avoid draw elements twice)745int myDrawingToggle = 0;746747/// @brief create edit mode buttons and elements748void buildEditModeControls();749750/// @brief updates Network mode specific controls751void updateNetworkModeSpecificControls();752753/// @brief updates Demand mode specific controls754void updateDemandModeSpecificControls();755756/// @brief updates Data mode specific controls757void updateDataModeSpecificControls();758759/// @brief delete given network attribute carriers760void deleteNetworkAttributeCarrier(const GNEAttributeCarrier* AC);761762/// @brief delete given demand attribute carriers763void deleteDemandAttributeCarrier(const GNEAttributeCarrier* AC);764765/// @brief delete data attribute carriers766void deleteDataAttributeCarrier(const GNEAttributeCarrier* AC);767768/// @brief try to retrieve an edge at popup position769GNEEdge* getEdgeAtPopupPosition();770771/// @brief try to retrieve a lane at popup position772GNELane* getLaneAtPopupPosition();773774/// @brief try to retrieve a junction at popup position775GNEJunction* getJunctionAtPopupPosition();776777/// @brief try to retrieve a connection at popup position778GNEConnection* getConnectionAtPopupPosition();779780/// @brief try to retrieve a crossing at popup position781GNECrossing* getCrossingAtPopupPosition();782783/// @brief try to retrieve a walkingArea at popup position784GNEWalkingArea* getWalkingAreaAtPopupPosition();785786/// @brief try to retrieve a additional at popup position787GNEAdditional* getAdditionalAtPopupPosition();788789/// @brief try to retrieve a demand element at popup position790GNEDemandElement* getDemandElementAtPopupPosition();791792/// @brief try to retrieve a polygon at popup position793GNEPoly* getPolygonAtPopupPosition();794795/// @brief try to retrieve a POILane at popup position796GNEPOI* getPOIAtPopupPosition();797798/// @brief try to retrieve a TAZ at popup position799GNETAZ* getTAZAtPopupPosition();800801/// @brief try to retreive a edited shape at popup position802GNENetworkElement* getShapeEditedAtPopupPosition();803804/// @brief Auxiliary function used by onLeftBtnPress(...)805void processClick(void* eventData);806807/// @brief update cursor after every click/key press/release808void updateCursor();809810/// @brief draw functions811/// @{812813/// @brief draw all gl elements of netedit814int drawGLElements(const Boundary& bound);815816/// @brief draw grid and update grid button817void drawGrid() const;818819/// @brief draw temporal polygon shape in Polygon Mode820void drawTemporalDrawingShape() const;821822/// @brief draw temporal junction in create edge mode823void drawTemporalJunction() const;824825/// @brief draw temporal split junction in create edge mode826void drawTemporalSplitJunction() const;827828/// @brief draw temporal roundabout829void drawTemporalRoundabout() const;830831/// @brief draw temporal E1 TLS Lines832void drawTemporalE1TLSLines() const;833834/// @brief draw temporal Junction TLS Lines835void drawTemporalJunctionTLSLines() const;836837/// @brief draw circle in testing mode (needed for grid)838void drawNeteditAttributesReferences();839840/// @brief draw circle in testing mode (needed for grid)841void drawTestsCircle() const;842843/// @}844845/// @brief mouse process functions846/// @{847848/// @brief process left button press function in Supermode Network849void processLeftButtonPressNetwork(void* eventData);850851/// @brief process left button release function in Supermode Network852void processLeftButtonReleaseNetwork();853854/// @brief process move mouse function in Supermode Network855void processMoveMouseNetwork(const bool mouseLeftButtonPressed);856857/// @brief process left button press function in Supermode Demand858void processLeftButtonPressDemand(void* eventData);859860/// @brief process left button release function in Supermode Demand861void processLeftButtonReleaseDemand();862863/// @brief process move mouse function in Supermode Demand864void processMoveMouseDemand(const bool mouseLeftButtonPressed);865866/// @brief process left button press function in Supermode Data867void processLeftButtonPressData(void* eventData);868869/// @brief process left button release function in Supermode Data870void processLeftButtonReleaseData();871872/// @brief process move mouse function in Supermode Data873void processMoveMouseData(const bool mouseLeftButtonPressed);874875/// @brief Invalidated copy constructor.876GNEViewNet(const GNEViewNet&) = delete;877878/// @brief Invalidated assignment operator.879GNEViewNet& operator=(const GNEViewNet&) = delete;880};881882883