Path: blob/main/src/netedit/frames/network/GNECreateEdgeFrame.h
169685 views
/****************************************************************************/1// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo2// Copyright (C) 2001-2025 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 GNECreateEdgeFrame.h14/// @author Pablo Alvarez Lopez15/// @date Dec 201816///17// The Widget for create edges (and junctions)18/****************************************************************************/19#pragma once20#include <config.h>2122#include <netedit/frames/GNEFrame.h>2324// ===========================================================================25// class declaration26// ===========================================================================2728class GNEEdgeType;29class GNEAttributesEditor;3031// ===========================================================================32// class definitions33// ===========================================================================3435class GNECreateEdgeFrame : public GNEFrame {3637public:3839// ===========================================================================40// class EdgeTypeSelector41// ===========================================================================4243class EdgeTypeSelector : public MFXGroupBoxModule {44/// @brief FOX-declaration45FXDECLARE(GNECreateEdgeFrame::EdgeTypeSelector)4647public:48/// @brief constructor49EdgeTypeSelector(GNECreateEdgeFrame* createEdgeFrameParent);5051/// @brief destructor52~EdgeTypeSelector();5354/// @brief refresh edge type selector55void refreshEdgeTypeSelector();5657/// @brief update id in comboBox58void updateIDinComboBox(const std::string& oldID, const std::string& newID);5960/// @brief check if we're using default edge type61bool useDefaultEdgeType() const;6263/// @brief check if we're using default edge type short64bool useDefaultEdgeTypeShort() const;6566/// @brief check if we have to use edge template67bool useEdgeTemplate() const;6869/// @brief void enable checkbox for disable pedestrians70void enableCheckBoxDisablePedestrians();7172/// @brief get default edgeType73GNEEdgeType* getDefaultEdgeType() const;7475/// @brief get edgeType selected76GNEEdgeType* getEdgeTypeSelected() const;7778/// @brief check if no pedestrian check button is enabled79bool isNoPedestriansEnabled() const;8081/// @brief check if add sidewalk check button is enabled82bool isAddSidewalkEnabled() const;8384/// @brief check if add bikelane check button is enabled85bool isAddBikelaneEnabled() const;8687/// @brief clear edgeType selected88void clearEdgeTypeSelected();8990/// @brief set current edgeType91void setCurrentEdgeType(const GNEEdgeType* edgeType);9293/// @brief use template94void useTemplate();9596/// @name FOX-callbacks97/// @{98/// @brief Called when the user press a radio button99long onCmdRadioButton(FXObject*, FXSelector, void*);100101/// @brief Called when the user press button for add a new edge type102long onCmdAddEdgeType(FXObject*, FXSelector, void*);103104/// @brief Called when the user press button for delete edge type105long onCmdDeleteEdgeType(FXObject*, FXSelector, void*);106107/// @brief Called when the user press select an edgeType or template in comboBox108long onCmdSelectEdgeTypeOrTemplate(FXObject*, FXSelector, void*);109110/// @brief Called when the user press create edgeType from Template111long onCmdCreateFromTemplate(FXObject*, FXSelector, void*);112113/// @brief Called when check buttons are updated114long onUpdCheckButtons(FXObject*, FXSelector, void*);115116/// @}117118protected:119/// @brief FOX need this120FOX_CONSTRUCTOR(EdgeTypeSelector);121122/// @brief fill comboBox123void fillComboBox();124125private:126/// @brief pointer to createEdgeFrameParent127GNECreateEdgeFrame* myCreateEdgeFrameParent;128129/// @brief default edge type130GNEEdgeType* myDefaultEdgeType;131132/// @brief selected edgeType133GNEEdgeType* myEdgeTypeSelected = nullptr;134135/// @brief currentIndex136int myCurrentIndex;137138/// @brief create default edge139FXRadioButton* myCreateDefaultEdgeType = nullptr;140141/// @brief create default edge short142FXRadioButton* myCreateDefaultShortEdgeType = nullptr;143144/// @brief no pedestrian check button145FXCheckButton* myNoPedestriansCheckButton = nullptr;146147/// @brief add sidewalk check button148FXCheckButton* myAddSidewalkCheckButton = nullptr;149150/// @brief add bike check button151FXCheckButton* myAddBikelaneCheckButton = nullptr;152153/// @brief create custom edge154FXRadioButton* myCreateCustomEdgeType = nullptr;155156/// @brief ComboBox for edge types157MFXComboBoxIcon* myEdgeTypesComboBox = nullptr;158159/// @brief button for create new edge type160FXButton* myAddEdgeTypeButton = nullptr;161162/// @brief button for delete edge type163FXButton* myDeleteEdgeTypeButton = nullptr;164165/// @brief button for create edgeType from template166FXButton* myCreateFromTemplate = nullptr;167};168169// ===========================================================================170// class LaneTypeSelector171// ===========================================================================172173class LaneTypeSelector : public MFXGroupBoxModule {174/// @brief FOX-declaration175FXDECLARE(GNECreateEdgeFrame::LaneTypeSelector)176177public:178/// @brief constructor179LaneTypeSelector(GNECreateEdgeFrame* createEdgeFrameParent);180181/// @brief destructor182~LaneTypeSelector();183184/// @brief show lane type selector185void showLaneTypeSelector();186187/// @brief hide lane type selector188void hideLaneTypeSelector();189190/// @brief refresh LaneTypeSelector191void refreshLaneTypeSelector();192193/// @name FOX-callbacks194/// @{195/// @brief Called when the user press button for add a new lane type196long onCmdAddLaneType(FXObject*, FXSelector, void*);197198/// @brief Called when the user press button for delete lane type199long onCmdDeleteLaneType(FXObject*, FXSelector, void*);200201/// @brief Called when the user press select an laneType in comboBox202long onCmdSelectLaneType(FXObject*, FXSelector, void*);203204/// @}205206protected:207/// @brief FOX need this208FOX_CONSTRUCTOR(LaneTypeSelector);209210/// @brief update comboBox211void updateComboBox();212213private:214/// @brief pointer to createEdgeFrameParent215GNECreateEdgeFrame* myCreateEdgeFrameParent;216217/// @brief lane index218int myLaneIndex;219/// @brief ComboBox for lane types220MFXComboBoxIcon* myLaneTypesComboBox = nullptr;221222/// @brief button for create new lane type223FXButton* myAddLaneTypeButton = nullptr;224225/// @brief button for delete lane type226FXButton* myDeleteLaneTypeButton = nullptr;227};228229// ===========================================================================230// class Legend231// ===========================================================================232233class Legend : public MFXGroupBoxModule {234235public:236/// @brief constructor237Legend(GNECreateEdgeFrame* createEdgeFrameParent);238239/// @brief destructor240~Legend();241};242243/**@brief Constructor244* @brief viewParent GNEViewParent in which this GNEFrame is placed245* @brief viewNet viewNet that uses this GNEFrame246*/247GNECreateEdgeFrame(GNEViewParent* viewParent, GNEViewNet* viewNet);248249/// @brief Destructor250~GNECreateEdgeFrame();251252/**@brief handle processClick and set the relative coloring253* @param[in] clickedPosition clicked position over ViewNet254* @param viewObjects collection of objects under cursor after click over view255* @param oppositeEdge automatically create an opposite edge256* @param chainEdge create edges in chain mode257*/258void processClick(const Position& clickedPosition, const GNEViewNetHelper::ViewObjectsSelector& viewObjects, const bool oppositeEdge, const bool chainEdge);259260/// @brief abort current edge creation261void abortEdgeCreation();262263/// @brief get junction source for new edge264const GNEJunction* getJunctionSource() const;265266/// @brief show create edge frame267void show();268269/// @brief hide create edge frame270void hide();271272/// @brief get edgeType selector273EdgeTypeSelector* getEdgeTypeSelector() const;274275/// @brief get edgeType attributes276GNEAttributesEditor* getEdgeTypeAttributes() const;277278/// @brief get lane type selector279LaneTypeSelector* getLaneTypeSelector();280281/// @brief get laneType attributes282GNEAttributesEditor* getLaneTypeAttributes() const;283284/// @brief set default to using edge template285void setUseEdgeTemplate();286287protected:288/// @brief edge type selector289EdgeTypeSelector* myEdgeTypeSelector = nullptr;290291/// @brief internal edgeType attributes292GNEAttributesEditor* myEdgeTypeAttributesEditor = nullptr;293294/// @brief lane type selector295GNECreateEdgeFrame::LaneTypeSelector* myLaneTypeSelector = nullptr;296297/// @brief internal laneType attributes298GNEAttributesEditor* myLaneTypeAttributesEditor = nullptr;299300/// @brief Legend301GNECreateEdgeFrame::Legend* myLegend = nullptr;302303/// @brief disable pedestrians in the given edge (within undoRedo)304void disablePedestrians(GNEEdge* edge) const;305306/// @brief add sidewalk in the given edge307void addSidewalk(GNEEdge* edge, const std::string& sidewalkWidth) const;308309/// @brief add bikelane in the given edge310void addBikelane(GNEEdge* edge, const std::string& bikelaneWidth) const;311312private:313/// @brief source junction for new edge314GNEJunction* myJunctionSource;315};316317318