Path: blob/main/src/netedit/frames/data/GNEGenericDataFrame.h
169684 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 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>2324// ===========================================================================25// class declaration26// ===========================================================================2728class GNEAttributesEditor;29class GNEAttributesEditorType;30class GNEDataInterval;31class GNEDataSet;32class GNEPathCreator;3334// ===========================================================================35// class definitions36// ===========================================================================3738class GNEGenericDataFrame : public GNEFrame {3940public:41// ===========================================================================42// class DataSetSelector43// ===========================================================================4445class DataSetSelector : public MFXGroupBoxModule {46/// @brief FOX-declaration47FXDECLARE(GNEGenericDataFrame::DataSetSelector)4849public:50/// @brief constructor51DataSetSelector(GNEGenericDataFrame* genericDataFrameParent);5253/// @brief destructor54~DataSetSelector();5556/// @brief refresh interval selector57void refreshDataSetSelector(const GNEDataSet* currentDataSet);5859/// @brief get current select data set ID60GNEDataSet* getDataSet() const;6162/// @name FOX-callbacks63/// @{64/// @brief called when user press button "create dataSet"65long onCmdCreateDataSet(FXObject*, FXSelector, void*);6667/// @brief Called when the user set a new data set ID68long onCmdSetNewDataSetID(FXObject*, FXSelector, void*);6970/// @brief Called when the user select an existent data set71long onCmdSelectDataSet(FXObject* obj, FXSelector, void*);7273/// @brief Called when the user select check button74long onCmdSelectCheckButton(FXObject* obj, FXSelector, void*);7576/// @}7778protected:79FOX_CONSTRUCTOR(DataSetSelector)8081private:82/// @brief pointer to genericData frame Parent83GNEGenericDataFrame* myGenericDataFrameParent;8485/// @brief check button to create a new dataSet86FXCheckButton* myNewDataSetCheckButton;8788/// @brief horizontal frame new id89FXHorizontalFrame* myHorizontalFrameNewID;9091/// @brief interval new id92FXTextField* myNewDataSetIDTextField;9394/// @brief create dataSet button95FXButton* myCreateDataSetButton;9697/// @brief comboBox with intervals98MFXComboBoxIcon* myDataSetsComboBox;99};100101// ===========================================================================102// class IntervalSelector103// ===========================================================================104105class IntervalSelector : public MFXGroupBoxModule {106/// @brief FOX-declaration107FXDECLARE(GNEGenericDataFrame::IntervalSelector)108109public:110/// @brief constructor111IntervalSelector(GNEGenericDataFrame* genericDataFrameParent);112113/// @brief destructor114~IntervalSelector();115116/// @brief enable contents117void enableContents() const;118119/// @brief disable contents120void disableContents() const;121122/// @brief refresh interval selector123void refreshIntervalSelector();124125/// @brief get current select data set ID126GNEDataInterval* getDataInterval() const;127128/// @name FOX-callbacks129/// @{130/// @brief called when user press button "create interval"131long onCmdCreateInterval(FXObject*, FXSelector, void*);132133/// @brief Called when the user select an interval in the list134long onCmdSelectInterval(FXObject*, FXSelector, void*);135136/// @brief Called when the user changes begin or end137long onCmdSetIntervalAttribute(FXObject*, FXSelector, void*);138139/// @brief Called when the user select check button140long onCmdSelectCheckButton(FXObject* obj, FXSelector, void*);141142/// @}143144protected:145/// @brief FOX needs this146FOX_CONSTRUCTOR(IntervalSelector)147148private:149/// @brief add interval item into list150FXTreeItem* addIntervalItem(GNEDataInterval* dataInterval, FXTreeItem* itemParent = nullptr);151152/// @brief pointer to genericData frame Parent153GNEGenericDataFrame* myGenericDataFrameParent;154155/// @brief check button to create a new interval156FXCheckButton* myNewIntervalCheckButton;157158/// @brief interval begin horizontal frame159FXHorizontalFrame* myHorizontalFrameBegin;160161/// @brief interval begin text field162FXTextField* myBeginTextField;163164/// @brief interval end horizontal frame165FXHorizontalFrame* myHorizontalFrameEnd;166167/// @brief interval end168FXTextField* myEndTextField;169170/// @brief create interval button171FXButton* myCreateIntervalButton;172173/// @brief tree list to show the interval list174FXTreeList* myIntervalsTreelist;175176/// @brief map used to save the Tree items with their GNEDataInterval177std::map<FXTreeItem*, GNEDataInterval*> myTreeItemIntervalMap;178};179180// ===========================================================================181// class AttributeSelector182// ===========================================================================183184class AttributeSelector : public MFXGroupBoxModule {185/// @brief FOX-declaration186FXDECLARE(GNEGenericDataFrame::AttributeSelector)187188public:189/// @brief constructor190AttributeSelector(GNEGenericDataFrame* genericDataFrameParent, SumoXMLTag tag);191192/// @brief destructor193~AttributeSelector();194195/// @brief refresh interval selector196void refreshAttributeSelector();197198/// @brief get filtered attribute199std::string getFilteredAttribute() const;200201/// @brief get color for the given value202const RGBColor& getScaledColor(const double min, const double max, const double value) const;203204/// @name FOX-callbacks205/// @{206207/// @brief Called when the user select a attribute in the combo boz208long onCmdSelectAttribute(FXObject*, FXSelector, void*);209210/// @}211212protected:213FOX_CONSTRUCTOR(AttributeSelector)214215private:216/// @brief pointer to genericData frame Parent217GNEGenericDataFrame* myGenericDataFrameParent;218219/// @brief combo box for attributes220MFXComboBoxIcon* myAttributesComboBox;221222/// @brief label for min/max attribute223FXLabel* myMinMaxLabel;224225/// @brief generic data tag226SumoXMLTag myGenericDataTag;227};228229/// @brief get dataSet selector modul230const DataSetSelector* getDataSetSelector() const;231232/// @brief get interval selector modul233const IntervalSelector* getIntervalSelector() const;234235/// @brief getattribute selector modul236const AttributeSelector* getAttributeSelector() const;237238/// @brief get GNEPathCreator modul239GNEPathCreator* getPathCreator() const;240241/// @brief show Frame242void show();243244/// @brief hide Frame245void hide();246247/// @brief function called after undo/redo in the current frame248void updateFrameAfterUndoRedo();249250protected:251/**@brief Constructor (protected due GNEGenericDataFrame is abtract)252* @brief viewParent GNEViewParent in which this GNEFrame is placed253* @brief viewNet GNEViewNet that uses this GNEFrame254* @brief tag generic data tag255* @brief pathCreator flag to create pathCreator256*/257GNEGenericDataFrame(GNEViewParent* viewParent, GNEViewNet* viewNet, SumoXMLTag tag, const bool pathCreator);258259/// @brief Destructor260~GNEGenericDataFrame();261262/// @brief interval selected263void intervalSelected();264265/// @brief create path266virtual bool createPath(const bool useLastRoute);267268/// @brief dataSet selector modul269DataSetSelector* myDataSetSelector = nullptr;270271/// @brief interval selector modul272IntervalSelector* myIntervalSelector = nullptr;273274/// @brief attribute selector modul275AttributeSelector* myAttributeSelector = nullptr;276277/// @brief parameters editor creator278GNEAttributesEditor* myGenericDataAttributesEditor = nullptr;279280/// @brief edge path creator (used for Walks, rides and trips)281GNEPathCreator* myPathCreator = nullptr;282283/// @brief template generic data284GNEGenericData* myTemplateGenericData = nullptr;285286private:287/// @brief Invalidated copy constructor.288GNEGenericDataFrame(const GNEGenericDataFrame&) = delete;289290/// @brief Invalidated assignment operator.291GNEGenericDataFrame& operator=(const GNEGenericDataFrame&) = delete;292};293294295