Path: blob/main/src/netedit/frames/network/GNECreateEdgeFrame.h
193871 views
/****************************************************************************/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 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>23#include <netedit/frames/common/GNEGroupBoxModule.h>2425// ===========================================================================26// class declaration27// ===========================================================================2829class GNEEdgeType;30class GNEAttributesEditor;3132// ===========================================================================33// class definitions34// ===========================================================================3536class GNECreateEdgeFrame : public GNEFrame {3738public:3940// ===========================================================================41// class EdgeTypeSelector42// ===========================================================================4344class EdgeTypeSelector : public GNEGroupBoxModule {45/// @brief FOX-declaration46FXDECLARE(GNECreateEdgeFrame::EdgeTypeSelector)4748public:49/// @brief constructor50EdgeTypeSelector(GNECreateEdgeFrame* createEdgeFrameParent);5152/// @brief destructor53~EdgeTypeSelector();5455/// @brief refresh edge type selector56void refreshEdgeTypeSelector();5758/// @brief update id in comboBox59void updateIDinComboBox(const std::string& oldID, const std::string& newID);6061/// @brief check if we're using default edge type62bool useDefaultEdgeType() const;6364/// @brief check if we're using default edge type short65bool useDefaultEdgeTypeShort() const;6667/// @brief check if we have to use edge template68bool useEdgeTemplate() const;6970/// @brief void enable checkbox for disable pedestrians71void enableCheckBoxDisablePedestrians();7273/// @brief get edgeType selected74GNEEdgeType* getEdgeTypeSelected() const;7576/// @brief check if no pedestrian check button is enabled77bool isNoPedestriansEnabled() const;7879/// @brief check if add sidewalk check button is enabled80bool isAddSidewalkEnabled() const;8182/// @brief check if add bikelane check button is enabled83bool isAddBikelaneEnabled() const;8485/// @brief clear edgeType selected86void clearEdgeTypeSelected();8788/// @brief set current edgeType89void setCurrentEdgeType(const GNEEdgeType* edgeType);9091/// @brief use template92void useTemplate();9394/// @name FOX-callbacks95/// @{96/// @brief Called when the user press a radio button97long onCmdRadioButton(FXObject*, FXSelector, void*);9899/// @brief Called when the user press button for add a new edge type100long onCmdAddEdgeType(FXObject*, FXSelector, void*);101102/// @brief Called when the user press button for delete edge type103long onCmdDeleteEdgeType(FXObject*, FXSelector, void*);104105/// @brief Called when the user press select an edgeType or template in comboBox106long onCmdSelectEdgeTypeOrTemplate(FXObject*, FXSelector, void*);107108/// @brief Called when the user press create edgeType from Template109long onCmdCreateFromTemplate(FXObject*, FXSelector, void*);110111/// @brief Called when check buttons are updated112long onUpdCheckButtons(FXObject*, FXSelector, void*);113114/// @}115116protected:117/// @brief FOX need this118FOX_CONSTRUCTOR(EdgeTypeSelector);119120/// @brief fill comboBox121void fillComboBox();122123private:124/// @brief pointer to createEdgeFrameParent125GNECreateEdgeFrame* myCreateEdgeFrameParent;126127/// @brief selected edgeType128GNEEdgeType* myEdgeTypeSelected = nullptr;129130/// @brief currentIndex131int myCurrentIndex;132133/// @brief create default edge134FXRadioButton* myCreateDefaultEdgeType = nullptr;135136/// @brief create default edge short137FXRadioButton* myCreateDefaultShortEdgeType = nullptr;138139/// @brief no pedestrian check button140FXCheckButton* myNoPedestriansCheckButton = nullptr;141142/// @brief add sidewalk check button143FXCheckButton* myAddSidewalkCheckButton = nullptr;144145/// @brief add bike check button146FXCheckButton* myAddBikelaneCheckButton = nullptr;147148/// @brief create custom edge149FXRadioButton* myCreateCustomEdgeType = nullptr;150151/// @brief ComboBox for edge types152MFXComboBoxIcon* myEdgeTypesComboBox = nullptr;153154/// @brief button for create new edge type155FXButton* myAddEdgeTypeButton = nullptr;156157/// @brief button for delete edge type158FXButton* myDeleteEdgeTypeButton = nullptr;159160/// @brief button for create edgeType from template161FXButton* myCreateFromTemplate = nullptr;162};163164// ===========================================================================165// class LaneTypeSelector166// ===========================================================================167168class LaneTypeSelector : public GNEGroupBoxModule {169/// @brief FOX-declaration170FXDECLARE(GNECreateEdgeFrame::LaneTypeSelector)171172public:173/// @brief constructor174LaneTypeSelector(GNECreateEdgeFrame* createEdgeFrameParent);175176/// @brief destructor177~LaneTypeSelector();178179/// @brief show lane type selector180void showLaneTypeSelector();181182/// @brief hide lane type selector183void hideLaneTypeSelector();184185/// @brief refresh LaneTypeSelector186void refreshLaneTypeSelector();187188/// @name FOX-callbacks189/// @{190/// @brief Called when the user press button for add a new lane type191long onCmdAddLaneType(FXObject*, FXSelector, void*);192193/// @brief Called when the user press button for delete lane type194long onCmdDeleteLaneType(FXObject*, FXSelector, void*);195196/// @brief Called when the user press select an laneType in comboBox197long onCmdSelectLaneType(FXObject*, FXSelector, void*);198199/// @}200201protected:202/// @brief FOX need this203FOX_CONSTRUCTOR(LaneTypeSelector);204205/// @brief update comboBox206void updateComboBox();207208private:209/// @brief pointer to createEdgeFrameParent210GNECreateEdgeFrame* myCreateEdgeFrameParent;211212/// @brief lane index213int myLaneIndex;214/// @brief ComboBox for lane types215MFXComboBoxIcon* myLaneTypesComboBox = nullptr;216217/// @brief button for create new lane type218FXButton* myAddLaneTypeButton = nullptr;219220/// @brief button for delete lane type221FXButton* myDeleteLaneTypeButton = nullptr;222};223224// ===========================================================================225// class Legend226// ===========================================================================227228class Legend : public GNEGroupBoxModule {229230public:231/// @brief constructor232Legend(GNECreateEdgeFrame* createEdgeFrameParent);233234/// @brief destructor235~Legend();236};237238/**@brief Constructor239* @brief viewParent GNEViewParent in which this GNEFrame is placed240* @brief viewNet viewNet that uses this GNEFrame241*/242GNECreateEdgeFrame(GNEViewParent* viewParent, GNEViewNet* viewNet);243244/// @brief Destructor245~GNECreateEdgeFrame();246247/**@brief handle processClick and set the relative coloring248* @param[in] clickedPosition clicked position over ViewNet249* @param viewObjects collection of objects under cursor after click over view250* @param oppositeEdge automatically create an opposite edge251* @param chainEdge create edges in chain mode252*/253void processClick(const Position& clickedPosition, const GNEViewNetHelper::ViewObjectsSelector& viewObjects, const bool oppositeEdge, const bool chainEdge);254255/// @brief abort current edge creation256void abortEdgeCreation();257258/// @brief get junction source for new edge259const GNEJunction* getJunctionSource() const;260261/// @brief show create edge frame262void show();263264/// @brief hide create edge frame265void hide();266267/// @brief get edgeType selector268EdgeTypeSelector* getEdgeTypeSelector() const;269270/// @brief get edgeType attributes271GNEAttributesEditor* getEdgeTypeAttributes() const;272273/// @brief get lane type selector274LaneTypeSelector* getLaneTypeSelector();275276/// @brief get laneType attributes277GNEAttributesEditor* getLaneTypeAttributes() const;278279/// @brief set default to using edge template280void setUseEdgeTemplate();281282protected:283/// @brief edge type selector284EdgeTypeSelector* myEdgeTypeSelector = nullptr;285286/// @brief internal edgeType attributes287GNEAttributesEditor* myEdgeTypeAttributesEditor = nullptr;288289/// @brief lane type selector290GNECreateEdgeFrame::LaneTypeSelector* myLaneTypeSelector = nullptr;291292/// @brief internal laneType attributes293GNEAttributesEditor* myLaneTypeAttributesEditor = nullptr;294295/// @brief Legend296GNECreateEdgeFrame::Legend* myLegend = nullptr;297298/// @brief disable pedestrians in the given edge (within undoRedo)299void disablePedestrians(GNEEdge* edge) const;300301/// @brief add sidewalk in the given edge302void addSidewalk(GNEEdge* edge, const std::string& sidewalkWidth) const;303304/// @brief add bikelane in the given edge305void addBikelane(GNEEdge* edge, const std::string& bikelaneWidth) const;306307private:308/// @brief source junction for new edge309GNEJunction* myJunctionSource;310};311312313