Path: blob/main/src/netedit/dialogs/GNEParametersDialog.h
169678 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 GNEParametersDialog.h14/// @author Pablo Alvarez Lopez15/// @date Jul 201816///17// Dialog for edit parameters18/****************************************************************************/19#pragma once20#include <config.h>2122#include <netedit/dialogs/elements/GNEVehicleTypeDialog.h>23#include <utils/xml/SUMOSAXHandler.h>2425#include "GNEDialog.h"2627// ===========================================================================28// class definitions29// ===========================================================================3031class GNEAttributeCarrier;32class GNEAttributesEditorType;33class GNEViewNet;34class NBLoadedSUMOTLDef;3536// ===========================================================================37// class definitions38// ===========================================================================3940class GNEParametersDialog : public GNEDialog {41/// @brief FOX-declaration42FXDECLARE(GNEParametersDialog)4344public:4546// ===========================================================================47// class ParametersValues48// ===========================================================================4950class ParametersValues : protected FXGroupBox {51/// @brief FOX-declaration52FXDECLARE(GNEParametersDialog::ParametersValues)5354/// @brief declare class55class ParameterRow;5657public:58/// @brief constructor59ParametersValues(FXHorizontalFrame* frame, const std::string& name);6061/// @brief destructor62~ParametersValues();6364/// @brief set parameters map65void setParameters(const Parameterised::Map& newParameters);6667/// @brief set parameters68void setParameters(const std::vector<std::pair<std::string, std::string> >& newParameters);6970/// @brief add a single parameter71void addParameter(std::pair<std::string, std::string> newParameter);7273/// @brief clear all parameters74void clearParameters();7576/// @brief get vector with the ParameterRows77const std::vector<ParameterRow*> getParameterRows() const;7879/// @brief check if given key exist already80bool keyExist(const std::string& key) const;8182/// @name FOX-callbacks83/// @{84/// @brief on paint function (reimplemented from FXGroupBox)85long onPaint(FXObject* o, FXSelector f, void* p);8687/// @brief event when user change an attribute88long onCmdSetAttribute(FXObject*, FXSelector, void*);8990/// @brief event when user press a remove (or add) button91long onCmdButtonPress(FXObject*, FXSelector, void*);9293/// @}9495protected:96/// @brief FOX need this97FOX_CONSTRUCTOR(ParametersValues)9899private:100/// @brief class for parameters Row101class ParameterRow {102103public:104/// @brief constructor105ParameterRow(ParametersValues* ParametersValues, FXVerticalFrame* verticalFrameParent);106107/// @brief destructor108~ParameterRow();109110/// @brief disable row111void disableRow();112113/// @brief enable row114void enableRow(const std::string& parameter, const std::string& value) const;115116/// @brief toggle add button117void toggleAddButton();118119/// @brief check if remove button is in mode "add"120bool isButtonInAddMode() const;121122/// @brief copy values of other parameter Row123void copyValues(const ParameterRow& other);124125/// @brief TextField for parameter126FXTextField* keyField;127128/// @brief TextField for value129FXTextField* valueField;130131/// @brief Button for add or remove row132FXButton* button;133private:134/// @brief frame in which elements of ParameterRow are placed135FXHorizontalFrame* horizontalFrame;136};137138/// @brief label for key (its neccesary because has to be resized in every onPaint() iteration)139FXLabel* myKeyLabel;140141/// @brief vertical frame in which rows are placed142FXVerticalFrame* myVerticalFrameRow;143144/// @brief vector with the ParameterRows145std::vector<ParameterRow*> myParameterRows;146};147148// ===========================================================================149// class ParametersOperations150// ===========================================================================151152class ParametersOperations : protected FXGroupBox {153/// @brief FOX-declaration154FXDECLARE(GNEParametersDialog::ParametersOperations)155156public:157/// @brief constructor158ParametersOperations(FXHorizontalFrame* frame, GNEParametersDialog* ParameterDialogParent);159160/// @brief destructor161~ParametersOperations();162163/// @name FOX-callbacks164/// @{165/// @brief event when user press load parameters button166long onCmdLoadParameters(FXObject*, FXSelector, void*);167168/// @brief event when user press save parameters button169long onCmdSaveParameters(FXObject*, FXSelector, void*);170171/// @brief event when user press clear parameters button172long onCmdClearParameters(FXObject*, FXSelector, void*);173174/// @brief event when user press sort parameters button175long onCmdSortParameters(FXObject*, FXSelector, void*);176177/// @brief event when user press help parameters button178long onCmdHelpParameter(FXObject*, FXSelector, void*);179180/// @}181182protected:183/// @brief FOX need this184FOX_CONSTRUCTOR(ParametersOperations)185186private:187/// @class GNEParameterHandler188/// @brief load parameters from a filename189class GNEParameterHandler : public SUMOSAXHandler {190191public:192/// @brief Constructor193GNEParameterHandler(ParametersOperations* ParametersOperationsParent, const std::string& file);194195/// @brief Destructor196~GNEParameterHandler();197198/// @name inherited from SAXHandler199/// @{200/**@brief Called on the opening of a tag;201* @param[in] element ID of the currently opened element202* @param[in] attrs Attributes within the currently opened element203* @exception ProcessError If something fails204* @see SAXHandler::myStartElement205*/206void myStartElement(int element, const SUMOSAXAttributes& attrs);207208private:209/// @brief pointer to ParametersOperations parent210ParametersOperations* myParametersOperationsParent;211};212213/// @brief pointer to Shape Frame Parent214GNEParametersDialog* myParameterDialogParent;215216/// @brief sort button217FXButton* mySortButton;218219/// @brief clear button220FXButton* myClearButton;221222/// @brief load button223FXButton* myLoadButton;224225/// @brief save button226FXButton* mySaveButton;227228/// @brief help button229FXButton* myHelpButton;230};231232/// @brief constructor233GNEParametersDialog(GNEApplicationWindow* applicationWindow, const Parameterised::Map& parameters);234235/// @brief destructor236~GNEParametersDialog();237238/// @brief run internal test239void runInternalTest(const InternalTestStep::DialogArgument* dialogArgument);240241/// @brief get edited parameters242std::vector<std::pair<std::string, std::string> > getEditedParameters() const;243244/// @name FOX-callbacks245/// @{246247/// @brief event after press accept button248long onCmdAccept(FXObject*, FXSelector, void*);249250/// @brief event after press reset button251long onCmdReset(FXObject*, FXSelector, void*);252253/// @}254255protected:256/// @brief FOX need this257FOX_CONSTRUCTOR(GNEParametersDialog)258259/// @brief original parameters260const Parameterised::Map myOriginalParameters;261262/// @brief pointer to parameters values263ParametersValues* myParametersValues = nullptr;264265/// @brief pointer to parameters operations266ParametersOperations* myParametersOperations = nullptr;267268private:269/// @brief Invalidated copy constructor.270GNEParametersDialog(const GNEParametersDialog&) = delete;271272/// @brief Invalidated assignment operator.273GNEParametersDialog& operator=(const GNEParametersDialog&) = delete;274};275276277