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-2025 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 currentItemIndex = -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 ((currentItemIndex == -1) && (dataSet.second == currentDataSet)) {
109 currentItemIndex = myDataSetsComboBox->getNumItems();
110 }
111 myDataSetsComboBox->appendIconItem(dataSet.second->getID().c_str(), dataSet.second->getACIcon());
112 }
113 // check if we have to set current element
114 if (currentItemIndex != -1) {
115 myDataSetsComboBox->setCurrentItem(currentItemIndex, FALSE);
116 if (myGenericDataFrameParent->getIntervalSelector()) {
117 myGenericDataFrameParent->getIntervalSelector()->enableContents();
118 }
119 } else if (myGenericDataFrameParent->getIntervalSelector()) {
120 myGenericDataFrameParent->getIntervalSelector()->disableContents();
121 }
122 // recalc frame
123 recalc();
124 // refresh interval selector
125 if (myGenericDataFrameParent->myIntervalSelector) {
126 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
127 }
128}
129
130
133 if ((myNewDataSetCheckButton->getCheck() == TRUE) || (myDataSetsComboBox->getNumItems() == 0)) {
134 return nullptr;
135 } else {
136 return myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(myDataSetsComboBox->getItemText(myDataSetsComboBox->getCurrentItem()), false);
137 }
138}
139
140
141long
143 auto net = myGenericDataFrameParent->getViewNet()->getNet();
144 // first disable interval selector
145 myGenericDataFrameParent->getIntervalSelector()->disableContents();
146 // get string
147 const std::string dataSetID = myNewDataSetIDTextField->getText().text();
148 // check conditions
149 if (myNewDataSetIDTextField->getTextColor() == GUIDesignTextColorRed) {
150 WRITE_WARNING(TL("Invalid dataSet ID"));
151 } else if (dataSetID.empty()) {
152 WRITE_WARNING(TL("Invalid empty dataSet ID"));
153 } else if (net->getAttributeCarriers()->retrieveDataSet(dataSetID, false) != nullptr) {
154 WRITE_WARNING(TL("Invalid duplicated dataSet ID"));
155 } else {
156 // build data set
157 GNEDataHandler dataHandler(net, net->getACTemplates()->getTemplateAC(SUMO_TAG_DATASET)->getFileBucket(),
158 net->getGNEApplicationWindow()->isUndoRedoAllowed());
159 dataHandler.buildDataSet(dataSetID);
160 // refresh tag selector
161 refreshDataSetSelector(myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveDataSet(dataSetID));
162 // change check button
163 myNewDataSetCheckButton->setCheck(FALSE, TRUE);
164 }
165 return 1;
166}
167
168
169long
171 //
172 return 1;
173}
174
175
176long
178 // update interval modul
179 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
180 return 1;
181}
182
183
184long
186 if (myNewDataSetCheckButton->getCheck() == TRUE) {
187 // enable textfield and label
188 myHorizontalFrameNewID->show();
189 myCreateDataSetButton->show();
190 // disable comboBox
191 myDataSetsComboBox->hide();
192 } else {
193 // disable textfield and label
194 myHorizontalFrameNewID->hide();
195 myCreateDataSetButton->hide();
196 // enable comboBox
197 myDataSetsComboBox->show();
198 }
199 // update interval modul
200 myGenericDataFrameParent->myIntervalSelector->refreshIntervalSelector();
201 // set focus in text field ID
202 myNewDataSetIDTextField->setFocus();
203 return 1;
204}
205
206// ---------------------------------------------------------------------------
207// GNEGenericDataFrame::IntervalSelector - methods
208// ---------------------------------------------------------------------------
209
211 GNEGroupBoxModule(genericDataFrameParent, TL("Interval")),
212 myGenericDataFrameParent(genericDataFrameParent) {
213 // create check button for new interval
214 myNewIntervalCheckButton = new FXCheckButton(getCollapsableFrame(), TL("Create new interval"), this, MID_GNE_SELECT, GUIDesignCheckButton);
215 // create begin label
218 // create begin TextField
220 myBeginTextField->setText("0");
221 // hide horizontal frame begin
223 // create end label
225 new FXLabel(myHorizontalFrameEnd, toString(SUMO_ATTR_END).c_str(), nullptr, GUIDesignLabelThickedFixed(100));
226 // create end textfield
228 myEndTextField->setText("3600");
229 // hide horizontal frame end
230 myHorizontalFrameEnd->hide();
231 // create interval button
234 // Create tree list with fixed height
236 myIntervalsTreelist->setHeight(200);
237 // refresh interval selector
239 // IntervalSelector is always shown
240 show();
241}
242
243
245
246
247void
249 myNewIntervalCheckButton->enable();
250 myHorizontalFrameBegin->enable();
251 myBeginTextField->enable();
252 myHorizontalFrameEnd->enable();
253 myEndTextField->enable();
254 myCreateIntervalButton->enable();
255 myIntervalsTreelist->enable();
256}
257
258
259void
261 myNewIntervalCheckButton->disable();
262 myHorizontalFrameBegin->disable();
263 myBeginTextField->disable();
264 myHorizontalFrameEnd->disable();
265 myEndTextField->disable();
266 myCreateIntervalButton->disable();
267 myIntervalsTreelist->disable();
268}
269
270
271void
273 // first clear items from tree and intervalMap
274 myIntervalsTreelist->clearItems();
275 myTreeItemIntervalMap.clear();
276 // obtain data set
277 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
278 // add intervals
279 if (dataSet) {
280 // insert dataSetItem in Tree list
281 FXTreeItem* dataSetItem = myIntervalsTreelist->insertItem(
282 nullptr, nullptr,
283 dataSet->getHierarchyName().c_str(),
286 // by default item is expanded
287 dataSetItem->setExpanded(true);
288 // iterate over intevals
289 for (const auto& interval : dataSet->getDataIntervalChildren()) {
290 addIntervalItem(interval.second, dataSetItem);
291 }
292 }
293 // refresh attribute selector
294 if (myGenericDataFrameParent->myAttributeSelector) {
295 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
296 }
297 // recalc frame
298 recalc();
299}
300
301
304 // first check if there is elements in interval tree
305 if (myIntervalsTreelist->getNumItems() > 0) {
306 for (const auto& treeItem : myTreeItemIntervalMap) {
307 if (treeItem.first->isSelected()) {
308 return treeItem.second;
309 }
310 }
311 }
312 // no GNEDataInterval found, then return nullptr
313 return nullptr;
314}
315
316
317long
319 // first check that begin and end are valid
320 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text()) &&
321 GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
322 // obtain begin and end
323 const double begin = GNEAttributeCarrier::parse<double>(myBeginTextField->getText().text());
324 const double end = GNEAttributeCarrier::parse<double>(myEndTextField->getText().text());
325 // get data set parent
326 GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
327 if (dataSet && dataSet->checkNewInterval(begin, end)) {
328 // declare dataHandler
329 GNEDataHandler dataHandler(myGenericDataFrameParent->getViewNet()->getNet(), dataSet->getFileBucket(),
330 myGenericDataFrameParent->getViewNet()->getViewParent()->getGNEAppWindows()->isUndoRedoAllowed());
331 // build data interval
332 dataHandler.buildDataInterval(nullptr, dataSet->getID(), begin, end);
333 }
334 // disable select interval check button
335 myNewIntervalCheckButton->setCheck(FALSE, TRUE);
336 }
337 return 1;
338}
339
340
341long
343 // refresh attribute selector
344 myGenericDataFrameParent->myAttributeSelector->refreshAttributeSelector();
345 return 1;
346}
347
348
349long
351 if (obj == myBeginTextField) {
352 // check if begin value can be parsed to double
353 if (GNEAttributeCarrier::canParse<double>(myBeginTextField->getText().text())) {
354 myBeginTextField->setTextColor(GUIDesignTextColorBlack);
355 myBeginTextField->killFocus();
356 } else {
357 myBeginTextField->setTextColor(GUIDesignTextColorRed);
358 }
359 } else if (obj == myEndTextField) {
360 // check if end value can be parsed to double
361 if (GNEAttributeCarrier::canParse<double>(myEndTextField->getText().text())) {
362 myEndTextField->setTextColor(GUIDesignTextColorBlack);
363 myEndTextField->killFocus();
364 } else {
365 myEndTextField->setTextColor(GUIDesignTextColorRed);
366 }
367 }
368 return 1;
369}
370
371
372long
374 if (myNewIntervalCheckButton->getCheck() == TRUE) {
375 // enable begin and end elements
376 myHorizontalFrameBegin->show();
377 myHorizontalFrameEnd->show();
378 myCreateIntervalButton->show();
379 // refresh begin and end text fields
380 const GNEDataSet* dataSet = myGenericDataFrameParent->myDataSetSelector->getDataSet();
381 if (dataSet) {
382 if (dataSet->getDataIntervalChildren().empty()) {
383 // set default interval (1 hour)
384 myBeginTextField->setText("0");
385 myEndTextField->setText("3600");
386 } else {
387 // obtain last data interval
388 const GNEDataInterval* lastDataInterval = dataSet->getDataIntervalChildren().rbegin()->second;
389 const double intervalDuration = lastDataInterval->getAttributeDouble(SUMO_ATTR_END) - lastDataInterval->getAttributeDouble(SUMO_ATTR_BEGIN);
390 // set new begin end
391 myBeginTextField->setText(toString(lastDataInterval->getAttributeDouble(SUMO_ATTR_END)).c_str());
392 myEndTextField->setText(toString(lastDataInterval->getAttributeDouble(SUMO_ATTR_END) + intervalDuration).c_str());
393 }
394 }
395 } else {
396 // disable begin and end elements
397 myHorizontalFrameBegin->hide();
398 myHorizontalFrameEnd->hide();
399 myCreateIntervalButton->hide();
400 }
401 // refresh interval seletor
402 refreshIntervalSelector();
403 return 1;
404}
405
406
407FXTreeItem*
409 // insert item in Tree list
410 FXTreeItem* item = myIntervalsTreelist->insertItem(nullptr, itemParent,
411 dataInterval->getHierarchyName().c_str(),
414 // insert item in map
415 myTreeItemIntervalMap[item] = dataInterval;
416 // by default item is expanded
417 item->setExpanded(true);
418 // select first item
419 if (myTreeItemIntervalMap.size() == 1) {
420 item->setSelected(TRUE);
421 }
422 // return created FXTreeItem
423 return item;
424}
425
426// ---------------------------------------------------------------------------
427// GNEGenericDataFrame::AttributeSelector - methods
428// ---------------------------------------------------------------------------
429
431 GNEGroupBoxModule(genericDataFrameParent, TL("Data attributes")),
432 myGenericDataFrameParent(genericDataFrameParent),
433 myMinMaxLabel(nullptr),
434 myGenericDataTag(tag) {
435 // Create MFXComboBoxIcon
438 // build rainbow
440 // refresh interval selector
442 // AttributeSelector is always shown
443 show();
444}
445
446
448
449
450void
452 // save current attribute
453 const auto currentAttribute = myAttributesComboBox->getText();
454 // clear items
455 myAttributesComboBox->clearItems();
456 // restore myMinMaxLabel
457 myMinMaxLabel->setText(TL("Scale: Min -> Max"));
458 // fill myAttributesComboBox depending of data sets
459 if (myGenericDataFrameParent->myDataSetSelector->getDataSet() == nullptr) {
460 myAttributesComboBox->appendIconItem("<no dataSet selected>");
461 myAttributesComboBox->disable();
462 } else {
463 // add all item
464 myAttributesComboBox->appendIconItem("<all>");
465 // add attributes depending of interval
466 if (myGenericDataFrameParent->myIntervalSelector->getDataInterval() == nullptr) {
467 const auto parameters = myGenericDataFrameParent->getViewNet()->getNet()->getAttributeCarriers()->retrieveGenericDataParameters(
468 myGenericDataFrameParent->myDataSetSelector->getDataSet()->getID(), toString(myGenericDataTag), "", "");
469 // add all parameters
470 for (const auto& attribute : parameters) {
471 myAttributesComboBox->appendIconItem(attribute.c_str());
472 }
473 } else {
474 // retrieve all parameters within begin and end
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));
479 // add all parameters
480 for (const auto& attribute : parameters) {
481 myAttributesComboBox->appendIconItem(attribute.c_str());
482 }
483 }
484 // enable combo Box
485 myAttributesComboBox->enable();
486 // set current item
487 for (int i = 0; i < myAttributesComboBox->getNumItems(); i++) {
488 if (myAttributesComboBox->getItemText(i) == currentAttribute.text()) {
489 myAttributesComboBox->setCurrentItem(i, TRUE);
490 }
491 }
492 }
493 // show parameters
494 if (myGenericDataFrameParent->myGenericDataAttributesEditor) {
495 myGenericDataFrameParent->myGenericDataAttributesEditor->showAttributesEditor(myGenericDataFrameParent->getViewNet()->getNet()->getACTemplates()->getTemplateAC(myGenericDataTag), true);
496 }
497 // update view net
498 myGenericDataFrameParent->getViewNet()->updateViewNet();
499}
500
501
502std::string
504 if (myAttributesComboBox->getNumItems() == 0) {
505 return "";
506 } else if (myAttributesComboBox->getText() == TL("<all>")) {
507 return "";
508 } else {
509 return myAttributesComboBox->getText().text();
510 }
511}
512
513
514const RGBColor&
515GNEGenericDataFrame::AttributeSelector::getScaledColor(const double min, const double max, const double value) const {
516 // update myMinMaxLabel
517 myMinMaxLabel->setText(("Min: " + toString(min) + " -> Max: " + toString(max)).c_str());
518 // return scaled color
519 return GNEViewNetHelper::getRainbowScaledColor(min, max, value);
520}
521
522
525 return myGenericDataTag;
526}
527
528
529long
531 // empty attribute means <all>
532 if (myAttributesComboBox->getText().empty()) {
533 myAttributesComboBox->setCurrentItem(0);
534 }
535 if (myAttributesComboBox->getText() == TL("<all>")) {
536 myMinMaxLabel->setText(TL("Scale: Min -> Max"));
537 }
538 // update view
539 myGenericDataFrameParent->getViewNet()->updateViewNet();
540 return 1;
541}
542
543// ---------------------------------------------------------------------------
544// GNEGenericDataFrame - methods
545// ---------------------------------------------------------------------------
546
551
552
557
558
563
564
569
570
571void
573 // first refresh data set selector
575 // check if there is an edge path creator
576 if (myPathCreator) {
578 }
579 // show frame
581}
582
583
584void
586 if (myPathCreator) {
587 // reset candidate edges
588 for (const auto& edge : myViewNet->getNet()->getAttributeCarriers()->getEdges()) {
589 edge.second->resetCandidateFlags();
590 }
591 }
592 // hide frame
594}
595
596
597void
599 // refresh data set selector
601 // check if there is an edge path creator
602 if (myPathCreator) {
604 }
605}
606
607
608GNEGenericDataFrame::GNEGenericDataFrame(GNEViewParent* viewParent, GNEViewNet* viewNet, SumoXMLTag tag, const bool pathCreator) :
609 GNEFrame(viewParent, viewNet, toString(tag)) {
610 // create DataSetSelector
612 // create IntervalSelector module
614 // create AttributeSelector module
615 myAttributeSelector = new AttributeSelector(this, tag);
616 // create parameter editor module
618 // create GNEPathCreator module
619 if (pathCreator) {
620 myPathCreator = new GNEPathCreator(this, viewNet->getNet()->getDataPathManager());
621 }
622}
623
624
627
628
629void
633
634
635bool
636GNEGenericDataFrame::createPath(const bool /*useLastRoute*/) {
637 // this function has to be reimplemented in all child frames that uses a GNEPathCreator
638 return false;
639}
640
641/****************************************************************************/
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:46
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