72 myGenericDataFrameParent(genericDataFrameParent) {
76 myDataSetsComboBox =
new MFXComboBoxIcon(getCollapsableFrame(), genericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->getStaticTooltipMenu(),
84 myHorizontalFrameNewID->hide();
87 myCreateDataSetButton->hide();
89 refreshDataSetSelector(
nullptr);
101 myDataSetsComboBox->clearItems();
103 int currentItemIndex = -1;
105 for (
const auto& dataSet : myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDataSets()) {
107 if ((currentItemIndex == -1) && (dataSet.second == currentDataSet)) {
108 currentItemIndex = myDataSetsComboBox->getNumItems();
110 myDataSetsComboBox->appendIconItem(dataSet.second->getID().c_str(), dataSet.second->getACIcon());
113 if (currentItemIndex != -1) {
114 myDataSetsComboBox->setCurrentItem(currentItemIndex, FALSE);
115 if (myGenericDataFrameParent->getIntervalSelector()) {
116 myGenericDataFrameParent->getIntervalSelector()->enableContents();
118 }
else if (myGenericDataFrameParent->getIntervalSelector()) {
119 myGenericDataFrameParent->getIntervalSelector()->disableContents();
124 if (myGenericDataFrameParent->myIntervalSelector) {
125 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
132 if ((myNewDataSetCheckButton->getCheck() == TRUE) || (myDataSetsComboBox->getNumItems() == 0)) {
143 myGenericDataFrameParent->getIntervalSelector()->disableContents();
145 const std::string dataSetID = myNewDataSetIDTextField->getText().text();
149 }
else if (dataSetID.empty()) {
151 }
else if (myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID,
false) !=
nullptr) {
155 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(),
"",
156 myGenericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed());
159 refreshDataSetSelector(myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID));
161 myNewDataSetCheckButton->setCheck(FALSE, TRUE);
177 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
184 if (myNewDataSetCheckButton->getCheck() == TRUE) {
186 myHorizontalFrameNewID->show();
187 myCreateDataSetButton->show();
189 myDataSetsComboBox->hide();
192 myHorizontalFrameNewID->hide();
193 myCreateDataSetButton->hide();
195 myDataSetsComboBox->show();
198 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
200 myNewDataSetIDTextField->setFocus();
210 myGenericDataFrameParent(genericDataFrameParent) {
247 myNewIntervalCheckButton->enable();
248 myHorizontalFrameBegin->enable();
249 myBeginTextField->enable();
250 myHorizontalFrameEnd->enable();
251 myEndTextField->enable();
252 myCreateIntervalButton->enable();
253 myIntervalsTreelist->enable();
259 myNewIntervalCheckButton->disable();
260 myHorizontalFrameBegin->disable();
261 myBeginTextField->disable();
262 myHorizontalFrameEnd->disable();
263 myEndTextField->disable();
264 myCreateIntervalButton->disable();
265 myIntervalsTreelist->disable();
272 myIntervalsTreelist->clearItems();
273 myTreeItemIntervalMap.clear();
275 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
279 FXTreeItem* dataSetItem = myIntervalsTreelist->insertItem(
285 dataSetItem->setExpanded(
true);
288 addIntervalItem(interval.second, dataSetItem);
292 if (myGenericDataFrameParent->myAttributeSelector) {
293 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
303 if (myIntervalsTreelist->getNumItems() > 0) {
304 for (
const auto& treeItem : myTreeItemIntervalMap) {
305 if (treeItem.first->isSelected()) {
306 return treeItem.second;
318 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text()) &&
319 GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
321 const double begin = GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
322 const double end = GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
324 GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
327 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(),
"",
328 myGenericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed());
333 myNewIntervalCheckButton->setCheck(FALSE, TRUE);
342 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
349 if (obj == myBeginTextField) {
351 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
353 myBeginTextField->killFocus();
357 }
else if (obj == myEndTextField) {
359 if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
361 myEndTextField->killFocus();
372 if (myNewIntervalCheckButton->getCheck() == TRUE) {
374 myHorizontalFrameBegin->show();
375 myHorizontalFrameEnd->show();
376 myCreateIntervalButton->show();
378 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
382 myBeginTextField->setText(
"0");
383 myEndTextField->setText(
"3600");
395 myHorizontalFrameBegin->hide();
396 myHorizontalFrameEnd->hide();
397 myCreateIntervalButton->hide();
400 refreshIntervalSelector();
408 FXTreeItem* item = myIntervalsTreelist->insertItem(
nullptr, itemParent,
413 myTreeItemIntervalMap[item] = dataInterval;
415 item->setExpanded(
true);
417 if (myTreeItemIntervalMap.size() == 1) {
418 item->setSelected(TRUE);
430 myGenericDataFrameParent(genericDataFrameParent),
431 myMinMaxLabel(nullptr),
432 myGenericDataTag(tag) {
451 const auto currentAttribute = myAttributesComboBox->getText();
453 myAttributesComboBox->clearItems();
455 myMinMaxLabel->setText(
TL(
"Scale: Min -> Max"));
457 if (myGenericDataFrameParent->myDataSetSelector->getDataSet() ==
nullptr) {
458 myAttributesComboBox->appendIconItem(
"<no dataSet selected>");
459 myAttributesComboBox->disable();
462 myAttributesComboBox->appendIconItem(
"<all>");
464 if (myGenericDataFrameParent->myIntervalSelector->getDataInterval() ==
nullptr) {
465 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
466 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(),
toString(myGenericDataTag),
"",
"");
468 for (
const auto& attribute : parameters) {
469 myAttributesComboBox->appendIconItem(attribute.c_str());
473 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
474 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(),
toString(myGenericDataTag),
475 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_BEGIN),
476 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_END));
478 for (
const auto& attribute : parameters) {
479 myAttributesComboBox->appendIconItem(attribute.c_str());
483 myAttributesComboBox->enable();
485 for (
int i = 0; i < myAttributesComboBox->getNumItems(); i++) {
486 if (myAttributesComboBox->getItemText(i) == currentAttribute.text()) {
487 myAttributesComboBox->setCurrentItem(i, TRUE);
492 if (myGenericDataFrameParent->myTemplateGenericData) {
493 myGenericDataFrameParent->myGenericDataAttributesEditor->showAttributesEditor(myGenericDataFrameParent->myTemplateGenericData,
true);
496 myGenericDataFrameParent->getViewNet()->updateViewNet();
502 if (myAttributesComboBox->getNumItems() == 0) {
504 }
else if (myAttributesComboBox->getText() ==
TL(
"<all>")) {
507 return myAttributesComboBox->getText().text();
515 myMinMaxLabel->setText((
"Min: " +
toString(min) +
" -> Max: " +
toString(max)).c_str());
524 if (myAttributesComboBox->getText().empty()) {
525 myAttributesComboBox->setCurrentItem(0);
527 if (myAttributesComboBox->getText() ==
TL(
"<all>")) {
528 myMinMaxLabel->setText(
TL(
"Scale: Min -> Max"));
531 myGenericDataFrameParent->getViewNet()->updateViewNet();
581 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 GUIDesignTreeListFixedHeight
tree list with fixed height
#define GUIDesignTextColorRed
red color (for invalid text)
#define GUIDesignComboBox
#define GUIDesignTextField
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignTextFieldNCol
Num of column of text field.
#define GUIDesignComboBoxVisibleItems
#define GUIDesignTextColorBlack
black color (for correct text)
#define GUIDesignCheckButton
checkButton placed in left position
#define GUIDesignLabelThickedFixed(width)
label thicked, icon before text, text centered and custom width
#define WRITE_WARNING(msg)
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_EDGEREL
a relation between two edges
@ SUMO_TAG_TAZREL
a relation between two TAZs
@ 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)
const GNETagProperties * getTagProperty() const
get tagProperty associated with this Attribute Carrier
GNENet * getNet() const
get pointer to net
bool buildDataInterval(const CommonXMLStructure::SumoBaseObject *sumoBaseObject, const std::string &dataSetID, const double begin, const double end)
Builds DataInterval.
bool buildDataSet(const std::string &id)
Builds DataSet (exclusive of netedit)
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
An Element which don't belong to GNENet but has influence in the simulation.
An Element which don't belong to GNENet but has influence in the simulation.
static FXLabel * buildRainbow(FXComposite *parent)
build rainbow in frame modul
GNEViewNet * getViewNet() const
get view net
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
MFXComboBoxIcon * 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)
FOX needs this.
void enableContents() const
enable contents
FXHorizontalFrame * myHorizontalFrameEnd
interval end horizontal frame
GNEDataInterval * getDataInterval() const
get current select data set ID
long onCmdCreateInterval(FXObject *, FXSelector, void *)
~IntervalSelector()
destructor
void disableContents() const
disable contents
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
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)
GNEGenericData * myTemplateGenericData
template generic data
GNEPathCreator * getPathCreator() const
get GNEPathCreator modul
AttributeSelector * myAttributeSelector
attribute selector modul
const DataSetSelector * getDataSetSelector() const
get dataSet selector modul
GNEAttributesEditor * myGenericDataAttributesEditor
parameters editor creator
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
GNEPathManager * getDataPathManager()
get data path manager
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
void showPathCreatorModule(const GNETagProperties *tagProperty, const bool consecutives)
show GNEPathCreator for the given tag
An Element which don't belong to GNENet but has influence in the simulation.
GNENet * getNet() const
get the net object
GNEViewParent * getViewParent() const
get the net object
A single child window which contains a view of the simulation area.
GNEApplicationWindow * getGNEAppWindows() const
get GNE Application Windows
static FXButton * buildFXButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXIcon *ic, FXObject *tgt, FXSelector sel, FXuint opts=BUTTON_NORMAL, FXint x=0, FXint y=0, FXint w=0, FXint h=0, FXint pl=DEFAULT_PAD, FXint pr=DEFAULT_PAD, FXint pt=DEFAULT_PAD, FXint pb=DEFAULT_PAD)
build button
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
MFXStaticToolTip * getStaticTooltipMenu() const
get static toolTip for menus
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