Eclipse SUMO - Simulation of Urban MObility
Loading...
Searching...
No Matches
GNEGenericDataFrame.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3// Copyright (C) 2001-2026 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// The Widget for add genericData elements
19/****************************************************************************/
20
29#include <netedit/GNENet.h>
33
34#include "GNEGenericDataFrame.h"
35
36// ===========================================================================
37// FOX callback mapping
38// ===========================================================================
39
46
53
57
58// Object implementation
59FXIMPLEMENT(GNEGenericDataFrame::DataSetSelector, GNEGroupBoxModule, DataSetSelectorMap, ARRAYNUMBER(DataSetSelectorMap))
60FXIMPLEMENT(GNEGenericDataFrame::IntervalSelector, GNEGroupBoxModule, IntervalSelectorMap, ARRAYNUMBER(IntervalSelectorMap))
61FXIMPLEMENT(GNEGenericDataFrame::AttributeSelector, GNEGroupBoxModule, AttributeSelectorMap, ARRAYNUMBER(AttributeSelectorMap))
62
63// ===========================================================================
64// method definitions
65// ===========================================================================
66
67// ---------------------------------------------------------------------------
68// GNEGenericDataFrame::DataSetSelector - methods
69// ---------------------------------------------------------------------------
70
72 GNEGroupBoxModule(genericDataFrameParent, TL("DataSet")),
73 myGenericDataFrameParent(genericDataFrameParent) {
74 // create check button for new data set
75 myNewDataSetCheckButton = new FXCheckButton(getCollapsableFrame(), TL("Create new dataSet"), this, MID_GNE_SELECT, GUIDesignCheckButton);
76 // Create MFXComboBoxIcon
77 myDataSetsComboBox = new MFXComboBoxIcon(getCollapsableFrame(), genericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->getStaticTooltipMenu(),
79 // create new id label
80 myHorizontalFrameNewID = new FXHorizontalFrame(getCollapsableFrame(), GUIDesignAuxiliarHorizontalFrame);
81 new FXLabel(myHorizontalFrameNewID, "new dataSet ID", nullptr, GUIDesignLabelThickedFixed(100));
82 // create new id textField
83 myNewDataSetIDTextField = new FXTextField(myHorizontalFrameNewID, GUIDesignTextFieldNCol, this, MID_GNE_SET_ATTRIBUTE, GUIDesignTextField);
84 // hide horizontal frame
85 myHorizontalFrameNewID->hide();
86 // create dataSet button
87 myCreateDataSetButton = GUIDesigns::buildFXButton(getCollapsableFrame(), TL("Create dataSet"), "", "", GUIIconSubSys::getIcon(GUIIcon::DATASET), this, MID_GNE_CREATE, GUIDesignButton);
88 myCreateDataSetButton->hide();
89 // refresh interval selector
90 refreshDataSetSelector(nullptr);
91 // DataSetSelector is always shown
92 show();
93}
94
95
97
98
99void
101 // clear items
102 myDataSetsComboBox->clearItems();
103 // declare item index
104 int currentDataSetIndex = -1;
105 // fill myDataSetsComboBox with all DataSets
106 for (const auto& dataSet : myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getDataSets()) {
107 // check if we have to set currentItemIndex
108 if ((currentDataSetIndex == -1) && (dataSet.second == currentDataSet)) {
109 currentDataSetIndex = myDataSetsComboBox->getNumItems();
110 }
111 myDataSetsComboBox->appendIconItem(dataSet.second->getID().c_str(), dataSet.second->getACIcon());
112 }
113 // if in this point, if currentDataSetIndex is not set, then use the first comboBox
114 if ((currentDataSetIndex == -1) && (myDataSetsComboBox->getNumItems() > 0)) {
115 currentDataSetIndex = 0;
116 }
117 // check if we have to set current element
118 if (currentDataSetIndex != -1) {
119 myDataSetsComboBox->setCurrentItem(currentDataSetIndex, FALSE);
120 if (myGenericDataFrameParent->getIntervalSelector()) {
121 myGenericDataFrameParent->getIntervalSelector()->enableContents();
122 }
123 } else if (myGenericDataFrameParent->getIntervalSelector()) {
124 myGenericDataFrameParent->getIntervalSelector()->disableContents();
125 }
126 // recalc frame
127 recalc();
128 // refresh interval selector
129 if (myGenericDataFrameParent->myIntervalSelector) {
130 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
131 }
132}
133
134
137 if ((myNewDataSetCheckButton->getCheck() == TRUE) || (myDataSetsComboBox->getNumItems() == 0)) {
138 return nullptr;
139 } else {
140 return myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(myDataSetsComboBox->getItemText(myDataSetsComboBox->getCurrentItem()), false);
141 }
142}
143
144
145long
147 auto net = myGenericDataFrameParent->getViewNet()->getNet();
148 // first disable interval selector
149 myGenericDataFrameParent->getIntervalSelector()->disableContents();
150 // get string
151 const std::string dataSetID = myNewDataSetIDTextField->getText().text();
152 // check conditions
153 if (myNewDataSetIDTextField->getTextColor() == GUIDesignTextColorRed) {
154 WRITE_WARNING(TL("Invalid dataSet ID"));
155 } else if (dataSetID.empty()) {
156 WRITE_WARNING(TL("Invalid empty dataSet ID"));
157 } else if (net->getAttributeCarriers()->retrieveDataSet(dataSetID, false) != nullptr) {
158 WRITE_WARNING(TL("Invalid duplicated dataSet ID"));
159 } else {
160 // build data set
161 GNEDataHandler dataHandler(net, net->getACTemplates()->getTemplateAC(SUMO_TAG_DATASET)->getFileBucket(),
162 net->getGNEApplicationWindow()->isUndoRedoAllowed());
163 dataHandler.buildDataSet(dataSetID);
164 // refresh tag selector
165 refreshDataSetSelector(myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID));
166 // change check button
167 myNewDataSetCheckButton->setCheck(FALSE, TRUE);
168 }
169 return 1;
170}
171
172
173long
175 //
176 return 1;
177}
178
179
180long
182 // update interval modul
183 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
184 return 1;
185}
186
187
188long
190 if (myNewDataSetCheckButton->getCheck() == TRUE) {
191 // enable textfield and label
192 myHorizontalFrameNewID->show();
193 myCreateDataSetButton->show();
194 // disable comboBox
195 myDataSetsComboBox->hide();
196 } else {
197 // disable textfield and label
198 myHorizontalFrameNewID->hide();
199 myCreateDataSetButton->hide();
200 // enable comboBox
201 myDataSetsComboBox->show();
202 }
203 // update interval modul
204 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
205 // set focus in text field ID
206 myNewDataSetIDTextField->setFocus();
207 return 1;
208}
209
210// ---------------------------------------------------------------------------
211// GNEGenericDataFrame::IntervalSelector - methods
212// ---------------------------------------------------------------------------
213
215 GNEGroupBoxModule(genericDataFrameParent, TL("Interval")),
216 myGenericDataFrameParent(genericDataFrameParent) {
217 // create check button for new interval
218 myNewIntervalCheckButton = new FXCheckButton(getCollapsableFrame(), TL("Create new interval"), this, MID_GNE_SELECT, GUIDesignCheckButton);
219 // create begin label
222 // create begin TextField
224 myBeginTextField->setText("0");
225 // hide horizontal frame begin
227 // create end label
229 new FXLabel(myHorizontalFrameEnd, toString(SUMO_ATTR_END).c_str(), nullptr, GUIDesignLabelThickedFixed(100));
230 // create end textfield
232 myEndTextField->setText("3600");
233 // hide horizontal frame end
234 myHorizontalFrameEnd->hide();
235 // create interval button
238 // Create tree list with fixed height
240 myIntervalsTreelist->setHeight(200);
241 // refresh interval selector
243 // IntervalSelector is always shown
244 show();
245}
246
247
249
250
251void
253 myNewIntervalCheckButton->enable();
254 myHorizontalFrameBegin->enable();
255 myBeginTextField->enable();
256 myHorizontalFrameEnd->enable();
257 myEndTextField->enable();
258 myCreateIntervalButton->enable();
259 myIntervalsTreelist->enable();
260}
261
262
263void
265 myNewIntervalCheckButton->disable();
266 myHorizontalFrameBegin->disable();
267 myBeginTextField->disable();
268 myHorizontalFrameEnd->disable();
269 myEndTextField->disable();
270 myCreateIntervalButton->disable();
271 myIntervalsTreelist->disable();
272}
273
274
275void
277 // first clear items from tree and intervalMap
278 myIntervalsTreelist->clearItems();
279 myTreeItemIntervalMap.clear();
280 // obtain data set
281 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
282 // add intervals
283 if (dataSet) {
284 // insert dataSetItem in Tree list
285 FXTreeItem* dataSetItem = myIntervalsTreelist->insertItem(
286 nullptr, nullptr,
287 dataSet->getHierarchyName().c_str(),
290 // by default item is expanded
291 dataSetItem->setExpanded(true);
292 // iterate over intevals
293 for (const auto& interval : dataSet->getDataIntervalChildren()) {
294 addIntervalItem(interval.second, dataSetItem);
295 }
296 }
297 // refresh attribute selector
298 if (myGenericDataFrameParent->myAttributeSelector) {
299 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
300 }
301 // recalc frame
302 recalc();
303}
304
305
308 // first check if there is elements in interval tree
309 if (myIntervalsTreelist->getNumItems() > 0) {
310 for (const auto& treeItem : myTreeItemIntervalMap) {
311 if (treeItem.first->isSelected()) {
312 return treeItem.second;
313 }
314 }
315 }
316 // no GNEDataInterval found, then return nullptr
317 return nullptr;
318}
319
320
321long
323 // first check that begin and end are valid
324 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text()) &&
325 GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
326 // obtain begin and end
327 const double begin = GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
328 const double end = GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
329 // get data set parent
330 GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
331 if (dataSet && dataSet->checkNewInterval(begin, end)) {
332 // declare dataHandler
333 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(), dataSet->getFileBucket(),
334 myGenericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed());
335 // build data interval
336 dataHandler.buildDataInterval(nullptr, dataSet->getID(), begin, end);
337 }
338 // disable select interval check button
339 myNewIntervalCheckButton->setCheck(FALSE, TRUE);
340 }
341 return 1;
342}
343
344
345long
347 // refresh attribute selector
348 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
349 return 1;
350}
351
352
353long
355 if (obj == myBeginTextField) {
356 // check if begin value can be parsed to double
357 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
358 myBeginTextField->setTextColor(GUIDesignTextColorBlack);
359 myBeginTextField->killFocus();
360 } else {
361 myBeginTextField->setTextColor(GUIDesignTextColorRed);
362 }
363 } else if (obj == myEndTextField) {
364 // check if end value can be parsed to double
365 if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
366 myEndTextField->setTextColor(GUIDesignTextColorBlack);
367 myEndTextField->killFocus();
368 } else {
369 myEndTextField->setTextColor(GUIDesignTextColorRed);
370 }
371 }
372 return 1;
373}
374
375
376long
378 if (myNewIntervalCheckButton->getCheck() == TRUE) {
379 // enable begin and end elements
380 myHorizontalFrameBegin->show();
381 myHorizontalFrameEnd->show();
382 myCreateIntervalButton->show();
383 // refresh begin and end text fields
384 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
385 if (dataSet) {
386 if (dataSet->getDataIntervalChildren().empty()) {
387 // set default interval (1 hour)
388 myBeginTextField->setText("0");
389 myEndTextField->setText("3600");
390 } else {
391 // obtain last data interval
392 const GNEDataInterval* lastDataInterval = dataSet->getDataIntervalChildren().rbegin()->second;
393 const double intervalDuration = lastDataInterval->getAttributeDouble(SUMO_ATTR_END) - lastDataInterval->getAttributeDouble(SUMO_ATTR_BEGIN);
394 // set new begin end
395 myBeginTextField->setText(toString(lastDataInterval->getAttributeDouble(SUMO_ATTR_END)).c_str());
396 myEndTextField->setText(toString(lastDataInterval->getAttributeDouble(SUMO_ATTR_END) + intervalDuration).c_str());
397 }
398 }
399 } else {
400 // disable begin and end elements
401 myHorizontalFrameBegin->hide();
402 myHorizontalFrameEnd->hide();
403 myCreateIntervalButton->hide();
404 }
405 // refresh interval seletor
406 refreshIntervalSelector();
407 return 1;
408}
409
410
411FXTreeItem*
413 // insert item in Tree list
414 FXTreeItem* item = myIntervalsTreelist->insertItem(nullptr, itemParent,
415 dataInterval->getHierarchyName().c_str(),
418 // insert item in map
419 myTreeItemIntervalMap[item] = dataInterval;
420 // by default item is expanded
421 item->setExpanded(true);
422 // select first item
423 if (myTreeItemIntervalMap.size() == 1) {
424 item->setSelected(TRUE);
425 }
426 // return created FXTreeItem
427 return item;
428}
429
430// ---------------------------------------------------------------------------
431// GNEGenericDataFrame::AttributeSelector - methods
432// ---------------------------------------------------------------------------
433
435 GNEGroupBoxModule(genericDataFrameParent, TL("Data attributes")),
436 myGenericDataFrameParent(genericDataFrameParent),
437 myMinMaxLabel(nullptr),
438 myGenericDataTag(tag) {
439 // Create MFXComboBoxIcon
442 // build rainbow
444 // refresh interval selector
446 // AttributeSelector is always shown
447 show();
448}
449
450
452
453
454void
456 // save current attribute
457 const auto currentAttribute = myAttributesComboBox->getText();
458 // clear items
459 myAttributesComboBox->clearItems();
460 // restore myMinMaxLabel
461 myMinMaxLabel->setText(TL("Scale: Min -> Max"));
462 // fill myAttributesComboBox depending of data sets
463 if (myGenericDataFrameParent->myDataSetSelector->getDataSet() == nullptr) {
464 myAttributesComboBox->appendIconItem("<no dataSet selected>");
465 myAttributesComboBox->disable();
466 } else {
467 // add all item
468 myAttributesComboBox->appendIconItem("<all>");
469 // add attributes depending of interval
470 if (myGenericDataFrameParent->myIntervalSelector->getDataInterval() == nullptr) {
471 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
472 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(), toString(myGenericDataTag), "", "");
473 // add all parameters
474 for (const auto& attribute : parameters) {
475 myAttributesComboBox->appendIconItem(attribute.c_str());
476 }
477 } else {
478 // retrieve all parameters within begin and end
479 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
480 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(), toString(myGenericDataTag),
481 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(SUMO_ATTR_BEGIN),
482 myGenericDataFrameParent->myIntervalSelector->getDataInterval()->getAttribute(SUMO_ATTR_END));
483 // add all parameters
484 for (const auto& attribute : parameters) {
485 myAttributesComboBox->appendIconItem(attribute.c_str());
486 }
487 }
488 // enable combo Box
489 myAttributesComboBox->enable();
490 // set current item
491 for (int i = 0; i < myAttributesComboBox->getNumItems(); i++) {
492 if (myAttributesComboBox->getItemText(i) == currentAttribute.text()) {
493 myAttributesComboBox->setCurrentItem(i, TRUE);
494 }
495 }
496 }
497 // show parameters
498 if (myGenericDataFrameParent->myGenericDataAttributesEditor) {
499 myGenericDataFrameParent->myGenericDataAttributesEditor->showAttributesEditor(myGenericDataFrameParent->getViewNet()->getNet()->getACTemplates()->getTemplateAC(myGenericDataTag), true);
500 }
501 // update view net
502 myGenericDataFrameParent->getViewNet()->updateViewNet();
503}
504
505
506std::string
508 if (myAttributesComboBox->getNumItems() == 0) {
509 return "";
510 } else if (myAttributesComboBox->getText() == TL("<all>")) {
511 return "";
512 } else {
513 return myAttributesComboBox->getText().text();
514 }
515}
516
517
518const RGBColor&
519GNEGenericDataFrame::AttributeSelector::getScaledColor(const double min, const double max, const double value) const {
520 // update myMinMaxLabel
521 myMinMaxLabel->setText(("Min: " + toString(min) + " -> Max: " + toString(max)).c_str());
522 // return scaled color
523 return GNEViewNetHelper::getRainbowScaledColor(min, max, value);
524}
525
526
529 return myGenericDataTag;
530}
531
532
533long
535 // empty attribute means <all>
536 if (myAttributesComboBox->getText().empty()) {
537 myAttributesComboBox->setCurrentItem(0);
538 }
539 if (myAttributesComboBox->getText() == TL("<all>")) {
540 myMinMaxLabel->setText(TL("Scale: Min -> Max"));
541 }
542 // update view
543 myGenericDataFrameParent->getViewNet()->updateViewNet();
544 return 1;
545}
546
547// ---------------------------------------------------------------------------
548// GNEGenericDataFrame - methods
549// ---------------------------------------------------------------------------
550
555
556
561
562
567
568
573
574
575void
577 // first refresh data set selector
579 // check if there is an edge path creator
580 if (myPathCreator) {
582 }
583 // show frame
585}
586
587
588void
590 if (myPathCreator) {
591 // reset candidate edges
592 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
593 edge.second->resetCandidateFlags();
594 }
595 }
596 // hide frame
598}
599
600
601void
603 // refresh data set selector
605 // check if there is an edge path creator
606 if (myPathCreator) {
608 }
609}
610
611
612GNEGenericDataFrame::GNEGenericDataFrame(GNEViewParent* viewParent, GNEViewNet* viewNet, SumoXMLTag tag, const bool pathCreator) :
613 GNEFrame(viewParent, viewNet, toString(tag)) {
614 // create DataSetSelector
616 // create IntervalSelector module
618 // create AttributeSelector module
619 myAttributeSelector = new AttributeSelector(this, tag);
620 // create parameter editor module
622 // create GNEPathCreator module
623 if (pathCreator) {
624 myPathCreator = new GNEPathCreator(this, viewNet->getNet()->getDataPathManager());
625 }
626}
627
628
631
632
633void
637
638
639bool
640GNEGenericDataFrame::createPath(const bool /*useLastRoute*/) {
641 // this function has to be reimplemented in all child frames that uses a GNEPathCreator
642 return false;
643}
644
645/****************************************************************************/
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
Definition GUIDesigns.h:696
#define GUIDesignTextColorRed
red color (for invalid text)
Definition GUIDesigns.h:44
#define GUIDesignButton
Definition GUIDesigns.h:100
#define GUIDesignComboBox
Definition GUIDesigns.h:295
#define GUIDesignTextField
Definition GUIDesigns.h:74
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
Definition GUIDesigns.h:430
#define GUIDesignTextFieldNCol
Num of column of text field.
Definition GUIDesigns.h:92
#define GUIDesignComboBoxVisibleItems
Definition GUIDesigns.h:64
#define GUIDesignTextColorBlack
black color (for correct text)
Definition GUIDesigns.h:38
#define GUIDesignCheckButton
checkButton placed in left position
Definition GUIDesigns.h:194
#define GUIDesignLabelThickedFixed(width)
label thicked, icon before text, text centered and custom width
Definition GUIDesigns.h:254
@ DATAINTERVAL
#define WRITE_WARNING(msg)
Definition MsgHandler.h:286
#define TL(string)
Definition MsgHandler.h:304
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_DATASET
@ SUMO_ATTR_BEGIN
weights: time range begin
@ SUMO_ATTR_END
weights: time range end
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition ToString.h:49
const std::string getID() const override
get ID (all Attribute Carriers have one)
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 override
std::string getHierarchyName() const override
get Hierarchy Name (Used in AC Hierarchy)
std::string getHierarchyName() const override
get Hierarchy Name (Used in AC Hierarchy)
FileBucket * getFileBucket() const override
get reference to fileBucket in which save this AC
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
Definition GNEFrame.cpp:246
GNEViewNet * getViewNet() const
get view net
Definition GNEFrame.cpp:145
GNEViewNet * myViewNet
FOX need this.
Definition GNEFrame.h:122
virtual void show()
show Frame
Definition GNEFrame.cpp:110
virtual void hide()
hide Frame
Definition GNEFrame.cpp:119
AttributeSelector(GNEGenericDataFrame *genericDataFrameParent, SumoXMLTag tag)
FOX-declaration.
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
SumoXMLTag getGenericDataTag() const
getgeneric data tag
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.
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.
FXHorizontalFrame * myHorizontalFrameEnd
interval end horizontal frame
GNEDataInterval * getDataInterval() const
get current select data set ID
long onCmdCreateInterval(FXObject *, FXSelector, void *)
void disableContents() const
disable contents
FXCheckButton * myNewIntervalCheckButton
check button to create a new interval
FXButton * myCreateIntervalButton
create interval button
IntervalSelector(GNEGenericDataFrame *genericDataFrameParent)
FOX-declaration.
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
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)
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
GNEGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
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
Definition GNENet.cpp:204
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
Definition GNENet.cpp:174
const GNETagPropertiesDatabase * getTagPropertiesDatabase() const
get tag properties database (used for simplify code)
Definition GNENet.cpp:162
void showPathCreatorModule(const GNETagProperties *tagProperty, const bool consecutives)
show GNEPathCreator for the given tag
const GNETagProperties * getTagProperty(const SumoXMLTag tag, const bool hardFail) const
get tagProperty associated to the given tag
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
static const RGBColor & getRainbowScaledColor(const double min, const double max, const double value)
get rainbow scaled color