70 myGenericDataFrameParent(genericDataFrameParent) {
81 myHorizontalFrameNewID->hide();
84 myCreateDataSetButton->hide();
86 refreshDataSetSelector(
nullptr);
98 myDataSetsComboBox->clearItems();
100 int currentItemIndex = -1;
102 auto dataSetCopy = myGenericDataFrameParent->getViewNet()->getNet()->retrieveDataSets();
103 for (
const auto& dataSet : dataSetCopy) {
105 if ((currentItemIndex == -1) && (dataSet == currentDataSet)) {
106 currentItemIndex = myDataSetsComboBox->getNumItems();
108 myDataSetsComboBox->appendItem(dataSet->getID().c_str());
111 myDataSetsComboBox->setNumVisible((
int)myDataSetsComboBox->getNumItems());
113 if (currentItemIndex != -1) {
114 myDataSetsComboBox->setCurrentItem(currentItemIndex, FALSE);
119 if (myGenericDataFrameParent->myIntervalSelector) {
120 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
127 if ((myNewDataSetCheckButton->getCheck() == TRUE) || (myDataSetsComboBox->getNumItems() == 0)) {
130 return myGenericDataFrameParent->getViewNet()->
getNet()->
retrieveDataSet(myDataSetsComboBox->getItem(myDataSetsComboBox->getCurrentItem()).text(),
false);
138 const std::string dataSetID = myNewDataSetIDTextField->getText().text();
140 if (myNewDataSetIDTextField->getTextColor() == FXRGB(255, 0, 0)) {
142 }
else if (dataSetID.empty()) {
144 }
else if (myGenericDataFrameParent->getViewNet()->getNet()->retrieveDataSet(dataSetID,
false) !=
nullptr) {
150 refreshDataSetSelector(dataSet);
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();
293 myNewIntervalCheckButton->setCheck(FALSE, TRUE);
302 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
309 if (obj == myBeginTextField) {
311 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
312 myBeginTextField->setTextColor(FXRGB(0, 0, 0));
313 myBeginTextField->killFocus();
315 myBeginTextField->setTextColor(FXRGB(255, 0, 0));
317 }
else if (obj == myEndTextField) {
319 if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
320 myEndTextField->setTextColor(FXRGB(0, 0, 0));
321 myEndTextField->killFocus();
323 myEndTextField->setTextColor(FXRGB(255, 0, 0));
332 if (myNewIntervalCheckButton->getCheck() == TRUE) {
334 myHorizontalFrameBegin->show();
335 myHorizontalFrameEnd->show();
336 myCreateIntervalButton->show();
338 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
342 myBeginTextField->setText(
"0");
343 myEndTextField->setText(
"3600");
355 myHorizontalFrameBegin->hide();
356 myHorizontalFrameEnd->hide();
357 myCreateIntervalButton->hide();
360 refreshIntervalSelector();
368 FXTreeItem* item = myIntervalsTreelist->insertItem(
nullptr, itemParent,
373 myTreeItemIntervalMap[item] = dataInterval;
375 item->setExpanded(
true);
377 if (myTreeItemIntervalMap.size() == 1) {
378 item->setSelected(TRUE);
390 myGenericDataFrameParent(genericDataFrameParent),
391 myMinMaxLabel(nullptr),
410 myAttributesComboBox->clearItems();
412 myMinMaxLabel->setText(
"Scale: Min -> Max");
414 if (myGenericDataFrameParent->myDataSetSelector->getDataSet() ==
nullptr) {
415 myAttributesComboBox->appendItem(
"<no dataSet selected>");
416 myAttributesComboBox->disable();
419 myAttributesComboBox->appendItem(
"<all>");
421 if (myGenericDataFrameParent->myIntervalSelector->getDataInterval() ==
nullptr) {
422 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->retrieveGenericDataParameters(
425 for (
const auto& attribute : parameters) {
426 myAttributesComboBox->appendItem(attribute.c_str());
430 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->retrieveGenericDataParameters(
432 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_BEGIN),
433 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_END));
435 for (
const auto& attribute : parameters) {
436 myAttributesComboBox->appendItem(attribute.c_str());
440 myAttributesComboBox->enable();
442 if (myAttributesComboBox->getNumItems() < 10) {
443 myAttributesComboBox->setNumVisible(myAttributesComboBox->getNumItems());
445 myAttributesComboBox->setNumVisible(10);
451 myGenericDataFrameParent->getViewNet()->updateViewNet();
457 if (myAttributesComboBox->getNumItems() == 0) {
459 }
else if (myAttributesComboBox->getText() ==
"<all>") {
462 return myAttributesComboBox->getText().text();
470 myMinMaxLabel->setText((
"Min: " +
toString(min) +
" -> Max: " +
toString(max)).c_str());
479 if (myAttributesComboBox->getText().empty()) {
480 myAttributesComboBox->setText(
"<all>");
482 if (myAttributesComboBox->getText() ==
"<all>") {
483 myMinMaxLabel->setText(
"Scale: Min -> Max");
486 myGenericDataFrameParent->getViewNet()->updateViewNet();
542 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 GUIDesignGroupBoxFrame
Group box design extended over frame.
#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)
FXIcon * getIcon() const
get FXIcon associated to this AC
GNENet * getNet() const
get pointer to net
static GNEDataInterval * buildDataInterval(GNENet *net, bool allowUndoRedo, GNEDataSet *dataSetParent, const double begin, const double end)
Builds DataInterval.
static GNEDataSet * buildDataSet(GNENet *net, bool allowUndoRedo, const std::string &dataSetID)
Builds DataSet.
An Element which don't belongs to GNENet but has influency 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
GNEViewNet * myViewNet
View Net.
FXVerticalFrame * myContentFrame
Vertical frame that holds all widgets of frame.
virtual void show()
show Frame
virtual void hide()
hide Frame
void showPathCreatorModul(SumoXMLTag tag, const bool firstElement, const bool consecutives)
show PathCreator for the given tag
static FXLabel * buildRainbow(FXComposite *parent)
build rainbow in frame modul
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 intervalSelected()
interval selected
IntervalSelector * myIntervalSelector
interval selector modul
DataSetSelector * myDataSetSelector
dataSet selector modul
const AttributeSelector * getAttributeSelector() const
getattribute selector modul
virtual void createPath()
create path
GNEFrameModuls::PathCreator * myPathCreator
edge path creator (used for Walks, rides and trips)
GNEFrameModuls::PathCreator * getPathCreator() const
get PathCreator 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
GNEFrameAttributesModuls::ParametersEditorCreator * myParametersEditorCreator
parameters editor creator
SumoXMLTag myGenericDataTag
generic data tag
const IntervalSelector * getIntervalSelector() const
get interval selector modul
GNEGenericDataFrame(FXHorizontalFrame *horizontalFrameParent, GNEViewNet *viewNet, SumoXMLTag tag, const bool pathCreator)
Constructor (protected due GNEGenericDataFrame is abtract)
const std::map< std::string, GNEEdge * > & getEdges() const
map with the ID and pointer to edges of net
GNEDataSet * retrieveDataSet(const std::string &id, bool hardFail=true) const
Returns the named data set.
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
retrieve all attribute carriers of Net
GNENet * getNet() const
get the net object
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
static const RGBColor & getRainbowScaledColor(const double min, const double max, const double value)
get rainbow scaled color