From 7196bc74b214a469b001663da2426ef7c8a3d7b7 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Mon, 16 Jun 2025 21:02:42 +0200 Subject: [PATCH] [GEF] RootEditPart should implement the LayerManager interface The layer should be accessed from the RootEditPart, not the EditPartViewer. This requires the root edit part to implement the LayerManager interface and to use the LayerManager.ID as model, to become visible to the LayerManager.Helper class. --- .../gef/graphical/GraphicalViewer.java | 3 +- .../internal/gef/graphical/RootEditPart.java | 31 ++++++++++++++++--- .../wb/internal/gef/tree/RootEditPart.java | 11 +------ .../wb/internal/gef/tree/TreeViewer.java | 5 +-- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java index 13a5a412f..0ca7908ad 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/GraphicalViewer.java @@ -65,7 +65,8 @@ protected void setDefaultEventManager() { protected GraphicalViewer(FigureCanvas canvas) { m_canvas = canvas; - m_rootEditPart = new RootEditPart(this, getRootFigure()); + m_rootEditPart = new RootEditPart(getRootFigure()); + m_rootEditPart.setViewer(this); m_rootEditPart.activate(); setRootEditPart(m_rootEditPart); } diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java index 6b3f16b62..1556bbf88 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/graphical/RootEditPart.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2023 Google, Inc. + * Copyright (c) 2011, 2025 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -21,8 +21,10 @@ import org.eclipse.wb.gef.graphical.tools.MarqueeSelectionTool; import org.eclipse.wb.internal.draw2d.IRootFigure; +import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.Request; +import org.eclipse.gef.editparts.LayerManager; /** * A {@link RootEditPart} is the root of an {@link IEditPartViewer}. It bridges the gap @@ -33,7 +35,7 @@ * @author lobas_av * @coverage gef.graphical */ -public class RootEditPart extends GraphicalEditPart implements org.eclipse.gef.RootEditPart { +public class RootEditPart extends GraphicalEditPart implements org.eclipse.gef.RootEditPart, LayerManager { private IEditPartViewer m_viewer; private final IRootFigure m_rootFigure; private EditPart m_contentEditPart; @@ -43,8 +45,7 @@ public class RootEditPart extends GraphicalEditPart implements org.eclipse.gef.R // Constructor // //////////////////////////////////////////////////////////////////////////// - public RootEditPart(IEditPartViewer viewer, IRootFigure rootFigure) { - m_viewer = viewer; + public RootEditPart(IRootFigure rootFigure) { m_rootFigure = rootFigure; createLayers(); } @@ -88,7 +89,16 @@ public IEditPartViewer getViewer() { @Override public void setViewer(EditPartViewer viewer) { + if (m_viewer == viewer) { + return; + } + if (m_viewer != null) { + unregister(); + } m_viewer = (IEditPartViewer) viewer; + if (m_viewer != null) { + register(); + } } /** @@ -107,6 +117,11 @@ protected Figure createFigure() { return null; } + @Override + public Object getModel() { + return LayerManager.ID; + } + //////////////////////////////////////////////////////////////////////////// // // IRootEditPart @@ -152,4 +167,12 @@ public void setContents(org.eclipse.gef.EditPart contentEditPart) { public Tool getDragTracker(Request request) { return new MarqueeSelectionTool(); } + + @Override + public IFigure getLayer(Object key) { + if (key instanceof String name) { + return m_rootFigure.getLayer(name); + } + return null; + } } \ No newline at end of file diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java index f83e0126f..aee2c6739 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/RootEditPart.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2023 Google, Inc. + * Copyright (c) 2011, 2025 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -30,15 +30,6 @@ public class RootEditPart extends TreeEditPart implements org.eclipse.gef.RootEd private IEditPartViewer m_viewer; private TreeEditPart m_contentEditPart; - //////////////////////////////////////////////////////////////////////////// - // - // Constructor - // - //////////////////////////////////////////////////////////////////////////// - public RootEditPart(IEditPartViewer viewer) { - m_viewer = viewer; - } - //////////////////////////////////////////////////////////////////////////// // // EditPart diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java index 0a9add8a3..109691708 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2024 Google, Inc. and others. + * Copyright (c) 2011, 2025 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -61,7 +61,8 @@ public TreeViewer(Tree tree) { // handle SWT events m_eventManager = new TreeEventManager(m_tree, this); // create root EditPart - m_rootEditPart = new RootEditPart(this); + m_rootEditPart = new RootEditPart(); + m_rootEditPart.setViewer(this); m_rootEditPart.activate(); setRootEditPart(m_rootEditPart); // handle selection events