From aba95d04757fdbc656710301c878180fbba52065 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Sat, 14 Jun 2025 14:58:21 +0200 Subject: [PATCH] [Draw2D] Harmonize tool-tip handling of WindowBuilder figures By wrapping the tool-tip string in a Label, it is possible to use the setToolTip() method specified by the IFigure interface, thus avoiding an additional setToolTipText() method. This Label then needs to be unwrapped in our EventManager, as figures are not yet supported here, until the manager has been harmonized with the SWTEventDispatcher. The tool-tip handling has also been improved so that it is only shown for non-empty strings. --- .../org/eclipse/wb/draw2d/Figure.java | 16 ---------------- .../wb/internal/draw2d/EventManager.java | 8 ++++---- org.eclipse.wb.rcp/META-INF/MANIFEST.MF | 4 ++-- .../header/edit/DimensionHeaderEditPart.java | 8 ++++++-- .../META-INF/MANIFEST.MF | 4 ++-- .../header/edit/DimensionHeaderEditPart.java | 8 ++++++-- .../META-INF/MANIFEST.MF | 4 ++-- .../gef/header/edit/ColumnHeaderEditPart.java | 8 ++++++-- .../gef/header/edit/RowHeaderEditPart.java | 8 ++++++-- org.eclipse.wb.swt/META-INF/MANIFEST.MF | 4 ++-- .../layout/form/FormHeaderEditPart.java | 5 +++-- .../header/edit/DimensionHeaderEditPart.java | 8 ++++++-- .../eclipse/wb/tests/draw2d/FigureTest.java | 19 ++++++++++--------- 13 files changed, 55 insertions(+), 49 deletions(-) diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java index fbd24548f..7bf5cbf5f 100644 --- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java +++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/draw2d/Figure.java @@ -31,7 +31,6 @@ * @coverage gef.draw2d */ public class Figure extends org.eclipse.draw2d.Figure { - private String m_toolTipText; //////////////////////////////////////////////////////////////////////////// // @@ -178,21 +177,6 @@ protected void paintClientArea(Graphics graphics) { // //////////////////////////////////////////////////////////////////////////// - /** - * Returns the receiver's tool tip text, or null if it has not been set. - */ - public String getToolTipText() { - return m_toolTipText; - } - - /** - * Sets the receiver's tool tip text to the argument, which may be null indicating - * that no tool tip text should be shown. - */ - public void setToolTipText(String toolTipText) { - m_toolTipText = toolTipText; - } - @Override protected boolean useLocalCoordinates() { return true; diff --git a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java index 2a7e3f543..41b11cc4c 100644 --- a/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.java +++ b/org.eclipse.wb.core/src-draw2d/org/eclipse/wb/internal/draw2d/EventManager.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 @@ -107,10 +107,10 @@ public void setCursor(Cursor cursor) { } protected void updateFigureToolTipText() { - if (m_cursorFigure == null) { - m_canvas.setToolTipText(null); + if (m_cursorFigure != null && m_cursorFigure.getToolTip() instanceof Label label) { + m_canvas.setToolTipText(label.getText()); } else { - m_canvas.setToolTipText(m_cursorFigure.getToolTipText()); + m_canvas.setToolTipText(null); } } diff --git a/org.eclipse.wb.rcp/META-INF/MANIFEST.MF b/org.eclipse.wb.rcp/META-INF/MANIFEST.MF index 52b5cba60..971f22bdf 100644 --- a/org.eclipse.wb.rcp/META-INF/MANIFEST.MF +++ b/org.eclipse.wb.rcp/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wb.rcp;singleton:=true -Bundle-Version: 1.9.1100.qualifier +Bundle-Version: 1.9.1200.qualifier Bundle-ClassPath: . Bundle-Activator: org.eclipse.wb.internal.rcp.Activator Bundle-Vendor: %providerName @@ -93,7 +93,7 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.31.100,4.0.0)", org.eclipse.ui;bundle-version="[3.206.0,4.0.0)", org.eclipse.ui.forms;bundle-version="[3.13.300,4.0.0)", org.eclipse.search;bundle-version="[3.16.200,4.0.0)", - org.eclipse.wb.core;bundle-version="[1.20.0,2.0.0)", + org.eclipse.wb.core;bundle-version="[1.21.0,2.0.0)", org.eclipse.wb.core.ui;bundle-version="[1.10.800,2.0.0)", org.eclipse.wb.core.java;bundle-version="[1.13.100,2.0.0)", org.eclipse.wb.swt;bundle-version="[1.10.100,2.0.0)", diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java index 93e1f9073..b0f439228 100644 --- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.java +++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/gef/policy/forms/layout/grid/header/edit/DimensionHeaderEditPart.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 @@ -22,6 +22,7 @@ import org.eclipse.wb.gef.graphical.GraphicalEditPart; import org.eclipse.wb.internal.core.utils.execution.ExecutionUtils; import org.eclipse.wb.internal.core.utils.execution.RunnableEx; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.internal.rcp.model.forms.layout.table.ITableWrapLayoutInfo; import org.eclipse.wb.internal.rcp.model.forms.layout.table.TableWrapDimensionInfo; import org.eclipse.wb.internal.swt.model.widgets.IControlInfo; @@ -116,7 +117,10 @@ protected void refreshVisuals() { ExecutionUtils.runLog(new RunnableEx() { @Override public void run() throws Exception { - getFigure().setToolTipText(m_dimension.getTitle()); + String tooltip = m_dimension.getTitle(); + if (tooltip != null && !tooltip.isEmpty()) { + getFigure().setToolTip(new Label(tooltip)); + } getFigure().setBackgroundColor(COLOR_NORMAL); } }); diff --git a/org.eclipse.wb.swing.FormLayout/META-INF/MANIFEST.MF b/org.eclipse.wb.swing.FormLayout/META-INF/MANIFEST.MF index 8ca7900ef..2b7cc14b9 100644 --- a/org.eclipse.wb.swing.FormLayout/META-INF/MANIFEST.MF +++ b/org.eclipse.wb.swing.FormLayout/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wb.swing.FormLayout;singleton:=true -Bundle-Version: 1.12.100.qualifier +Bundle-Version: 1.12.200.qualifier Bundle-ClassPath: . Bundle-Activator: org.eclipse.wb.internal.swing.FormLayout.Activator Bundle-Vendor: %providerName @@ -21,7 +21,7 @@ Export-Package: org.eclipse.wb.internal.swing.FormLayout, Require-Bundle: org.eclipse.ui;bundle-version="[3.206.0,4.0.0)", org.eclipse.core.runtime;bundle-version="[3.31.100,4.0.0)", org.eclipse.core.resources;bundle-version="[3.20.200,4.0.0)", - org.eclipse.wb.core;bundle-version="[1.20.0,2.0.0)", + org.eclipse.wb.core;bundle-version="[1.21.0,2.0.0)", org.eclipse.wb.swing;bundle-version="[1.10.200,2.0.0)", org.eclipse.draw2d;bundle-version="[3.20.0,4.0.0)", org.eclipse.gef;bundle-version="[3.21.100,4.0.0)" diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java index ccc98d445..7c5fc325e 100644 --- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.java +++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/gef/header/edit/DimensionHeaderEditPart.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 @@ -21,6 +21,7 @@ import org.eclipse.wb.gef.core.tools.Tool; import org.eclipse.wb.gef.graphical.GraphicalEditPart; import org.eclipse.wb.internal.core.utils.ui.DrawUtils; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.internal.swing.FormLayout.gef.header.actions.SetTemplateAction; import org.eclipse.wb.internal.swing.FormLayout.model.FormDimensionInfo; import org.eclipse.wb.internal.swing.FormLayout.model.FormDimensionTemplate; @@ -124,7 +125,10 @@ public final Tool getDragTracker(Request request) { @Override protected void refreshVisuals() { // update tooltip - getFigure().setToolTipText(m_dimension.getToolTip()); + String tooltip = m_dimension.getToolTip(); + if (tooltip != null && !tooltip.isEmpty()) { + getFigure().setToolTip(new Label(tooltip)); + } // update background { if (m_dimension.isGap()) { diff --git a/org.eclipse.wb.swing.MigLayout/META-INF/MANIFEST.MF b/org.eclipse.wb.swing.MigLayout/META-INF/MANIFEST.MF index f7805c0c9..4cb8d3dfc 100644 --- a/org.eclipse.wb.swing.MigLayout/META-INF/MANIFEST.MF +++ b/org.eclipse.wb.swing.MigLayout/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wb.swing.MigLayout;singleton:=true -Bundle-Version: 1.11.100.qualifier +Bundle-Version: 1.11.200.qualifier Bundle-Activator: org.eclipse.wb.internal.swing.MigLayout.Activator Bundle-Vendor: %providerName Bundle-RequiredExecutionEnvironment: JavaSE-21 @@ -10,7 +10,7 @@ Bundle-ActivationPolicy: lazy Require-Bundle: org.eclipse.ui;bundle-version="[3.206.0,4.0.0)", org.eclipse.core.runtime;bundle-version="[3.31.100,4.0.0)", org.eclipse.core.resources;bundle-version="[3.20.200,4.0.0)", - org.eclipse.wb.core;bundle-version="[1.20.0,2.0.0)", + org.eclipse.wb.core;bundle-version="[1.21.0,2.0.0)", org.eclipse.wb.swing;bundle-version="[1.10.200,2.0.0)", org.eclipse.draw2d;bundle-version="[3.20.0,4.0.0)", org.eclipse.gef;bundle-version="[3.21.100,4.0.0)" diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java index 7dc944e0d..52e3ec503 100644 --- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.java +++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/ColumnHeaderEditPart.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 @@ -17,6 +17,7 @@ import org.eclipse.wb.gef.core.EditPart; import org.eclipse.wb.gef.graphical.GraphicalEditPart; import org.eclipse.wb.internal.core.DesignerPlugin; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.internal.swing.MigLayout.gef.GefMessages; import org.eclipse.wb.internal.swing.MigLayout.gef.header.actions.DimensionHeaderAction; import org.eclipse.wb.internal.swing.MigLayout.gef.header.actions.SetAlignmentColumnAction; @@ -141,7 +142,10 @@ protected void refreshVisuals() { figure.setBounds(bounds); } // tooltip - figure.setToolTipText(m_column.getTooltip()); + String tooltip = m_column.getTooltip(); + if (tooltip != null && !tooltip.isEmpty()) { + figure.setToolTip(new Label(tooltip)); + } } @Override diff --git a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java index d73f316b9..1562041d2 100644 --- a/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.java +++ b/org.eclipse.wb.swing.MigLayout/src/org/eclipse/wb/internal/swing/MigLayout/gef/header/edit/RowHeaderEditPart.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 @@ -17,6 +17,7 @@ import org.eclipse.wb.gef.core.EditPart; import org.eclipse.wb.gef.graphical.GraphicalEditPart; import org.eclipse.wb.internal.core.DesignerPlugin; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.internal.swing.MigLayout.gef.GefMessages; import org.eclipse.wb.internal.swing.MigLayout.gef.header.actions.DimensionHeaderAction; import org.eclipse.wb.internal.swing.MigLayout.gef.header.actions.SetAlignmentRowAction; @@ -141,7 +142,10 @@ protected void refreshVisuals() { figure.setBounds(bounds); } // tooltip - figure.setToolTipText(m_row.getTooltip()); + String tooltip = m_row.getTooltip(); + if (tooltip != null && !tooltip.isEmpty()) { + figure.setToolTip(new Label(tooltip)); + } } @Override diff --git a/org.eclipse.wb.swt/META-INF/MANIFEST.MF b/org.eclipse.wb.swt/META-INF/MANIFEST.MF index a5802de25..2bf73fb01 100644 --- a/org.eclipse.wb.swt/META-INF/MANIFEST.MF +++ b/org.eclipse.wb.swt/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.wb.swt;singleton:=true -Bundle-Version: 1.10.100.qualifier +Bundle-Version: 1.10.200.qualifier Bundle-ClassPath: . Bundle-Activator: org.eclipse.wb.internal.swt.Activator Bundle-Vendor: %providerName @@ -55,7 +55,7 @@ Export-Package: org.eclipse.wb.internal.swt, org.eclipse.wb.internal.swt.utils Require-Bundle: org.eclipse.ui;bundle-version="[3.206.0,4.0.0)", org.eclipse.core.runtime;bundle-version="[3.31.100,4.0.0)", - org.eclipse.wb.core;bundle-version="[1.20.0,2.0.0)", + org.eclipse.wb.core;bundle-version="[1.21.0,2.0.0)", org.eclipse.wb.core.java;bundle-version="[1.13.100,2.0.0)", org.eclipse.pde.core;bundle-version="[3.18.100,4.0.0)", org.eclipse.draw2d;bundle-version="[3.20.0,4.0.0)", diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java index 8da40081f..d90bbbff3 100644 --- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.java +++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/form/FormHeaderEditPart.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 @@ -17,6 +17,7 @@ import org.eclipse.wb.gef.core.tools.ParentTargetDragEditPartTracker; import org.eclipse.wb.gef.core.tools.Tool; import org.eclipse.wb.gef.graphical.GraphicalEditPart; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.internal.swt.model.layout.form.FormLayoutPreferences; import org.eclipse.wb.internal.swt.model.layout.form.IFormLayoutInfo; import org.eclipse.wb.internal.swt.model.widgets.IControlInfo; @@ -76,7 +77,7 @@ protected void refreshVisuals() { isHorizontal ? FormUtils.getLayoutMarginLeft(layout) : FormUtils.getLayoutMarginTop(layout); int position = size * percent / 100 + marginOffset; Figure figure = getFigure(); - figure.setToolTipText(String.valueOf(percent) + "%"); + figure.setToolTip(new Label(percent + "%")); int figureSize = t.t(figure.getParent().getSize()).height; Rectangle bounds = t.t(new Rectangle(position - figureSize / 2, 0, figureSize, figureSize)); figure.setBounds(translateModelToFeedback(bounds)); diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java index f31228076..25fe2422c 100644 --- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.java +++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/policy/layout/grid/header/edit/DimensionHeaderEditPart.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 @@ -22,6 +22,7 @@ import org.eclipse.wb.gef.graphical.GraphicalEditPart; import org.eclipse.wb.internal.core.utils.execution.ExecutionUtils; import org.eclipse.wb.internal.core.utils.execution.RunnableEx; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.internal.swt.model.layout.grid.GridDimensionInfo; import org.eclipse.wb.internal.swt.model.layout.grid.IGridLayoutInfo; import org.eclipse.wb.internal.swt.model.widgets.IControlInfo; @@ -116,7 +117,10 @@ protected void refreshVisuals() { ExecutionUtils.runLog(new RunnableEx() { @Override public void run() throws Exception { - getFigure().setToolTipText(m_dimension.getTitle()); + String tooltip = m_dimension.getTitle(); + if (tooltip != null && !tooltip.isEmpty()) { + getFigure().setToolTip(new Label(tooltip)); + } getFigure().setBackgroundColor(COLOR_NORMAL); } }); diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/draw2d/FigureTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/draw2d/FigureTest.java index d261c589f..461d42c09 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/draw2d/FigureTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/draw2d/FigureTest.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 @@ -17,6 +17,7 @@ import org.eclipse.wb.draw2d.border.LineBorder; import org.eclipse.wb.draw2d.border.MarginBorder; import org.eclipse.wb.internal.draw2d.FigureVisitor; +import org.eclipse.wb.internal.draw2d.Label; import org.eclipse.wb.tests.gef.TestLogger; import org.eclipse.draw2d.AncestorListener; @@ -538,7 +539,7 @@ public void test_init_properties() throws Exception { assertNull(testFigure.getCursor()); assertFalse(testFigure.isOpaque()); assertTrue(testFigure.isVisible()); - assertNull(testFigure.getToolTipText()); + assertNull(testFigure.getToolTip()); } @Test @@ -676,19 +677,19 @@ public void test_tooltip() throws Exception { Figure testFigure = new Figure(); // // check tooltip for new Figure - assertNull(testFigure.getToolTipText()); + assertNull(testFigure.getToolTip()); // // check set tooltip - testFigure.setToolTipText("JLabel(\"123\")"); - assertEquals("JLabel(\"123\")", testFigure.getToolTipText()); + testFigure.setToolTip(new Label("JLabel(\"123\")")); + assertEquals("JLabel(\"123\")", ((Label) testFigure.getToolTip()).getText()); // // check set other tooltip - testFigure.setToolTipText("new Button()"); - assertEquals("new Button()", testFigure.getToolTipText()); + testFigure.setToolTip(new Label("new Button()")); + assertEquals("new Button()", ((Label) testFigure.getToolTip()).getText()); // // check set 'null' tooltip - testFigure.setToolTipText(null); - assertNull(testFigure.getToolTipText()); + testFigure.setToolTip(null); + assertNull(testFigure.getToolTip()); } ////////////////////////////////////////////////////////////////////////////