70 myGenericDataFrameParent(genericDataFrameParent) {
81 myHorizontalFrameNewID->hide();
84 myCreateDataSetButton->hide();
86 refreshDataSetSelector(
nullptr);
98 myDataSetsComboBox->clearItems();
100 int currentItemIndex = -1;
102 for (
const auto& dataSet : myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDataSets()) {
104 if ((currentItemIndex == -1) && (dataSet == currentDataSet)) {
105 currentItemIndex = myDataSetsComboBox->getNumItems();
107 myDataSetsComboBox->appendItem(dataSet->getID().c_str());
110 myDataSetsComboBox->setNumVisible((
int)myDataSetsComboBox->getNumItems());
112 if (currentItemIndex != -1) {
113 myDataSetsComboBox->setCurrentItem(currentItemIndex, FALSE);
118 if (myGenericDataFrameParent->myIntervalSelector) {
119 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
126 if ((myNewDataSetCheckButton->getCheck() == TRUE) || (myDataSetsComboBox->getNumItems() == 0)) {
137 const std::string dataSetID = myNewDataSetIDTextField->getText().text();
139 if (myNewDataSetIDTextField->getTextColor() == FXRGB(255, 0, 0)) {
141 }
else if (dataSetID.empty()) {
143 }
else if (myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID,
false) !=
nullptr) {
147 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(),
"",
true);
150 refreshDataSetSelector(myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID));
152 myNewDataSetCheckButton->setCheck(FALSE, TRUE);
168 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
175 if (myNewDataSetCheckButton->getCheck() == TRUE) {
177 myHorizontalFrameNewID->show();
178 myCreateDataSetButton->show();
180 myDataSetsComboBox->hide();
183 myHorizontalFrameNewID->hide();
184 myCreateDataSetButton->hide();
186 myDataSetsComboBox->show();
189 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
199 myGenericDataFrameParent(genericDataFrameParent) {
236 myIntervalsTreelist->clearItems();
237 myTreeItemIntervalMap.clear();
239 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
243 FXTreeItem* dataSetItem = myIntervalsTreelist->insertItem(
249 dataSetItem->setExpanded(
true);
252 addIntervalItem(interval.second, dataSetItem);
256 if (myGenericDataFrameParent->myAttributeSelector) {
257 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
267 if (myIntervalsTreelist->getNumItems() > 0) {
268 for (
const auto& treeItem : myTreeItemIntervalMap) {
269 if (treeItem.first->isSelected()) {
270 return treeItem.second;
282 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text()) &&
283 GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
285 const double begin = GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
286 const double end = GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
288 GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
291 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(),
"",
true);
296 myNewIntervalCheckButton->setCheck(FALSE, TRUE);
305 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
312 if (obj == myBeginTextField) {
314 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
315 myBeginTextField->setTextColor(FXRGB(0, 0, 0));
316 myBeginTextField->killFocus();
318 myBeginTextField->setTextColor(FXRGB(255, 0, 0));
320 }
else if (obj == myEndTextField) {
322 if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
323 myEndTextField->setTextColor(FXRGB(0, 0, 0));
324 myEndTextField->killFocus();
326 myEndTextField->setTextColor(FXRGB(255, 0, 0));
335 if (myNewIntervalCheckButton->getCheck() == TRUE) {
337 myHorizontalFrameBegin->show();
338 myHorizontalFrameEnd->show();
339 myCreateIntervalButton->show();
341 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
345 myBeginTextField->setText(
"0");
346 myEndTextField->setText(
"3600");
358 myHorizontalFrameBegin->hide();
359 myHorizontalFrameEnd->hide();
360 myCreateIntervalButton->hide();
363 refreshIntervalSelector();
371 FXTreeItem* item = myIntervalsTreelist->insertItem(
nullptr, itemParent,
376 myTreeItemIntervalMap[item] = dataInterval;
378 item->setExpanded(
true);
380 if (myTreeItemIntervalMap.size() == 1) {
381 item->setSelected(TRUE);
393 myGenericDataFrameParent(genericDataFrameParent),
394 myMinMaxLabel(nullptr),
413 const auto currentAttribute = myAttributesComboBox->getText();
415 myAttributesComboBox->clearItems();
417 myMinMaxLabel->setText(
TL(
"Scale: Min -> Max"));
419 if (myGenericDataFrameParent->myDataSetSelector->getDataSet() ==
nullptr) {
420 myAttributesComboBox->appendItem(
"<no dataSet selected>");
421 myAttributesComboBox->disable();
424 myAttributesComboBox->appendItem(
"<all>");
426 if (myGenericDataFrameParent->myIntervalSelector->getDataInterval() ==
nullptr) {
427 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
430 for (
const auto& attribute : parameters) {
431 myAttributesComboBox->appendItem(attribute.c_str());
435 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
437 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_BEGIN),
438 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_END));
440 for (
const auto& attribute : parameters) {
441 myAttributesComboBox->appendItem(attribute.c_str());
445 myAttributesComboBox->enable();
447 if (myAttributesComboBox->getNumItems() < 10) {
448 myAttributesComboBox->setNumVisible(myAttributesComboBox->getNumItems());
450 myAttributesComboBox->setNumVisible(10);
453 for (
int i = 0; i < myAttributesComboBox->getNumItems(); i++) {
454 if (myAttributesComboBox->getItem(i).text() == currentAttribute) {
455 myAttributesComboBox->setCurrentItem(i, TRUE);
462 myGenericDataFrameParent->getViewNet()->updateViewNet();
468 if (myAttributesComboBox->getNumItems() == 0) {
470 }
else if (myAttributesComboBox->getText() ==
"<all>") {
473 return myAttributesComboBox->getText().text();
481 myMinMaxLabel->setText((
"Min: " +
toString(min) +
" -> Max: " +
toString(max)).c_str());
490 if (myAttributesComboBox->getText().empty()) {
491 myAttributesComboBox->setText(
"<all>");
493 if (myAttributesComboBox->getText() ==
"<all>") {
494 myMinMaxLabel->setText(
TL(
"Scale: Min -> Max"));
497 myGenericDataFrameParent->getViewNet()->updateViewNet();
553 edge.second->resetCandidateFlags();
FXDEFMAP(GNEGenericDataFrame::DataSetSelector) DataSetSelectorMap[]
@ MID_GNE_SET_ATTRIBUTE
attribute edited
@ MID_GNE_DATASET_SELECTED
GNEDataInterval selected in comboBox of IntervalBar.
@ MID_GNE_CREATE
create element
@ MID_GNE_DATAINTERVAL_SELECTED
GNEDataInterval selected in comboBox of IntervalBar.
@ MID_GNE_DATASET_NEW
create new data set
@ MID_GNE_SELECT
select element
#define GUIDesignComboBox
#define GUIDesignComboBoxNCol
number of column of every combo box
#define GUIDesignTextField
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignLabelAttribute
label extended over the matrix column with thick frame
#define GUIDesignTextFieldNCol
Num of column of text field.
#define GUIDesignTreeListFrame
Tree list used in frames to represent elements children.
#define GUIDesignCheckButton
checkButton placed in left position
#define WRITE_WARNING(msg)
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_ATTR_BEGIN
weights: time range begin
@ SUMO_ATTR_END
weights: time range end
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
const std::string getID() const
get ID (all Attribute Carriers have one)
GNENet * getNet() const
get pointer to net
void buildDataSet(const std::string &dataSetID)
Builds DataSet (exclusive of NETEDIT)
void buildDataInterval(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &dataSetID, const double begin, const double end)
Builds DataInterval.
An Element which don't belong to GNENet but has influence in the simulation.
double getAttributeDouble(SumoXMLAttr key) const
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
std::string getHierarchyName() const
get Hierarchy Name (Used in AC Hierarchy)
const std::map< const double, GNEDataInterval * > & getDataIntervalChildren() const
get data interval children
bool checkNewInterval(const double newBegin, const double newEnd)
check if a new GNEDataInterval with the given begin and end can be inserted in current GNEDataSet
static FXLabel * buildRainbow(FXComposite *parent)
build rainbow in frame modul
GNEViewNet * myViewNet
FOX need this.
virtual void show()
show Frame
virtual void hide()
hide Frame
AttributeSelector(GNEGenericDataFrame *genericDataFrameParent, SumoXMLTag tag)
FOX-declaration.
~AttributeSelector()
destructor
long onCmdSelectAttribute(FXObject *, FXSelector, void *)
Called when the user select a attribute in the combo boz.
const RGBColor & getScaledColor(const double min, const double max, const double value) const
get color for the given value
FXLabel * myMinMaxLabel
label for min/max attribute
void refreshAttributeSelector()
refresh interval selector
std::string getFilteredAttribute() const
get filtered attribute
FXComboBox * myAttributesComboBox
combo box for attributes
GNEDataSet * getDataSet() const
get current select data set ID
long onCmdSelectDataSet(FXObject *obj, FXSelector, void *)
Called when the user select an existent data set.
~DataSetSelector()
destructor
long onCmdCreateDataSet(FXObject *, FXSelector, void *)
void refreshDataSetSelector(const GNEDataSet *currentDataSet)
refresh interval selector
long onCmdSetNewDataSetID(FXObject *, FXSelector, void *)
Called when the user set a new data set ID.
long onCmdSelectCheckButton(FXObject *obj, FXSelector, void *)
Called when the user select check button.
FXTreeList * myIntervalsTreelist
tree list to show the interval list
FXTreeItem * addIntervalItem(GNEDataInterval *dataInterval, FXTreeItem *itemParent=nullptr)
add interval item into list
FXHorizontalFrame * myHorizontalFrameEnd
interval end horizontal frame
GNEDataInterval * getDataInterval() const
get current select data set ID
long onCmdCreateInterval(FXObject *, FXSelector, void *)
~IntervalSelector()
destructor
FXCheckButton * myNewIntervalCheckButton
check button to create a new interval
FXButton * myCreateIntervalButton
create interval button
IntervalSelector(GNEGenericDataFrame *genericDataFrameParent)
FOX-declaration.
FXTextField * myEndTextField
interval end
FXHorizontalFrame * myHorizontalFrameBegin
interval begin horizontal frame
long onCmdSetIntervalAttribute(FXObject *, FXSelector, void *)
Called when the user changes begin or end.
long onCmdSelectInterval(FXObject *, FXSelector, void *)
Called when the user select an interval in the list.
void refreshIntervalSelector()
refresh interval selector
long onCmdSelectCheckButton(FXObject *obj, FXSelector, void *)
Called when the user select check button.
FXTextField * myBeginTextField
interval begin text field
~GNEGenericDataFrame()
Destructor.
void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame
GNEFrameAttributeModules::GenericDataAttributes * myGenericDataAttributes
parameters editor creator
virtual bool createPath(const bool useLastRoute)
create path
void intervalSelected()
interval selected
IntervalSelector * myIntervalSelector
interval selector modul
DataSetSelector * myDataSetSelector
dataSet selector modul
const AttributeSelector * getAttributeSelector() const
getattribute selector modul
GNEGenericDataFrame(GNEViewParent *viewParent, GNEViewNet *viewNet, SumoXMLTag tag, const bool pathCreator)
Constructor (protected due GNEGenericDataFrame is abtract)
GNEPathCreator * getPathCreator() const
get GNEPathCreator modul
AttributeSelector * myAttributeSelector
attribute selector modul
const DataSetSelector * getDataSetSelector() const
get dataSet selector modul
SumoXMLTag getTag() const
@bried get element type of this data frame
SumoXMLTag myGenericDataTag
generic data tag
GNEPathCreator * myPathCreator
edge path creator (used for Walks, rides and trips)
const IntervalSelector * getIntervalSelector() const
get interval selector modul
GNEDataSet * retrieveDataSet(const std::string &id, bool hardFail=true) const
Returns the named data set.
const std::map< std::string, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
void showPathCreatorModule(SumoXMLTag element, const bool firstElement, const bool consecutives)
show GNEPathCreator for the given tag
GNENet * getNet() const
get the net object
A single child window which contains a view of the simulation area.
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
MFXGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
static const RGBColor & getRainbowScaledColor(const double min, const double max, const double value)
get rainbow scaled color