diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index c900656394..2fbcda4ad5 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -39,6 +39,11 @@ It requires to add a `isHeaderProvider` to the _LabelDescription_ of Node. Replace only for the programmatic API the _LabelDescription_ type in _NodeDescription_ by _InsideLabelDescription_ and add the inside label location. Update the graphql API accordingly. - https://github.com/eclipse-sirius/sirius-web/issues/2444[#2444] [form] `ViewFormDescriptionConverterSwitch` now extends `FormSwitch>` +- https://github.com/eclipse-sirius/sirius-web/issues/2516[#2516] [diagram] Add to the diagram core API the possibility to display the header separator when the inside label is a header. +It requires to add a `displayHeaderSeparatorProvider` to the _InsideLabelDescription_. +For the compatibility layer, the separator will always be displayed if the label is inside a node displaying its children has a list. +In a near future it will be possible to customize that value using the View DSL, but for now, the `displayHeaderSeparatorProvider` has the same value as `isHeaderProvider`. +Add the attribute `displayHeaderSeparator` to the graphql API. === Dependency update diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/diagrams/EdgeMappingConverterTests.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/diagrams/EdgeMappingConverterTests.java index da81b3c2c1..d5daabf9ea 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/diagrams/EdgeMappingConverterTests.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/diagrams/EdgeMappingConverterTests.java @@ -106,6 +106,7 @@ private NodeDescription createNodeDescription(String id) { .textProvider(variableManager -> "") .styleDescriptionProvider(variableManager -> styleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/CreateViewOperationHandlerTests.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/CreateViewOperationHandlerTests.java index 0e9072b6e6..099d03baa0 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/CreateViewOperationHandlerTests.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/CreateViewOperationHandlerTests.java @@ -199,6 +199,7 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) { .textProvider(variableManager -> "Node") .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/DeleteViewOperationHandlerTests.java b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/DeleteViewOperationHandlerTests.java index 098c2e88a8..756478831b 100644 --- a/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/DeleteViewOperationHandlerTests.java +++ b/packages/compatibility/backend/sirius-components-compatibility-emf/src/test/java/org/eclipse/sirius/components/compatibility/emf/compatibility/operations/DeleteViewOperationHandlerTests.java @@ -107,6 +107,7 @@ public void initialize() { .alignment(Position.at(0, 0)) .style(LabelStyle.newLabelStyle().color("").fontSize(0).iconURL(List.of()).build()) .isHeader(false) + .displayHeaderSeparator(false) .build()) .style(ImageNodeStyle.newImageNodeStyle().imageURL("").scalingFactor(0).build()) .position(Position.at(0, 0)) @@ -176,6 +177,7 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) { .textProvider(variableManager -> "Node") .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/diagrams/AbstractNodeMappingConverter.java b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/diagrams/AbstractNodeMappingConverter.java index 184caa93b1..47368d9d20 100644 --- a/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/diagrams/AbstractNodeMappingConverter.java +++ b/packages/compatibility/backend/sirius-components-compatibility/src/main/java/org/eclipse/sirius/components/compatibility/diagrams/AbstractNodeMappingConverter.java @@ -90,6 +90,7 @@ public NodeDescription convert(AbstractNodeMapping abstractNodeMapping, AQLInter .textProvider(labelExpressionProvider) .styleDescriptionProvider(labelStyleDescriptionProvider) .isHeaderProvider(isHeaderProvider) + .displayHeaderSeparatorProvider(isHeaderProvider) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls index 9f948a7ce2..1b4a848b52 100644 --- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls +++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/schema/diagram.graphqls @@ -80,6 +80,7 @@ type InsideLabel { position: Position! size: Size! isHeader: Boolean! + displayHeaderSeparator: Boolean! } enum InsideLabelLocation { diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java index dbb453b4a1..abe88ac4e3 100644 --- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java +++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/GetConnectorToolsEventHandlerTests.java @@ -109,6 +109,7 @@ private Node getNode(String id, String targetObjectId) { .alignment(Position.UNDEFINED) .style(labelStyle) .isHeader(false) + .displayHeaderSeparator(false) .build(); return Node.newNode(id) diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/InvokeSingleClickOnDiagramElementToolEventHandlerTests.java b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/InvokeSingleClickOnDiagramElementToolEventHandlerTests.java index 0569136505..95e26cc1a1 100644 --- a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/InvokeSingleClickOnDiagramElementToolEventHandlerTests.java +++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/test/java/org/eclipse/sirius/components/collaborative/diagrams/handlers/InvokeSingleClickOnDiagramElementToolEventHandlerTests.java @@ -390,6 +390,7 @@ private Node createNode(String nodeId, String nodeDescriptionId, String targetOb .alignment(Position.UNDEFINED) .style(labelStyle) .isHeader(false) + .displayHeaderSeparator(false) .build(); return Node.newNode(nodeId) @@ -427,6 +428,7 @@ private NodeDescription createNodeDescription(String nodeDescriptionId) { .styleDescriptionProvider(vm -> styleDescription) .textProvider(vm -> "") .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/ELKLayoutedDiagramProvider.java b/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/ELKLayoutedDiagramProvider.java index 26bb9137e8..2f0ae26738 100644 --- a/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/ELKLayoutedDiagramProvider.java +++ b/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/ELKLayoutedDiagramProvider.java @@ -65,7 +65,6 @@ public Diagram getLayoutedDiagram(Diagram diagram, ElkNode elkDiagram, Map nodes = this.getLayoutedNodes(diagram.getNodes(), id2ElkGraphElements, layoutConfigurator); List edges = this.getLayoutedEdges(diagram.getEdges(), id2ElkGraphElements); @@ -75,11 +74,9 @@ public Diagram getLayoutedDiagram(Diagram diagram, ElkNode elkDiagram, Map getLayoutedNodes(List nodes, Map id2ElkGraphElements, ISiriusWebLayoutConfigurator layoutConfigurator) { - // @formatter:off return nodes.stream().flatMap(node -> { return Optional.ofNullable(id2ElkGraphElements.get(node.getId().toString())) .filter(ElkConnectableShape.class::isInstance) @@ -87,7 +84,6 @@ private List getLayoutedNodes(List nodes, Map this.getLayoutedNode(node, elkNode, id2ElkGraphElements, layoutConfigurator)) .stream(); }).collect(Collectors.toUnmodifiableList()); - // @formatter:on } private Node getLayoutedNode(Node node, ElkConnectableShape elkConnectableShape, Map id2ElkGraphElements, ISiriusWebLayoutConfigurator layoutConfigurator) { @@ -103,7 +99,6 @@ private Node getLayoutedNode(Node node, ElkConnectableShape elkConnectableShape, // Reset the "custom size" flag if the ELK layout decided on a different size. customizedProperties = customizedProperties.stream().filter(property -> !CustomizableProperties.Size.equals(property)).collect(Collectors.toSet()); } - // @formatter:off return Node.newNode(node) .insideLabel(label) .size(size) @@ -112,11 +107,9 @@ private Node getLayoutedNode(Node node, ElkConnectableShape elkConnectableShape, .borderNodes(borderNodes) .customizedProperties(customizedProperties) .build(); - // @formatter:on } private List getLayoutedEdges(List edges, Map id2ElkGraphElements) { - // @formatter:off return edges.stream().flatMap(edge -> { return Optional.ofNullable(id2ElkGraphElements.get(edge.getId().toString())) .filter(ElkEdge.class::isInstance) @@ -124,7 +117,6 @@ private List getLayoutedEdges(List edges, Map this.getLayoutedEdge(edge, elkEdge, id2ElkGraphElements)) .stream(); }).collect(Collectors.toUnmodifiableList()); - // @formatter:on } private Edge getLayoutedEdge(Edge edge, ElkEdge elkEdge, Map id2ElkGraphElements) { @@ -183,7 +175,6 @@ private Edge getLayoutedEdge(Edge edge, ElkEdge elkEdge, Map id2ElkG Position position = Position.at(xOffset + elkLabel.getX(), yOffset + elkLabel.getY()); - // @formatter:off Position alignment = elkLabel.eAdapters().stream() .findFirst() .filter(AlignmentHolder.class::isInstance) @@ -241,7 +230,6 @@ private Label getLayoutedLabel(Label label, Map id2ElkG .position(position) .alignment(alignment) .build(); - // @formatter:on } return layoutedLabel; } @@ -260,7 +248,6 @@ private InsideLabel getNodeLayoutedLabel(Node node, Map nodeLabelType = this.elkPropertiesService.getNodeLabelType(node, layoutConfigurator); } - // @formatter:off Position position = Optional.of(elkLabel.getParent()) .filter(ElkNode.class::isInstance) .map(ElkNode.class::cast) @@ -294,7 +281,6 @@ private InsideLabel getNodeLayoutedLabel(Node node, Map .position(position) .alignment(alignment) .build(); - // @formatter:on } return layoutedInsideLabel; } @@ -304,12 +290,10 @@ private Position getAbsolutePosition(ElkNode node) { Position absolutePosition = Position.at(node.getX(), node.getY()); while (currentNode.getParent() != null) { currentNode = currentNode.getParent(); - // @formatter:off absolutePosition = Position.newPosition() .x(absolutePosition.getX() + currentNode.getX()) .y(absolutePosition.getY() + currentNode.getY()) .build(); - // @formatter:on } return absolutePosition; } diff --git a/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/incremental/IncrementalLayoutedDiagramProvider.java b/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/incremental/IncrementalLayoutedDiagramProvider.java index ae379f4817..d024dd7383 100644 --- a/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/incremental/IncrementalLayoutedDiagramProvider.java +++ b/packages/diagrams/backend/sirius-components-diagrams-layout/src/main/java/org/eclipse/sirius/components/diagrams/layout/incremental/IncrementalLayoutedDiagramProvider.java @@ -45,18 +45,15 @@ public Diagram getLayoutedDiagram(Diagram diagram, DiagramLayoutData diagramLayo List nodes = this.getLayoutedNodes(diagram.getNodes(), id2LayoutData); List edges = this.getLayoutedEdges(diagram.getEdges(), id2LayoutData); - // @formatter:off return Diagram.newDiagram(diagram) .position(diagramLayoutData.getPosition()) .size(diagramLayoutData.getSize()) .nodes(nodes) .edges(edges) .build(); - // @formatter:on } private List getLayoutedNodes(List nodes, Map id2LayoutData) { - // @formatter:off return nodes.stream().flatMap(node -> { return Optional.ofNullable(id2LayoutData.get(node.getId())) .filter(NodeLayoutData.class::isInstance) @@ -64,7 +61,6 @@ private List getLayoutedNodes(List nodes, Map i .map(nodeLayoutData -> this.getLayoutedNode(node, nodeLayoutData, id2LayoutData)) .stream(); }).collect(Collectors.toUnmodifiableList()); - // @formatter:on } private Node getLayoutedNode(Node node, NodeLayoutData nodeLayoutData, Map id2LayoutData) { @@ -79,7 +75,6 @@ private Node getLayoutedNode(Node node, NodeLayoutData nodeLayoutData, Map getLayoutedEdges(List edges, Map id2LayoutData) { - // @formatter:off return edges.stream().flatMap(edge -> { return Optional.ofNullable(id2LayoutData.get(edge.getId())) .filter(EdgeLayoutData.class::isInstance) @@ -101,7 +94,6 @@ private List getLayoutedEdges(List edges, Map i .map(edgeLayoutData -> this.getLayoutedEdge(edge, edgeLayoutData, id2LayoutData)) .stream(); }).collect(Collectors.toUnmodifiableList()); - // @formatter:on } private Edge getLayoutedEdge(Edge edge, EdgeLayoutData edgeLayoutData, Map id2LayoutData) { @@ -118,7 +110,6 @@ private Edge getLayoutedEdge(Edge edge, EdgeLayoutData edgeLayoutData, Map id2LayoutData) { @@ -136,14 +126,12 @@ private Label getLayoutedLabel(Label label, Map id2LayoutDa if (optionalLabelLayoutData.isPresent()) { LabelLayoutData labelLayoutData = optionalLabelLayoutData.get(); - // @formatter:off layoutedLabel = Label.newLabel(label) .size(labelLayoutData.getTextBounds().getSize()) .position(labelLayoutData.getPosition()) .alignment(labelLayoutData.getTextBounds().getAlignment()) .type(labelLayoutData.getLabelType()) .build(); - // @formatter:on } return layoutedLabel; } diff --git a/packages/diagrams/backend/sirius-components-diagrams-layout/src/test/java/org/eclipse/sirius/components/diagrams/layout/services/DefaultTestDiagramDescriptionProvider.java b/packages/diagrams/backend/sirius-components-diagrams-layout/src/test/java/org/eclipse/sirius/components/diagrams/layout/services/DefaultTestDiagramDescriptionProvider.java index 42de70ab9d..fccf086523 100644 --- a/packages/diagrams/backend/sirius-components-diagrams-layout/src/test/java/org/eclipse/sirius/components/diagrams/layout/services/DefaultTestDiagramDescriptionProvider.java +++ b/packages/diagrams/backend/sirius-components-diagrams-layout/src/test/java/org/eclipse/sirius/components/diagrams/layout/services/DefaultTestDiagramDescriptionProvider.java @@ -421,6 +421,7 @@ private InsideLabelDescription getDefaultInsideLabelDescription() { .build(); }) .isHeaderProvider(this.isHeaderProvider) + .displayHeaderSeparatorProvider(this.isHeaderProvider) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); } diff --git a/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramBuilder.java b/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramBuilder.java index 4c7f0f35bd..9350eb4be2 100644 --- a/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramBuilder.java +++ b/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramBuilder.java @@ -110,6 +110,7 @@ public Node getNode(String id, boolean withLabel) { .alignment(Position.UNDEFINED) .style(labelStyle) .isHeader(false) + .displayHeaderSeparator(false) .build(); nodeBuilder.insideLabel(insideLabel); } diff --git a/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramDescriptionBuilder.java b/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramDescriptionBuilder.java index a3a435d13a..b0dff9c0c4 100644 --- a/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramDescriptionBuilder.java +++ b/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/TestDiagramDescriptionBuilder.java @@ -105,6 +105,7 @@ public NodeDescription getNodeDescription(String nodeDescriptionId, Function "Node") .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/builder/label/LabelBuilder.java b/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/builder/label/LabelBuilder.java index 3342296fb9..fbd17a81ff 100644 --- a/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/builder/label/LabelBuilder.java +++ b/packages/diagrams/backend/sirius-components-diagrams-tests/src/main/java/org/eclipse/sirius/components/diagrams/tests/builder/label/LabelBuilder.java @@ -72,6 +72,7 @@ public InsideLabel basicInsideLabel(String text, LabelType labelType, boolean is .size(Size.UNDEFINED) .style(labelStyle) .isHeader(isHeader) + .displayHeaderSeparator(isHeader) .build(); } diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/InsideLabel.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/InsideLabel.java index 927428cce5..7439061c38 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/InsideLabel.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/InsideLabel.java @@ -42,6 +42,8 @@ public final class InsideLabel { private boolean isHeader; + private boolean displayHeaderSeparator; + private InsideLabel() { // Prevent instantiation } @@ -82,6 +84,10 @@ public boolean isIsHeader() { return this.isHeader; } + public boolean isDisplayHeaderSeparator() { + return this.displayHeaderSeparator; + } + public static Builder newLabel(String id) { return new Builder(id); } @@ -121,6 +127,8 @@ public static final class Builder { private boolean isHeader; + private boolean displayHeaderSeparator; + private Builder(String id) { this.id = Objects.requireNonNull(id); } @@ -135,6 +143,8 @@ public Builder(InsideLabel insideLabel) { this.alignment = insideLabel.getAlignment(); this.style = insideLabel.getStyle(); this.isHeader = insideLabel.isIsHeader(); + this.displayHeaderSeparator = insideLabel.isDisplayHeaderSeparator(); + } public Builder type(String type) { @@ -177,6 +187,11 @@ public Builder isHeader(boolean isHeader) { return this; } + public Builder displayHeaderSeparator(boolean displayHeaderSeparator) { + this.displayHeaderSeparator = displayHeaderSeparator; + return this; + } + public InsideLabel build() { InsideLabel label = new InsideLabel(); label.id = Objects.requireNonNull(this.id); @@ -188,6 +203,7 @@ public InsideLabel build() { label.alignment = Objects.requireNonNull(this.alignment); label.style = Objects.requireNonNull(this.style); label.isHeader = this.isHeader; + label.displayHeaderSeparator = this.displayHeaderSeparator; return label; } } diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/components/InsideLabelComponent.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/components/InsideLabelComponent.java index ed3836b929..0291d9778d 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/components/InsideLabelComponent.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/components/InsideLabelComponent.java @@ -53,8 +53,10 @@ public Element render() { String text = insideLabelDescription.getTextProvider().apply(variableManager); boolean isHeader = insideLabelDescription.getIsHeaderProvider().apply(variableManager); + boolean displayHeaderSeparator = false; if (isHeader) { type = LabelType.INSIDE_CENTER.getValue(); + displayHeaderSeparator = insideLabelDescription.getDisplayHeaderSeparatorProvider().apply(variableManager); } LabelStyleDescription labelStyleDescription = insideLabelDescription.getStyleDescriptionProvider().apply(variableManager); @@ -91,6 +93,7 @@ public Element render() { .alignment(aligment) .style(labelStyle) .isHeader(isHeader) + .displayHeaderSeparator(displayHeaderSeparator) .build(); return new Element(InsideLabelElementProps.TYPE, insideLabelElementProps); } diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/InsideLabelDescription.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/InsideLabelDescription.java index 6701731e40..52df39d32b 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/InsideLabelDescription.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/description/InsideLabelDescription.java @@ -48,6 +48,8 @@ public final class InsideLabelDescription { private Function isHeaderProvider; + private Function displayHeaderSeparatorProvider; + private InsideLabelLocation insideLabelLocation; private InsideLabelDescription() { @@ -74,6 +76,10 @@ public Function getIsHeaderProvider() { return this.isHeaderProvider; } + public Function getDisplayHeaderSeparatorProvider() { + return this.displayHeaderSeparatorProvider; + } + public InsideLabelLocation getInsideLabelLocation() { return this.insideLabelLocation; } @@ -105,6 +111,8 @@ public static final class Builder { private Function isHeaderProvider; + private Function displayHeaderSeparatorProvider; + private InsideLabelLocation insideLabelLocation; private Builder(String id) { @@ -131,6 +139,11 @@ public Builder isHeaderProvider(Function isHeaderProvi return this; } + public Builder displayHeaderSeparatorProvider(Function displayHeaderSeparatorProvider) { + this.displayHeaderSeparatorProvider = Objects.requireNonNull(displayHeaderSeparatorProvider); + return this; + } + public Builder insideLabelLocation(InsideLabelLocation insideLabelLocation) { this.insideLabelLocation = Objects.requireNonNull(insideLabelLocation); return this; @@ -144,6 +157,7 @@ public InsideLabelDescription build() { labelDescription.styleDescriptionProvider = Objects.requireNonNull(this.styleDescriptionProvider); labelDescription.isHeaderProvider = Objects.requireNonNull(this.isHeaderProvider); labelDescription.insideLabelLocation = Objects.requireNonNull(this.insideLabelLocation); + labelDescription.displayHeaderSeparatorProvider = Objects.requireNonNull(this.displayHeaderSeparatorProvider); return labelDescription; } } diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/elements/InsideLabelElementProps.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/elements/InsideLabelElementProps.java index 8d17603eaa..914d470f01 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/elements/InsideLabelElementProps.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/elements/InsideLabelElementProps.java @@ -50,6 +50,8 @@ public final class InsideLabelElementProps implements IProps { private boolean isHeader; + private boolean displayHeaderSeparator; + private InsideLabelElementProps() { // Prevent instantiation } @@ -90,6 +92,10 @@ public boolean isIsHeader() { return this.isHeader; } + public boolean isDisplayHeaderSeparator() { + return this.displayHeaderSeparator; + } + public static Builder newInsideLabelElementProps(String id) { return new Builder(id); } @@ -125,6 +131,8 @@ public static final class Builder { private boolean isHeader; + private boolean displayHeaderSeparator; + private Builder(String id) { this.id = Objects.requireNonNull(id); } @@ -169,6 +177,11 @@ public Builder isHeader(boolean isHeader) { return this; } + public Builder displayHeaderSeparator(boolean displayHeaderSeparator) { + this.displayHeaderSeparator = displayHeaderSeparator; + return this; + } + public InsideLabelElementProps build() { InsideLabelElementProps insideLabelElementProps = new InsideLabelElementProps(); insideLabelElementProps.id = Objects.requireNonNull(this.id); @@ -180,6 +193,7 @@ public InsideLabelElementProps build() { insideLabelElementProps.alignment = Objects.requireNonNull(this.alignment); insideLabelElementProps.style = Objects.requireNonNull(this.style); insideLabelElementProps.isHeader = this.isHeader; + insideLabelElementProps.displayHeaderSeparator = this.displayHeaderSeparator; return insideLabelElementProps; } } diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementFactory.java b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementFactory.java index 08ed0b73d1..ecd95a8b79 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementFactory.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/main/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementFactory.java @@ -186,6 +186,7 @@ private InsideLabel instantiateInsideLabel(InsideLabelElementProps props) { .alignment(props.getAlignment()) .style(props.getStyle()) .isHeader(props.isIsHeader()) + .displayHeaderSeparator(props.isDisplayHeaderSeparator()) .build(); } diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java index 39de4786e9..ad927a47cd 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramElementChangeVisibilityTests.java @@ -122,6 +122,7 @@ private NodeDescription createNodeDescription(String elementId, List LABEL_TEXT) .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java index cd27f9c958..0031dc328d 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererEdgeTests.java @@ -180,6 +180,7 @@ private NodeDescription getNodeDescription(String nodeDescriptionId) { .textProvider(variableManager -> "Node") .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java index 9f4aac9ea2..98305d882e 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/DiagramRendererNodeTests.java @@ -241,6 +241,7 @@ private Diagram createDiagram(Function styleProvide .textProvider(variableManager -> LABEL_TEXT) .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java index 2fcb63ecbc..2227be6ec1 100644 --- a/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java +++ b/packages/diagrams/backend/sirius-components-diagrams/src/test/java/org/eclipse/sirius/components/diagrams/renderer/UnsynchronizedDiagramTests.java @@ -283,6 +283,7 @@ private DiagramDescription getDiagramDescription(Function "label") .styleDescriptionProvider(variableManager -> labelStyleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertDiagram.ts b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertDiagram.ts index 7a4868a133..6d46f84850 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertDiagram.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/converter/convertDiagram.ts @@ -91,7 +91,7 @@ const toRectangularNode = ( const alignement = AlignmentMap[insideLabel.insideLabelLocation]; if (alignement.isPrimaryVerticalAlignment) { if (alignement.primaryAlignment === 'TOP') { - if (data.label.isHeader) { + if (insideLabel.displayHeaderSeparator) { data.label.style.borderBottom = `${style.borderSize}px ${style.borderStyle} ${style.borderColor}`; } data.style = { ...data.style, display: 'flex', flexDirection: 'column', justifyContent: 'flex-start' }; @@ -236,7 +236,7 @@ const toListNode = ( const alignement = AlignmentMap[insideLabel.insideLabelLocation]; if (alignement.isPrimaryVerticalAlignment) { if (alignement.primaryAlignment === 'TOP') { - if (data.label.isHeader) { + if (insideLabel.displayHeaderSeparator) { data.label.style.borderBottom = `${style.borderSize}px ${style.borderStyle} ${style.borderColor}`; } data.style = { ...data.style, display: 'flex', flexDirection: 'column', justifyContent: 'flex-start' }; diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.ts b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.ts index fab9aecbb8..e8f0782008 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.ts @@ -35,6 +35,7 @@ fragment insideLabelFragment on InsideLabel { text insideLabelLocation isHeader + displayHeaderSeparator style { color fontSize diff --git a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.types.ts b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.types.ts index c3a0ed904b..87a7e93b51 100644 --- a/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.types.ts +++ b/packages/diagrams/frontend/sirius-components-diagrams-reactflow/src/graphql/subscription/labelFragment.types.ts @@ -25,6 +25,7 @@ export interface GQLInsideLabel { insideLabelLocation: InsideLabelLocation; style: GQLLabelStyle; isHeader: boolean; + displayHeaderSeparator: boolean; } export interface GQLLabelStyle { diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DiagramOperationInterpreterViewSwitch.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DiagramOperationInterpreterViewSwitch.java index 177ac6f184..00ded1fdcb 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DiagramOperationInterpreterViewSwitch.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/DiagramOperationInterpreterViewSwitch.java @@ -178,6 +178,7 @@ private Node createView(Optional optionalParentNode, NodeDescription nodeD .alignment(Position.UNDEFINED) .style(labelStyle) .isHeader(false) + .displayHeaderSeparator(false) .build(); var nodeStyle = RectangularNodeStyle.newRectangularNodeStyle() diff --git a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java index 82b80be059..86d675dfc6 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java +++ b/packages/view/backend/sirius-components-view-emf/src/main/java/org/eclipse/sirius/components/view/emf/diagram/ViewDiagramDescriptionConverter.java @@ -333,6 +333,7 @@ private InsideLabelDescription getInsideLabelDescription(org.eclipse.sirius.comp .textProvider(variableManager -> this.evaluateString(interpreter, variableManager, viewNodeDescription.getLabelExpression())) .styleDescriptionProvider(styleDescriptionProvider) .isHeaderProvider(isHeaderProvider) + .displayHeaderSeparatorProvider(isHeaderProvider) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build(); } diff --git a/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java b/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java index 1afc05a65c..5bc317fef8 100644 --- a/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java +++ b/packages/view/backend/sirius-components-view-emf/src/test/java/org/eclipse/sirius/components/view/emf/diagram/ViewPaletteProviderTests.java @@ -231,6 +231,7 @@ private NodeDescription createNodeDescription() { .textProvider(variableManager -> "") .styleDescriptionProvider(variableManager -> styleDescription) .isHeaderProvider(vm -> false) + .displayHeaderSeparatorProvider(vm -> false) .insideLabelLocation(InsideLabelLocation.TOP_CENTER) .build();