From a79689bd3bdd431865610c6ba1482a2d7038995e Mon Sep 17 00:00:00 2001 From: Pablo Alvarez Lopez Date: Wed, 11 Sep 2024 13:49:09 +0200 Subject: [PATCH] Fixed #15322 --- src/netedit/GNEViewNet.cpp | 61 +++++++++++++----------- src/netedit/elements/network/GNEEdge.cpp | 13 ++--- 2 files changed, 36 insertions(+), 38 deletions(-) diff --git a/src/netedit/GNEViewNet.cpp b/src/netedit/GNEViewNet.cpp index 0ac4a3165f6d..e0e46206499a 100644 --- a/src/netedit/GNEViewNet.cpp +++ b/src/netedit/GNEViewNet.cpp @@ -601,36 +601,41 @@ GNEViewNet::openObjectDialogAtCursor(const FXEvent* /*ev*/) { bool connections = false; bool TLS = false; // fill filtered objects - for (const auto& glObject : myViewObjectsSelector.getGLObjects()) { - // always avoid edges - if (glObject->getType() == GLO_EDGE) { - continue; - } - if (glObject->getType() == GLO_CONNECTION) { - connections = true; - } - if (glObject->getType() == GLO_TLLOGIC) { - TLS = true; - } - filteredGLObjects.push_back(glObject); - } - auto it = filteredGLObjects.begin(); - if (connections) { - // filter junctions if there are connections - while (it != filteredGLObjects.end()) { - if ((*it)->getType() == GLO_JUNCTION) { - it = filteredGLObjects.erase(it); - } else { - it++; + if ((myViewObjectsSelector.getGLObjects().size() == 1) && (myViewObjectsSelector.getGLObjects().back()->getType() == GLO_EDGE)) { + // special case for edge geometry points (because edges uses the lane pop ups) + filteredGLObjects.push_back(myViewObjectsSelector.getGLObjects().back()); + } else { + for (const auto& glObject : myViewObjectsSelector.getGLObjects()) { + // always avoid edges + if (glObject->getType() == GLO_EDGE) { + continue; + } + if (glObject->getType() == GLO_CONNECTION) { + connections = true; + } + if (glObject->getType() == GLO_TLLOGIC) { + TLS = true; } + filteredGLObjects.push_back(glObject); } - } else if (TLS) { - // filter all elements except TLLogic - while (it != filteredGLObjects.end()) { - if ((*it)->getType() != GLO_TLLOGIC) { - it = filteredGLObjects.erase(it); - } else { - it++; + auto it = filteredGLObjects.begin(); + if (connections) { + // filter junctions if there are connections + while (it != filteredGLObjects.end()) { + if ((*it)->getType() == GLO_JUNCTION) { + it = filteredGLObjects.erase(it); + } else { + it++; + } + } + } else if (TLS) { + // filter all elements except TLLogic + while (it != filteredGLObjects.end()) { + if ((*it)->getType() != GLO_TLLOGIC) { + it = filteredGLObjects.erase(it); + } else { + it++; + } } } } diff --git a/src/netedit/elements/network/GNEEdge.cpp b/src/netedit/elements/network/GNEEdge.cpp index f74c2e78a0a1..dca7f8420719 100644 --- a/src/netedit/elements/network/GNEEdge.cpp +++ b/src/netedit/elements/network/GNEEdge.cpp @@ -677,16 +677,9 @@ GNEEdge::getOptionalName() const { GUIGLObjectPopupMenu* GNEEdge::getPopUpMenu(GUIMainWindow& app, GUISUMOAbstractView& parent) { - GUIGLObjectPopupMenu* ret = new GUIGLObjectPopupMenu(app, parent, *this); - buildPopupHeader(ret, app); - buildCenterPopupEntry(ret); - buildNameCopyPopupEntry(ret); - // build selection and show parameters menu - myNet->getViewNet()->buildSelectionACPopupEntry(ret, this); - buildShowParamsPopupEntry(ret); - // build position copy entry - buildPositionCopyEntry(ret, app); - return ret; + // if we call this function, that's mean that we're clicked over a edge geometry point, then + // open the popup dialog of the lane[0] (back) + return myLanes.back()->getPopUpMenu(app, parent); }