Skip to content
Snippets Groups Projects
Commit 54332e6b authored by Simon Barner's avatar Simon Barner
Browse files

Do not create command in KielerAutolayouter::applyLayout()

* Most callers (e.g., menus) already created a command
* Enables use of this method for elements that are not contained
  in a model context (yet)

Issue-Ref: 4232
Issue-Url: af3#4232



Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parent 9778cd15
No related branches found
No related tags found
1 merge request!1774232: Apply autolayouter to architectures synthesized by DSE
AutoLayoutMenu.java ceb980b6b54404728b5df2e60f491be01d22a562 YELLOW
AutoLayoutMenu.java a38bfe1b59d7bf456b775bd29414f2177c85e75e YELLOW
......@@ -19,6 +19,7 @@ import static java.util.Collections.emptyList;
import static org.fortiss.tooling.base.layout.LayoutKeyConstants.CONNECTOR_ANGLE;
import static org.fortiss.tooling.base.utils.AngleUtils.getAngle;
import static org.fortiss.tooling.kernel.utils.EcoreUtils.pickInstanceOf;
import static org.fortiss.tooling.kernel.utils.KernelModelElementUtils.runAsCommand;
import java.util.ArrayList;
import java.util.List;
......@@ -73,8 +74,10 @@ public class AutoLayoutMenu implements IContextMenuContributor {
/** {@inheritDoc} */
@Override
public void run() {
IAutoLayouter layouter = new KielerAutoLayouter();
layouter.performAutoLayout(element);
runAsCommand(element, () -> {
IAutoLayouter layouter = new KielerAutoLayouter();
layouter.performAutoLayout(element);
});
}
}
......
DefaultLayoutConstants.java 10ba39d25701f7aff7ef545ec69e42a6117ae7b1 GREEN
DiagramTapeMeasure.java 2aaf2d0765d0ba5292ec2468d0d04d52f36370a6 YELLOW
IAutoLayouter.java 6b63ffc32a6aeb39318439dc579f0193476823ae GREEN
IAutoLayouter.java 8f22d3813491159151a8753dd683a5043554fb67 YELLOW
IAutoLayouterTapeMeasure.java 5ef5c7d0a124714d582de283d3915d8b4bf7fda8 GREEN
KielerAutoLayouter.java a2776ba54f25931f7b9ef55e5ad6ebc59922ff56 GREEN
KielerAutoLayouter.java 94de655f6abf6d7d6d747f96de07e0be50588abd YELLOW
LayoutKeyConstants.java 1e35b73f26f2691ef80fa885e4c5fc6c6a60bd05 GREEN
......@@ -28,7 +28,8 @@ import org.fortiss.tooling.base.model.layout.ILayoutedModelElement;
public interface IAutoLayouter {
/**
* Layouts the child elements of the given {@link IHierarchicElement}.
* Layouts the child elements of the given {@link IHierarchicElement}. This method must be
* executed from a context that enables to modify the model.
*
* @param hierarchicElement
* The {@link IHierarchicElement} whose contained elements will be layouted.
......
......@@ -59,9 +59,7 @@ import org.fortiss.tooling.base.model.layout.ILayoutData;
import org.fortiss.tooling.base.model.layout.ILayoutedModelElement;
import org.fortiss.tooling.base.model.layout.Points;
import org.fortiss.tooling.base.model.layout.impl.PointsImpl;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
import org.fortiss.tooling.kernel.model.INamedElement;
import org.fortiss.tooling.kernel.service.IPersistencyService;
/**
* <p>
......@@ -175,36 +173,31 @@ public class KielerAutoLayouter implements IAutoLayouter {
* The {@link IHierarchicElement} to which the layout should be applied.
*/
private void applyLayout(ElkNode template, IHierarchicElement element) {
ITopLevelElement topLevelElement =
IPersistencyService.getInstance().getTopLevelElementFor(element);
topLevelElement.runAsCommand(() -> {
filterBendPoints(element);
for(IHierarchicElement child : element.getContainedElements()) {
ElkNode elkNode = modelElementsToElkNodes.get(child);
setNodeLayoutData((ILayoutedModelElement)child, truncateSnap2Grid(elkNode.getX()),
truncateSnap2Grid(elkNode.getY()),
truncateSnap2Grid(elkNode.getWidth(), true),
truncateSnap2Grid(elkNode.getHeight(), true));
}
filterBendPoints(element);
for(Entry<IConnection, ElkEdge> entry : connectionsToElkEdges) {
ElkEdge elkEdge = entry.getValue();
IConnection connection = entry.getKey();
for(ElkEdgeSection section : elkEdge.getSections()) {
for(var bendPoint : section.getBendPoints()) {
addBendPointToConnection((ILayoutedModelElement)connection,
truncateSnap2Grid(bendPoint.getX()),
truncateSnap2Grid(bendPoint.getY()));
}
for(IHierarchicElement child : element.getContainedElements()) {
ElkNode elkNode = modelElementsToElkNodes.get(child);
setNodeLayoutData((ILayoutedModelElement)child, truncateSnap2Grid(elkNode.getX()),
truncateSnap2Grid(elkNode.getY()), truncateSnap2Grid(elkNode.getWidth(), true),
truncateSnap2Grid(elkNode.getHeight(), true));
}
for(Entry<IConnection, ElkEdge> entry : connectionsToElkEdges) {
ElkEdge elkEdge = entry.getValue();
IConnection connection = entry.getKey();
for(ElkEdgeSection section : elkEdge.getSections()) {
for(var bendPoint : section.getBendPoints()) {
addBendPointToConnection((ILayoutedModelElement)connection,
truncateSnap2Grid(bendPoint.getX()),
truncateSnap2Grid(bendPoint.getY()));
}
}
}
setPositionsForConnectors(outboundConnectorsToElkPorts);
setPositionsForConnectors(inboundConnectorsToElkPorts);
setPositionsForGlobalConnectors(globalInboundConnectorsToElkPorts);
setPositionsForGlobalConnectors(globalOutboundConnectorsToElkPorts);
});
setPositionsForConnectors(outboundConnectorsToElkPorts);
setPositionsForConnectors(inboundConnectorsToElkPorts);
setPositionsForGlobalConnectors(globalInboundConnectorsToElkPorts);
setPositionsForGlobalConnectors(globalOutboundConnectorsToElkPorts);
}
/**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment