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

Auto layouter: Use model element handler to determine root objects

* No longer use erroneous heuristics that depends on the assumption that
  for some model viewst there is a hidden root element (e.g., CA)
* Instead, use the model element handler service to determine object
  to be edited (same as object to be layouted).

Issue-Ref: 3433
Issue-Url: https://af3-developer.fortiss.org/issues/3433


Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parent d54c0fad
No related branches found
No related tags found
1 merge request!63433 auto layouter label size
AutoLayoutMenu.java ef3b897cc2fd99cf9ce201f03cffea036555e3ac GREEN AutoLayoutMenu.java bca7986c209678ed937548a37db494430877d80e YELLOW
DiagramTapeMeasure.java 72454e6fe5225dab11d3d691baad93aab7a171c0 YELLOW DiagramTapeMeasure.java 72454e6fe5225dab11d3d691baad93aab7a171c0 YELLOW
IAutoLayouter.java de1b11d9e202c7e23352ad85684dbf8a3fd17c7d GREEN IAutoLayouter.java de1b11d9e202c7e23352ad85684dbf8a3fd17c7d GREEN
IAutoLayouterTapeMeasure.java df186e0ba505e0ecda211b1df76cf12f3245b47e YELLOW IAutoLayouterTapeMeasure.java df186e0ba505e0ecda211b1df76cf12f3245b47e YELLOW
......
...@@ -21,7 +21,6 @@ import static org.fortiss.tooling.base.utils.AngleUtils.getAngle; ...@@ -21,7 +21,6 @@ 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.EcoreUtils.pickInstanceOf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
...@@ -34,9 +33,10 @@ import org.fortiss.tooling.base.model.element.IConnector; ...@@ -34,9 +33,10 @@ import org.fortiss.tooling.base.model.element.IConnector;
import org.fortiss.tooling.base.model.element.IHierarchicElement; import org.fortiss.tooling.base.model.element.IHierarchicElement;
import org.fortiss.tooling.base.model.layout.ILayoutedModelElement; import org.fortiss.tooling.base.model.layout.ILayoutedModelElement;
import org.fortiss.tooling.base.ui.ToolingBaseUIActivator; import org.fortiss.tooling.base.ui.ToolingBaseUIActivator;
import org.fortiss.tooling.kernel.model.IProjectRootElement;
import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor; import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor;
import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider; import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
/** /**
* Context menu entry to automatic layout {@link IHierarchicElement}-based models. * Context menu entry to automatic layout {@link IHierarchicElement}-based models.
...@@ -96,16 +96,16 @@ public class AutoLayoutMenu implements IContextMenuContributor { ...@@ -96,16 +96,16 @@ public class AutoLayoutMenu implements IContextMenuContributor {
public List<IContributionItem> getContributedItems(EObject selection, public List<IContributionItem> getContributedItems(EObject selection,
ContextMenuContextProvider contextProvider) { ContextMenuContextProvider contextProvider) {
if(!(selection instanceof IHierarchicElement)) { IModelElementHandler<EObject> handler =
return Collections.emptyList(); IModelElementHandlerService.getInstance().getModelElementHandler(selection);
if(handler == null) {
return emptyList();
} }
EObject editedObject = handler.handleOpenModelElementRequest(selection);
IHierarchicElement element = (IHierarchicElement)selection; if(!(editedObject instanceof IHierarchicElement)) {
// Skip single top-level model element (e.g., AF3 component architecture) return emptyList();
if(element instanceof IProjectRootElement && element.getContainedElements().size() == 1) {
// There is exactly one child element
element = element.getContainedElements().get(0);
} }
IHierarchicElement element = (IHierarchicElement)editedObject;
// Check if model is empty // Check if model is empty
if(pickInstanceOf(ILayoutedModelElement.class, element.getContainedElements()).isEmpty()) { if(pickInstanceOf(ILayoutedModelElement.class, element.getContainedElements()).isEmpty()) {
......
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