108 myFrameParent(frameParent) {
111 case GNEAttributeCarrier::TagType::TAGTYPE_NETELEMENT:
112 setText(
"Net elements");
114 case GNEAttributeCarrier::TagType::TAGTYPE_ADDITIONAL:
115 setText(
"Additional elements");
117 case GNEAttributeCarrier::TagType::TAGTYPE_SHAPE:
118 setText(
"Shape elements");
120 case GNEAttributeCarrier::TagType::TAGTYPE_TAZ:
121 setText(
"TAZ elements");
123 case GNEAttributeCarrier::TagType::TAGTYPE_VEHICLE:
126 case GNEAttributeCarrier::TagType::TAGTYPE_STOP:
129 case GNEAttributeCarrier::TagType::TAGTYPE_PERSON:
132 case GNEAttributeCarrier::TagType::TAGTYPE_PERSONPLAN:
133 setText(
"Person plans");
135 myListOfTagTypes.push_back(std::make_pair(
"person trips", GNEAttributeCarrier::TagType::TAGTYPE_PERSONTRIP));
136 myListOfTagTypes.push_back(std::make_pair(
"walks", GNEAttributeCarrier::TagType::TAGTYPE_WALK));
137 myListOfTagTypes.push_back(std::make_pair(
"rides", GNEAttributeCarrier::TagType::TAGTYPE_RIDE));
138 myListOfTagTypes.push_back(std::make_pair(
"stops", GNEAttributeCarrier::TagType::TAGTYPE_PERSONSTOP));
140 case GNEAttributeCarrier::TagType::TAGTYPE_PERSONTRIP:
141 setText(
"Person trips");
143 case GNEAttributeCarrier::TagType::TAGTYPE_WALK:
146 case GNEAttributeCarrier::TagType::TAGTYPE_RIDE:
149 case GNEAttributeCarrier::TagType::TAGTYPE_PERSONSTOP:
150 setText(
"Person stops");
161 if (myListOfTagTypes.size() > 0) {
163 for (
const auto& i : myListOfTagTypes) {
164 myTagTypesMatchBox->appendItem(i.first.c_str());
167 myTagTypesMatchBox->setNumVisible((
int)myTagTypesMatchBox->getNumItems());
171 myTagTypesMatchBox->hide();
177 for (
const auto& i : myListOfTags) {
178 myTagsMatchBox->appendItem(
toString(i).c_str());
181 myTagsMatchBox->setNumVisible((
int)myTagsMatchBox->getNumItems());
204 return myCurrentTagProperties;
213 for (
int i = 0; i < (int)myTagsMatchBox->getNumItems(); i++) {
214 if (myTagsMatchBox->getItem(i).text() ==
toString(tagType)) {
215 myTagsMatchBox->setCurrentItem(i);
219 myTagsMatchBox->clearItems();
221 for (
const auto& j : myListOfTags) {
222 myTagsMatchBox->appendItem(
toString(j).c_str());
225 myTagsMatchBox->setNumVisible((
int)myTagsMatchBox->getNumItems());
229 myFrameParent->tagSelected();
238 for (
int i = 0; i < (int)myTagsMatchBox->getNumItems(); i++) {
239 if (myTagsMatchBox->getItem(i).text() ==
toString(newTag)) {
240 myTagsMatchBox->setCurrentItem(i);
246 myFrameParent->tagSelected();
253 onCmdSelectTag(0, 0, 0);
259 for (
const auto& i : myListOfTagTypes) {
260 if (i.first == myTagTypesMatchBox->getText().text()) {
262 myTagTypesMatchBox->setTextColor(FXRGB(0, 0, 0));
266 myTagsMatchBox->show();
267 myTagsMatchBox->clearItems();
269 for (
const auto& j : myListOfTags) {
270 myTagsMatchBox->appendItem(
toString(j).c_str());
273 myTagsMatchBox->setNumVisible((
int)myTagsMatchBox->getNumItems());
275 WRITE_DEBUG((
"Selected item '" + myTagsMatchBox->getText() +
"' in TagTypeSelector").text());
277 return onCmdSelectTag(
nullptr, 0,
nullptr);
281 myTagsMatchBox->hide();
283 myCurrentTagProperties = myInvalidTagProperty;
285 myFrameParent->tagSelected();
287 myTagTypesMatchBox->setTextColor(FXRGB(255, 0, 0));
289 WRITE_DEBUG(
"Selected invalid item in TagTypeSelector");
297 for (
const auto& i : myListOfTags) {
298 if (
toString(i) == myTagsMatchBox->getText().text()) {
300 myTagsMatchBox->setTextColor(FXRGB(0, 0, 0));
304 myFrameParent->tagSelected();
306 WRITE_DEBUG((
"Selected item '" + myTagsMatchBox->getText() +
"' in TagSelector").text());
311 myCurrentTagProperties = myInvalidTagProperty;
313 myFrameParent->tagSelected();
315 myTagsMatchBox->setTextColor(FXRGB(255, 0, 0));
317 WRITE_DEBUG(
"Selected invalid item in TagSelector");
327 myFrameParent(frameParent),
328 myCurrentDemandElement(nullptr),
329 myDemandElementTags({demandElementTag}) {
333 refreshDemandElementSelector();
341 myFrameParent(frameParent),
342 myCurrentDemandElement(nullptr) {
344 for (
const auto& i : tagTypes) {
362 return myCurrentDemandElement;
366 const std::vector<SumoXMLTag>&
368 return myDemandElementTags;
374 if (std::find(myDemandElementTags.begin(), myDemandElementTags.end(), demandElement->
getTagProperty().
getTag()) != myDemandElementTags.end()) {
376 myDemandElementsMatchBox->setText(demandElement->
getID().c_str());
378 myCurrentDemandElement = demandElement;
380 myFrameParent->demandElementSelected();
388 refreshDemandElementSelector();
390 if (myCurrentDemandElement) {
391 myDemandElementsMatchBox->setText(myCurrentDemandElement->getID().c_str());
392 }
else if (myDemandElementTags.size() == 1) {
399 onCmdSelectDemandElement(
nullptr, 0,
nullptr);
419 myDemandElementsMatchBox->clearItems();
421 for (
const auto& i : myDemandElementTags) {
428 for (
const auto& j : myFrameParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(i)) {
431 myDemandElementsMatchBox->appendItem(j.first.c_str());
438 for (
const auto& j : myFrameParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(i)) {
441 myDemandElementsMatchBox->appendItem(j.first.c_str());
446 for (
const auto& j : myFrameParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(i)) {
447 myDemandElementsMatchBox->appendItem(j.first.c_str());
452 if (myDemandElementsMatchBox->getNumItems() < 10) {
453 myDemandElementsMatchBox->setNumVisible((
int)myDemandElementsMatchBox->getNumItems());
455 myDemandElementsMatchBox->setNumVisible(10);
458 if (myDemandElementsMatchBox->getNumItems() == 0) {
459 myCurrentDemandElement =
nullptr;
460 }
else if (myCurrentDemandElement) {
461 for (
int i = 0; i < myDemandElementsMatchBox->getNumItems(); i++) {
462 if (myDemandElementsMatchBox->getItem(i).text() == myCurrentDemandElement->getID()) {
463 myDemandElementsMatchBox->setCurrentItem(i, FALSE);
474 myCurrentDemandElement =
nullptr;
476 for (
auto i = myDemandElementTags.begin(); (i != myDemandElementTags.end()) && (myCurrentDemandElement ==
nullptr); i++) {
477 if (myFrameParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(*i).size() > 0) {
478 myCurrentDemandElement = myFrameParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(*i).begin()->second;
489 for (
const auto& i : myDemandElementTags) {
490 for (
const auto& j : myFrameParent->getViewNet()->getNet()->getAttributeCarriers().demandElements.at(i)) {
491 if (j.first == myDemandElementsMatchBox->getText().text()) {
493 myDemandElementsMatchBox->setTextColor(FXRGB(0, 0, 0));
495 myCurrentDemandElement = j.second;
497 myFrameParent->demandElementSelected();
499 WRITE_DEBUG((
"Selected item '" + myDemandElementsMatchBox->getText() +
"' in DemandElementSelector").text());
505 myCurrentDemandElement =
nullptr;
507 myFrameParent->demandElementSelected();
509 myDemandElementsMatchBox->setTextColor(FXRGB(255, 0, 0));
511 WRITE_DEBUG(
"Selected invalid item in DemandElementSelector");
521 myFrameParent(frameParent),
523 mySelectedBusStop(nullptr),
524 myEdgePathCreatorModes(edgePathCreatorModes) {
546 std::string nameWithFirstCapitalizedLetter = name;
547 nameWithFirstCapitalizedLetter[0] = (char)toupper(nameWithFirstCapitalizedLetter.at(0));
548 setText((nameWithFirstCapitalizedLetter +
" creator").c_str());
549 myFinishCreationButton->setText((
"Finish " + name +
" creation").c_str());
550 myAbortCreationButton->setText((
"Abort " + name +
" creation").c_str());
557 myFinishCreationButton->disable();
558 myAbortCreationButton->disable();
559 myRemoveLastInsertedEdge->disable();
568 for (
const auto& i : myClickedEdges) {
572 myClickedEdges.clear();
574 myTemporalRoute.clear();
588 myEdgePathCreatorModes = edgePathCreatorModes;
592 std::vector<GNEEdge*>
594 return myClickedEdges;
600 return mySelectedBusStop;
608 if (mySelectedBusStop !=
nullptr) {
611 myFrameParent->getViewNet()->setStatusBarText(
"Final " + mySelectedBusStop->getTagProperty().getTagStr() +
" selected");
613 WRITE_DEBUG(
"Final " + mySelectedBusStop->getTagProperty().getTagStr() +
" selected");
614 }
else if ((myClickedEdges.size() > 0) && (myClickedEdges.back() == edge)) {
618 myFrameParent->getViewNet()->setStatusBarText(
"Duplicated consecutive edges aren't allowed");
620 WRITE_DEBUG(
"Duplicated consecutive edges aren't allowed");
626 if ((i.permissions & myVClass) != 0) {
630 if (addEdge ==
false) {
632 myFrameParent->getViewNet()->setStatusBarText(
"Invalid edge permissions");
640 myClickedEdges.push_back(edge);
642 myAbortCreationButton->enable();
644 myFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->disableUndoRedo(
"trip creation");
647 i->setSpecialColor(&myFrameParent->getEdgeCandidateSelectedColor());
650 myRemoveLastInsertedEdge->enable();
652 myFinishCreationButton->enable();
654 if (myClickedEdges.size() > 1) {
659 myTemporalRoute = myClickedEdges;
671 if (!myClickedEdges.empty() && (mySelectedBusStop ==
nullptr)) {
672 mySelectedBusStop = busStop;
673 mySelectedBusStop->
setSpecialColor(&myFrameParent->getEdgeCandidateSelectedColor());
682 for (
const auto& i : myClickedEdges) {
686 myClickedEdges.clear();
687 myTemporalRoute.clear();
689 if (mySelectedBusStop) {
690 mySelectedBusStop->setSpecialColor(
nullptr);
691 mySelectedBusStop =
nullptr;
694 myFrameParent->myViewNet->getViewParent()->getGNEAppWindows()->enableUndoRedo();
701 if (myClickedEdges.size() > 0) {
711 if (myTemporalRoute.empty()) {
713 GLHelper::drawLine(myClickedEdges.at(0)->getNBEdge()->getLanes().front().shape.front(),
714 myClickedEdges.at(0)->getNBEdge()->getLanes().front().shape.back());
716 for (
int i = 1; i < (int)myClickedEdges.size(); i++) {
717 GLHelper::drawLine(myClickedEdges.at(i - 1)->getNBEdge()->getLanes().front().shape.back(),
718 myClickedEdges.at(i)->getNBEdge()->getLanes().front().shape.front());
719 GLHelper::drawLine(myClickedEdges.at(i)->getNBEdge()->getLanes().front().shape.front(),
720 myClickedEdges.at(i)->getNBEdge()->getLanes().front().shape.back());
723 if (mySelectedBusStop) {
724 GLHelper::drawLine(myClickedEdges.back()->getNBEdge()->getLanes().front().shape.back(),
725 mySelectedBusStop->getAdditionalGeometry().getShape().getLineCenter());
729 GLHelper::drawLine(myTemporalRoute.at(0)->getNBEdge()->getLanes().front().shape.front(),
730 myTemporalRoute.at(0)->getNBEdge()->getLanes().front().shape.back());
732 for (
int i = 1; i < (int)myTemporalRoute.size(); i++) {
733 GLHelper::drawLine(myTemporalRoute.at(i - 1)->getNBEdge()->getLanes().front().shape.back(),
734 myTemporalRoute.at(i)->getNBEdge()->getLanes().front().shape.front());
735 GLHelper::drawLine(myTemporalRoute.at(i)->getNBEdge()->getLanes().front().shape.front(),
736 myTemporalRoute.at(i)->getNBEdge()->getLanes().front().shape.back());
739 if (mySelectedBusStop) {
740 GLHelper::drawLine(myTemporalRoute.back()->getNBEdge()->getLanes().front().shape.back(),
741 mySelectedBusStop->getAdditionalGeometry().getShape().getLineCenter());
752 if (myAbortCreationButton->isEnabled()) {
753 onCmdAbortRouteCreation(
nullptr, 0,
nullptr);
760 if (myFinishCreationButton->isEnabled()) {
761 onCmdFinishRouteCreation(
nullptr, 0,
nullptr);
768 if (myRemoveLastInsertedEdge->isEnabled()) {
769 onCmdRemoveLastInsertedElement(
nullptr, 0,
nullptr);
779 myAbortCreationButton->disable();
780 myFinishCreationButton->disable();
781 myRemoveLastInsertedEdge->disable();
789 if (myClickedEdges.size() > 0) {
791 if ((myEdgePathCreatorModes == GNE_EDGEPATHCREATOR_TO_BUSSTOP) && (mySelectedBusStop ==
nullptr)) {
796 myFrameParent->edgePathCreated();
798 myFrameParent->myViewNet->update();
802 myFinishCreationButton->disable();
803 myAbortCreationButton->disable();
804 myRemoveLastInsertedEdge->disable();
812 if (myClickedEdges.size() > 1) {
814 restoreEdgeColor(myClickedEdges.back());
816 myClickedEdges.pop_back();
820 myFrameParent->myViewNet->update();
822 if (myClickedEdges.size() == 1) {
824 myRemoveLastInsertedEdge->disable();
834 for (
const auto& i : edge->
getLanes()) {
835 i->setSpecialColor(
nullptr);
845 myFrameParent(frameParent),
847 myClickedAC(nullptr),
848 myClickedJunction(nullptr),
849 myClickedEdge(nullptr),
850 myClickedLane(nullptr),
851 myClickedCrossing(nullptr),
852 myClickedConnection(nullptr),
853 myClickedShape(nullptr),
854 myClickedAdditional(nullptr),
855 myClickedDemandElement(nullptr) {
871 refreshAttributeCarrierHierarchy();
880 myClickedAC =
nullptr;
881 myClickedJunction =
nullptr;
882 myClickedEdge =
nullptr;
883 myClickedLane =
nullptr;
884 myClickedCrossing =
nullptr;
885 myClickedConnection =
nullptr;
886 myClickedShape =
nullptr;
887 myClickedAdditional =
nullptr;
888 myClickedDemandElement =
nullptr;
897 myTreelist->clearItems();
898 myTreeItemToACMap.clear();
899 myTreeItemsConnections.clear();
902 showAttributeCarrierChildren(myAC, showAttributeCarrierParents());
910 FXEvent* e = (FXEvent*)eventData;
912 FXTreeItem* item = myTreelist->getItemAt(e->win_x, e->win_y);
914 if (item && (myTreeItemsConnections.find(item) == myTreeItemsConnections.end())) {
915 createPopUpMenu(e->root_x, e->root_y, myTreeItemToACMap[item]);
924 if (myClickedJunction) {
925 myFrameParent->myViewNet->centerTo(myClickedJunction->getGlID(),
true, -1);
926 }
else if (myClickedEdge) {
927 myFrameParent->myViewNet->centerTo(myClickedEdge->getGlID(),
true, -1);
928 }
else if (myClickedLane) {
929 myFrameParent->myViewNet->centerTo(myClickedLane->getGlID(),
true, -1);
930 }
else if (myClickedCrossing) {
931 myFrameParent->myViewNet->centerTo(myClickedCrossing->getGlID(),
true, -1);
932 }
else if (myClickedConnection) {
933 myFrameParent->myViewNet->centerTo(myClickedConnection->getGlID(),
true, -1);
934 }
else if (myClickedAdditional) {
935 myFrameParent->myViewNet->centerTo(myClickedAdditional->getGlID(),
true, -1);
936 }
else if (myClickedShape) {
937 myFrameParent->myViewNet->centerTo(myClickedShape->getGlID(),
true, -1);
938 }
else if (myClickedDemandElement) {
939 myFrameParent->myViewNet->centerTo(myClickedDemandElement->getGlID(),
true, -1);
942 myFrameParent->myViewNet->update();
949 if ((myAC !=
nullptr) && (myClickedAC !=
nullptr)) {
950 myFrameParent->myViewNet->getViewParent()->getInspectorFrame()->inspectChild(myClickedAC, myAC);
959 const std::vector<GNEAttributeCarrier*>& currentInspectedACs = myFrameParent->myViewNet->getViewParent()->getInspectorFrame()->getAttributesEditor()->getEditedACs();
961 if (myClickedJunction) {
962 myFrameParent->myViewNet->getNet()->deleteJunction(myClickedJunction, myFrameParent->myViewNet->getUndoList());
963 }
else if (myClickedEdge) {
964 myFrameParent->myViewNet->getNet()->deleteEdge(myClickedEdge, myFrameParent->myViewNet->getUndoList(),
false);
965 }
else if (myClickedLane) {
966 myFrameParent->myViewNet->getNet()->deleteLane(myClickedLane, myFrameParent->myViewNet->getUndoList(),
false);
967 }
else if (myClickedCrossing) {
968 myFrameParent->myViewNet->getNet()->deleteCrossing(myClickedCrossing, myFrameParent->myViewNet->getUndoList());
969 }
else if (myClickedConnection) {
970 myFrameParent->myViewNet->getNet()->deleteConnection(myClickedConnection, myFrameParent->myViewNet->getUndoList());
971 }
else if (myClickedAdditional) {
972 myFrameParent->myViewNet->getNet()->deleteAdditional(myClickedAdditional, myFrameParent->myViewNet->getUndoList());
973 }
else if (myClickedShape) {
974 myFrameParent->myViewNet->getNet()->deleteShape(myClickedShape, myFrameParent->myViewNet->getUndoList());
975 }
else if (myClickedDemandElement) {
977 if ((myClickedDemandElement->getTagProperty().getTag() ==
SUMO_TAG_VTYPE) && (GNEAttributeCarrier::parse<bool>(myClickedDemandElement->getAttribute(
GNE_ATTR_DEFAULT_VTYPE)))) {
980 }
else if (myClickedDemandElement->getTagProperty().isPersonPlan() && (myClickedDemandElement->getParentDemandElements().front()->getChildDemandElements().size() == 1)) {
982 myFrameParent->myViewNet->getNet()->deleteDemandElement(myClickedDemandElement->getParentDemandElements().front(), myFrameParent->myViewNet->getUndoList());
984 myFrameParent->myViewNet->getNet()->deleteDemandElement(myClickedDemandElement, myFrameParent->myViewNet->getUndoList());
988 myFrameParent->myViewNet->update();
990 refreshAttributeCarrierHierarchy();
992 if (currentInspectedACs.size() == 1) {
993 if (currentInspectedACs.front() != myClickedAC) {
994 myFrameParent->myViewNet->getViewParent()->getInspectorFrame()->inspectSingleElement(currentInspectedACs.front());
997 myFrameParent->myViewNet->getViewParent()->getInspectorFrame()->inspectSingleElement(
nullptr);
1007 if (myClickedDemandElement) {
1008 myFrameParent->myViewNet->getUndoList()->p_begin((
"moving up " + myClickedDemandElement->getTagStr()).c_str());
1010 myFrameParent->myViewNet->getUndoList()->add(
new GNEChange_Children(myClickedDemandElement->getParentDemandElements().at(0), myClickedDemandElement,
1011 GNEChange_Children::Operation::MOVE_BACK),
true);
1012 myFrameParent->myViewNet->getUndoList()->p_end();
1015 refreshAttributeCarrierHierarchy();
1023 if (myClickedDemandElement) {
1024 myFrameParent->myViewNet->getUndoList()->p_begin((
"moving down " + myClickedDemandElement->getTagStr()).c_str());
1026 myFrameParent->myViewNet->getUndoList()->add(
new GNEChange_Children(myClickedDemandElement->getParentDemandElements().at(0), myClickedDemandElement,
1027 GNEChange_Children::Operation::MOVE_FRONT),
true);
1028 myFrameParent->myViewNet->getUndoList()->p_end();
1031 refreshAttributeCarrierHierarchy();
1041 myClickedAC = clickedAC;
1043 myClickedJunction =
dynamic_cast<GNEJunction*
>(clickedAC);
1044 myClickedEdge =
dynamic_cast<GNEEdge*
>(clickedAC);
1045 myClickedLane =
dynamic_cast<GNELane*
>(clickedAC);
1046 myClickedCrossing =
dynamic_cast<GNECrossing*
>(clickedAC);
1047 myClickedConnection =
dynamic_cast<GNEConnection*
>(clickedAC);
1048 myClickedShape =
dynamic_cast<GNEShape*
>(clickedAC);
1049 myClickedAdditional =
dynamic_cast<GNEAdditional*
>(clickedAC);
1052 FXMenuPane* pane =
new FXMenuPane(myTreelist);
1054 new MFXMenuHeader(pane, myFrameParent->myViewNet->getViewParent()->getGUIMainWindow()->getBoldFont(), myClickedAC->getPopUpID().c_str(), myClickedAC->getIcon());
1056 new FXMenuSeparator(pane);
1060 if (myClickedAC->getTagProperty().isVehicleType()) {
1061 centerMenuCommand->disable();
1067 if ((myClickedAC->getTagProperty().isNetElement() && (myFrameParent->myViewNet->getEditModes().currentSupermode ==
GNE_SUPERMODE_DEMAND)) ||
1068 (myClickedAC->getTagProperty().isDemandElement() && (myFrameParent->myViewNet->getEditModes().currentSupermode ==
GNE_SUPERMODE_NETWORK))) {
1069 inspectMenuCommand->disable();
1070 deleteMenuCommand->disable();
1073 if (myClickedDemandElement && myClickedAC->getTagProperty().canBeSortedManually()) {
1075 new FXMenuSeparator(pane);
1080 if (myClickedDemandElement->getTagProperty().isPersonStop()) {
1081 moveUpMenuCommand->setText(
"Move up (Stops cannot be moved)");
1082 moveDownMenuCommand->setText(
"Move diwb (Stops cannot be moved)");
1083 moveUpMenuCommand->disable();
1084 moveDownMenuCommand->disable();
1087 if (myClickedDemandElement->getParentDemandElements().front()->getChildDemandElements().front() == myClickedDemandElement) {
1088 moveUpMenuCommand->setText(
"Move up (It's already the first element)");
1089 moveUpMenuCommand->disable();
1090 }
else if (myClickedDemandElement->getParentDemandElements().front()->getPreviousChildDemandElement(myClickedDemandElement)->getTagProperty().isPersonStop()) {
1091 moveUpMenuCommand->setText(
"Move up (Previous element is a Stop)");
1092 moveUpMenuCommand->disable();
1095 if (myClickedDemandElement->getParentDemandElements().front()->getChildDemandElements().back() == myClickedDemandElement) {
1096 moveDownMenuCommand->setText(
"Move down (It's already the last element)");
1097 moveDownMenuCommand->disable();
1098 }
else if (myClickedDemandElement->getParentDemandElements().front()->getNextChildDemandElement(myClickedDemandElement)->getTagProperty().isPersonStop()) {
1099 moveDownMenuCommand->setText(
"Move down (Next element is a Stop)");
1100 moveDownMenuCommand->disable();
1111 myClickedAC =
nullptr;
1112 myClickedJunction =
nullptr;
1113 myClickedEdge =
nullptr;
1114 myClickedLane =
nullptr;
1115 myClickedCrossing =
nullptr;
1116 myClickedConnection =
nullptr;
1117 myClickedShape =
nullptr;
1118 myClickedAdditional =
nullptr;
1119 myClickedDemandElement =
nullptr;
1126 if (myAC->getTagProperty().isNetElement()) {
1128 switch (myAC->getTagProperty().getTag()) {
1136 junctionDestinyItem->setExpanded(
true);
1141 return junctionDestinyItem;
1155 junctionDestinyItem->setExpanded(
true);
1158 edgeItem->setExpanded(
true);
1162 myTreeItemToACMap[edgeItem] = edge;
1176 FXTreeItem* junctionItem = myTreelist->insertItem(
nullptr,
nullptr, junction->
getHierarchyName().c_str(), junction->
getIcon(), junction->
getIcon());
1177 junctionItem->setExpanded(
true);
1179 myTreeItemToACMap[junctionItem] = junction;
1181 return junctionItem;
1192 edgeFromItem->setExpanded(
true);
1195 edgeToItem->setExpanded(
true);
1197 FXTreeItem* connectionItem = myTreelist->insertItem(
nullptr, edgeToItem, connection->
getHierarchyName().c_str(), connection->
getIcon(), connection->
getIcon());
1198 connectionItem->setExpanded(
true);
1200 myTreeItemToACMap[edgeFromItem] = connection->
getEdgeFrom();
1201 myTreeItemToACMap[edgeToItem] = connection->
getEdgeTo();
1202 myTreeItemToACMap[connectionItem] = connection;
1204 return connectionItem;
1223 junctionDestinyItem->setExpanded(
true);
1226 edgeItem->setExpanded(
true);
1229 laneItem->setExpanded(
true);
1233 myTreeItemToACMap[edgeItem] = edge;
1234 myTreeItemToACMap[laneItem] = lane;
1240 }
else if (myAC->getTagProperty().isAdditional() || myAC->getTagProperty().isTAZ()) {
1245 FXTreeItem* root =
nullptr;
1282 addListItem(
nullptr, (
"..." +
toString((
int)additional->
getParentEdges().size() - 2) +
" edges...").c_str(), 0,
false);
1296 addListItem(
nullptr, (
"..." +
toString((
int)additional->
getParentLanes().size() - 2) +
" lanes...").c_str(), 0,
false);
1305 }
else if (myAC->getTagProperty().isDemandElement()) {
1308 if (demandElement) {
1310 FXTreeItem* root =
nullptr;
1347 addListItem(
nullptr, (
"..." +
toString((
int)demandElement->
getParentEdges().size() - 2) +
" edges...").c_str(), 0,
false);
1361 addListItem(
nullptr, (
"..." +
toString((
int)demandElement->
getParentLanes().size() - 2) +
" lanes...").c_str(), 0,
false);
1386 FXTreeItem* junctionItem = addListItem(AC, itemParent);
1389 showAttributeCarrierChildren(i, junctionItem);
1393 showAttributeCarrierChildren(i, junctionItem);
1403 FXTreeItem* edgeItem = addListItem(AC, itemParent);
1405 for (
const auto& i : edge->
getLanes()) {
1406 showAttributeCarrierChildren(i, edgeItem);
1410 showAttributeCarrierChildren(i, edgeItem);
1414 showAttributeCarrierChildren(i, edgeItem);
1418 showAttributeCarrierChildren(i, edgeItem);
1421 showAttributeCarrierChildren(i, edgeItem);
1424 showAttributeCarrierChildren(i, edgeItem);
1434 FXTreeItem* laneItem = addListItem(AC, itemParent);
1437 showAttributeCarrierChildren(i, laneItem);
1441 showAttributeCarrierChildren(i, laneItem);
1445 showAttributeCarrierChildren(i, laneItem);
1451 FXTreeItem* incomingConnections = addListItem(laneItem,
"Incomings", incomingLaneConnections.front()->getIcon(),
false);
1453 for (
auto i : incomingLaneConnections) {
1454 showAttributeCarrierChildren(i, incomingConnections);
1461 FXTreeItem* outgoingConnections = addListItem(laneItem,
"Outgoing", outcomingLaneConnections.front()->getIcon(),
false);
1463 for (
auto i : outcomingLaneConnections) {
1464 showAttributeCarrierChildren(i, outgoingConnections);
1473 addListItem(AC, itemParent);
1481 addListItem(AC, itemParent);
1487 FXTreeItem* additionalItem = addListItem(AC, itemParent);
1490 showAttributeCarrierChildren(i, additionalItem);
1494 showAttributeCarrierChildren(i, additionalItem);
1498 showAttributeCarrierChildren(i, additionalItem);
1502 showAttributeCarrierChildren(i, additionalItem);
1506 showAttributeCarrierChildren(i, additionalItem);
1512 if (demandElement) {
1514 FXTreeItem* demandElementItem = addListItem(AC, itemParent);
1517 showAttributeCarrierChildren(i, demandElementItem);
1521 showAttributeCarrierChildren(i, demandElementItem);
1525 showAttributeCarrierChildren(i, demandElementItem);
1529 showAttributeCarrierChildren(i, demandElementItem);
1533 showAttributeCarrierChildren(i, demandElementItem);
1545 myTreeItemToACMap[item] = AC;
1547 item->setExpanded(
true);
1556 FXTreeItem* item = myTreelist->insertItem(
nullptr, itemParent, text.c_str(), icon, icon);
1558 item->setExpanded(expanded);
1569 myFrameParent(frameParent),
1570 myDeleteLastCreatedPoint(false) {
1577 std::ostringstream information;
1579 <<
"- 'Start drawing' or ENTER\n"
1580 <<
" draws shape boundary.\n"
1581 <<
"- 'Stop drawing' or ENTER\n"
1582 <<
" creates shape.\n"
1583 <<
"- 'Shift + Click'\n"
1584 <<
" removes last created point.\n"
1585 <<
"- 'Abort drawing' or ESC\n"
1586 <<
" removes drawed shape.";
1618 myStartDrawingButton->disable();
1619 myStopDrawingButton->enable();
1620 myAbortDrawingButton->enable();
1628 if (myFrameParent->shapeDrawed()) {
1630 myTemporalShapeShape.clear();
1631 myFrameParent->myViewNet->update();
1633 myStartDrawingButton->enable();
1634 myStopDrawingButton->disable();
1635 myAbortDrawingButton->disable();
1646 myTemporalShapeShape.clear();
1647 myFrameParent->myViewNet->update();
1649 myStartDrawingButton->enable();
1650 myStopDrawingButton->disable();
1651 myAbortDrawingButton->disable();
1657 if (myStopDrawingButton->isEnabled()) {
1658 myTemporalShapeShape.push_back(P);
1660 throw ProcessError(
"A new point cannot be added if drawing wasn't started");
1673 return myTemporalShapeShape;
1679 return myStopDrawingButton->isEnabled();
1685 myDeleteLastCreatedPoint = value;
1691 return myDeleteLastCreatedPoint;
1721 myFrameParent(frameParent),
1737 for (
int i = 0; i < myParentsList->getNumItems(); i++) {
1738 if (myParentsList->isItemSelected(i)) {
1739 return myParentsList->getItem(i)->getText().text();
1749 for (
int i = 0; i < myParentsList->getNumItems(); i++) {
1750 myParentsList->getItem(i)->setSelected(
false);
1753 for (
int i = 0; i < myParentsList->getNumItems(); i++) {
1754 if (myParentsList->getItem(i)->getText().text() ==
id) {
1755 myParentsList->getItem(i)->setSelected(
true);
1759 myParentsList->recalc();
1767 for (
auto i : listOfTags) {
1768 if (i == additionalType) {
1769 myParentTag = additionalType;
1770 myParentsLabel->setText((
"Parent type: " +
toString(additionalType)).c_str());
1771 refreshSelectorParentModul();
1789 myParentsList->clearItems();
1792 for (
const auto& i : myFrameParent->getViewNet()->getNet()->getAttributeCarriers().additionals.at(myParentTag)) {
1793 myParentsList->appendItem(i.first.c_str());
1804 myFrameParent(frameParent),
1814 myFrameParent(frameParent),
1815 myFilteredTag(filteredTag),
1828 myOverlappedACs.clear();
1835 if (i->getTagProperty().getTag() == myFilteredTag) {
1836 myOverlappedACs.push_back(i);
1840 mySavedClickedPosition = clickedPosition;
1844 myCurrentIndexButton->setText((
"1 / " +
toString(myOverlappedACs.size())).c_str());
1846 myOverlappedElementList->clearItems();
1847 for (
int i = 0; i < (int)myOverlappedACs.size(); i++) {
1848 myOverlappedElementList->insertItem(i, myOverlappedACs.at(i)->getID().c_str(), myOverlappedACs.at(i)->getIcon());
1851 myOverlappedElementList->getItem(0)->setSelected(TRUE);
1853 myOverlappedElementList->hide();
1874 return (
int)myOverlappedACs.size();
1880 return (mySavedClickedPosition.distanceSquaredTo2D(clickedPosition) < 0.25);
1889 if (checkSavedPosition(clickedPosition)) {
1891 onCmdNextElement(0, 0, 0);
1907 if (checkSavedPosition(clickedPosition)) {
1909 onCmdPreviousElement(0, 0, 0);
1923 if (myOverlappedElementList->getNumItems() > 0) {
1925 myOverlappedElementList->getItem((
int)myItemIndex)->setSelected(FALSE);
1927 if (myItemIndex > 0) {
1930 myItemIndex = (myOverlappedACs.size() - 1);
1933 myOverlappedElementList->getItem((
int)myItemIndex)->setSelected(TRUE);
1934 myOverlappedElementList->update();
1936 myCurrentIndexButton->setText((
toString(myItemIndex + 1) +
" / " +
toString(myOverlappedACs.size())).c_str());
1938 myFrameParent->selectedOverlappedElement(myOverlappedACs.at(myItemIndex));
1949 if (myOverlappedElementList->getNumItems() > 0) {
1951 myOverlappedElementList->getItem((
int)myItemIndex)->setSelected(FALSE);
1953 myItemIndex = (myItemIndex + 1) % myOverlappedACs.size();
1955 myOverlappedElementList->getItem((
int)myItemIndex)->setSelected(TRUE);
1956 myOverlappedElementList->update();
1958 myCurrentIndexButton->setText((
toString(myItemIndex + 1) +
" / " +
toString(myOverlappedACs.size())).c_str());
1960 myFrameParent->selectedOverlappedElement(myOverlappedACs.at(myItemIndex));
1971 if (myOverlappedElementList->shown()) {
1972 myOverlappedElementList->hide();
1974 myOverlappedElementList->show();
1976 myOverlappedElementList->recalc();
1984 for (
int i = 0; i < myOverlappedElementList->getNumItems(); i++) {
1985 if (myOverlappedElementList->getItem(i)->isSelected()) {
1988 myCurrentIndexButton->setText((
toString(myItemIndex + 1) +
" / " +
toString(myOverlappedACs.size())).c_str());
1990 myFrameParent->selectedOverlappedElement(myOverlappedACs.at(myItemIndex));
2002 FXDialogBox* helpDialog =
new FXDialogBox(
this,
"GEO attributes Help",
GUIDesignDialogBox);
2003 std::ostringstream help;
2005 <<
" - Click in the same position\n"
2006 <<
" for inspect next element\n"
2007 <<
" - Shift + Click in the same\n"
2008 <<
" position for inspect\n"
2009 <<
" previous element";
2013 helpDialog->create();
2036 myOverlappedElementList->setScrollStyle(VSCROLLING_OFF);
2038 myOverlappedElementList->hide();