use of org.eclipse.elk.core.math.Spacing in project lingua-franca by lf-lang.
the class InterfaceDependenciesVisualization method addInterfaceDependencies.
/**
* Adds interface dependencies to the node if this option is active.
* Visibility will be adjusted based on expansion state.
*/
public Spacing addInterfaceDependencies(KNode node, boolean expanded) {
Spacing marginInit = null;
if (getBooleanValue(SHOW_INTERFACE_DEPENDENCIES)) {
List<Pair<KPort, KPort>> deps = getPortDependencies(node);
if (!deps.isEmpty()) {
for (Pair<KPort, KPort> pair : deps) {
createDependencyEdge(pair, expanded);
}
// Fix content (label) of collapsed rendering
KContainerRendering contentContainer = IterableExtensions.findFirst(Iterables.filter(node.getData(), KContainerRendering.class), it -> {
return it.getProperty(KlighdProperties.COLLAPSED_RENDERING);
});
if (contentContainer != null) {
if (!contentContainer.getProperty(LinguaFrancaShapeExtensions.REACTOR_CONTENT_CONTAINER)) {
contentContainer = IteratorExtensions.findFirst(Iterators.filter(contentContainer.eAllContents(), KContainerRendering.class), it -> {
return it.getProperty(LinguaFrancaShapeExtensions.REACTOR_CONTENT_CONTAINER);
});
}
if (contentContainer != null) {
List<KRendering> content = ImmutableList.copyOf(contentContainer.getChildren());
// Put into two new containers such that they are not centered/maximized
KRectangle firstContainer = _kContainerRenderingExtensions.addRectangle(contentContainer);
_kRenderingExtensions.setInvisible(firstContainer, true);
KRectangle secondContainer = _kContainerRenderingExtensions.addRectangle(firstContainer);
_kRenderingExtensions.setInvisible(secondContainer, true);
_kContainerRenderingExtensions.setGridPlacement(secondContainer, 1);
Iterables.addAll(secondContainer.getChildren(), content);
_kRenderingExtensions.setPointPlacementData(secondContainer, _kRenderingExtensions.LEFT, 0, 0.5f, _kRenderingExtensions.TOP, 0, 0, _kRenderingExtensions.H_CENTRAL, _kRenderingExtensions.V_TOP, 0, 0, 0, 0);
// Adjust ports separate dependency edges from label/content
if (content.size() > 0) {
marginInit = _utilityExtensions.getPortMarginsInitIfAbsent(node).add(new ElkMargin((content.size() * 20) - 8, 0, 0, 0));
}
}
}
}
}
return marginInit;
}
Aggregations