80 mySelectorFrameParent(selectorFrameParent) {
94 const auto ACs = mySelectorFrameParent->getViewNet()->getNet()->getAttributeCarriers();
96 if (mySelectorFrameParent->getViewNet()->getEditModes().isCurrentSupermodeNetwork()) {
97 updateInformationLabel(
TL(
"Junctions"), ACs->getNumberOfSelectedJunctions());
98 updateInformationLabel(
TL(
"Edges"), ACs->getNumberOfSelectedEdges());
99 updateInformationLabel(
TL(
"Lanes"), ACs->getNumberOfSelectedLanes());
100 updateInformationLabel(
TL(
"Connections"), ACs->getNumberOfSelectedConnections());
101 updateInformationLabel(
TL(
"Crossings"), ACs->getNumberOfSelectedCrossings());
102 updateInformationLabel(
TL(
"WalkingAreas"), ACs->getNumberOfSelectedWalkingAreas());
103 updateInformationLabel(
TL(
"Additionals"), ACs->getNumberOfSelectedPureAdditionals());
104 updateInformationLabel(
TL(
"Wires"), ACs->getNumberOfSelectedWires());
105 updateInformationLabel(
TL(
"TAZs"), ACs->getNumberOfSelectedTAZs());
106 updateInformationLabel(
TL(
"TAZSources"), ACs->getNumberOfSelectedTAZSources());
107 updateInformationLabel(
TL(
"TAZSinks"), ACs->getNumberOfSelectedTAZSinks());
108 updateInformationLabel(
TL(
"Polygons"), ACs->getNumberOfSelectedPolygons());
109 updateInformationLabel(
TL(
"POIs"), ACs->getNumberOfSelectedPOIs());
110 updateInformationLabel(
TL(
"JuPedSim elements"),
111 ACs->getNumberOfSelectedJpsWalkableAreas() +
112 ACs->getNumberOfSelectedJpsObstacles());
113 }
else if (mySelectorFrameParent->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
114 updateInformationLabel(
TL(
"Routes"), ACs->getNumberOfSelectedRoutes());
115 updateInformationLabel(
TL(
"Vehicles"), ACs->getNumberOfSelectedVehicles());
116 updateInformationLabel(
TL(
"Persons"), ACs->getNumberOfSelectedPersons());
117 updateInformationLabel(
TL(
"Person trips"), ACs->getNumberOfSelectedPersonTrips());
118 updateInformationLabel(
TL(
"Walks"), ACs->getNumberOfSelectedWalks());
119 updateInformationLabel(
TL(
"Rides"), ACs->getNumberOfSelectedRides());
120 updateInformationLabel(
TL(
"Containers"), ACs->getNumberOfSelectedContainers());
121 updateInformationLabel(
TL(
"Transport"), ACs->getNumberOfSelectedTransport());
122 updateInformationLabel(
TL(
"Tranships"), ACs->getNumberOfSelectedTranships());
123 updateInformationLabel(
TL(
"Stops"), ACs->getNumberOfSelectedStops());
124 }
else if (mySelectorFrameParent->getViewNet()->getEditModes().isCurrentSupermodeData()) {
125 updateInformationLabel(
TL(
"EdgeDatas"), ACs->getNumberOfSelectedEdgeDatas());
126 updateInformationLabel(
TL(
"EdgeRelDatas"), ACs->getNumberOfSelectedEdgeRelDatas());
127 updateInformationLabel(
TL(
"EdgeTAZRel"), ACs->getNumberOfSelectedEdgeTAZRel());
131 if (numberLines == 0) {
133 }
else if (numberLines > 1) {
174 return myModificationModeType;
180 if (obj == myAddRadioButton) {
181 myModificationModeType = Operation::ADD;
182 myAddRadioButton->setCheck(
true);
183 myRemoveRadioButton->setCheck(
false);
184 myKeepRadioButton->setCheck(
false);
185 myReplaceRadioButton->setCheck(
false);
187 }
else if (obj == myRemoveRadioButton) {
188 myModificationModeType = Operation::SUB;
189 myAddRadioButton->setCheck(
false);
190 myRemoveRadioButton->setCheck(
true);
191 myKeepRadioButton->setCheck(
false);
192 myReplaceRadioButton->setCheck(
false);
194 }
else if (obj == myKeepRadioButton) {
195 myModificationModeType = Operation::RESTRICT;
196 myAddRadioButton->setCheck(
false);
197 myRemoveRadioButton->setCheck(
false);
198 myKeepRadioButton->setCheck(
true);
199 myReplaceRadioButton->setCheck(
false);
201 }
else if (obj == myReplaceRadioButton) {
202 myModificationModeType = Operation::REPLACE;
203 myAddRadioButton->setCheck(
false);
204 myRemoveRadioButton->setCheck(
false);
205 myKeepRadioButton->setCheck(
false);
206 myReplaceRadioButton->setCheck(
true);
219 mySelectorFrameParent(selectorFrameParent) {
237 mySelectorFrameParent->myViewNet->setSelectorFrameScale(mySelectionScaling->getValue());
238 mySelectorFrameParent->myViewNet->updateViewNet();
248 mySelectorFrameParent(selectorFrameParent) {
252 FXVerticalFrame* col1 =
new FXVerticalFrame(selectionButtons, LAYOUT_FILL_X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
253 FXVerticalFrame* col2 =
new FXVerticalFrame(selectionButtons, LAYOUT_FILL_X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
275 std::vector<GNEAttributeCarrier*> loadedACs;
276 std::ifstream strm(file.c_str());
282 std::map<const std::string, GNEAttributeCarrier*> GLFUllNameAC;
284 for (
const auto& GLObject : GLObjects) {
293 while (strm.good()) {
297 if (line.length() != 0) {
309 loadedACs.push_back(AC);
315 if (loadedACs.size() > 0) {
317 mySelectorFrameParent->handleIDs(loadedACs);
318 mySelectorFrameParent->myViewNet->getUndoList()->end();
320 mySelectorFrameParent->myViewNet->updateViewNet();
328 FXFileDialog opendialog(getCollapsableFrame(),
TL(
"Open List of Selected Items"));
330 opendialog.setSelectMode(SELECTFILE_EXISTING);
331 opendialog.setPatternList(
"Selection files (*.txt)\nAll files (*)");
335 if (opendialog.execute()) {
337 loadFromFile(opendialog.getFilename().text());
346 TL(
"Save List of selected Items"),
".txt",
354 const auto selectedACs = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(
false);
355 for (
const auto& selectedAC : selectedACs) {
364 WRITE_DEBUG(
"Opening FXMessageBox 'error storing selection'");
366 FXMessageBox::error(getCollapsableFrame(), MBOX_OK,
"Storing Selection failed",
"%s", e.what());
368 WRITE_DEBUG(
"Closed FXMessageBox 'error storing selection' with 'OK'");
376 bool ignoreLocking =
false;
378 if ((mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork() && processNetworkElementSelection(
true,
false, ignoreLocking)) ||
379 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand() && processDemandElementSelection(
true,
false, ignoreLocking)) ||
380 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData() && processDataElementSelection(
true,
false, ignoreLocking))) {
384 if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork()) {
385 processNetworkElementSelection(
false,
true, ignoreLocking);
386 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand()) {
387 processDemandElementSelection(
false,
true, ignoreLocking);
388 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData()) {
389 processDataElementSelection(
false,
true, ignoreLocking);
392 mySelectorFrameParent->myViewNet->getUndoList()->end();
400 mySelectorFrameParent->getViewNet()->hotkeyDel();
407 bool ignoreLocking =
false;
409 if ((mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork() && processNetworkElementSelection(
true,
false, ignoreLocking)) ||
410 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand() && processDemandElementSelection(
true,
false, ignoreLocking)) ||
411 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData() && processDataElementSelection(
true,
false, ignoreLocking))) {
415 if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork()) {
417 processNetworkElementSelection(
false,
false, ignoreLocking);
418 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand()) {
420 processDemandElementSelection(
false,
false, ignoreLocking);
421 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData()) {
423 processDataElementSelection(
false,
false, ignoreLocking);
426 mySelectorFrameParent->myViewNet->getUndoList()->end();
437 onCmdInvert(0, 0, 0);
438 onCmdDelete(0, 0, 0);
440 mySelectorFrameParent->getViewNet()->getUndoList()->end();
448 const auto& locks = mySelectorFrameParent->getViewNet()->getLockManager();
450 const auto& ACs = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers();
452 GNEUndoList* undoList = mySelectorFrameParent->myViewNet->getUndoList();
454 for (
const auto& junction : ACs->getJunctions()) {
456 if (ignoreLocking || !locks.isObjectLocked(
GLO_JUNCTION,
false)) {
459 }
else if (onlyUnselect || junction.second.second->isAttributeCarrierSelected()) {
464 }
else if (onlyCount) {
465 ignoreLocking = askContinueIfLock();
469 for (
const auto& incomingEdge : junction.second.second->getGNEIncomingEdges()) {
473 if (ignoreLocking || !locks.isObjectLocked(
GLO_EDGE,
false)) {
479 }
else if (onlyCount) {
480 ignoreLocking = askContinueIfLock();
484 if (ignoreLocking || !locks.isObjectLocked(
GLO_LANE,
false)) {
485 for (
const auto& lane : incomingEdge->getLanes()) {
492 }
else if (onlyCount) {
493 ignoreLocking = askContinueIfLock();
496 }
else if (mySelectorFrameParent->myViewNet->checkSelectEdges()) {
498 if (ignoreLocking || !locks.isObjectLocked(
GLO_EDGE,
false)) {
501 }
else if (onlyUnselect || incomingEdge->isAttributeCarrierSelected()) {
506 }
else if (onlyCount) {
507 ignoreLocking = askContinueIfLock();
512 if (ignoreLocking || !locks.isObjectLocked(
GLO_LANE,
false)) {
513 for (
const auto& lane : incomingEdge->getLanes()) {
516 }
else if (onlyUnselect || lane->isAttributeCarrierSelected()) {
522 }
else if (onlyCount) {
523 ignoreLocking = askContinueIfLock();
528 if (ignoreLocking || !locks.isObjectLocked(
GLO_CONNECTION,
false)) {
529 for (
const auto& connection : incomingEdge->getGNEConnections()) {
532 }
else if (onlyUnselect || connection->isAttributeCarrierSelected()) {
538 }
else if (onlyCount) {
539 ignoreLocking = askContinueIfLock();
544 if (ignoreLocking || !locks.isObjectLocked(
GLO_CROSSING,
false)) {
545 for (
const auto& crossing : junction.second.second->getGNECrossings()) {
548 }
else if (onlyUnselect || crossing->isAttributeCarrierSelected()) {
554 }
else if (onlyCount) {
555 ignoreLocking = askContinueIfLock();
560 for (
const auto& walkingArea : junction.second.second->getGNEWalkingAreas()) {
563 }
else if (onlyUnselect || walkingArea->isAttributeCarrierSelected()) {
569 }
else if (onlyCount) {
570 ignoreLocking = askContinueIfLock();
576 for (
const auto& additionalTag : ACs->getAdditionals()) {
579 for (
const auto& additional : additionalTag.second) {
582 }
else if (onlyUnselect || additional.second->isAttributeCarrierSelected()) {
590 }
else if (onlyCount) {
591 ignoreLocking = askContinueIfLock();
595 if (ignoreLocking || !locks.isObjectLocked(
GLO_WIRE,
false)) {
596 for (
const auto& wireTag : ACs->getAdditionals()) {
599 for (
const auto& wire : wireTag.second) {
602 }
else if (onlyUnselect || wire.second->isAttributeCarrierSelected()) {
610 }
else if (onlyCount) {
611 ignoreLocking = askContinueIfLock();
615 if (ignoreLocking || !locks.isObjectLocked(
GLO_TAZ,
false)) {
619 }
else if (onlyUnselect ||
TAZ.second->isAttributeCarrierSelected()) {
628 }
else if (onlyUnselect || TAZSource.second->isAttributeCarrierSelected()) {
637 }
else if (onlyUnselect || TAZSink.second->isAttributeCarrierSelected()) {
643 }
else if (onlyCount) {
644 ignoreLocking = askContinueIfLock();
648 if (ignoreLocking || !locks.isObjectLocked(
GLO_POLYGON,
false)) {
649 for (
const auto& polygon : ACs->getAdditionals().at(
SUMO_TAG_POLY)) {
652 }
else if (onlyUnselect || polygon.second->isAttributeCarrierSelected()) {
658 }
else if (onlyCount) {
659 ignoreLocking = askContinueIfLock();
663 if (ignoreLocking || !locks.isObjectLocked(
GLO_POI,
false)) {
667 }
else if (onlyUnselect ||
POI.second->isAttributeCarrierSelected()) {
673 for (
const auto& POILane : ACs->getAdditionals().at(
GNE_TAG_POILANE)) {
676 }
else if (onlyUnselect || POILane.second->isAttributeCarrierSelected()) {
682 for (
const auto& POIGeo : ACs->getAdditionals().at(
GNE_TAG_POIGEO)) {
685 }
else if (onlyUnselect || POIGeo.second->isAttributeCarrierSelected()) {
691 }
else if (onlyCount) {
692 ignoreLocking = askContinueIfLock();
700 }
else if (onlyUnselect || walkableArea.second->isAttributeCarrierSelected()) {
706 }
else if (onlyCount) {
707 ignoreLocking = askContinueIfLock();
714 }
else if (onlyUnselect || obstacle.second->isAttributeCarrierSelected()) {
720 }
else if (onlyCount) {
721 ignoreLocking = askContinueIfLock();
731 const auto& locks = mySelectorFrameParent->getViewNet()->getLockManager();
733 GNEUndoList* undoList = mySelectorFrameParent->myViewNet->getUndoList();
735 const auto& demandElements = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers()->getDemandElements();
737 if (ignoreLocking || !locks.isObjectLocked(
GLO_ROUTE,
false)) {
741 }
else if (onlyUnselect || route.second->isAttributeCarrierSelected()) {
751 }
else if (onlyUnselect || vehicle.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
752 vehicle.second->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"false", undoList);
754 vehicle.second->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"true", undoList);
760 }
else if (onlyUnselect || routeFlow.second->getChildDemandElements().front()->isAttributeCarrierSelected()) {
761 routeFlow.second->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"false", undoList);
763 routeFlow.second->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"true", undoList);
766 }
else if (onlyCount) {
767 ignoreLocking = askContinueIfLock();
771 if (ignoreLocking || !locks.isObjectLocked(
GLO_VEHICLE,
false)) {
773 for (
const auto& vehicle : demandElements.at(vehicleTag)) {
776 }
else if (onlyUnselect || vehicle.second->isAttributeCarrierSelected()) {
783 }
else if (onlyCount) {
784 ignoreLocking = askContinueIfLock();
788 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSON,
false)) {
790 for (
const auto& person : demandElements.at(personTag)) {
793 }
else if (onlyUnselect || person.second->isAttributeCarrierSelected()) {
800 }
else if (onlyCount) {
801 ignoreLocking = askContinueIfLock();
805 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSON,
false)) {
807 for (
const auto& person : demandElements.at(personTag)) {
808 for (
const auto& personPlan : person.second->getChildDemandElements()) {
809 if (personPlan->getTagProperty().isPersonTrip()) {
812 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
821 }
else if (onlyCount) {
822 ignoreLocking = askContinueIfLock();
826 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSON,
false)) {
828 for (
const auto& person : demandElements.at(personTag)) {
829 for (
const auto& personPlan : person.second->getChildDemandElements()) {
830 if (personPlan->getTagProperty().isPlanRide()) {
833 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
842 }
else if (onlyCount) {
843 ignoreLocking = askContinueIfLock();
847 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSON,
false)) {
849 for (
const auto& person : demandElements.at(personTag)) {
850 for (
const auto& personPlan : person.second->getChildDemandElements()) {
851 if (personPlan->getTagProperty().isPlanWalk()) {
854 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
863 }
else if (onlyCount) {
864 ignoreLocking = askContinueIfLock();
868 if (ignoreLocking || !locks.isObjectLocked(
GLO_CONTAINER,
false)) {
870 for (
const auto& container : demandElements.at(containerTag)) {
873 }
else if (onlyUnselect || container.second->isAttributeCarrierSelected()) {
880 }
else if (onlyCount) {
881 ignoreLocking = askContinueIfLock();
885 if (ignoreLocking || !locks.isObjectLocked(
GLO_CONTAINER,
false)) {
887 for (
const auto& container : demandElements.at(containerTag)) {
888 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
889 if (containerPlan->getTagProperty().isPlanTransport()) {
892 }
else if (onlyUnselect || containerPlan->isAttributeCarrierSelected()) {
901 }
else if (onlyCount) {
902 ignoreLocking = askContinueIfLock();
906 if (ignoreLocking || !locks.isObjectLocked(
GLO_CONTAINER,
false)) {
908 for (
const auto& container : demandElements.at(containerTag)) {
909 for (
const auto& containerPlan : container.second->getChildDemandElements()) {
910 if (containerPlan->getTagProperty().isPlanTranship()) {
913 }
else if (onlyUnselect || containerPlan->isAttributeCarrierSelected()) {
922 }
else if (onlyCount) {
923 ignoreLocking = askContinueIfLock();
927 if (ignoreLocking || !locks.isObjectLocked(
GLO_STOP,
false)) {
928 for (
const auto& demandElementTag : demandElements) {
929 for (
const auto& demandElement : demandElementTag.second) {
930 if (demandElement.second->getTagProperty().isVehicleStop() ||
931 demandElement.second->getTagProperty().isVehicleWaypoint() ||
932 demandElement.second->getTagProperty().isPlanStop()) {
935 }
else if (onlyUnselect || demandElement.second->isAttributeCarrierSelected()) {
943 }
else if (onlyCount) {
944 ignoreLocking = askContinueIfLock();
954 const auto& locks = mySelectorFrameParent->getViewNet()->getLockManager();
956 const auto undoList = mySelectorFrameParent->myViewNet->getUndoList();
958 const auto& ACs = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers();
960 for (
const auto& genericDataTag : ACs->getGenericDatas()) {
961 for (
const auto& genericData : genericDataTag.second) {
962 if (onlyCount && locks.isObjectLocked(genericData.second->getType(),
false)) {
963 ignoreLocking = askContinueIfLock();
965 }
else if ((ignoreLocking || (!locks.isObjectLocked(
GLO_EDGEDATA,
false) && genericData.second->getType() ==
GLO_EDGEDATA)) ||
970 }
else if (onlyUnselect || genericData.second->isAttributeCarrierSelected()) {
984 WRITE_DEBUG(
"Opening FXMessageBox 'confirm selection operation'");
986 const FXuint answer = FXMessageBox::question(mySelectorFrameParent->getViewNet()->getApp(),
987 MBOX_YES_NO,
"Confirm selection operation",
"There are locked elements in the current selection.\nApply operation to locked elements?");
991 WRITE_DEBUG(
"Closed FXMessageBox 'confirm selection operation' with 'No'");
992 }
else if (answer == 4) {
993 WRITE_DEBUG(
"Closed FXMessageBox 'confirm selection operation' with 'ESC'");
998 WRITE_DEBUG(
"Closed FXMessageBox 'confirm selection operation' with 'Yes'");
1009 mySelectorFrameParent(selectorFrameParent),
1035 for (
const auto& item :
myItems) {
1047 if (obj == myParentsComboBox) {
1048 for (
const auto& item : myItems) {
1049 if (item.second == myParentsComboBox->getText().text()) {
1051 mySelectParentsButton->enable();
1052 myUnselectParentsButton->enable();
1054 myParentsComboBox->setTextColor(FXRGB(0, 0, 0));
1056 myCurrentSelectedParent = item.first;
1061 myCurrentSelectedParent = Selection::NOTHING;
1063 mySelectParentsButton->disable();
1064 myUnselectParentsButton->disable();
1065 myParentsComboBox->setTextColor(FXRGB(255, 0, 0));
1067 }
else if (obj == myChildrenComboBox) {
1068 for (
const auto& item : myItems) {
1069 if (item.second == myChildrenComboBox->getText().text()) {
1071 mySelectChildrenButton->enable();
1072 myUnselectChildrenButton->enable();
1074 myChildrenComboBox->setTextColor(FXRGB(0, 0, 0));
1076 myCurrentSelectedChild = item.first;
1081 myCurrentSelectedChild = Selection::NOTHING;
1083 mySelectChildrenButton->disable();
1084 myUnselectChildrenButton->disable();
1085 myChildrenComboBox->setTextColor(FXRGB(255, 0, 0));
1095 const auto selectedACs = mySelectorFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(
true);
1097 if ((selectedACs.size() > 0) && (myCurrentSelectedParent != Selection::NOTHING)) {
1099 std::vector<GNEHierarchicalElement*> HEToSelect;
1100 for (
const auto& selectedAC : selectedACs) {
1102 const auto HE = selectedAC->getHierarchicalElement();
1104 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::JUNCTION)) {
1105 HEToSelect.insert(HEToSelect.end(), HE->getParentJunctions().begin(), HE->getParentJunctions().end());
1108 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::EDGE)) {
1109 if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_LANE) {
1111 HEToSelect.push_back(
dynamic_cast<GNELane*
>(selectedAC)->getParentEdge());
1113 HEToSelect.insert(HEToSelect.end(), HE->getParentEdges().begin(), HE->getParentEdges().end());
1117 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::LANE)) {
1118 HEToSelect.insert(HEToSelect.end(), HE->getParentLanes().begin(), HE->getParentLanes().end());
1121 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::ADDITIONAL)) {
1122 HEToSelect.insert(HEToSelect.end(), HE->getParentAdditionals().begin(), HE->getParentAdditionals().end());
1125 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::WIRE)) {
1126 HEToSelect.insert(HEToSelect.end(), HE->getParentAdditionals().begin(), HE->getParentAdditionals().end());
1129 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::DEMAND)) {
1130 HEToSelect.insert(HEToSelect.end(), HE->getParentDemandElements().begin(), HE->getParentDemandElements().end());
1133 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::DATA)) {
1134 HEToSelect.insert(HEToSelect.end(), HE->getParentGenericDatas().begin(), HE->getParentGenericDatas().end());
1138 if (HEToSelect.size() > 0) {
1139 if (HEToSelect.size() > 1) {
1140 mySelectorFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::SELECT,
TL(
"select parents"));
1142 for (
const auto& HE : HEToSelect) {
1143 if (obj == mySelectParentsButton) {
1144 HE->setAttribute(
GNE_ATTR_SELECTED,
"true", mySelectorFrameParent->getViewNet()->getUndoList());
1146 HE->setAttribute(
GNE_ATTR_SELECTED,
"false", mySelectorFrameParent->getViewNet()->getUndoList());
1149 if (HEToSelect.size() > 1) {
1150 mySelectorFrameParent->getViewNet()->getUndoList()->end();
1154 mySelectorFrameParent->mySelectionInformation->updateInformationLabel();
1156 mySelectorFrameParent->getViewNet()->update();
1165 const auto selectedACs = mySelectorFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(
true);
1167 if ((selectedACs.size() > 0) && (myCurrentSelectedChild != Selection::NOTHING)) {
1169 std::vector<GNEHierarchicalElement*> HEToSelect;
1170 for (
const auto& selectedAC : selectedACs) {
1172 const auto HE = selectedAC->getHierarchicalElement();
1174 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::JUNCTION)) {
1177 const auto junction =
dynamic_cast<GNEJunction*
>(selectedAC);
1179 HEToSelect.insert(HEToSelect.end(), junction->getGNEIncomingEdges().begin(), junction->getGNEIncomingEdges().end());
1180 HEToSelect.insert(HEToSelect.end(), junction->getGNEOutgoingEdges().begin(), junction->getGNEOutgoingEdges().end());
1182 HEToSelect.insert(HEToSelect.end(), HE->getChildJunctions().begin(), HE->getChildJunctions().end());
1186 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::EDGE)) {
1187 if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_EDGE) {
1189 const auto edge =
dynamic_cast<GNEEdge*
>(selectedAC);
1191 HEToSelect.insert(HEToSelect.end(), edge->getLanes().begin(), edge->getLanes().end());
1193 HEToSelect.insert(HEToSelect.end(), HE->getChildEdges().begin(), HE->getChildEdges().end());
1197 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::CONNECTION)) {
1198 if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_EDGE) {
1200 const auto edge =
dynamic_cast<GNEEdge*
>(selectedAC);
1202 HEToSelect.insert(HEToSelect.end(), edge->getGNEConnections().begin(), edge->getGNEConnections().end());
1203 }
else if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_LANE) {
1205 const auto lane =
dynamic_cast<GNELane*
>(selectedAC);
1207 for (
const auto& connection : lane->getParentEdge()->getGNEConnections()) {
1209 HEToSelect.push_back(connection);
1214 const auto junction =
dynamic_cast<GNEJunction*
>(selectedAC);
1218 HEToSelect.insert(HEToSelect.end(), connections.begin(), connections.end());
1222 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::CROSSING)) {
1225 const auto junction =
dynamic_cast<GNEJunction*
>(selectedAC);
1227 HEToSelect.insert(HEToSelect.end(), junction->getGNECrossings().begin(), junction->getGNECrossings().end());
1231 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::LANE)) {
1232 HEToSelect.insert(HEToSelect.end(), HE->getChildLanes().begin(), HE->getChildLanes().end());
1235 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::ADDITIONAL)) {
1237 for (
const auto& additionalChild : HE->getChildAdditionals()) {
1238 if (!additionalChild->getTagProperty().isWireElement() && !additionalChild->getTagProperty().isSymbol()) {
1239 HEToSelect.push_back(additionalChild);
1244 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::WIRE)) {
1246 for (
const auto& wireChild : HE->getChildAdditionals()) {
1247 if (wireChild->getTagProperty().isWireElement() && !wireChild->getTagProperty().isSymbol()) {
1248 HEToSelect.push_back(wireChild);
1253 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::DEMAND)) {
1254 HEToSelect.insert(HEToSelect.end(), HE->getChildDemandElements().begin(), HE->getChildDemandElements().end());
1257 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::DATA)) {
1258 HEToSelect.insert(HEToSelect.end(), HE->getChildGenericDatas().begin(), HE->getChildGenericDatas().end());
1262 if (HEToSelect.size() > 0) {
1263 if (HEToSelect.size() > 1) {
1264 mySelectorFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::SELECT,
TL(
"select children"));
1266 for (
const auto& HE : HEToSelect) {
1267 if (obj == mySelectChildrenButton) {
1270 HE->setAttribute(
GNE_ATTR_SELECTED,
"false", mySelectorFrameParent->getViewNet()->getUndoList());
1273 if (HEToSelect.size() > 1) {
1274 mySelectorFrameParent->getViewNet()->getUndoList()->end();
1278 mySelectorFrameParent->mySelectionInformation->updateInformationLabel();
1280 mySelectorFrameParent->getViewNet()->update();
1303 GNEFrame(viewParent, viewNet,
TL(
"Selection")) {
1377 if (AC ==
nullptr) {
1385 if ((AC->getTagProperty().isNetworkElement() || AC->getTagProperty().isAdditionalElement()) &&
1398 if (filteredGLObjects.size() > 1) {
1402 if (AC->isAttributeCarrierSelected()) {
1403 AC->unselectAttributeCarrier();
1405 AC->selectAttributeCarrier();
1419 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsToSelect, ACsToUnselect;
1425 for (
const auto& selectedAC : selectedACs) {
1426 ACsToUnselect.insert(std::make_pair(selectedAC->getID(), selectedAC));
1430 for (
const auto& AC : ACs) {
1432 switch (setOperation) {
1434 ACsToUnselect.insert(std::make_pair(AC->getID(), AC));
1437 if (ACsToUnselect.find(std::make_pair(AC->getID(), AC)) != ACsToUnselect.end()) {
1438 ACsToSelect.insert(std::make_pair(AC->getID(), AC));
1442 ACsToSelect.insert(std::make_pair(AC->getID(), AC));
1448 std::set<GNEEdge*> edgesToSelect;
1450 for (
const auto& AC : ACsToSelect) {
1451 if (AC.second->getTagProperty().getTag() ==
SUMO_TAG_EDGE) {
1456 for (
const auto& edgeToSelect : edgesToSelect) {
1458 ACsToSelect.insert(std::make_pair(edgeToSelect->getFromJunction()->getID(), edgeToSelect->getFromJunction()));
1459 for (
const auto& connectionToSelect : edgeToSelect->getFromJunction()->getGNEConnections()) {
1460 ACsToSelect.insert(std::make_pair(connectionToSelect->getID(), connectionToSelect));
1462 for (
const auto& fromCrossingToSelect : edgeToSelect->getFromJunction()->getGNECrossings()) {
1463 ACsToSelect.insert(std::make_pair(fromCrossingToSelect->getID(), fromCrossingToSelect));
1465 for (
const auto& fromWalkingAreaToSelect : edgeToSelect->getFromJunction()->getGNEWalkingAreas()) {
1466 ACsToSelect.insert(std::make_pair(fromWalkingAreaToSelect->getID(), fromWalkingAreaToSelect));
1469 ACsToSelect.insert(std::make_pair(edgeToSelect->getToJunction()->getID(), edgeToSelect->getToJunction()));
1470 for (
const auto& connectionToSelect : edgeToSelect->getToJunction()->getGNEConnections()) {
1471 ACsToSelect.insert(std::make_pair(connectionToSelect->getID(), connectionToSelect));
1473 for (
const auto& toCrossingToSelect : edgeToSelect->getToJunction()->getGNECrossings()) {
1474 ACsToSelect.insert(std::make_pair(toCrossingToSelect->getID(), toCrossingToSelect));
1476 for (
const auto& toWalkingAreaToSelect : edgeToSelect->getToJunction()->getGNEWalkingAreas()) {
1477 ACsToSelect.insert(std::make_pair(toWalkingAreaToSelect->getID(), toWalkingAreaToSelect));
1482 if ((ACsToSelect.size() + ACsToUnselect.size()) > 0) {
1485 for (
const auto& ACToUnselect : ACsToUnselect) {
1486 if (ACToUnselect.second->getTagProperty().isSelectable()) {
1490 for (
const auto& ACToSelect : ACsToSelect) {
1491 if (ACToSelect.second->getTagProperty().isSelectable()) {
1501 std::vector<GNEAttributeCarrier*>
1503 std::vector<GNEAttributeCarrier*> result;
1509 for (
const auto& AC : allACbyTag) {
1510 if (expr ==
"" && compOp ==
'@') {
1511 result.push_back(AC);
1512 }
else if (tagValue.hasAttribute(ACAttr) && tagValue.getAttributeProperties(ACAttr).isNumerical()) {
1514 std::istringstream buf(AC->getAttribute(ACAttr));
1519 result.push_back(AC);
1524 result.push_back(AC);
1529 result.push_back(AC);
1535 std::string acVal = AC->getAttributeForSelection(ACAttr);
1538 if (acVal.find(expr) != std::string::npos) {
1539 result.push_back(AC);
1543 if (acVal.find(expr) == std::string::npos) {
1544 result.push_back(AC);
1548 if (acVal == expr) {
1549 result.push_back(AC);
1553 if (acVal != expr) {
1554 result.push_back(AC);
1564 std::vector<GNEAttributeCarrier*>
1566 std::vector<GNEAttributeCarrier*> result;
1568 for (
const auto& genericData : genericDatas) {
1569 if (expr ==
"" && compOp ==
'@') {
1570 result.push_back(genericData);
1573 std::istringstream buf(genericData->getParameter(attr,
"0"));
1578 result.push_back(genericData);
1583 result.push_back(genericData);
1588 result.push_back(genericData);
1594 std::string acVal = genericData->getAttributeForSelection(
GNE_ATTR_PARENT);
1597 if (acVal.find(expr) != std::string::npos) {
1598 result.push_back(genericData);
1602 if (acVal.find(expr) == std::string::npos) {
1603 result.push_back(genericData);
1607 if (acVal == expr) {
1608 result.push_back(genericData);
1612 if (acVal != expr) {
1613 result.push_back(genericData);
FXDEFMAP(GNESelectorFrame::ModificationMode) ModificationModeMap[]
@ NETWORK
Network mode (Edges, junctions, etc..)
@ DATA
Data mode (edgeData, LaneData etc..)
@ DEMAND
Demand mode (Routes, Vehicles etc..)
@ MID_GNE_SELECTORFRAME_SELECTSCALE
changes the visual scaling of selected items
@ MID_GNE_SELECTORFRAME_CHILDREN
select/unselect children
@ MID_CHOOSEN_SAVE
Save set.
@ MID_CHOOSEN_INVERT
Deselect selected items.
@ MID_CHOOSEN_DELETE
delete set
@ MID_CHOOSEN_OPERATION
set type of selection
@ MID_CHOOSEN_LOAD
Load set.
@ MID_CHOOSEN_REDUCE
simplify network reduction
@ MID_CHOOSEN_CLEAR
Clear set.
@ MID_GNE_SELECT
select element
@ MID_GNE_SELECTORFRAME_PARENTS
select/unselect parents
#define GUIDesignSpinDial
#define GUIDesignComboBox
#define GUIDesignComboBoxNCol
number of column of every combo box
#define GUIDesignAuxiliarHorizontalFrame
design for auxiliar (Without borders) horizontal frame used to pack another frames
#define GUIDesignComboBoxVisibleItemsMedium
combo box medium small
#define GUIDesignLabelThick(justify)
label extended over frame with thick and with text justify to left
#define GUIDesignRadioButton
#define GUIDesignLabelFrameInformation
label extended over frame without thick and with text justify to left, used to show information in fr...
@ GLO_EDGERELDATA
edge relation data
@ GLO_TAZRELDATA
TAZ relation data.
@ GLO_WALKINGAREA
a walkingArea
@ GLO_JPS_WALKABLEAREA
walkable area
@ GLO_WIRE
reserved GLO type for packing all wire elements
@ GLO_TAZ
Traffic Assignment Zones (TAZs)
@ GLO_CONTAINER
a container
@ GLO_JPS_OBSTACLE
obstacles
@ GLO_CONNECTION
a connection
@ GLO_ADDITIONALELEMENT
reserved GLO type for packing all additionals elements
@ GLO_POI
poi (over view, geo and lane)
FXString gCurrentFolder
The folder used as last.
#define WRITE_ERRORF(...)
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ SUMO_TAG_TAZ
a traffic assignment zone
@ SUMO_TAG_TAZSINK
a sink within a district (connection road)
@ SUMO_TAG_POI
begin/end of the description of a Point of interest
@ SUMO_TAG_VEHICLE
description of a vehicle
@ GNE_TAG_POIGEO
Point of interest over view with GEO attributes.
@ GNE_TAG_FLOW_WITHROUTE
description of a vehicle with an embedded route
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_POLY
begin/end of the description of a polygon
@ SUMO_TAG_LANE
begin/end of the description of a single lane
@ GNE_TAG_VEHICLE_WITHROUTE
description of a vehicle with an embedded route
@ GNE_TAG_POILANE
Point of interest over Lane.
@ GNE_TAG_JPS_OBSTACLE
polygon used for draw juPedSim obstacles
@ SUMO_TAG_TAZSOURCE
a source within a district (connection road)
@ GNE_TAG_JPS_WALKABLEAREA
polygon used for draw juPedSim walkable areas
@ SUMO_TAG_EDGE
begin/end of the description of an edge
SumoXMLAttr
Numbers representing SUMO-XML - attributes.
@ GNE_ATTR_PARENT
parent of an additional element
@ GNE_ATTR_SELECTED
element is selected
@ GNE_ATTR_PARAMETERS
parameters "key1=value1|key2=value2|...|keyN=valueN"
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
const std::string getID() const
get ID (all Attribute Carriers have one)
virtual GUIGlObject * getGUIGlObject()=0
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
bool isTemplate() const
check if this AC is template
A road/street connecting two junctions (netedit-version)
void hideElementSet()
hide element set
void showElementSet()
show element set
GNEViewNet * myViewNet
FOX need this.
FXVerticalFrame * myContentFrame
Vertical frame that holds all widgets of frame.
virtual void show()
show Frame
virtual void hide()
hide Frame
void setAttribute(SumoXMLAttr key, const std::string &value, GNEUndoList *undoList)
std::vector< GNEConnection * > getGNEConnections() const
Returns all GNEConnections vinculated with this junction.
This lane is powered by an underlying GNEEdge and basically knows how to draw itself.
std::vector< GNEAttributeCarrier * > retrieveAttributeCarriers(SumoXMLTag tag=SUMO_TAG_NOTHING)
get the attribute carriers based on Type
GNEEdge * retrieveEdge(const std::string &id, bool hardFail=true) const
get edge by id
std::vector< GNEAttributeCarrier * > getSelectedAttributeCarriers(const bool ignoreCurrentSupermode)
get all selected attribute carriers (or only relative to current supermode
GNENetHelper::AttributeCarriers * getAttributeCarriers() const
get all attribute carriers used in this net
FXRadioButton * myReplaceRadioButton
replace radio button
Operation
FOX-declaration.
ModificationMode(GNESelectorFrame *selectorFrameParent)
constructor
long onCmdSelectModificationMode(FXObject *, FXSelector, void *)
FXRadioButton * myAddRadioButton
FOX need this.
~ModificationMode()
destructor
Operation getModificationMode() const
get current modification mode
FXRadioButton * myRemoveRadioButton
remove radio button
FXRadioButton * myKeepRadioButton
keep button
SelectionHierarchy(GNESelectorFrame *selectorFrameParent)
FOX-declaration.
MFXComboBoxIcon * myChildrenComboBox
comboBox for children
~SelectionHierarchy()
destructor
FXButton * myUnselectParentsButton
unselect parents button
FXButton * mySelectParentsButton
select parents button
FXButton * myUnselectChildrenButton
unselect parents button
long onCmdParents(FXObject *obj, FXSelector, void *)
called when user press select/unselect parents button
long onCmdChildren(FXObject *obj, FXSelector, void *)
called when user press select/unselect children button
long onCmdSelectItem(FXObject *obj, FXSelector, void *)
called when user select an item in comboBox
MFXComboBoxIcon * myParentsComboBox
comboBox for parents
const std::vector< std::pair< Selection, std::string > > myItems
FXButton * mySelectChildrenButton
select children button
SelectionOperation(GNESelectorFrame *selectorFrameParent)
FOX-declaration.
long onCmdSave(FXObject *, FXSelector, void *)
Called when the user presses the Save-button.
bool processDataElementSelection(const bool onlyCount, const bool onlyUnselect, bool &ignoreLocking)
process data element selection
bool askContinueIfLock() const
ask if continue due locking
long onCmdDelete(FXObject *, FXSelector, void *)
Called when the user presses the delete-button.
long onCmdReduce(FXObject *, FXSelector, void *)
Called when the user presses the Reduce-button.
~SelectionOperation()
destructor
long onCmdInvert(FXObject *, FXSelector, void *)
Called when the user presses the Invert-button.
long onCmdClear(FXObject *, FXSelector, void *)
Called when the user presses the Clear-button.
long onCmdLoad(FXObject *, FXSelector, void *)
Called when the user presses the Load-button.
void loadFromFile(const std::string &file) const
load from file
bool processDemandElementSelection(const bool onlyCount, const bool onlyUnselect, bool &ignoreLocking)
process demand element selection
bool processNetworkElementSelection(const bool onlyCount, const bool onlyUnselect, bool &ignoreLocking)
FOX need this.
~VisualScaling()
destructor
long onCmdScaleSelection(FXObject *, FXSelector, void *)
Called when the user changes visual scaling.
VisualScaling(GNESelectorFrame *selectorFrameParent)
FOX-declaration.
FXRealSpinner * mySelectionScaling
Spinner for selection scaling.
FXVerticalFrame * getContentFrame() const
get vertical frame that holds all widgets of frame
std::vector< GNEAttributeCarrier * > getMatches(const SumoXMLTag ACTag, const SumoXMLAttr ACAttr, const char compOp, const double val, const std::string &expr)
return ACs of the given type with matching attrs
void updateFrameAfterUndoRedo()
function called after undo/redo in the current frame
ModificationMode * getModificationModeModul() const
get modification mode modul
std::vector< GNEAttributeCarrier * > getGenericMatches(const std::vector< GNEGenericData * > &genericDatas, const std::string &attr, const char compOp, const double val, const std::string &expr)
return GenericDatas of the given type with matching attrs
GNESelectorFrame::SelectionOperation * mySelectionOperation
modul for selection operations
~GNESelectorFrame()
Destructor.
GNESelectorFrame::SelectionInformation * mySelectionInformation
modul for selection information
GNESelectorFrame::VisualScaling * myVisualScaling
modul for visual scaling
GNEElementSet * myDemandElementSet
moduls for select demand element set
GNESelectorFrame::Information * myInformation
information modul
GNESelectorFrame::SelectionHierarchy * mySelectionHierarchy
modul for selection hierarchy
GNEElementSet * myNetworkElementSet
moduls for select network element set
GNEElementSet * myDataElementSet
moduls for select data element set
GNESelectorFrame::ModificationMode * myModificationMode
modul for change modification mode
void clearCurrentSelection() const
clear current selection with possibility of undo/redo
GNESelectorFrame::SelectionOperation * getSelectionOperationModul() const
get selection operation modul
void handleIDs(const std::vector< GNEAttributeCarrier * > &ACs, const ModificationMode::Operation setop=ModificationMode::Operation::DEFAULT)
apply list of ids to the current selection according to Operation,
GNESelectorFrame(GNEViewParent *viewParent, GNEViewNet *viewNet)
Constructor.
SelectionInformation * getSelectionInformation() const
get modul for selection information
bool selectAttributeCarrier(const GNEViewNetHelper::ViewObjectsSelector &viewObjects)
select attribute carrier (element)
bool isDataElement() const
return true if tag correspond to a data element
bool isSelectable() const
return true if tag correspond to a selectable element
bool isAdditionalPureElement() const
return true if tag correspond to a pure additional element
bool isWireElement() const
return true if tag correspond to a Wire element
bool isDemandElement() const
return true if tag correspond to a demand element
void end()
End undo command sub-group. If the sub-group is still empty, it will be deleted; otherwise,...
void begin(GUIIcon icon, const std::string &description)
Begin undo command sub-group with current supermode. This begins a new group of commands that are tre...
bool isObjectLocked(GUIGlObjectType objectType, const bool selected) const
check if given GLObject is locked for inspect, select, delete and move
class used to group all variables related with objects under cursor after a click over view
GNEAttributeCarrier * getAttributeCarrierFront() const
get front attribute carrier or a pointer to nullptr
const std::vector< GUIGlObject * > & getGLObjects() const
get vector with GL objects
GNENet * getNet() const
get the net object
const GNEViewNetHelper::EditModes & getEditModes() const
get edit modes
void openSelectDialogAtCursor(const std::vector< GUIGlObject * > &GLObjects)
open select dialog at cursor
bool autoSelectNodes()
whether to autoselect nodes or to lanes
GNEUndoList * getUndoList() const
get the undoList object
GNEViewNetHelper::LockManager & getLockManager()
get lock manager
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 FXRadioButton * buildFXRadioButton(FXComposite *p, const std::string &text, const std::string &tip, const std::string &help, FXObject *tgt, FXSelector sel, FXuint opts=RADIOBUTTON_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 radio button
static StringBijection< GUIGlObjectType > TypeNames
associates object types with strings
GUIGlObjectType getType() const
Returns the type of the object as coded in GUIGlObjectType.
const std::vector< GUIGlObject * > & getAllGLObjects() const
Returns the set of all known objects.
static GUIGlObjectStorage gIDStorage
A single static instance of this class.
static FXIcon * getIcon(const GUIIcon which)
returns a icon previously defined in the enum GUIIcon
FXint appendIconItem(const FXString &text, FXIcon *icon=nullptr, FXColor bgColor=FXRGB(255, 255, 255), void *ptr=nullptr)
append icon item in the last position
A list item which allows for custom coloring.
MFXGroupBoxModule (based on FXGroupBox)
FXVerticalFrame * getCollapsableFrame()
get collapsable frame (used by all elements that will be collapsed if button is toggled)
void setText(const std::string &text)
set text
static FXString getFilename2Write(FXWindow *parent, const FXString &header, const FXString &extension, FXIcon *icon, FXString ¤tFolder)
Returns the file name to write.
static const std::vector< SumoXMLTag > vehicles
vehicles namespace
static const std::vector< SumoXMLTag > persons
persons namespace
static const std::vector< SumoXMLTag > containers
containers namespace
Static storage of an output device and its base (abstract) implementation.
void close()
Closes the device and removes it from the dictionary.
static OutputDevice & getDevice(const std::string &name, bool usePrefix=true)
Returns the described OutputDevice.
C++ TraCI client API implementation.
const std::string & getString(const T key) const
static std::string replace(std::string str, const std::string &what, const std::string &by)
Replaces all occurrences of the second string by the third string within the first string.
static bool startsWith(const std::string &str, const std::string prefix)
Checks whether a given string starts with the prefix.
bool isCurrentSupermodeDemand() const
@check if current supermode is Demand
bool isCurrentSupermodeData() const
@check if current supermode is Data
bool isCurrentSupermodeNetwork() const
@check if current supermode is Network
static std::vector< GUIGlObject * > filterElementsByLayer(const std::vector< GUIGlObject * > &GLObjects)
filter elements based on the layer