logic: don't use shared_ptr for QtGraphNode and QtGraphEdge anymore
* fixes crashes on events to deleted Qt elements
This commit is contained in:
@@ -194,7 +194,7 @@ void QtGraphView::findMatches(ScreenSearchSender* sender, const std::string& que
|
||||
{
|
||||
m_matchedNodes.clear();
|
||||
|
||||
for (std::shared_ptr<QtGraphNode> 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<QtGraphNode> 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<QtGraphNode>& 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<Id>& focusedTokenIds)
|
||||
{
|
||||
for (const Id& tokenId : focusedTokenIds)
|
||||
{
|
||||
std::shared_ptr<QtGraphNode> node = findNodeRecursive(m_oldNodes, tokenId);
|
||||
QtGraphNode* node = findNodeRecursive(m_oldNodes, tokenId);
|
||||
if (node)
|
||||
{
|
||||
node->focusIn();
|
||||
continue;
|
||||
}
|
||||
|
||||
for (std::shared_ptr<QtGraphEdge> 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<Id>& defocusedTokenIds)
|
||||
{
|
||||
for (const Id& tokenId : defocusedTokenIds)
|
||||
{
|
||||
std::shared_ptr<QtGraphNode> node = findNodeRecursive(m_oldNodes, tokenId);
|
||||
QtGraphNode* node = findNodeRecursive(m_oldNodes, tokenId);
|
||||
if (node && node->isDataNode())
|
||||
{
|
||||
node->focusOut();
|
||||
continue;
|
||||
}
|
||||
|
||||
for (std::shared_ptr<QtGraphEdge> 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<QtGraphEdge>& edge : m_oldEdges)
|
||||
for (QtGraphEdge* edge : m_oldEdges)
|
||||
{
|
||||
edge->setIsActive(false);
|
||||
edge->setIsFocused(false);
|
||||
}
|
||||
|
||||
for (std::shared_ptr<QtGraphEdge>& 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<QtGraphNode>& node : m_nodes)
|
||||
for (QtGraphNode* node : m_nodes)
|
||||
{
|
||||
node->showNodeRecursive();
|
||||
}
|
||||
|
||||
for (const std::shared_ptr<QtGraphEdge>& edge : m_edges)
|
||||
for (QtGraphEdge* edge : m_edges)
|
||||
{
|
||||
edge->setOpacity(1.0f);
|
||||
}
|
||||
@@ -524,8 +531,8 @@ void QtGraphView::finishedTransition()
|
||||
|
||||
void QtGraphView::clickedInEmptySpace()
|
||||
{
|
||||
std::vector<std::shared_ptr<QtGraphEdge>> activeEdges;
|
||||
for (std::shared_ptr<QtGraphEdge>& edge : m_oldEdges)
|
||||
std::vector<QtGraphEdge*> 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<QtGraphEdge>& 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<QtGraphNode>& 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<QtGraphNodeData*>(m_oldActiveNode.get())))
|
||||
if (m_oldActiveNode && (node = dynamic_cast<QtGraphNodeData*>(m_oldActiveNode)))
|
||||
{
|
||||
Edge::EdgeTypeMask trailType;
|
||||
bool horizontalLayout = true;
|
||||
@@ -768,21 +775,20 @@ void QtGraphView::switchToNewGraphData()
|
||||
{
|
||||
m_oldGraph = m_graph;
|
||||
|
||||
for (const std::shared_ptr<QtGraphNode>& node : m_oldNodes)
|
||||
for (QtGraphNode* node : m_oldNodes)
|
||||
{
|
||||
node->hide();
|
||||
node->setParentItem(nullptr);
|
||||
node->deleteLater();
|
||||
}
|
||||
|
||||
for (const std::shared_ptr<QtGraphEdge>& 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<QtGraphNode> QtGraphView::findNodeRecursive(const std::list<std::shared_ptr<QtGraphNode>>& nodes, Id tokenId)
|
||||
QtGraphNode* QtGraphView::findNodeRecursive(const std::list<QtGraphNode*>& nodes, Id tokenId)
|
||||
{
|
||||
for (const std::shared_ptr<QtGraphNode>& node : nodes)
|
||||
for (QtGraphNode* node : nodes)
|
||||
{
|
||||
if (node->getTokenId() == tokenId)
|
||||
{
|
||||
return node;
|
||||
}
|
||||
|
||||
std::shared_ptr<QtGraphNode> result = findNodeRecursive(node->getSubNodes(), tokenId);
|
||||
if (result != NULL)
|
||||
QtGraphNode* result = findNodeRecursive(node->getSubNodes(), tokenId);
|
||||
if (result != nullptr)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return std::shared_ptr<QtGraphNode>();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::shared_ptr<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
QGraphicsView* view, std::shared_ptr<QtGraphNode> 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<QtGraphNode> newNode;
|
||||
QtGraphNode* newNode = nullptr;
|
||||
if (node->isGraphNode())
|
||||
{
|
||||
newNode = std::make_shared<QtGraphNodeData>(
|
||||
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<QtGraphNodeAccess>(node->accessKind);
|
||||
newNode = new QtGraphNodeAccess(node->accessKind);
|
||||
}
|
||||
else if (node->isExpandToggleNode())
|
||||
{
|
||||
newNode = std::make_shared<QtGraphNodeExpandToggle>(node->isExpanded(), node->invisibleSubNodeCount);
|
||||
newNode = new QtGraphNodeExpandToggle(node->isExpanded(), node->invisibleSubNodeCount);
|
||||
}
|
||||
else if (node->isBundleNode())
|
||||
{
|
||||
newNode = std::make_shared<QtGraphNodeBundle>(
|
||||
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<QtGraphNodeQualifier>(node->qualifierName);
|
||||
newNode = new QtGraphNodeQualifier(node->qualifierName);
|
||||
}
|
||||
else if (node->isTextNode())
|
||||
{
|
||||
newNode = std::make_shared<QtGraphNodeText>(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<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
|
||||
newNode->addComponent(std::make_shared<QtGraphNodeComponentClickable>(newNode));
|
||||
|
||||
view->scene()->addItem(newNode.get());
|
||||
view->scene()->addItem(newNode);
|
||||
|
||||
if (parentNode)
|
||||
{
|
||||
@@ -931,7 +940,7 @@ std::shared_ptr<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
|
||||
for (unsigned int i = 0; i < node->subNodes.size(); i++)
|
||||
{
|
||||
std::shared_ptr<QtGraphNode> 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<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
return newNode;
|
||||
}
|
||||
|
||||
std::shared_ptr<QtGraphEdge> QtGraphView::createEdge(
|
||||
QtGraphEdge* QtGraphView::createEdge(
|
||||
QGraphicsView* view,
|
||||
const DummyEdge* edge,
|
||||
std::set<Id>* visibleEdgeIds,
|
||||
@@ -956,13 +965,13 @@ std::shared_ptr<QtGraphEdge> QtGraphView::createEdge(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::shared_ptr<QtGraphNode> owner = findNodeRecursive(m_nodes, edge->ownerId);
|
||||
std::shared_ptr<QtGraphNode> 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<QtGraphEdge> qtEdge =
|
||||
std::make_shared<QtGraphEdge>(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<QtGraphEdge> 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<QtGraphEdge> QtGraphView::createEdge(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::shared_ptr<QtGraphEdge> QtGraphView::createAggregationEdge(
|
||||
QtGraphEdge* QtGraphView::createAggregationEdge(
|
||||
QGraphicsView* view, const DummyEdge* edge, std::set<Id>* visibleEdgeIds)
|
||||
{
|
||||
if (!edge->visible)
|
||||
@@ -1035,17 +1044,17 @@ std::shared_ptr<QtGraphEdge> QtGraphView::createAggregationEdge(
|
||||
return createEdge(view, edge, visibleEdgeIds, Graph::TRAIL_NONE, QPointF(), false);
|
||||
}
|
||||
|
||||
QRectF QtGraphView::itemsBoundingRect(const std::list<std::shared_ptr<QtGraphNode>>& items) const
|
||||
QRectF QtGraphView::itemsBoundingRect(const std::list<QtGraphNode*>& items) const
|
||||
{
|
||||
QRectF boundingRect;
|
||||
for (const std::shared_ptr<QtGraphNode>& item : items)
|
||||
for (const QtGraphNode* item : items)
|
||||
{
|
||||
boundingRect |= item->sceneBoundingRect();
|
||||
}
|
||||
return boundingRect;
|
||||
}
|
||||
|
||||
QRectF QtGraphView::getSceneRect(const std::list<std::shared_ptr<QtGraphNode>>& items) const
|
||||
QRectF QtGraphView::getSceneRect(const std::list<QtGraphNode*>& items) const
|
||||
{
|
||||
QRectF sceneRect = itemsBoundingRect(items);
|
||||
|
||||
@@ -1075,27 +1084,27 @@ void QtGraphView::centerNode(QtGraphNode* node)
|
||||
}
|
||||
|
||||
void QtGraphView::compareNodesRecursive(
|
||||
std::list<std::shared_ptr<QtGraphNode>> newSubNodes,
|
||||
std::list<std::shared_ptr<QtGraphNode>> oldSubNodes,
|
||||
std::list<QtGraphNode*> newSubNodes,
|
||||
std::list<QtGraphNode*> oldSubNodes,
|
||||
std::list<QtGraphNode*>* appearingNodes,
|
||||
std::list<QtGraphNode*>* vanishingNodes,
|
||||
std::vector<std::pair<QtGraphNode*, QtGraphNode*>>* remainingNodes
|
||||
){
|
||||
for (std::list<std::shared_ptr<QtGraphNode>>::iterator it = newSubNodes.begin(); it != newSubNodes.end(); it++)
|
||||
for (std::list<QtGraphNode*>::iterator it = newSubNodes.begin(); it != newSubNodes.end(); it++)
|
||||
{
|
||||
bool remains = false;
|
||||
|
||||
for (std::list<std::shared_ptr<QtGraphNode>>::iterator it2 = oldSubNodes.begin(); it2 != oldSubNodes.end(); it2++)
|
||||
for (std::list<QtGraphNode*>::iterator it2 = oldSubNodes.begin(); it2 != oldSubNodes.end(); it2++)
|
||||
{
|
||||
if (((*it)->isDataNode() && (*it2)->isDataNode() && (*it)->getTokenId() == (*it2)->getTokenId()) ||
|
||||
((*it)->isAccessNode() && (*it2)->isAccessNode() &&
|
||||
dynamic_cast<QtGraphNodeAccess*>((*it).get())->getAccessKind() ==
|
||||
dynamic_cast<QtGraphNodeAccess*>((*it2).get())->getAccessKind()) ||
|
||||
dynamic_cast<QtGraphNodeAccess*>(*it)->getAccessKind() ==
|
||||
dynamic_cast<QtGraphNodeAccess*>(*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<QtGraphNode*, QtGraphNode*>((*it).get(), (*it2).get()));
|
||||
remainingNodes->push_back(std::pair<QtGraphNode*, QtGraphNode*>(*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<QtGraphNode>& 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<QtGraphEdge>& 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<QtGraphEdge>& 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);
|
||||
|
||||
@@ -93,23 +93,23 @@ private:
|
||||
|
||||
void doResize();
|
||||
|
||||
std::shared_ptr<QtGraphNode> findNodeRecursive(const std::list<std::shared_ptr<QtGraphNode>>& nodes, Id tokenId);
|
||||
QtGraphNode* findNodeRecursive(const std::list<QtGraphNode*>& nodes, Id tokenId);
|
||||
|
||||
std::shared_ptr<QtGraphNode> createNodeRecursive(
|
||||
QGraphicsView* view, std::shared_ptr<QtGraphNode> parentNode, const DummyNode* node, bool multipleActive);
|
||||
std::shared_ptr<QtGraphEdge> createEdge(
|
||||
QtGraphNode* createNodeRecursive(
|
||||
QGraphicsView* view, QtGraphNode* parentNode, const DummyNode* node, bool multipleActive);
|
||||
QtGraphEdge* createEdge(
|
||||
QGraphicsView* view, const DummyEdge* edge, std::set<Id>* visibleEdgeIds, Graph::TrailMode trailMode, QPointF pathOffset, bool useBezier);
|
||||
std::shared_ptr<QtGraphEdge> createAggregationEdge(
|
||||
QtGraphEdge* createAggregationEdge(
|
||||
QGraphicsView* view, const DummyEdge* edge, std::set<Id>* visibleEdgeIds);
|
||||
|
||||
QRectF itemsBoundingRect(const std::list<std::shared_ptr<QtGraphNode>>& items) const;
|
||||
QRectF getSceneRect(const std::list<std::shared_ptr<QtGraphNode>>& items) const;
|
||||
QRectF itemsBoundingRect(const std::list<QtGraphNode*>& items) const;
|
||||
QRectF getSceneRect(const std::list<QtGraphNode*>& items) const;
|
||||
|
||||
void centerNode(QtGraphNode* node);
|
||||
|
||||
void compareNodesRecursive(
|
||||
std::list<std::shared_ptr<QtGraphNode>> newSubNodes,
|
||||
std::list<std::shared_ptr<QtGraphNode>> oldSubNodes,
|
||||
std::list<QtGraphNode*> newSubNodes,
|
||||
std::list<QtGraphNode*> oldSubNodes,
|
||||
std::list<QtGraphNode*>* appearingNodes,
|
||||
std::list<QtGraphNode*>* vanishingNodes,
|
||||
std::vector<std::pair<QtGraphNode*, QtGraphNode*>>* remainingNodes);
|
||||
@@ -121,16 +121,14 @@ private:
|
||||
std::shared_ptr<Graph> m_graph;
|
||||
std::shared_ptr<Graph> m_oldGraph;
|
||||
|
||||
std::list<std::shared_ptr<QtGraphEdge>> m_edges;
|
||||
std::list<std::shared_ptr<QtGraphEdge>> m_oldEdges;
|
||||
std::list<std::shared_ptr<QtGraphEdge>> m_oldOldEdges;
|
||||
std::list<QtGraphEdge*> m_edges;
|
||||
std::list<QtGraphEdge*> m_oldEdges;
|
||||
|
||||
std::list<std::shared_ptr<QtGraphNode>> m_nodes;
|
||||
std::list<std::shared_ptr<QtGraphNode>> m_oldNodes;
|
||||
std::list<std::shared_ptr<QtGraphNode>> m_oldOldNodes;
|
||||
std::list<QtGraphNode*> m_nodes;
|
||||
std::list<QtGraphNode*> m_oldNodes;
|
||||
|
||||
std::vector<std::shared_ptr<QtGraphNode>> m_activeNodes;
|
||||
std::shared_ptr<QtGraphNode> m_oldActiveNode;
|
||||
std::vector<QtGraphNode*> m_activeNodes;
|
||||
QtGraphNode* m_oldActiveNode = nullptr;
|
||||
|
||||
bool m_centerActiveNode;
|
||||
bool m_scrollToTop;
|
||||
|
||||
@@ -24,8 +24,8 @@ QtGraphEdge* QtGraphEdge::s_focusedEdge = nullptr;
|
||||
QtGraphEdge* QtGraphEdge::s_focusedBezierEdge = nullptr;
|
||||
|
||||
QtGraphEdge::QtGraphEdge(
|
||||
const std::weak_ptr<QtGraphNode>& owner,
|
||||
const std::weak_ptr<QtGraphNode>& 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<QtGraphNode> QtGraphEdge::getOwner()
|
||||
QtGraphNode* QtGraphEdge::getOwner()
|
||||
{
|
||||
return m_owner;
|
||||
}
|
||||
|
||||
std::weak_ptr<QtGraphNode> QtGraphEdge::getTarget()
|
||||
QtGraphNode* QtGraphEdge::getTarget()
|
||||
{
|
||||
return m_target;
|
||||
}
|
||||
|
||||
void QtGraphEdge::updateLine()
|
||||
{
|
||||
std::shared_ptr<QtGraphNode> owner = m_owner.lock();
|
||||
std::shared_ptr<QtGraphNode> 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<QtGraphNode> 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
|
||||
{
|
||||
|
||||
@@ -22,8 +22,8 @@ class QtGraphEdge
|
||||
|
||||
public:
|
||||
QtGraphEdge(
|
||||
const std::weak_ptr<QtGraphNode>& owner,
|
||||
const std::weak_ptr<QtGraphNode>& 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<QtGraphNode> getOwner();
|
||||
std::weak_ptr<QtGraphNode> getTarget();
|
||||
QtGraphNode* getOwner();
|
||||
QtGraphNode* getTarget();
|
||||
|
||||
void updateLine();
|
||||
|
||||
@@ -72,8 +72,8 @@ private:
|
||||
|
||||
const Edge* m_data;
|
||||
|
||||
std::weak_ptr<QtGraphNode> m_owner;
|
||||
std::weak_ptr<QtGraphNode> m_target;
|
||||
QtGraphNode* m_owner;
|
||||
QtGraphNode* m_target;
|
||||
|
||||
QGraphicsItem* m_child;
|
||||
|
||||
|
||||
@@ -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<QtGraphNode> parentNode)
|
||||
void QtGraphNode::setParent(QtGraphNode* parentNode)
|
||||
{
|
||||
m_parentNode = parentNode;
|
||||
|
||||
std::shared_ptr<QtGraphNode> parent = parentNode.lock();
|
||||
if (parent != NULL)
|
||||
if (m_parentNode != nullptr)
|
||||
{
|
||||
QGraphicsRectItem::setParentItem(parent.get());
|
||||
QGraphicsRectItem::setParentItem(m_parentNode);
|
||||
}
|
||||
}
|
||||
|
||||
std::list<std::shared_ptr<QtGraphNode>> QtGraphNode::getSubNodes() const
|
||||
std::list<QtGraphNode*> QtGraphNode::getSubNodes() const
|
||||
{
|
||||
return m_subNodes;
|
||||
}
|
||||
@@ -147,12 +146,12 @@ Vec4i QtGraphNode::getParentBoundingRect() const
|
||||
return getLastParent()->getBoundingRect();
|
||||
}
|
||||
|
||||
void QtGraphNode::addOutEdge(const std::shared_ptr<QtGraphEdge>& edge)
|
||||
void QtGraphNode::addOutEdge(QtGraphEdge* edge)
|
||||
{
|
||||
m_outEdges.push_back(edge);
|
||||
}
|
||||
|
||||
void QtGraphNode::addInEdge(const std::weak_ptr<QtGraphEdge>& 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<QtGraphNode>& 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<void(QtGraphEdge*)> func)
|
||||
{
|
||||
for (const std::shared_ptr<QtGraphEdge>& edge : m_outEdges)
|
||||
for (QtGraphEdge* edge : m_outEdges)
|
||||
{
|
||||
func(edge.get());
|
||||
func(edge);
|
||||
}
|
||||
|
||||
for (const std::weak_ptr<QtGraphEdge>& e : m_inEdges)
|
||||
for (QtGraphEdge* edge : m_inEdges)
|
||||
{
|
||||
std::shared_ptr<QtGraphEdge> edge = e.lock();
|
||||
if (edge)
|
||||
{
|
||||
func(edge.get());
|
||||
}
|
||||
func(edge);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -439,7 +434,7 @@ void QtGraphNode::notifyEdgesAfterMove()
|
||||
}
|
||||
);
|
||||
|
||||
for (const std::shared_ptr<QtGraphNode>& node : m_subNodes)
|
||||
for (QtGraphNode* node : m_subNodes)
|
||||
{
|
||||
node->notifyEdgesAfterMove();
|
||||
}
|
||||
|
||||
@@ -38,9 +38,9 @@ public:
|
||||
|
||||
QtGraphNode* getParent() const;
|
||||
QtGraphNode* getLastParent() const;
|
||||
void setParent(std::weak_ptr<QtGraphNode> parentNode);
|
||||
void setParent(QtGraphNode* parentNode);
|
||||
|
||||
std::list<std::shared_ptr<QtGraphNode>> getSubNodes() const;
|
||||
std::list<QtGraphNode*> 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<QtGraphEdge>& edge);
|
||||
void addInEdge(const std::weak_ptr<QtGraphEdge>& 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<QtGraphNode>& 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<std::shared_ptr<QtGraphEdge>> m_outEdges;
|
||||
std::list<std::weak_ptr<QtGraphEdge>> m_inEdges;
|
||||
std::list<QtGraphEdge*> m_outEdges;
|
||||
std::list<QtGraphEdge*> m_inEdges;
|
||||
|
||||
std::weak_ptr<QtGraphNode> m_parentNode;
|
||||
std::list<std::shared_ptr<QtGraphNode>> m_subNodes;
|
||||
QtGraphNode* m_parentNode = nullptr;
|
||||
std::list<QtGraphNode*> m_subNodes;
|
||||
|
||||
QGraphicsSimpleTextItem* m_text = nullptr;
|
||||
QtRoundedRectItem* m_rect = nullptr;
|
||||
|
||||
@@ -70,7 +70,7 @@ bool QtGraphNodeAccess::isAccessNode() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void QtGraphNodeAccess::addSubNode(const std::shared_ptr<QtGraphNode>& node)
|
||||
void QtGraphNodeAccess::addSubNode(QtGraphNode* node)
|
||||
{
|
||||
QtGraphNode::addSubNode(node);
|
||||
m_text->show();
|
||||
|
||||
@@ -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<QtGraphNode>& 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<QtGraphNode*>* matchedNodes) {}
|
||||
virtual void matchName(const std::string& query, std::vector<QtGraphNode*>* matchedNodes) override {}
|
||||
|
||||
private:
|
||||
AccessKind m_accessKind;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include "QtGraphNodeComponent.h"
|
||||
|
||||
QtGraphNodeComponent::QtGraphNodeComponent(const std::weak_ptr<QtGraphNode>& graphNode)
|
||||
QtGraphNodeComponent::QtGraphNodeComponent(QtGraphNode* graphNode)
|
||||
: m_graphNode(graphNode)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ class QtGraphNode;
|
||||
class QtGraphNodeComponent
|
||||
{
|
||||
public:
|
||||
QtGraphNodeComponent(const std::weak_ptr<QtGraphNode>& 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<QtGraphNode> m_graphNode;
|
||||
QtGraphNode* m_graphNode;
|
||||
};
|
||||
|
||||
#endif // QT_GRAPH_NODE_COMPONENT_H
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#include "qt/view/graphElements/QtGraphNode.h"
|
||||
|
||||
QtGraphNodeComponentClickable::QtGraphNodeComponentClickable(const std::weak_ptr<QtGraphNode>& 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<QtGraphNode> node = m_graphNode.lock();
|
||||
if (node != NULL)
|
||||
{
|
||||
node->onClick();
|
||||
event->accept();
|
||||
}
|
||||
m_graphNode->onClick();
|
||||
event->accept();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ class QtGraphNodeComponentClickable
|
||||
: public QtGraphNodeComponent
|
||||
{
|
||||
public:
|
||||
QtGraphNodeComponentClickable(const std::weak_ptr<QtGraphNode>& graphNode);
|
||||
QtGraphNodeComponentClickable(QtGraphNode* graphNode);
|
||||
virtual ~QtGraphNodeComponentClickable();
|
||||
|
||||
virtual void nodeMousePressEvent(QGraphicsSceneMouseEvent* event);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#include "qt/view/graphElements/QtGraphNode.h"
|
||||
|
||||
QtGraphNodeComponentMoveable::QtGraphNodeComponentMoveable(const std::weak_ptr<QtGraphNode>& 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<QtGraphNode> 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<QtGraphNode> 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<QtGraphNode> node = m_graphNode.lock();
|
||||
if (node != NULL)
|
||||
{
|
||||
node->moved(m_oldPos);
|
||||
}
|
||||
m_graphNode->moved(m_oldPos);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ class QtGraphNodeComponentMoveable
|
||||
: public QtGraphNodeComponent
|
||||
{
|
||||
public:
|
||||
QtGraphNodeComponentMoveable(const std::weak_ptr<QtGraphNode>& graphNode);
|
||||
QtGraphNodeComponentMoveable(QtGraphNode* graphNode);
|
||||
virtual ~QtGraphNodeComponentMoveable();
|
||||
|
||||
virtual void nodeMousePressEvent(QGraphicsSceneMouseEvent* event);
|
||||
|
||||
Reference in New Issue
Block a user