From b887a4a89e488c093d40e47aa741afb315c5283d Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Fri, 17 Nov 2017 22:30:48 +0100 Subject: [PATCH] logic: don't use shared_ptr for QtGraphNode and QtGraphEdge anymore * fixes crashes on events to deleted Qt elements --- src/lib_gui/qt/view/QtGraphView.cpp | 151 ++++++++++-------- src/lib_gui/qt/view/QtGraphView.h | 32 ++-- .../qt/view/graphElements/QtGraphEdge.cpp | 34 ++-- .../qt/view/graphElements/QtGraphEdge.h | 12 +- .../qt/view/graphElements/QtGraphNode.cpp | 31 ++-- .../qt/view/graphElements/QtGraphNode.h | 18 +-- .../view/graphElements/QtGraphNodeAccess.cpp | 2 +- .../qt/view/graphElements/QtGraphNodeAccess.h | 8 +- .../graphElements/QtGraphNodeQualifier.cpp | 2 +- .../nodeComponents/QtGraphNodeComponent.cpp | 2 +- .../nodeComponents/QtGraphNodeComponent.h | 4 +- .../QtGraphNodeComponentClickable.cpp | 10 +- .../QtGraphNodeComponentClickable.h | 2 +- .../QtGraphNodeComponentMoveable.cpp | 28 +--- .../QtGraphNodeComponentMoveable.h | 2 +- 15 files changed, 159 insertions(+), 179 deletions(-) diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index c2fa6df0..dfa7a483 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -194,7 +194,7 @@ void QtGraphView::findMatches(ScreenSearchSender* sender, const std::string& que { m_matchedNodes.clear(); - for (std::shared_ptr node : m_oldNodes) + for (QtGraphNode* node : m_oldNodes) { node->matchNameRecursive(query, &m_matchedNodes); } @@ -290,12 +290,12 @@ void QtGraphView::rebuildGraph( m_nodes.clear(); m_activeNodes.clear(); - m_oldActiveNode.reset(); + m_oldActiveNode = nullptr; m_virtualNodeRects.clear(); for (unsigned int i = 0; i < nodes.size(); i++) { - std::shared_ptr node = createNodeRecursive(view, NULL, nodes[i].get(), activeNodeCount > 1); + QtGraphNode* node = createNodeRecursive(view, NULL, nodes[i].get(), activeNodeCount > 1); if (node) { m_nodes.push_back(node); @@ -309,7 +309,7 @@ void QtGraphView::rebuildGraph( QPointF offset = QPointF(o.x, o.y); m_sceneRectOffset = offset - center; - for (const std::shared_ptr& node : m_nodes) + for (QtGraphNode* node : m_nodes) { node->setPos(node->pos() - offset); } @@ -353,11 +353,18 @@ void QtGraphView::clear() { m_onQtThread([this]() { - m_oldActiveNode.reset(); + m_oldActiveNode = nullptr; m_activeNodes.clear(); - m_oldOldNodes = m_oldNodes; - m_oldOldEdges = m_oldEdges; + for (QtGraphNode* node : m_oldNodes) + { + node->deleteLater(); + } + + for (QtGraphEdge* edge : m_oldEdges) + { + edge->deleteLater(); + } m_nodes.clear(); m_edges.clear(); @@ -379,14 +386,14 @@ void QtGraphView::focusTokenIds(const std::vector& focusedTokenIds) { for (const Id& tokenId : focusedTokenIds) { - std::shared_ptr node = findNodeRecursive(m_oldNodes, tokenId); + QtGraphNode* node = findNodeRecursive(m_oldNodes, tokenId); if (node) { node->focusIn(); continue; } - for (std::shared_ptr edge : m_oldEdges) + for (QtGraphEdge* edge : m_oldEdges) { if (edge->getData() && edge->getData()->getId() == tokenId) { @@ -404,14 +411,14 @@ void QtGraphView::defocusTokenIds(const std::vector& defocusedTokenIds) { for (const Id& tokenId : defocusedTokenIds) { - std::shared_ptr node = findNodeRecursive(m_oldNodes, tokenId); + QtGraphNode* node = findNodeRecursive(m_oldNodes, tokenId); if (node && node->isDataNode()) { node->focusOut(); continue; } - for (std::shared_ptr edge : m_oldEdges) + for (QtGraphEdge* edge : m_oldEdges) { if (edge->getData() && edge->getData()->getId() == tokenId) { @@ -457,13 +464,13 @@ void QtGraphView::activateEdge(Id edgeId, bool centerOrigin) finishedTransition(); } - for (std::shared_ptr& edge : m_oldEdges) + for (QtGraphEdge* edge : m_oldEdges) { edge->setIsActive(false); edge->setIsFocused(false); } - for (std::shared_ptr& edge : m_oldEdges) + for (QtGraphEdge* edge : m_oldEdges) { if (edge->getData() && edge->getData()->getId() == edgeId) { @@ -471,7 +478,7 @@ void QtGraphView::activateEdge(Id edgeId, bool centerOrigin) if (centerOrigin) { - centerNode(edge->getOwner().lock().get()); + centerNode(edge->getOwner()); } break; @@ -509,12 +516,12 @@ void QtGraphView::finishedTransition() QGraphicsView* view = getView(); view->setInteractive(true); - for (const std::shared_ptr& node : m_nodes) + for (QtGraphNode* node : m_nodes) { node->showNodeRecursive(); } - for (const std::shared_ptr& edge : m_edges) + for (QtGraphEdge* edge : m_edges) { edge->setOpacity(1.0f); } @@ -524,8 +531,8 @@ void QtGraphView::finishedTransition() void QtGraphView::clickedInEmptySpace() { - std::vector> activeEdges; - for (std::shared_ptr& edge : m_oldEdges) + std::vector activeEdges; + for (QtGraphEdge* edge : m_oldEdges) { if (edge->getIsActive()) { @@ -537,7 +544,7 @@ void QtGraphView::clickedInEmptySpace() if (m_graph && m_graph->getTrailMode() != Graph::TRAIL_NONE) { - for (std::shared_ptr& edge : activeEdges) + for (QtGraphEdge* edge : activeEdges) { edge->setIsActive(false); } @@ -555,10 +562,10 @@ void QtGraphView::pressedCharacterKey(QChar c) return; } - QtGraphNode* node = nullptr; + const QtGraphNode* node = nullptr; bool hasTextNodes = false; - for (const std::shared_ptr& n : m_oldNodes) + for (const QtGraphNode* n : m_oldNodes) { if (n->isTextNode() && n->getName().size()) { @@ -566,7 +573,7 @@ void QtGraphView::pressedCharacterKey(QChar c) QChar start(n->getName()[0]); if (start.toLower() >= c.toLower()) { - node = n.get(); + node = n; break; } } @@ -652,7 +659,7 @@ MessageActivateTrail QtGraphView::getMessageActivateTrail(bool forward) MessageActivateTrail message(0, 0, 0, 0, false); QtGraphNodeData* node = nullptr; - if (m_oldActiveNode && (node = dynamic_cast(m_oldActiveNode.get()))) + if (m_oldActiveNode && (node = dynamic_cast(m_oldActiveNode))) { Edge::EdgeTypeMask trailType; bool horizontalLayout = true; @@ -768,21 +775,20 @@ void QtGraphView::switchToNewGraphData() { m_oldGraph = m_graph; - for (const std::shared_ptr& node : m_oldNodes) + for (QtGraphNode* node : m_oldNodes) { node->hide(); node->setParentItem(nullptr); + node->deleteLater(); } - for (const std::shared_ptr& edge : m_oldEdges) + for (QtGraphEdge* edge : m_oldEdges) { edge->hide(); edge->setParentItem(nullptr); + edge->deleteLater(); } - m_oldOldNodes = m_oldNodes; - m_oldOldEdges = m_oldEdges; - m_oldNodes = m_nodes; m_oldEdges = m_edges; @@ -811,7 +817,7 @@ void QtGraphView::switchToNewGraphData() { if (m_centerActiveNode) { - centerNode(m_activeNodes.front().get()); + centerNode(m_activeNodes.front()); } if (m_activeNodes.size() == 1) @@ -851,59 +857,62 @@ void QtGraphView::doResize() getView()->setSceneRect(getSceneRect(m_oldNodes)); } -std::shared_ptr QtGraphView::findNodeRecursive(const std::list>& nodes, Id tokenId) +QtGraphNode* QtGraphView::findNodeRecursive(const std::list& nodes, Id tokenId) { - for (const std::shared_ptr& node : nodes) + for (QtGraphNode* node : nodes) { if (node->getTokenId() == tokenId) { return node; } - std::shared_ptr result = findNodeRecursive(node->getSubNodes(), tokenId); - if (result != NULL) + QtGraphNode* result = findNodeRecursive(node->getSubNodes(), tokenId); + if (result != nullptr) { return result; } } - return std::shared_ptr(); + return nullptr; } -std::shared_ptr QtGraphView::createNodeRecursive( - QGraphicsView* view, std::shared_ptr parentNode, const DummyNode* node, bool multipleActive +QtGraphNode* QtGraphView::createNodeRecursive( + QGraphicsView* view, QtGraphNode* parentNode, const DummyNode* node, bool multipleActive ){ if (!node->visible) { return NULL; } - std::shared_ptr newNode; + QtGraphNode* newNode = nullptr; if (node->isGraphNode()) { - newNode = std::make_shared( - node->data, node->name, node->hasParent, node->childVisible, node->hasQualifier); + newNode = new QtGraphNodeData(node->data, node->name, node->hasParent, node->childVisible, node->hasQualifier); } else if (node->isAccessNode()) { - newNode = std::make_shared(node->accessKind); + newNode = new QtGraphNodeAccess(node->accessKind); } else if (node->isExpandToggleNode()) { - newNode = std::make_shared(node->isExpanded(), node->invisibleSubNodeCount); + newNode = new QtGraphNodeExpandToggle(node->isExpanded(), node->invisibleSubNodeCount); } else if (node->isBundleNode()) { - newNode = std::make_shared( - node->tokenId, node->getBundledNodeCount(), node->bundledNodeType, node->name); + newNode = new QtGraphNodeBundle(node->tokenId, node->getBundledNodeCount(), node->bundledNodeType, node->name); } else if (node->isQualifierNode()) { - newNode = std::make_shared(node->qualifierName); + newNode = new QtGraphNodeQualifier(node->qualifierName); } else if (node->isTextNode()) { - newNode = std::make_shared(node->name); + newNode = new QtGraphNodeText(node->name); + } + else + { + LOG_ERROR("DummyNode is not valid"); + return nullptr; } newNode->setPosition(node->position); @@ -913,7 +922,7 @@ std::shared_ptr QtGraphView::createNodeRecursive( newNode->addComponent(std::make_shared(newNode)); - view->scene()->addItem(newNode.get()); + view->scene()->addItem(newNode); if (parentNode) { @@ -931,7 +940,7 @@ std::shared_ptr QtGraphView::createNodeRecursive( for (unsigned int i = 0; i < node->subNodes.size(); i++) { - std::shared_ptr subNode = createNodeRecursive(view, newNode, node->subNodes[i].get(), multipleActive); + QtGraphNode* subNode = createNodeRecursive(view, newNode, node->subNodes[i].get(), multipleActive); if (subNode) { newNode->addSubNode(subNode); @@ -943,7 +952,7 @@ std::shared_ptr QtGraphView::createNodeRecursive( return newNode; } -std::shared_ptr QtGraphView::createEdge( +QtGraphEdge* QtGraphView::createEdge( QGraphicsView* view, const DummyEdge* edge, std::set* visibleEdgeIds, @@ -956,13 +965,13 @@ std::shared_ptr QtGraphView::createEdge( return NULL; } - std::shared_ptr owner = findNodeRecursive(m_nodes, edge->ownerId); - std::shared_ptr target = findNodeRecursive(m_nodes, edge->targetId); + QtGraphNode* owner = findNodeRecursive(m_nodes, edge->ownerId); + QtGraphNode* target = findNodeRecursive(m_nodes, edge->targetId); if (owner != NULL && target != NULL) { - std::shared_ptr qtEdge = - std::make_shared(owner, target, edge->data, edge->getWeight(), edge->active && !useBezier, edge->getDirection()); + QtGraphEdge* qtEdge = new QtGraphEdge( + owner, target, edge->data, edge->getWeight(), edge->active && !useBezier, edge->getDirection()); if (trailMode != Graph::TRAIL_NONE) { @@ -993,7 +1002,7 @@ std::shared_ptr QtGraphView::createEdge( owner->addOutEdge(qtEdge); target->addInEdge(qtEdge); - view->scene()->addItem(qtEdge.get()); + view->scene()->addItem(qtEdge); if (edge->data) { @@ -1008,7 +1017,7 @@ std::shared_ptr QtGraphView::createEdge( return NULL; } -std::shared_ptr QtGraphView::createAggregationEdge( +QtGraphEdge* QtGraphView::createAggregationEdge( QGraphicsView* view, const DummyEdge* edge, std::set* visibleEdgeIds) { if (!edge->visible) @@ -1035,17 +1044,17 @@ std::shared_ptr QtGraphView::createAggregationEdge( return createEdge(view, edge, visibleEdgeIds, Graph::TRAIL_NONE, QPointF(), false); } -QRectF QtGraphView::itemsBoundingRect(const std::list>& items) const +QRectF QtGraphView::itemsBoundingRect(const std::list& items) const { QRectF boundingRect; - for (const std::shared_ptr& item : items) + for (const QtGraphNode* item : items) { boundingRect |= item->sceneBoundingRect(); } return boundingRect; } -QRectF QtGraphView::getSceneRect(const std::list>& items) const +QRectF QtGraphView::getSceneRect(const std::list& items) const { QRectF sceneRect = itemsBoundingRect(items); @@ -1075,27 +1084,27 @@ void QtGraphView::centerNode(QtGraphNode* node) } void QtGraphView::compareNodesRecursive( - std::list> newSubNodes, - std::list> oldSubNodes, + std::list newSubNodes, + std::list oldSubNodes, std::list* appearingNodes, std::list* vanishingNodes, std::vector>* remainingNodes ){ - for (std::list>::iterator it = newSubNodes.begin(); it != newSubNodes.end(); it++) + for (std::list::iterator it = newSubNodes.begin(); it != newSubNodes.end(); it++) { bool remains = false; - for (std::list>::iterator it2 = oldSubNodes.begin(); it2 != oldSubNodes.end(); it2++) + for (std::list::iterator it2 = oldSubNodes.begin(); it2 != oldSubNodes.end(); it2++) { if (((*it)->isDataNode() && (*it2)->isDataNode() && (*it)->getTokenId() == (*it2)->getTokenId()) || ((*it)->isAccessNode() && (*it2)->isAccessNode() && - dynamic_cast((*it).get())->getAccessKind() == - dynamic_cast((*it2).get())->getAccessKind()) || + dynamic_cast(*it)->getAccessKind() == + dynamic_cast(*it2)->getAccessKind()) || ((*it)->isExpandToggleNode() && (*it2)->isExpandToggleNode()) || ((*it)->isBundleNode() && (*it2)->isBundleNode() && (*it)->getTokenId() == (*it2)->getTokenId()) || ((*it)->isQualifierNode() && (*it2)->isQualifierNode() && (*it)->getTokenId() == (*it2)->getTokenId())) { - remainingNodes->push_back(std::pair((*it).get(), (*it2).get())); + remainingNodes->push_back(std::pair(*it, *it2)); compareNodesRecursive( (*it)->getSubNodes(), (*it2)->getSubNodes(), appearingNodes, vanishingNodes, remainingNodes); @@ -1107,13 +1116,13 @@ void QtGraphView::compareNodesRecursive( if (!remains) { - appearingNodes->push_back((*it).get()); + appearingNodes->push_back(*it); } } - for (std::shared_ptr& node : oldSubNodes) + for (QtGraphNode* node : oldSubNodes) { - vanishingNodes->push_back(node.get()); + vanishingNodes->push_back(node); } } @@ -1163,9 +1172,9 @@ void QtGraphView::createTransition() vanish->addAnimation(anim); } - for (const std::shared_ptr& edge : m_oldEdges) + for (QtGraphEdge* edge : m_oldEdges) { - QPropertyAnimation* anim = new QPropertyAnimation(edge.get(), "opacity"); + QPropertyAnimation* anim = new QPropertyAnimation(edge, "opacity"); anim->setDuration(150); anim->setStartValue(1.0f); anim->setEndValue(0.0f); @@ -1243,9 +1252,9 @@ void QtGraphView::createTransition() node->blendOut(); } - for (const std::shared_ptr& edge : m_edges) + for (QtGraphEdge* edge : m_edges) { - QPropertyAnimation* anim = new QPropertyAnimation(edge.get(), "opacity"); + QPropertyAnimation* anim = new QPropertyAnimation(edge, "opacity"); anim->setDuration(150); anim->setStartValue(0.0f); anim->setEndValue(1.0f); diff --git a/src/lib_gui/qt/view/QtGraphView.h b/src/lib_gui/qt/view/QtGraphView.h index bca4c266..b53c9bfb 100644 --- a/src/lib_gui/qt/view/QtGraphView.h +++ b/src/lib_gui/qt/view/QtGraphView.h @@ -93,23 +93,23 @@ private: void doResize(); - std::shared_ptr findNodeRecursive(const std::list>& nodes, Id tokenId); + QtGraphNode* findNodeRecursive(const std::list& nodes, Id tokenId); - std::shared_ptr createNodeRecursive( - QGraphicsView* view, std::shared_ptr parentNode, const DummyNode* node, bool multipleActive); - std::shared_ptr createEdge( + QtGraphNode* createNodeRecursive( + QGraphicsView* view, QtGraphNode* parentNode, const DummyNode* node, bool multipleActive); + QtGraphEdge* createEdge( QGraphicsView* view, const DummyEdge* edge, std::set* visibleEdgeIds, Graph::TrailMode trailMode, QPointF pathOffset, bool useBezier); - std::shared_ptr createAggregationEdge( + QtGraphEdge* createAggregationEdge( QGraphicsView* view, const DummyEdge* edge, std::set* visibleEdgeIds); - QRectF itemsBoundingRect(const std::list>& items) const; - QRectF getSceneRect(const std::list>& items) const; + QRectF itemsBoundingRect(const std::list& items) const; + QRectF getSceneRect(const std::list& items) const; void centerNode(QtGraphNode* node); void compareNodesRecursive( - std::list> newSubNodes, - std::list> oldSubNodes, + std::list newSubNodes, + std::list oldSubNodes, std::list* appearingNodes, std::list* vanishingNodes, std::vector>* remainingNodes); @@ -121,16 +121,14 @@ private: std::shared_ptr m_graph; std::shared_ptr m_oldGraph; - std::list> m_edges; - std::list> m_oldEdges; - std::list> m_oldOldEdges; + std::list m_edges; + std::list m_oldEdges; - std::list> m_nodes; - std::list> m_oldNodes; - std::list> m_oldOldNodes; + std::list m_nodes; + std::list m_oldNodes; - std::vector> m_activeNodes; - std::shared_ptr m_oldActiveNode; + std::vector m_activeNodes; + QtGraphNode* m_oldActiveNode = nullptr; bool m_centerActiveNode; bool m_scrollToTop; diff --git a/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp b/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp index 0561a09a..084de497 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp @@ -24,8 +24,8 @@ QtGraphEdge* QtGraphEdge::s_focusedEdge = nullptr; QtGraphEdge* QtGraphEdge::s_focusedBezierEdge = nullptr; QtGraphEdge::QtGraphEdge( - const std::weak_ptr& owner, - const std::weak_ptr& target, + QtGraphNode* owner, + QtGraphNode* target, const Edge* data, size_t weight, bool isActive, @@ -49,11 +49,13 @@ QtGraphEdge::QtGraphEdge( { if (m_direction == TokenComponentAggregation::DIRECTION_BACKWARD) { - m_owner.swap(m_target); + QtGraphNode* temp = m_owner; + m_owner = m_target; + m_target = temp; } - m_fromActive = m_owner.lock()->getIsActive(); - m_toActive = m_target.lock()->getIsActive(); + m_fromActive = m_owner->getIsActive(); + m_toActive = m_target->getIsActive(); s_focusedEdge = nullptr; s_focusedBezierEdge = nullptr; @@ -68,26 +70,20 @@ const Edge* QtGraphEdge::getData() const return m_data; } -std::weak_ptr QtGraphEdge::getOwner() +QtGraphNode* QtGraphEdge::getOwner() { return m_owner; } -std::weak_ptr QtGraphEdge::getTarget() +QtGraphNode* QtGraphEdge::getTarget() { return m_target; } void QtGraphEdge::updateLine() { - std::shared_ptr owner = m_owner.lock(); - std::shared_ptr target = m_target.lock(); - - if (owner == NULL || target == NULL) - { - LOG_WARNING("Either the owner or the target node is null."); - return; - } + QtGraphNode* owner = m_owner; + QtGraphNode* target = m_target; Edge::EdgeType type = (getData() ? getData()->getType() : Edge::EDGE_AGGREGATION); GraphViewStyle::EdgeStyle style = GraphViewStyle::getStyleForEdgeType(type, m_isActive | m_isFocused, false, m_isTrailEdge); @@ -176,8 +172,7 @@ void QtGraphEdge::updateLine() } if (type != Edge::EDGE_INHERITANCE && - (type != Edge::EDGE_AGGREGATION || - owner.get() != owner->getLastParent() || target.get() != target->getLastParent())) + (type != Edge::EDGE_AGGREGATION || owner != owner->getLastParent() || target != target->getLastParent())) { child->setRoute(QtLineItemBase::ROUTE_HORIZONTAL); } @@ -246,9 +241,8 @@ void QtGraphEdge::onClick() if (!getData()) { - std::weak_ptr node = - (m_direction == TokenComponentAggregation::DIRECTION_BACKWARD ? m_owner : m_target); - MessageGraphNodeBundleSplit(node.lock()->getTokenId()).dispatch(); + QtGraphNode* node = (m_direction == TokenComponentAggregation::DIRECTION_BACKWARD ? m_owner : m_target); + MessageGraphNodeBundleSplit(node->getTokenId()).dispatch(); } else { diff --git a/src/lib_gui/qt/view/graphElements/QtGraphEdge.h b/src/lib_gui/qt/view/graphElements/QtGraphEdge.h index 92a52687..a84f21fb 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphEdge.h +++ b/src/lib_gui/qt/view/graphElements/QtGraphEdge.h @@ -22,8 +22,8 @@ class QtGraphEdge public: QtGraphEdge( - const std::weak_ptr& owner, - const std::weak_ptr& target, + QtGraphNode* owner, + QtGraphNode* target, const Edge* data, size_t weight, bool isActive, @@ -32,8 +32,8 @@ public: const Edge* getData() const; - std::weak_ptr getOwner(); - std::weak_ptr getTarget(); + QtGraphNode* getOwner(); + QtGraphNode* getTarget(); void updateLine(); @@ -72,8 +72,8 @@ private: const Edge* m_data; - std::weak_ptr m_owner; - std::weak_ptr m_target; + QtGraphNode* m_owner; + QtGraphNode* m_target; QGraphicsItem* m_child; diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp index 4039de12..beb4be32 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp @@ -57,7 +57,7 @@ QtGraphNode::~QtGraphNode() QtGraphNode* QtGraphNode::getParent() const { - return m_parentNode.lock().get(); + return m_parentNode; } QtGraphNode* QtGraphNode::getLastParent() const @@ -75,18 +75,17 @@ QtGraphNode* QtGraphNode::getLastParent() const return node; } -void QtGraphNode::setParent(std::weak_ptr parentNode) +void QtGraphNode::setParent(QtGraphNode* parentNode) { m_parentNode = parentNode; - std::shared_ptr parent = parentNode.lock(); - if (parent != NULL) + if (m_parentNode != nullptr) { - QGraphicsRectItem::setParentItem(parent.get()); + QGraphicsRectItem::setParentItem(m_parentNode); } } -std::list> QtGraphNode::getSubNodes() const +std::list QtGraphNode::getSubNodes() const { return m_subNodes; } @@ -147,12 +146,12 @@ Vec4i QtGraphNode::getParentBoundingRect() const return getLastParent()->getBoundingRect(); } -void QtGraphNode::addOutEdge(const std::shared_ptr& edge) +void QtGraphNode::addOutEdge(QtGraphEdge* edge) { m_outEdges.push_back(edge); } -void QtGraphNode::addInEdge(const std::weak_ptr& edge) +void QtGraphNode::addInEdge(QtGraphEdge* edge) { m_inEdges.push_back(edge); } @@ -317,7 +316,7 @@ Id QtGraphNode::getTokenId() const return 0; } -void QtGraphNode::addSubNode(const std::shared_ptr& node) +void QtGraphNode::addSubNode(QtGraphNode* node) { m_subNodes.push_back(node); @@ -415,18 +414,14 @@ void QtGraphNode::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) void QtGraphNode::forEachEdge(std::function func) { - for (const std::shared_ptr& edge : m_outEdges) + for (QtGraphEdge* edge : m_outEdges) { - func(edge.get()); + func(edge); } - for (const std::weak_ptr& e : m_inEdges) + for (QtGraphEdge* edge : m_inEdges) { - std::shared_ptr edge = e.lock(); - if (edge) - { - func(edge.get()); - } + func(edge); } } @@ -439,7 +434,7 @@ void QtGraphNode::notifyEdgesAfterMove() } ); - for (const std::shared_ptr& node : m_subNodes) + for (QtGraphNode* node : m_subNodes) { node->notifyEdgesAfterMove(); } diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNode.h b/src/lib_gui/qt/view/graphElements/QtGraphNode.h index 1e28f89e..d07c854f 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNode.h +++ b/src/lib_gui/qt/view/graphElements/QtGraphNode.h @@ -38,9 +38,9 @@ public: QtGraphNode* getParent() const; QtGraphNode* getLastParent() const; - void setParent(std::weak_ptr parentNode); + void setParent(QtGraphNode* parentNode); - std::list> getSubNodes() const; + std::list getSubNodes() const; Vec2i getPosition() const; virtual bool setPosition(const Vec2i& position); @@ -54,8 +54,8 @@ public: Vec4i getBoundingRect() const; Vec4i getParentBoundingRect() const; - void addOutEdge(const std::shared_ptr& edge); - void addInEdge(const std::weak_ptr& edge); + void addOutEdge(QtGraphEdge* edge); + void addInEdge(QtGraphEdge* edge); size_t getOutEdgeCount() const; size_t getInEdgeCount() const; @@ -89,7 +89,7 @@ public: virtual Id getTokenId() const; - virtual void addSubNode(const std::shared_ptr& node); + virtual void addSubNode(QtGraphNode* node); virtual void onClick(); virtual void moved(const Vec2i& oldPosition); @@ -109,11 +109,11 @@ protected: void setStyle(const GraphViewStyle::NodeStyle& style); - std::list> m_outEdges; - std::list> m_inEdges; + std::list m_outEdges; + std::list m_inEdges; - std::weak_ptr m_parentNode; - std::list> m_subNodes; + QtGraphNode* m_parentNode = nullptr; + std::list m_subNodes; QGraphicsSimpleTextItem* m_text = nullptr; QtRoundedRectItem* m_rect = nullptr; diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.cpp index a119ba61..f9324da8 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.cpp @@ -70,7 +70,7 @@ bool QtGraphNodeAccess::isAccessNode() const return true; } -void QtGraphNodeAccess::addSubNode(const std::shared_ptr& node) +void QtGraphNodeAccess::addSubNode(QtGraphNode* node) { QtGraphNode::addSubNode(node); m_text->show(); diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.h b/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.h index 9babdc7f..1e978868 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.h +++ b/src/lib_gui/qt/view/graphElements/QtGraphNodeAccess.h @@ -16,15 +16,15 @@ public: AccessKind getAccessKind() const; // QtGraphNode implementation - virtual bool isAccessNode() const; + virtual bool isAccessNode() const override; - virtual void addSubNode(const std::shared_ptr& node); - virtual void updateStyle(); + virtual void addSubNode(QtGraphNode* node) override; + virtual void updateStyle() override; void hideLabel(); protected: - virtual void matchName(const std::string& query, std::vector* matchedNodes) {} + virtual void matchName(const std::string& query, std::vector* matchedNodes) override {} private: AccessKind m_accessKind; diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNodeQualifier.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNodeQualifier.cpp index 0dfddbe5..809636d8 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNodeQualifier.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphNodeQualifier.cpp @@ -154,6 +154,6 @@ void QtGraphNodeQualifier::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) m_rightArrow->hide(); m_rightArrowSmall->show(); - this->setParentItem(m_parentNode.lock().get()); + this->setParentItem(m_parentNode); this->setPos(QPointF(0, 0)); } diff --git a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.cpp b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.cpp index 032b206e..527884b2 100644 --- a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.cpp +++ b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.cpp @@ -1,6 +1,6 @@ #include "QtGraphNodeComponent.h" -QtGraphNodeComponent::QtGraphNodeComponent(const std::weak_ptr& graphNode) +QtGraphNodeComponent::QtGraphNodeComponent(QtGraphNode* graphNode) : m_graphNode(graphNode) { } diff --git a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.h b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.h index b441978e..f1e87413 100644 --- a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.h +++ b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponent.h @@ -10,7 +10,7 @@ class QtGraphNode; class QtGraphNodeComponent { public: - QtGraphNodeComponent(const std::weak_ptr& graphNode); + QtGraphNodeComponent(QtGraphNode* graphNode); virtual ~QtGraphNodeComponent(); virtual void nodeMousePressEvent(QGraphicsSceneMouseEvent* event); @@ -18,7 +18,7 @@ public: virtual void nodeMouseReleaseEvent(QGraphicsSceneMouseEvent* event); protected: - std::weak_ptr m_graphNode; + QtGraphNode* m_graphNode; }; #endif // QT_GRAPH_NODE_COMPONENT_H diff --git a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.cpp b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.cpp index 9d84235e..e53369bd 100644 --- a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.cpp +++ b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.cpp @@ -4,7 +4,7 @@ #include "qt/view/graphElements/QtGraphNode.h" -QtGraphNodeComponentClickable::QtGraphNodeComponentClickable(const std::weak_ptr& graphNode) +QtGraphNodeComponentClickable::QtGraphNodeComponentClickable(QtGraphNode* graphNode) : QtGraphNodeComponent(graphNode) , m_mousePos(0.0f, 0.0f) , m_mouseMoved(false) @@ -35,11 +35,7 @@ void QtGraphNodeComponentClickable::nodeMouseReleaseEvent(QGraphicsSceneMouseEve { if (!m_mouseMoved) { - std::shared_ptr node = m_graphNode.lock(); - if (node != NULL) - { - node->onClick(); - event->accept(); - } + m_graphNode->onClick(); + event->accept(); } } diff --git a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h index 0804658a..8cc2a5f6 100644 --- a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h +++ b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentClickable.h @@ -9,7 +9,7 @@ class QtGraphNodeComponentClickable : public QtGraphNodeComponent { public: - QtGraphNodeComponentClickable(const std::weak_ptr& graphNode); + QtGraphNodeComponentClickable(QtGraphNode* graphNode); virtual ~QtGraphNodeComponentClickable(); virtual void nodeMousePressEvent(QGraphicsSceneMouseEvent* event); diff --git a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.cpp b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.cpp index 63049e46..268f50b1 100644 --- a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.cpp +++ b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.cpp @@ -4,7 +4,7 @@ #include "qt/view/graphElements/QtGraphNode.h" -QtGraphNodeComponentMoveable::QtGraphNodeComponentMoveable(const std::weak_ptr& graphNode) +QtGraphNodeComponentMoveable::QtGraphNodeComponentMoveable(QtGraphNode* graphNode) : QtGraphNodeComponent(graphNode) , m_mouseOffset(0.0f, 0.0f) { @@ -16,25 +16,17 @@ QtGraphNodeComponentMoveable::~QtGraphNodeComponentMoveable() void QtGraphNodeComponentMoveable::nodeMousePressEvent(QGraphicsSceneMouseEvent* event) { - std::shared_ptr node = m_graphNode.lock(); - if (node != NULL) - { - m_oldPos = node->getPosition(); - m_mouseOffset.x = event->scenePos().x() - m_oldPos.x; - m_mouseOffset.y = event->scenePos().y() - m_oldPos.y; + m_oldPos = m_graphNode->getPosition(); + m_mouseOffset.x = event->scenePos().x() - m_oldPos.x; + m_mouseOffset.y = event->scenePos().y() - m_oldPos.y; - event->accept(); - } + event->accept(); } void QtGraphNodeComponentMoveable::nodeMouseMoveEvent(QGraphicsSceneMouseEvent* event) { - std::shared_ptr node = m_graphNode.lock(); - if (node != NULL) - { - node->setPosition(Vec2i(event->scenePos().x() - m_mouseOffset.x, event->scenePos().y() - m_mouseOffset.y)); - event->accept(); - } + m_graphNode->setPosition(Vec2i(event->scenePos().x() - m_mouseOffset.x, event->scenePos().y() - m_mouseOffset.y)); + event->accept(); } void QtGraphNodeComponentMoveable::nodeMouseReleaseEvent(QGraphicsSceneMouseEvent* event) @@ -44,9 +36,5 @@ void QtGraphNodeComponentMoveable::nodeMouseReleaseEvent(QGraphicsSceneMouseEven return; } - std::shared_ptr node = m_graphNode.lock(); - if (node != NULL) - { - node->moved(m_oldPos); - } + m_graphNode->moved(m_oldPos); } diff --git a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h index bf384feb..d5868bbd 100644 --- a/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h +++ b/src/lib_gui/qt/view/graphElements/nodeComponents/QtGraphNodeComponentMoveable.h @@ -9,7 +9,7 @@ class QtGraphNodeComponentMoveable : public QtGraphNodeComponent { public: - QtGraphNodeComponentMoveable(const std::weak_ptr& graphNode); + QtGraphNodeComponentMoveable(QtGraphNode* graphNode); virtual ~QtGraphNodeComponentMoveable(); virtual void nodeMousePressEvent(QGraphicsSceneMouseEvent* event);