72 myGenericDataFrameParent(genericDataFrameParent) {
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();
147 if (myNewDataSetIDTextField->getTextColor() == FXRGB(255, 0, 0)) {
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(),
160 refreshDataSetSelector(myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID));
162 myNewDataSetCheckButton->setCheck(FALSE, TRUE);
178 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
185 if (myNewDataSetCheckButton->getCheck() == TRUE) {
187 myHorizontalFrameNewID->show();
188 myCreateDataSetButton->show();
190 myDataSetsComboBox->hide();
193 myHorizontalFrameNewID->hide();
194 myCreateDataSetButton->hide();
196 myDataSetsComboBox->show();
199 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
201 myNewDataSetIDTextField->setFocus();
211 myGenericDataFrameParent(genericDataFrameParent) {
248 myNewIntervalCheckButton->enable();
249 myHorizontalFrameBegin->enable();
250 myBeginTextField->enable();
251 myHorizontalFrameEnd->enable();
252 myEndTextField->enable();
253 myCreateIntervalButton->enable();
254 myIntervalsTreelist->enable();
260 myNewIntervalCheckButton->disable();
261 myHorizontalFrameBegin->disable();
262 myBeginTextField->disable();
263 myHorizontalFrameEnd->disable();
264 myEndTextField->disable();
265 myCreateIntervalButton->disable();
266 myIntervalsTreelist->disable();
273 myIntervalsTreelist->clearItems();
274 myTreeItemIntervalMap.clear();
276 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
280 FXTreeItem* dataSetItem = myIntervalsTreelist->insertItem(
286 dataSetItem->setExpanded(
true);
289 addIntervalItem(interval.second, dataSetItem);
293 if (myGenericDataFrameParent->myAttributeSelector) {
294 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
304 if (myIntervalsTreelist->getNumItems() > 0) {
305 for (
const auto& treeItem : myTreeItemIntervalMap) {
306 if (treeItem.first->isSelected()) {
307 return treeItem.second;
319 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text()) &&
320 GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
322 const double begin = GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
323 const double end = GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
325 GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
328 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(),
"",
329 myGenericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed(),
335 myNewIntervalCheckButton->setCheck(FALSE, TRUE);
344 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
351 if (obj == myBeginTextField) {
353 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
354 myBeginTextField->setTextColor(FXRGB(0, 0, 0));
355 myBeginTextField->killFocus();
357 myBeginTextField->setTextColor(FXRGB(255, 0, 0));
359 }
else if (obj == myEndTextField) {
361 if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
362 myEndTextField->setTextColor(FXRGB(0, 0, 0));
363 myEndTextField->killFocus();
365 myEndTextField->setTextColor(FXRGB(255, 0, 0));
374 if (myNewIntervalCheckButton->getCheck() == TRUE) {
376 myHorizontalFrameBegin->show();
377 myHorizontalFrameEnd->show();
378 myCreateIntervalButton->show();
380 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
384 myBeginTextField->setText(
"0");
385 myEndTextField->setText(
"3600");
397 myHorizontalFrameBegin->hide();
398 myHorizontalFrameEnd->hide();
399 myCreateIntervalButton->hide();
402 refreshIntervalSelector();
410 FXTreeItem* item = myIntervalsTreelist->insertItem(
nullptr, itemParent,
415 myTreeItemIntervalMap[item] = dataInterval;
417 item->setExpanded(
true);
419 if (myTreeItemIntervalMap.size() == 1) {
420 item->setSelected(TRUE);
432 myGenericDataFrameParent(genericDataFrameParent),
433 myMinMaxLabel(nullptr),
434 myGenericDataTag(tag) {
453 const auto currentAttribute = myAttributesComboBox->getText();
455 myAttributesComboBox->clearItems();
457 myMinMaxLabel->setText(
TL(
"Scale: Min -> Max"));
459 if (myGenericDataFrameParent->myDataSetSelector->getDataSet() ==
nullptr) {
460 myAttributesComboBox->appendIconItem(
"<no dataSet selected>");
461 myAttributesComboBox->disable();
464 myAttributesComboBox->appendIconItem(
"<all>");
466 if (myGenericDataFrameParent->myIntervalSelector->getDataInterval() ==
nullptr) {
467 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
468 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(),
toString(myGenericDataTag),
"",
"");
470 for (
const auto& attribute : parameters) {
471 myAttributesComboBox->appendIconItem(attribute.c_str());
475 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
476 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(),
toString(myGenericDataTag),
477 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_BEGIN),
478 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(
SUMO_ATTR_END));
480 for (
const auto& attribute : parameters) {
481 myAttributesComboBox->appendIconItem(attribute.c_str());
485 myAttributesComboBox->enable();
487 for (
int i = 0; i < myAttributesComboBox->getNumItems(); i++) {
488 if (myAttributesComboBox->getItemText(i) == currentAttribute.text()) {
489 myAttributesComboBox->setCurrentItem(i, TRUE);
494 if (myGenericDataFrameParent->myTemplateGenericData) {
495 myGenericDataFrameParent->myGenericDataAttributesEditor->showAttributesEditor(myGenericDataFrameParent->myTemplateGenericData,
true);
498 myGenericDataFrameParent->getViewNet()->updateViewNet();
504 if (myAttributesComboBox->getNumItems() == 0) {
506 }
else if (myAttributesComboBox->getText() ==
TL(
"<all>")) {
509 return myAttributesComboBox->getText().text();
517 myMinMaxLabel->setText((
"Min: " +
toString(min) +
" -> Max: " +
toString(max)).c_str());
526 if (myAttributesComboBox->getText().empty()) {
527 myAttributesComboBox->setCurrentItem(0);
529 if (myAttributesComboBox->getText() ==
TL(
"<all>")) {
530 myMinMaxLabel->setText(
TL(
"Scale: Min -> Max"));
533 myGenericDataFrameParent->getViewNet()->updateViewNet();
583 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 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 GUIDesignTextFieldNCol
Num of column of text field.
#define GUIDesignComboBoxVisibleItems
#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 * 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
A single child window which contains a view of the simulation area.
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
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