diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 0ad77694..548bab85 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -185,7 +185,7 @@ void GraphController::handleMessage(MessageActivateTrail* message) MessageStatus(L"Layouting depth graph", false, true).dispatch(); - if (message->trailType == Edge::EDGE_INHERITANCE) + if (message->trailType & Edge::EDGE_INHERITANCE) { groupTrailNodes(NodeType::GROUP_INHERITANCE); } @@ -922,7 +922,7 @@ void GraphController::bundleNodes() return; } - if (e->isType(Edge::EDGE_INHERITANCE | Edge::EDGE_OVERRIDE)) + if (e->isType(Edge::LAYOUT_VERTICAL)) { bundleInfo->layoutVertical = true; bundleInfo->isReferenced = false; @@ -1067,6 +1067,16 @@ void GraphController::bundleNodes() L"Referenced Symbols" ); + bundleNodesAndEdgesMatching( + [](const DummyNode::BundleInfo& info, const Node* data) + { + return info.isReferencing && info.layoutVertical && data->findEdgeOfType(Edge::EDGE_TEMPLATE_SPECIALIZATION); + }, + 5, + false, + L"Specializing Symbols" + ); + bundleNodesAndEdgesMatching( [](const DummyNode::BundleInfo& info, const Node* data) { diff --git a/src/lib/component/controller/helper/TrailLayouter.cpp b/src/lib/component/controller/helper/TrailLayouter.cpp index 13feca05..bc46bc3d 100644 --- a/src/lib/component/controller/helper/TrailLayouter.cpp +++ b/src/lib/component/controller/helper/TrailLayouter.cpp @@ -683,7 +683,7 @@ void TrailLayouter::addEdge(const std::shared_ptr dummyEdge, const st Id originTopLevelId = topLevelAncestorIds.find(dummyEdge->ownerId)->second; Id targetTopLevelId = topLevelAncestorIds.find(dummyEdge->targetId)->second; - if (dummyEdge->data->isType(Edge::EDGE_OVERRIDE | Edge::EDGE_INHERITANCE) != invertedLayout()) + if (dummyEdge->data->isType(Edge::LAYOUT_VERTICAL) != invertedLayout()) { std::swap(originTopLevelId, targetTopLevelId); } diff --git a/src/lib/component/view/GraphViewStyle.cpp b/src/lib/component/view/GraphViewStyle.cpp index fc220dba..fbb82523 100644 --- a/src/lib/component/view/GraphViewStyle.cpp +++ b/src/lib/component/view/GraphViewStyle.cpp @@ -654,6 +654,15 @@ GraphViewStyle::EdgeStyle GraphViewStyle::getStyleForEdgeType( style.zValue = isActive ? 2 : -20; } break; + + case Edge::EDGE_TEMPLATE_SPECIALIZATION: + style.zValue = isActive ? 2 : -3; + case Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION: + style.arrowLength = 10; + style.arrowWidth = 13; + style.arrowClosed = true; + break; + case Edge::EDGE_INCLUDE: style.zValue = isActive ? 2 : -3; default: diff --git a/src/lib/data/graph/Edge.h b/src/lib/data/graph/Edge.h index 11716969..e9899b95 100644 --- a/src/lib/data/graph/Edge.h +++ b/src/lib/data/graph/Edge.h @@ -36,6 +36,9 @@ public: static int typeToInt(EdgeType type); static EdgeType intToType(int value); + static const TypeMask LAYOUT_VERTICAL = EDGE_INHERITANCE | EDGE_OVERRIDE | EDGE_TEMPLATE_SPECIALIZATION | + EDGE_TEMPLATE_MEMBER_SPECIALIZATION; + Edge(Id id, EdgeType type, Node* from, Node* to); Edge(const Edge& other, Node* from, Node* to); virtual ~Edge(); diff --git a/src/lib/data/storage/PersistentStorage.cpp b/src/lib/data/storage/PersistentStorage.cpp index 88843c37..7eb517dc 100644 --- a/src/lib/data/storage/PersistentStorage.cpp +++ b/src/lib/data/storage/PersistentStorage.cpp @@ -1080,7 +1080,7 @@ std::shared_ptr PersistentStorage::getGraphForTrail( m_sqliteIndexStorage.getEdgesBySourceIds(nodeIdsToProcess) : m_sqliteIndexStorage.getEdgesByTargetIds(nodeIdsToProcess); - if (trailType & (Edge::EDGE_OVERRIDE | Edge::EDGE_INHERITANCE)) + if (trailType & Edge::LAYOUT_VERTICAL) { utility::append(edges, forward ? @@ -1095,7 +1095,7 @@ std::shared_ptr PersistentStorage::getGraphForTrail( { if (Edge::intToType(edge.type) & trailType) { - bool isForward = forward == !(Edge::intToType(edge.type) & (Edge::EDGE_OVERRIDE | Edge::EDGE_INHERITANCE)); + bool isForward = forward == !(Edge::intToType(edge.type) & Edge::LAYOUT_VERTICAL); const Id nodeId = isForward ? edge.targetNodeId : edge.sourceNodeId; const Id otherNodeId = isForward ? edge.sourceNodeId : edge.targetNodeId; diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp index 8760c32b..def2027a 100644 --- a/src/lib_gui/qt/view/QtGraphView.cpp +++ b/src/lib_gui/qt/view/QtGraphView.cpp @@ -669,13 +669,12 @@ MessageActivateTrail QtGraphView::getMessageActivateTrail(bool forward) if (node->getData()->getType().isInheritable()) { - trailType = Edge::EDGE_INHERITANCE; + trailType = Edge::EDGE_INHERITANCE | Edge::EDGE_TEMPLATE_SPECIALIZATION; horizontalLayout = false; } else if (node->getData()->getType().isCallable()) { - trailType = Edge::EDGE_CALL | Edge::EDGE_OVERRIDE | - Edge::EDGE_TEMPLATE_SPECIALIZATION | Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION; + trailType = Edge::EDGE_CALL | Edge::EDGE_OVERRIDE; horizontalLayout = true; } else if (node->getData()->getType().isFile()) diff --git a/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp b/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp index 63c72df4..8985b501 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphEdge.cpp @@ -184,7 +184,8 @@ void QtGraphEdge::updateLine() } } - if (type == Edge::EDGE_INHERITANCE) + if (type == Edge::EDGE_INHERITANCE || (type == Edge::EDGE_TEMPLATE_SPECIALIZATION && + owner == owner->getLastParent() && target == target->getLastParent())) { child->setRoute(QtLineItemBase::ROUTE_VERTICAL);