Path: blob/main/src/netedit/frames/data/GNEGenericDataFrame.h
193678 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 GNEGenericDataFrame.h14/// @author Pablo Alvarez Lopez15/// @date Jan 202016///17// The Widget for add genericData elements18/****************************************************************************/19#pragma once20#include <config.h>2122#include <netedit/frames/GNEFrame.h>23#include <netedit/frames/common/GNEGroupBoxModule.h>2425// ===========================================================================26// class declaration27// ===========================================================================2829class GNEAttributesEditor;30class GNEAttributesEditorType;31class GNEDataInterval;32class GNEDataSet;33class GNEPathCreator;3435// ===========================================================================36// class definitions37// ===========================================================================3839class GNEGenericDataFrame : public GNEFrame {4041public:42// ===========================================================================43// class DataSetSelector44// ===========================================================================4546class DataSetSelector : public GNEGroupBoxModule {47/// @brief FOX-declaration48FXDECLARE(GNEGenericDataFrame::DataSetSelector)4950public:51/// @brief constructor52DataSetSelector(GNEGenericDataFrame* genericDataFrameParent);5354/// @brief destructor55~DataSetSelector();5657/// @brief refresh interval selector58void refreshDataSetSelector(const GNEDataSet* currentDataSet);5960/// @brief get current select data set ID61GNEDataSet* getDataSet() const;6263/// @name FOX-callbacks64/// @{65/// @brief called when user press button "create dataSet"66long onCmdCreateDataSet(FXObject*, FXSelector, void*);6768/// @brief Called when the user set a new data set ID69long onCmdSetNewDataSetID(FXObject*, FXSelector, void*);7071/// @brief Called when the user select an existent data set72long onCmdSelectDataSet(FXObject* obj, FXSelector, void*);7374/// @brief Called when the user select check button75long onCmdSelectCheckButton(FXObject* obj, FXSelector, void*);7677/// @}7879protected:80FOX_CONSTRUCTOR(DataSetSelector)8182private:83/// @brief pointer to genericData frame Parent84GNEGenericDataFrame* myGenericDataFrameParent;8586/// @brief check button to create a new dataSet87FXCheckButton* myNewDataSetCheckButton;8889/// @brief horizontal frame new id90FXHorizontalFrame* myHorizontalFrameNewID;9192/// @brief interval new id93FXTextField* myNewDataSetIDTextField;9495/// @brief create dataSet button96FXButton* myCreateDataSetButton;9798/// @brief comboBox with intervals99MFXComboBoxIcon* myDataSetsComboBox;100};101102// ===========================================================================103// class IntervalSelector104// ===========================================================================105106class IntervalSelector : public GNEGroupBoxModule {107/// @brief FOX-declaration108FXDECLARE(GNEGenericDataFrame::IntervalSelector)109110public:111/// @brief constructor112IntervalSelector(GNEGenericDataFrame* genericDataFrameParent);113114/// @brief destructor115~IntervalSelector();116117/// @brief enable contents118void enableContents() const;119120/// @brief disable contents121void disableContents() const;122123/// @brief refresh interval selector124void refreshIntervalSelector();125126/// @brief get current select data set ID127GNEDataInterval* getDataInterval() const;128129/// @name FOX-callbacks130/// @{131/// @brief called when user press button "create interval"132long onCmdCreateInterval(FXObject*, FXSelector, void*);133134/// @brief Called when the user select an interval in the list135long onCmdSelectInterval(FXObject*, FXSelector, void*);136137/// @brief Called when the user changes begin or end138long onCmdSetIntervalAttribute(FXObject*, FXSelector, void*);139140/// @brief Called when the user select check button141long onCmdSelectCheckButton(FXObject* obj, FXSelector, void*);142143/// @}144145protected:146/// @brief FOX needs this147FOX_CONSTRUCTOR(IntervalSelector)148149private:150/// @brief add interval item into list151FXTreeItem* addIntervalItem(GNEDataInterval* dataInterval, FXTreeItem* itemParent = nullptr);152153/// @brief pointer to genericData frame Parent154GNEGenericDataFrame* myGenericDataFrameParent;155156/// @brief check button to create a new interval157FXCheckButton* myNewIntervalCheckButton;158159/// @brief interval begin horizontal frame160FXHorizontalFrame* myHorizontalFrameBegin;161162/// @brief interval begin text field163FXTextField* myBeginTextField;164165/// @brief interval end horizontal frame166FXHorizontalFrame* myHorizontalFrameEnd;167168/// @brief interval end169FXTextField* myEndTextField;170171/// @brief create interval button172FXButton* myCreateIntervalButton;173174/// @brief tree list to show the interval list175FXTreeList* myIntervalsTreelist;176177/// @brief map used to save the Tree items with their GNEDataInterval178std::map<FXTreeItem*, GNEDataInterval*> myTreeItemIntervalMap;179};180181// ===========================================================================182// class AttributeSelector183// ===========================================================================184185class AttributeSelector : public GNEGroupBoxModule {186/// @brief FOX-declaration187FXDECLARE(GNEGenericDataFrame::AttributeSelector)188189public:190/// @brief constructor191AttributeSelector(GNEGenericDataFrame* genericDataFrameParent, SumoXMLTag tag);192193/// @brief destructor194~AttributeSelector();195196/// @brief refresh interval selector197void refreshAttributeSelector();198199/// @brief get filtered attribute200std::string getFilteredAttribute() const;201202/// @brief get color for the given value203const RGBColor& getScaledColor(const double min, const double max, const double value) const;204205/// @brief getgeneric data tag206SumoXMLTag getGenericDataTag() const;207208/// @name FOX-callbacks209/// @{210211/// @brief Called when the user select a attribute in the combo boz212long onCmdSelectAttribute(FXObject*, FXSelector, void*);213214/// @}215216protected:217FOX_CONSTRUCTOR(AttributeSelector)218219private:220/// @brief pointer to genericData frame Parent221GNEGenericDataFrame* myGenericDataFrameParent;222223/// @brief combo box for attributes224MFXComboBoxIcon* myAttributesComboBox;225226/// @brief label for min/max attribute227FXLabel* myMinMaxLabel;228229/// @brief generic data tag230SumoXMLTag myGenericDataTag;231};232233/// @brief get dataSet selector modul234const DataSetSelector* getDataSetSelector() const;235236/// @brief get interval selector modul237const IntervalSelector* getIntervalSelector() const;238239/// @brief getattribute selector modul240const AttributeSelector* getAttributeSelector() const;241242/// @brief get GNEPathCreator modul243GNEPathCreator* getPathCreator() const;244245/// @brief show Frame246void show();247248/// @brief hide Frame249void hide();250251/// @brief function called after undo/redo in the current frame252void updateFrameAfterUndoRedo();253254protected:255/**@brief Constructor (protected due GNEGenericDataFrame is abtract)256* @brief viewParent GNEViewParent in which this GNEFrame is placed257* @brief viewNet GNEViewNet that uses this GNEFrame258* @brief tag generic data tag259* @brief pathCreator flag to create pathCreator260*/261GNEGenericDataFrame(GNEViewParent* viewParent, GNEViewNet* viewNet, SumoXMLTag tag, const bool pathCreator);262263/// @brief Destructor264~GNEGenericDataFrame();265266/// @brief interval selected267void intervalSelected();268269/// @brief create path270virtual bool createPath(const bool useLastRoute);271272/// @brief dataSet selector modul273DataSetSelector* myDataSetSelector = nullptr;274275/// @brief interval selector modul276IntervalSelector* myIntervalSelector = nullptr;277278/// @brief attribute selector modul279AttributeSelector* myAttributeSelector = nullptr;280281/// @brief parameters editor creator282GNEAttributesEditor* myGenericDataAttributesEditor = nullptr;283284/// @brief edge path creator (used for Walks, rides and trips)285GNEPathCreator* myPathCreator = nullptr;286287private:288/// @brief Invalidated copy constructor.289GNEGenericDataFrame(const GNEGenericDataFrame&) = delete;290291/// @brief Invalidated assignment operator.292GNEGenericDataFrame& operator=(const GNEGenericDataFrame&) = delete;293};294295296