78 mySelectorFrameParent(selectorFrameParent) {
92 const auto ACs = mySelectorFrameParent->getViewNet()->getNet()->getAttributeCarriers();
94 if (mySelectorFrameParent->getViewNet()->getEditModes().isCurrentSupermodeNetwork()) {
95 updateInformationLabel(
"Junctions", ACs->getNumberOfSelectedJunctions());
96 updateInformationLabel(
"Edges", ACs->getNumberOfSelectedEdges());
97 updateInformationLabel(
"Lanes", ACs->getNumberOfSelectedLanes());
98 updateInformationLabel(
"Connections", ACs->getNumberOfSelectedConnections());
99 updateInformationLabel(
"Crossings", ACs->getNumberOfSelectedCrossings());
100 updateInformationLabel(
"WalkingAreas", ACs->getNumberOfSelectedWalkingAreas());
101 updateInformationLabel(
"Additionals", ACs->getNumberOfSelectedPureAdditionals());
102 updateInformationLabel(
"Wires", ACs->getNumberOfSelectedWires());
103 updateInformationLabel(
"TAZs", ACs->getNumberOfSelectedTAZs());
104 updateInformationLabel(
"TAZSources", ACs->getNumberOfSelectedTAZSources());
105 updateInformationLabel(
"TAZSinks", ACs->getNumberOfSelectedTAZSinks());
106 updateInformationLabel(
"Polygon", ACs->getNumberOfSelectedPolygons());
107 updateInformationLabel(
"POIs", ACs->getNumberOfSelectedPOIs());
108 }
else if (mySelectorFrameParent->getViewNet()->getEditModes().isCurrentSupermodeDemand()) {
109 updateInformationLabel(
"Routes", ACs->getNumberOfSelectedRoutes());
110 updateInformationLabel(
"Vehicles", ACs->getNumberOfSelectedVehicles());
111 updateInformationLabel(
"Persons", ACs->getNumberOfSelectedPersons());
112 updateInformationLabel(
"Person trips", ACs->getNumberOfSelectedPersonTrips());
113 updateInformationLabel(
"Walks", ACs->getNumberOfSelectedWalks());
114 updateInformationLabel(
"Rides", ACs->getNumberOfSelectedRides());
115 updateInformationLabel(
"Containers", ACs->getNumberOfSelectedContainers());
116 updateInformationLabel(
"Transport", ACs->getNumberOfSelectedTransport());
117 updateInformationLabel(
"Tranships", ACs->getNumberOfSelectedTranships());
118 updateInformationLabel(
"Stops", ACs->getNumberOfSelectedStops());
119 }
else if (mySelectorFrameParent->getViewNet()->getEditModes().isCurrentSupermodeData()) {
120 updateInformationLabel(
"EdgeDatas", ACs->getNumberOfSelectedEdgeDatas());
121 updateInformationLabel(
"EdgeRelDatas", ACs->getNumberOfSelectedEdgeRelDatas());
122 updateInformationLabel(
"EdgeTAZRel", ACs->getNumberOfSelectedEdgeTAZRel());
126 if (numberLines == 0) {
128 }
else if (numberLines > 1) {
169 return myModificationModeType;
175 if (obj == myAddRadioButton) {
176 myModificationModeType = Operation::ADD;
177 myAddRadioButton->setCheck(
true);
178 myRemoveRadioButton->setCheck(
false);
179 myKeepRadioButton->setCheck(
false);
180 myReplaceRadioButton->setCheck(
false);
182 }
else if (obj == myRemoveRadioButton) {
183 myModificationModeType = Operation::SUB;
184 myAddRadioButton->setCheck(
false);
185 myRemoveRadioButton->setCheck(
true);
186 myKeepRadioButton->setCheck(
false);
187 myReplaceRadioButton->setCheck(
false);
189 }
else if (obj == myKeepRadioButton) {
190 myModificationModeType = Operation::RESTRICT;
191 myAddRadioButton->setCheck(
false);
192 myRemoveRadioButton->setCheck(
false);
193 myKeepRadioButton->setCheck(
true);
194 myReplaceRadioButton->setCheck(
false);
196 }
else if (obj == myReplaceRadioButton) {
197 myModificationModeType = Operation::REPLACE;
198 myAddRadioButton->setCheck(
false);
199 myRemoveRadioButton->setCheck(
false);
200 myKeepRadioButton->setCheck(
false);
201 myReplaceRadioButton->setCheck(
true);
214 mySelectorFrameParent(selectorFrameParent) {
232 mySelectorFrameParent->myViewNet->setSelectorFrameScale(mySelectionScaling->getValue());
233 mySelectorFrameParent->myViewNet->updateViewNet();
243 mySelectorFrameParent(selectorFrameParent) {
247 FXVerticalFrame* col1 =
new FXVerticalFrame(selectionButtons, LAYOUT_FILL_X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
248 FXVerticalFrame* col2 =
new FXVerticalFrame(selectionButtons, LAYOUT_FILL_X, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
271 FXFileDialog opendialog(getCollapsableFrame(),
"Open List of Selected Items");
273 opendialog.setSelectMode(SELECTFILE_EXISTING);
274 opendialog.setPatternList(
"Selection files (*.txt)\nAll files (*)");
278 if (opendialog.execute()) {
279 std::vector<GNEAttributeCarrier*> loadedACs;
281 std::string file = opendialog.getFilename().text();
282 std::ostringstream msg;
283 std::ifstream strm(file.c_str());
290 std::map<const std::string, GNEAttributeCarrier*> GLFUllNameAC;
292 for (
const auto& GLObject : GLObjects) {
301 while (strm.good()) {
305 if (line.length() != 0) {
314 loadedACs.push_back(AC);
320 if (loadedACs.size() > 0) {
321 mySelectorFrameParent->myViewNet->getUndoList()->begin(
GUIIcon::MODESELECT,
"load selection");
322 mySelectorFrameParent->handleIDs(loadedACs);
323 mySelectorFrameParent->myViewNet->getUndoList()->end();
326 mySelectorFrameParent->myViewNet->updateViewNet();
334 TL(
"Save List of selected Items"),
".txt",
342 const auto selectedACs = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(
false);
343 for (
const auto& selectedAC : selectedACs) {
352 WRITE_DEBUG(
"Opening FXMessageBox 'error storing selection'");
354 FXMessageBox::error(getCollapsableFrame(), MBOX_OK,
"Storing Selection failed",
"%s", e.what());
356 WRITE_DEBUG(
"Closed FXMessageBox 'error storing selection' with 'OK'");
364 bool ignoreLocking =
false;
366 if ((mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork() && processNetworkElementSelection(
true,
false, ignoreLocking)) ||
367 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand() && processDemandElementSelection(
true,
false, ignoreLocking)) ||
368 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData() && processDataElementSelection(
true,
false, ignoreLocking))) {
370 mySelectorFrameParent->myViewNet->getUndoList()->begin(
GUIIcon::MODESELECT,
"invert selection");
372 if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork()) {
373 processNetworkElementSelection(
false,
true, ignoreLocking);
374 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand()) {
375 processDemandElementSelection(
false,
true, ignoreLocking);
376 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData()) {
377 processDataElementSelection(
false,
true, ignoreLocking);
380 mySelectorFrameParent->myViewNet->getUndoList()->end();
388 mySelectorFrameParent->getViewNet()->hotkeyDel();
395 bool ignoreLocking =
false;
397 if ((mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork() && processNetworkElementSelection(
true,
false, ignoreLocking)) ||
398 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand() && processDemandElementSelection(
true,
false, ignoreLocking)) ||
399 (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData() && processDataElementSelection(
true,
false, ignoreLocking))) {
401 mySelectorFrameParent->myViewNet->getUndoList()->begin(
GUIIcon::MODESELECT,
"invert selection");
403 if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeNetwork()) {
405 processNetworkElementSelection(
false,
false, ignoreLocking);
406 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeDemand()) {
408 processDemandElementSelection(
false,
false, ignoreLocking);
409 }
else if (mySelectorFrameParent->myViewNet->getEditModes().isCurrentSupermodeData()) {
411 processDataElementSelection(
false,
false, ignoreLocking);
414 mySelectorFrameParent->myViewNet->getUndoList()->end();
425 onCmdInvert(0, 0, 0);
426 onCmdDelete(0, 0, 0);
428 mySelectorFrameParent->getViewNet()->getUndoList()->end();
436 const auto& locks = mySelectorFrameParent->getViewNet()->getLockManager();
438 const auto& ACs = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers();
440 GNEUndoList* undoList = mySelectorFrameParent->myViewNet->getUndoList();
442 for (
const auto& junction : ACs->getJunctions()) {
444 if (ignoreLocking || !locks.isObjectLocked(
GLO_JUNCTION,
false)) {
447 }
else if (onlyUnselect || junction.second->isAttributeCarrierSelected()) {
452 }
else if (onlyCount) {
453 ignoreLocking = askContinueIfLock();
457 for (
const auto& incomingEdge : junction.second->getGNEIncomingEdges()) {
461 if (ignoreLocking || !locks.isObjectLocked(
GLO_EDGE,
false)) {
467 }
else if (onlyCount) {
468 ignoreLocking = askContinueIfLock();
472 if (ignoreLocking || !locks.isObjectLocked(
GLO_LANE,
false)) {
473 for (
const auto& lane : incomingEdge->getLanes()) {
480 }
else if (onlyCount) {
481 ignoreLocking = askContinueIfLock();
484 }
else if (mySelectorFrameParent->myViewNet->getNetworkViewOptions().selectEdges()) {
486 if (ignoreLocking || !locks.isObjectLocked(
GLO_EDGE,
false)) {
489 }
else if (onlyUnselect || incomingEdge->isAttributeCarrierSelected()) {
494 }
else if (onlyCount) {
495 ignoreLocking = askContinueIfLock();
500 if (ignoreLocking || !locks.isObjectLocked(
GLO_LANE,
false)) {
501 for (
const auto& lane : incomingEdge->getLanes()) {
504 }
else if (onlyUnselect || lane->isAttributeCarrierSelected()) {
510 }
else if (onlyCount) {
511 ignoreLocking = askContinueIfLock();
516 if (ignoreLocking || !locks.isObjectLocked(
GLO_CONNECTION,
false)) {
517 for (
const auto& connection : incomingEdge->getGNEConnections()) {
520 }
else if (onlyUnselect || connection->isAttributeCarrierSelected()) {
526 }
else if (onlyCount) {
527 ignoreLocking = askContinueIfLock();
532 if (ignoreLocking || !locks.isObjectLocked(
GLO_CROSSING,
false)) {
533 for (
const auto& crossing : junction.second->getGNECrossings()) {
536 }
else if (onlyUnselect || crossing->isAttributeCarrierSelected()) {
542 }
else if (onlyCount) {
543 ignoreLocking = askContinueIfLock();
548 for (
const auto& walkingArea : junction.second->getGNEWalkingAreas()) {
551 }
else if (onlyUnselect || walkingArea->isAttributeCarrierSelected()) {
557 }
else if (onlyCount) {
558 ignoreLocking = askContinueIfLock();
564 for (
const auto& additionalTag : ACs->getAdditionals()) {
567 for (
const auto& additional : additionalTag.second) {
570 }
else if (onlyUnselect || additional->isAttributeCarrierSelected()) {
578 }
else if (onlyCount) {
579 ignoreLocking = askContinueIfLock();
583 if (ignoreLocking || !locks.isObjectLocked(
GLO_WIRE,
false)) {
584 for (
const auto& wireTag : ACs->getAdditionals()) {
587 for (
const auto& wire : wireTag.second) {
590 }
else if (onlyUnselect || wire->isAttributeCarrierSelected()) {
598 }
else if (onlyCount) {
599 ignoreLocking = askContinueIfLock();
603 if (ignoreLocking || !locks.isObjectLocked(
GLO_POLYGON,
false)) {
604 for (
const auto& polygon : ACs->getAdditionals().at(
SUMO_TAG_POLY)) {
607 }
else if (onlyUnselect || polygon->isAttributeCarrierSelected()) {
613 }
else if (onlyCount) {
614 ignoreLocking = askContinueIfLock();
618 if (ignoreLocking || !locks.isObjectLocked(
GLO_TAZ,
false)) {
622 }
else if (onlyUnselect ||
TAZ->isAttributeCarrierSelected()) {
631 }
else if (onlyUnselect || TAZSource->isAttributeCarrierSelected()) {
640 }
else if (onlyUnselect || TAZSink->isAttributeCarrierSelected()) {
646 }
else if (onlyCount) {
647 ignoreLocking = askContinueIfLock();
651 if (ignoreLocking || !locks.isObjectLocked(
GLO_POI,
false)) {
655 }
else if (onlyUnselect ||
POI->isAttributeCarrierSelected()) {
661 for (
const auto& POILane : ACs->getAdditionals().at(
GNE_TAG_POILANE)) {
664 }
else if (onlyUnselect || POILane->isAttributeCarrierSelected()) {
670 for (
const auto& POIGeo : ACs->getAdditionals().at(
GNE_TAG_POIGEO)) {
673 }
else if (onlyUnselect || POIGeo->isAttributeCarrierSelected()) {
679 }
else if (onlyCount) {
680 ignoreLocking = askContinueIfLock();
690 const auto& locks = mySelectorFrameParent->getViewNet()->getLockManager();
692 GNEUndoList* undoList = mySelectorFrameParent->myViewNet->getUndoList();
694 const auto& demandElements = mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers()->getDemandElements();
696 if (ignoreLocking || !locks.isObjectLocked(
GLO_ROUTE,
false)) {
700 }
else if (onlyUnselect || route->isAttributeCarrierSelected()) {
710 }
else if (onlyUnselect || vehicle->getChildDemandElements().front()->isAttributeCarrierSelected()) {
711 vehicle->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"false", undoList);
713 vehicle->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"true", undoList);
719 }
else if (onlyUnselect || routeFlow->getChildDemandElements().front()->isAttributeCarrierSelected()) {
720 routeFlow->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"false", undoList);
722 routeFlow->getChildDemandElements().front()->setAttribute(
GNE_ATTR_SELECTED,
"true", undoList);
725 }
else if (onlyCount) {
726 ignoreLocking = askContinueIfLock();
730 if (ignoreLocking || !locks.isObjectLocked(
GLO_VEHICLE,
false)) {
734 }
else if (onlyUnselect || vehicle->isAttributeCarrierSelected()) {
743 }
else if (onlyUnselect || vehicle->isAttributeCarrierSelected()) {
752 }
else if (onlyUnselect || trip->isAttributeCarrierSelected()) {
761 }
else if (onlyUnselect || flow->isAttributeCarrierSelected()) {
770 }
else if (onlyUnselect || routeFlow->isAttributeCarrierSelected()) {
779 }
else if (onlyUnselect || routeFlow->isAttributeCarrierSelected()) {
788 }
else if (onlyUnselect || routeFlow->isAttributeCarrierSelected()) {
797 }
else if (onlyUnselect || routeFlow->isAttributeCarrierSelected()) {
803 }
else if (onlyCount) {
804 ignoreLocking = askContinueIfLock();
808 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSON,
false)) {
812 }
else if (onlyUnselect || person->isAttributeCarrierSelected()) {
821 }
else if (onlyUnselect || personFlow->isAttributeCarrierSelected()) {
827 }
else if (onlyCount) {
828 ignoreLocking = askContinueIfLock();
832 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSONTRIP,
false)) {
834 for (
const auto& personPlan : person->getChildDemandElements()) {
837 }
else if (personPlan->getTagProperty().isPersonTrip()) {
838 if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
847 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
850 }
else if (personPlan->getTagProperty().isPersonTrip()) {
851 if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
859 }
else if (onlyCount) {
860 ignoreLocking = askContinueIfLock();
864 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSONTRIP,
false)) {
866 for (
const auto& personPlan : person->getChildDemandElements()) {
867 if (personPlan->getTagProperty().isRide()) {
870 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
879 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
880 if (personPlan->getTagProperty().isRide()) {
883 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
891 }
else if (onlyCount) {
892 ignoreLocking = askContinueIfLock();
896 if (ignoreLocking || !locks.isObjectLocked(
GLO_PERSONTRIP,
false)) {
898 for (
const auto& personPlan : person->getChildDemandElements()) {
899 if (personPlan->getTagProperty().isWalk()) {
902 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
911 for (
const auto& personPlan : personFlow->getChildDemandElements()) {
912 if (personPlan->getTagProperty().isWalk()) {
915 }
else if (onlyUnselect || personPlan->isAttributeCarrierSelected()) {
923 }
else if (onlyCount) {
924 ignoreLocking = askContinueIfLock();
928 if (ignoreLocking || !locks.isObjectLocked(
GLO_CONTAINER,
false)) {
932 }
else if (onlyUnselect || container->isAttributeCarrierSelected()) {
941 }
else if (onlyUnselect || containerFlow->isAttributeCarrierSelected()) {
947 }
else if (onlyCount) {
948 ignoreLocking = askContinueIfLock();
952 if (ignoreLocking || !locks.isObjectLocked(
GLO_TRANSPORT,
false)) {
954 for (
const auto& containerPlan : container->getChildDemandElements()) {
955 if (containerPlan->getTagProperty().isTransportPlan()) {
958 }
else if (onlyUnselect || containerPlan->isAttributeCarrierSelected()) {
967 for (
const auto& containerPlan : containerFlow->getChildDemandElements()) {
968 if (containerPlan->getTagProperty().isTransportPlan()) {
971 }
else if (onlyUnselect || containerPlan->isAttributeCarrierSelected()) {
979 }
else if (onlyCount) {
980 ignoreLocking = askContinueIfLock();
984 if (ignoreLocking || !locks.isObjectLocked(
GLO_TRANSHIP,
false)) {
986 for (
const auto& containerPlan : container->getChildDemandElements()) {
987 if (containerPlan->getTagProperty().isTranshipPlan()) {
990 }
else if (onlyUnselect || containerPlan->isAttributeCarrierSelected()) {
999 for (
const auto& containerPlan : containerFlow->getChildDemandElements()) {
1000 if (containerPlan->getTagProperty().isTranshipPlan()) {
1003 }
else if (onlyUnselect || containerPlan->isAttributeCarrierSelected()) {
1011 }
else if (onlyCount) {
1012 ignoreLocking = askContinueIfLock();
1016 if (ignoreLocking || !locks.isObjectLocked(
GLO_STOP,
false)) {
1017 for (
const auto& demandElementTag : demandElements) {
1018 for (
const auto& demandElement : demandElementTag.second) {
1020 if (!demandElement->getTagProperty().isVehicleType()) {
1022 for (
const auto& stop : demandElement->getChildDemandElements()) {
1023 if (stop->getTagProperty().isStop() || stop->getTagProperty().isStopPerson() || stop->getTagProperty().isStopContainer()) {
1026 }
else if (onlyUnselect || stop->isAttributeCarrierSelected()) {
1033 for (
const auto& stopEmbeddedRoute : stop->getChildDemandElements()) {
1034 if (stopEmbeddedRoute->getTagProperty().isStop() ||
1035 stopEmbeddedRoute->getTagProperty().isStopPerson() ||
1036 stopEmbeddedRoute->getTagProperty().isStopContainer()) {
1039 }
else if (onlyUnselect || stopEmbeddedRoute->isAttributeCarrierSelected()) {
1051 }
else if (onlyCount) {
1052 ignoreLocking = askContinueIfLock();
1062 const auto& locks = mySelectorFrameParent->getViewNet()->getLockManager();
1064 for (
const auto& genericDataTag : mySelectorFrameParent->myViewNet->getNet()->getAttributeCarriers()->getGenericDatas()) {
1065 for (
const auto& genericData : genericDataTag.second) {
1066 if (onlyCount && locks.isObjectLocked(genericData->getType(),
false)) {
1067 ignoreLocking = askContinueIfLock();
1069 }
else if ((ignoreLocking || (!locks.isObjectLocked(
GLO_EDGEDATA,
false) && genericData->getType() ==
GLO_EDGEDATA)) ||
1074 }
else if (onlyUnselect || genericData->isAttributeCarrierSelected()) {
1075 genericData->setAttribute(
GNE_ATTR_SELECTED,
"false", mySelectorFrameParent->myViewNet->getUndoList());
1077 genericData->setAttribute(
GNE_ATTR_SELECTED,
"true", mySelectorFrameParent->myViewNet->getUndoList());
1088 WRITE_DEBUG(
"Opening FXMessageBox 'confirm selection operation'");
1090 const FXuint answer = FXMessageBox::question(mySelectorFrameParent->getViewNet()->getApp(),
1091 MBOX_YES_NO,
"Confirm selection operation",
"There are locked elements in currentselection.\nApply operation to locked elements?");
1095 WRITE_DEBUG(
"Closed FXMessageBox 'confirm selection operation' with 'No'");
1096 }
else if (answer == 4) {
1097 WRITE_DEBUG(
"Closed FXMessageBox 'confirm selection operation' with 'ESC'");
1102 WRITE_DEBUG(
"Closed FXMessageBox 'confirm selection operation' with 'Yes'");
1113 mySelectorFrameParent(selectorFrameParent),
1137 for (
const auto& item :
myItems) {
1151 if (obj == myParentsComboBox) {
1152 for (
const auto& item : myItems) {
1153 if (item.second == myParentsComboBox->getText().text()) {
1155 mySelectParentsButton->enable();
1156 myUnselectParentsButton->enable();
1158 myParentsComboBox->setTextColor(FXRGB(0, 0, 0));
1160 myCurrentSelectedParent = item.first;
1165 myCurrentSelectedParent = Selection::NOTHING;
1167 mySelectParentsButton->disable();
1168 myUnselectParentsButton->disable();
1169 myParentsComboBox->setTextColor(FXRGB(255, 0, 0));
1171 }
else if (obj == myChildrenComboBox) {
1172 for (
const auto& item : myItems) {
1173 if (item.second == myChildrenComboBox->getText().text()) {
1175 mySelectChildrenButton->enable();
1176 myUnselectChildrenButton->enable();
1178 myChildrenComboBox->setTextColor(FXRGB(0, 0, 0));
1180 myCurrentSelectedChild = item.first;
1185 myCurrentSelectedChild = Selection::NOTHING;
1187 mySelectChildrenButton->disable();
1188 myUnselectChildrenButton->disable();
1189 myChildrenComboBox->setTextColor(FXRGB(255, 0, 0));
1199 const auto selectedACs = mySelectorFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(
true);
1201 if ((selectedACs.size() > 0) && (myCurrentSelectedParent != Selection::NOTHING)) {
1203 std::vector<GNEHierarchicalElement*> HEToSelect;
1204 for (
const auto& selectedAC : selectedACs) {
1206 const auto HE = selectedAC->getHierarchicalElement();
1208 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::JUNCTION)) {
1209 HEToSelect.insert(HEToSelect.end(), HE->getParentJunctions().begin(), HE->getParentJunctions().end());
1212 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::EDGE)) {
1213 if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_LANE) {
1215 HEToSelect.push_back(
dynamic_cast<GNELane*
>(selectedAC)->getParentEdge());
1217 HEToSelect.insert(HEToSelect.end(), HE->getParentEdges().begin(), HE->getParentEdges().end());
1221 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::LANE)) {
1222 HEToSelect.insert(HEToSelect.end(), HE->getParentLanes().begin(), HE->getParentLanes().end());
1225 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::ADDITIONAL)) {
1226 HEToSelect.insert(HEToSelect.end(), HE->getParentAdditionals().begin(), HE->getParentAdditionals().end());
1229 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::WIRE)) {
1230 HEToSelect.insert(HEToSelect.end(), HE->getParentAdditionals().begin(), HE->getParentAdditionals().end());
1233 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::DEMAND)) {
1234 HEToSelect.insert(HEToSelect.end(), HE->getParentDemandElements().begin(), HE->getParentDemandElements().end());
1237 if ((myCurrentSelectedParent == Selection::ALL) || (myCurrentSelectedParent == Selection::DATA)) {
1238 HEToSelect.insert(HEToSelect.end(), HE->getParentGenericDatas().begin(), HE->getParentGenericDatas().end());
1242 if (HEToSelect.size() > 0) {
1243 if (HEToSelect.size() > 1) {
1244 mySelectorFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::SELECT,
"select parents");
1246 for (
const auto& HE : HEToSelect) {
1247 if (obj == mySelectParentsButton) {
1248 HE->setAttribute(
GNE_ATTR_SELECTED,
"true", mySelectorFrameParent->getViewNet()->getUndoList());
1250 HE->setAttribute(
GNE_ATTR_SELECTED,
"false", mySelectorFrameParent->getViewNet()->getUndoList());
1253 if (HEToSelect.size() > 1) {
1254 mySelectorFrameParent->getViewNet()->getUndoList()->end();
1258 mySelectorFrameParent->mySelectionInformation->updateInformationLabel();
1260 mySelectorFrameParent->getViewNet()->update();
1269 const auto selectedACs = mySelectorFrameParent->getViewNet()->getNet()->getAttributeCarriers()->getSelectedAttributeCarriers(
true);
1271 if ((selectedACs.size() > 0) && (myCurrentSelectedChild != Selection::NOTHING)) {
1273 std::vector<GNEHierarchicalElement*> HEToSelect;
1274 for (
const auto& selectedAC : selectedACs) {
1276 const auto HE = selectedAC->getHierarchicalElement();
1278 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::JUNCTION)) {
1281 const auto junction =
dynamic_cast<GNEJunction*
>(selectedAC);
1283 HEToSelect.insert(HEToSelect.end(), junction->getGNEIncomingEdges().begin(), junction->getGNEIncomingEdges().end());
1284 HEToSelect.insert(HEToSelect.end(), junction->getGNEOutgoingEdges().begin(), junction->getGNEOutgoingEdges().end());
1286 HEToSelect.insert(HEToSelect.end(), HE->getChildJunctions().begin(), HE->getChildJunctions().end());
1290 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::EDGE)) {
1291 if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_EDGE) {
1293 const auto edge =
dynamic_cast<GNEEdge*
>(selectedAC);
1295 HEToSelect.insert(HEToSelect.end(), edge->getLanes().begin(), edge->getLanes().end());
1297 HEToSelect.insert(HEToSelect.end(), HE->getChildEdges().begin(), HE->getChildEdges().end());
1301 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::CONNECTION)) {
1302 if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_EDGE) {
1304 const auto edge =
dynamic_cast<GNEEdge*
>(selectedAC);
1306 HEToSelect.insert(HEToSelect.end(), edge->getGNEConnections().begin(), edge->getGNEConnections().end());
1307 }
else if (selectedAC->getTagProperty().getTag() ==
SUMO_TAG_LANE) {
1309 const auto lane =
dynamic_cast<GNELane*
>(selectedAC);
1311 for (
const auto& connection : lane->getParentEdge()->getGNEConnections()) {
1313 HEToSelect.push_back(connection);
1318 const auto junction =
dynamic_cast<GNEJunction*
>(selectedAC);
1322 HEToSelect.insert(HEToSelect.end(), connections.begin(), connections.end());
1326 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::CROSSING)) {
1329 const auto junction =
dynamic_cast<GNEJunction*
>(selectedAC);
1331 HEToSelect.insert(HEToSelect.end(), junction->getGNECrossings().begin(), junction->getGNECrossings().end());
1335 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::LANE)) {
1336 HEToSelect.insert(HEToSelect.end(), HE->getChildLanes().begin(), HE->getChildLanes().end());
1339 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::ADDITIONAL)) {
1341 for (
const auto& additionalChild : HE->getChildAdditionals()) {
1342 if (!additionalChild->getTagProperty().isWireElement() && !additionalChild->getTagProperty().isSymbol()) {
1343 HEToSelect.push_back(additionalChild);
1348 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::WIRE)) {
1350 for (
const auto& wireChild : HE->getChildAdditionals()) {
1351 if (wireChild->getTagProperty().isWireElement() && !wireChild->getTagProperty().isSymbol()) {
1352 HEToSelect.push_back(wireChild);
1357 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::DEMAND)) {
1358 HEToSelect.insert(HEToSelect.end(), HE->getChildDemandElements().begin(), HE->getChildDemandElements().end());
1361 if ((myCurrentSelectedChild == Selection::ALL) || (myCurrentSelectedChild == Selection::DATA)) {
1362 HEToSelect.insert(HEToSelect.end(), HE->getChildGenericDatas().begin(), HE->getChildGenericDatas().end());
1366 if (HEToSelect.size() > 0) {
1367 if (HEToSelect.size() > 1) {
1368 mySelectorFrameParent->getViewNet()->getUndoList()->begin(
GUIIcon::SELECT,
"select children");
1370 for (
const auto& HE : HEToSelect) {
1371 if (obj == mySelectChildrenButton) {
1374 HE->setAttribute(
GNE_ATTR_SELECTED,
"false", mySelectorFrameParent->getViewNet()->getUndoList());
1377 if (HEToSelect.size() > 1) {
1378 mySelectorFrameParent->getViewNet()->getUndoList()->end();
1382 mySelectorFrameParent->mySelectionInformation->updateInformationLabel();
1384 mySelectorFrameParent->getViewNet()->update();
1407 GNEFrame(viewParent, viewNet,
"Selection") {
1481 if (AC ==
nullptr) {
1489 if ((AC->getTagProperty().isNetworkElement() || AC->getTagProperty().isAdditionalElement()) &&
1502 if (filteredGLObjects.size() > 1) {
1506 if (AC->isAttributeCarrierSelected()) {
1507 AC->unselectAttributeCarrier();
1509 AC->selectAttributeCarrier();
1523 std::set<std::pair<std::string, GNEAttributeCarrier*> > ACsToSelect, ACsToUnselect;
1529 for (
const auto& selectedAC : selectedACs) {
1530 ACsToUnselect.insert(std::make_pair(selectedAC->getID(), selectedAC));
1534 for (
const auto& AC : ACs) {
1536 switch (setOperation) {
1538 ACsToUnselect.insert(std::make_pair(AC->getID(), AC));
1541 if (ACsToUnselect.find(std::make_pair(AC->getID(), AC)) != ACsToUnselect.end()) {
1542 ACsToSelect.insert(std::make_pair(AC->getID(), AC));
1546 ACsToSelect.insert(std::make_pair(AC->getID(), AC));
1552 std::set<GNEEdge*> edgesToSelect;
1554 for (
const auto& AC : ACsToSelect) {
1555 if (AC.second->getTagProperty().getTag() ==
SUMO_TAG_EDGE) {
1560 for (
const auto& edgeToSelect : edgesToSelect) {
1562 ACsToSelect.insert(std::make_pair(edgeToSelect->getFromJunction()->getID(), edgeToSelect->getFromJunction()));
1563 for (
const auto& connectionToSelect : edgeToSelect->getFromJunction()->getGNEConnections()) {
1564 ACsToSelect.insert(std::make_pair(connectionToSelect->getID(), connectionToSelect));
1566 for (
const auto& fromCrossingToSelect : edgeToSelect->getFromJunction()->getGNECrossings()) {
1567 ACsToSelect.insert(std::make_pair(fromCrossingToSelect->getID(), fromCrossingToSelect));
1569 for (
const auto& fromWalkingAreaToSelect : edgeToSelect->getFromJunction()->getGNEWalkingAreas()) {
1570 ACsToSelect.insert(std::make_pair(fromWalkingAreaToSelect->getID(), fromWalkingAreaToSelect));
1573 ACsToSelect.insert(std::make_pair(edgeToSelect->getToJunction()->getID(), edgeToSelect->getToJunction()));
1574 for (
const auto& connectionToSelect : edgeToSelect->getToJunction()->getGNEConnections()) {
1575 ACsToSelect.insert(std::make_pair(connectionToSelect->getID(), connectionToSelect));
1577 for (
const auto& toCrossingToSelect : edgeToSelect->getToJunction()->getGNECrossings()) {
1578 ACsToSelect.insert(std::make_pair(toCrossingToSelect->getID(), toCrossingToSelect));
1580 for (
const auto& toWalkingAreaToSelect : edgeToSelect->getToJunction()->getGNEWalkingAreas()) {
1581 ACsToSelect.insert(std::make_pair(toWalkingAreaToSelect->getID(), toWalkingAreaToSelect));
1586 if ((ACsToSelect.size() + ACsToUnselect.size()) > 0) {
1589 for (
const auto& ACToUnselect : ACsToUnselect) {
1590 if (ACToUnselect.second->getTagProperty().isSelectable()) {
1594 for (
const auto& ACToSelect : ACsToSelect) {
1595 if (ACToSelect.second->getTagProperty().isSelectable()) {
1605std::vector<GNEAttributeCarrier*>
1607 std::vector<GNEAttributeCarrier*> result;
1613 for (
const auto& AC : allACbyTag) {
1614 if (expr ==
"" && compOp ==
'@') {
1615 result.push_back(AC);
1616 }
else if (tagValue.hasAttribute(ACAttr) && tagValue.getAttributeProperties(ACAttr).isNumerical()) {
1618 std::istringstream buf(AC->getAttribute(ACAttr));
1623 result.push_back(AC);
1628 result.push_back(AC);
1633 result.push_back(AC);
1639 std::string acVal = AC->getAttributeForSelection(ACAttr);
1642 if (acVal.find(expr) != std::string::npos) {
1643 result.push_back(AC);
1647 if (acVal.find(expr) == std::string::npos) {
1648 result.push_back(AC);
1652 if (acVal == expr) {
1653 result.push_back(AC);
1657 if (acVal != expr) {
1658 result.push_back(AC);
1668std::vector<GNEAttributeCarrier*>
1670 std::vector<GNEAttributeCarrier*> result;
1672 for (
const auto& genericData : genericDatas) {
1673 if (expr ==
"" && compOp ==
'@') {
1674 result.push_back(genericData);
1677 std::istringstream buf(genericData->getParameter(attr,
"0"));
1682 result.push_back(genericData);
1687 result.push_back(genericData);
1692 result.push_back(genericData);
1698 std::string acVal = genericData->getAttributeForSelection(
GNE_ATTR_PARENT);
1701 if (acVal.find(expr) != std::string::npos) {
1702 result.push_back(genericData);
1706 if (acVal.find(expr) == std::string::npos) {
1707 result.push_back(genericData);
1711 if (acVal == expr) {
1712 result.push_back(genericData);
1716 if (acVal != expr) {
1717 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 GUIDesignLabelThickCenter
label with thick, text justify to left and extended with (used in selector frame)
#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_TRANSHIP
a container tranship
@ GLO_WIRE
reserved GLO type for packing all wire elements
@ GLO_TAZ
Traffic Assignment Zones (TAZs)
@ GLO_CONTAINER
a container
@ GLO_CONNECTION
a connection
@ GLO_ADDITIONALELEMENT
reserved GLO type for packing all additionals elements
@ GLO_PERSONTRIP
a person trip
@ GLO_TRANSPORT
a container transport
FXString gCurrentFolder
The folder used as last.
SumoXMLTag
Numbers representing SUMO-XML - element names.
@ GNE_TAG_TRIP_JUNCTIONS
a trip between junctions (used in NETEDIT)
@ 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_FLOW_ROUTE
a flow definition using a route instead of a from-to edges route (used in NETEDIT)
@ GNE_TAG_FLOW_JUNCTIONS
a flow between junctions (used in NETEDIT)
@ GNE_TAG_POIGEO
Point of interest over view with GEO attributes.
@ GNE_TAG_FLOW_WITHROUTE
description of a vehicle with an embedded route (used in NETEDIT)
@ SUMO_TAG_FLOW
a flow definitio nusing a from-to edges instead of a route (used by router)
@ SUMO_TAG_JUNCTION
begin/end of the description of a junction
@ SUMO_TAG_ROUTE
begin/end of the description of a route
@ SUMO_TAG_MEANDATA_EDGE
an edge based mean data detector
@ 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 (used in NETEDIT)
@ GNE_TAG_POILANE
Point of interest over Lane.
@ SUMO_TAG_TAZSOURCE
a source within a district (connection road)
@ SUMO_TAG_TRIP
a single trip definition (used by router)
@ 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)
const GNETagProperties & getTagProperty() const
get tagProperty associated with this Attribute Carrier
bool isTemplate() const
check if this AC is template
virtual GUIGlObject * getGUIGlObject()=0
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
FXComboBox * myParentsComboBox
comboBox for parents
SelectionHierarchy(GNESelectorFrame *selectorFrameParent)
FOX-declaration.
~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
FXComboBox * myChildrenComboBox
comboBox for children
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.
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
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
ModificationMode * getModificationModeModule() const
get modification mode modul
bool selectAttributeCarrier(const GNEViewNetHelper::ObjectsUnderCursor &objectsUnderCursor)
select attribute carrier (element)
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
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 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
const std::vector< GUIGlObject * > & getClickedGLObjects() const
get vector with clicked GL objects
GNEAttributeCarrier * getAttributeCarrierFront() const
get front attribute carrier or a pointer to nullptr
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 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
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 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
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