Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEsteban Dugueperoux2015-02-17 08:27:37 +0000
committerEsteban Dugueperoux2015-09-08 13:01:52 +0000
commitbbce07fde3952d2189c088df686e3a4871b1d115 (patch)
treebf20f513fccbaae658cbe58bf1f4a7453a75120b
parent4f84a702df00f4648398c309a6d4783a65aaa53c (diff)
downloadorg.eclipse.sirius-bbce07fde3952d2189c088df686e3a4871b1d115.tar.gz
org.eclipse.sirius-bbce07fde3952d2189c088df686e3a4871b1d115.tar.xz
org.eclipse.sirius-bbce07fde3952d2189c088df686e3a4871b1d115.zip
[460075] Have decoration tooltip possible on EObject in all dialects
- Use the adapter Eclipse pattern to delegate tooltip providing for tree, table and diagram dialect and for Model Explorer view. For diagram dialect the use of GMF decorator extension point make it already possible. - Add ToolTipProviderTests. Bug: 460075 Change-Id: Ibf1512f44be67f93b5f7a2df639c366a8e35593e Signed-off-by: Esteban Dugueperoux <esteban.dugueperoux@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/decorators/AbstractSiriusDecorator.java55
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/providers/decorators/DescribedDecorator.java112
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/Release_Notes.html8
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile4
-rw-r--r--plugins/org.eclipse.sirius.ext.jface/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.sirius.ext.jface/src/org/eclipse/sirius/ext/jface/viewers/IToolTipProvider.java32
-rw-r--r--plugins/org.eclipse.sirius.table.ui/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java18
-rw-r--r--plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableColumnHeaderLabelProvider.java29
-rw-r--r--plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableDecoratingLabelProvider.java19
-rw-r--r--plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableLineLabelProvider.java30
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF4
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.aird206
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.ecore14
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.odesign51
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/decorator_lock.pngbin0 -> 271 bytes
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java10
-rw-r--r--plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/TooltipProviderTests.java229
-rw-r--r--plugins/org.eclipse.sirius.tree.ui/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java16
-rw-r--r--plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/DTreeItemLabelProvider.java12
-rw-r--r--plugins/org.eclipse.sirius.ui/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/navigator/filter/FilteredCommonTree.java54
-rw-r--r--plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/TooltipAwareNavigatorDecoratingLabelProvider.java46
25 files changed, 787 insertions, 169 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF
index fc7e69cb6e..891319f678 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.diagram.ui/META-INF/MANIFEST.MF
@@ -196,4 +196,5 @@ Import-Package: org.eclipse.sirius.ext.base;version="2.0.0",
org.eclipse.sirius.ext.gef.editpolicies;version="2.0.0",
org.eclipse.sirius.ext.gef.query;version="3.1.0",
org.eclipse.sirius.ext.gmf.runtime.editparts;version="2.0.0",
+ org.eclipse.sirius.ext.jface.viewers;version="3.1.0",
org.eclipse.sirius.ext.swt;version="2.0.0"
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/decorators/AbstractSiriusDecorator.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/decorators/AbstractSiriusDecorator.java
index 602e54a052..21e6bc9a67 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/decorators/AbstractSiriusDecorator.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/decorators/AbstractSiriusDecorator.java
@@ -14,7 +14,10 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart;
@@ -26,6 +29,7 @@ import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget.Direction;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramListEditPart;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramNameEditPart;
import org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart;
@@ -33,6 +37,7 @@ import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeListEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeListElementEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeListNameEditPart;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DNodeNameEditPart;
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
import org.eclipse.swt.graphics.Image;
/**
@@ -69,27 +74,48 @@ public abstract class AbstractSiriusDecorator extends AbstractDecorator {
final View view = (View) getDecoratorTarget().getAdapter(View.class);
if (view != null && (shouldConsiderDetachedViews() || view.eResource() != null)) {
final EditPart editPart = (EditPart) getDecoratorTarget().getAdapter(EditPart.class);
- if (!shouldBeDecorated(editPart)) {
- return;
- }
- // Get margin
- int margin = MARGIN;
- if (editPart instanceof org.eclipse.gef.GraphicalEditPart) {
- margin = MapModeUtil.getMapMode(((org.eclipse.gef.GraphicalEditPart) editPart).getFigure()).DPtoLP(margin);
+ if (shouldBeDecorated(editPart)) {
+ // Get margin
+ int margin = MARGIN;
+ if (editPart instanceof org.eclipse.gef.GraphicalEditPart) {
+ margin = MapModeUtil.getMapMode(((org.eclipse.gef.GraphicalEditPart) editPart).getFigure()).DPtoLP(margin);
+ }
+
+ Image decorationImage = getDecorationImage(editPart);
+ if (null != decorationImage) {
+ boolean isVolatile = !shouldBeVisibleAtPrint();
+ if (editPart instanceof AbstractConnectionEditPart) {
+ addDecoration(getDecoratorTarget().addConnectionDecoration(decorationImage, 50, isVolatile));
+ } else {
+ addDecoration(getDecoratorTarget().addShapeDecoration(decorationImage, getDirection(editPart), margin, isVolatile));
+ }
+ }
}
+ }
+ }
- Image decorationImage = getDecorationImage(editPart);
- if (null != decorationImage) {
- boolean isVolatile = !shouldBeVisibleAtPrint();
- if (editPart instanceof AbstractConnectionEditPart) {
- addDecoration(getDecoratorTarget().addConnectionDecoration(decorationImage, 50, isVolatile));
- } else {
- addDecoration(getDecoratorTarget().addShapeDecoration(decorationImage, getDirection(editPart), margin, isVolatile));
+ private void refreshTooltip(IDecoration decoration) {
+ EditPart editPart = (EditPart) getDecoratorTarget().getAdapter(EditPart.class);
+ if (editPart instanceof IDiagramElementEditPart) {
+ DDiagramElement dDiagramElement = ((IDiagramElementEditPart) editPart).resolveDiagramElement();
+ String tooltip = getToolTipText(dDiagramElement);
+ if (tooltip != null) {
+ if (decoration instanceof Figure) {
+ ((Figure) decoration).setToolTip(new Label(tooltip));
}
}
}
}
+ private String getToolTipText(Object element) {
+ String tooltip = null;
+ IToolTipProvider tooltipProvider = (IToolTipProvider) Platform.getAdapterManager().getAdapter(element, IToolTipProvider.class);
+ if (tooltipProvider != null) {
+ tooltip = tooltipProvider.getToolTipText(element);
+ }
+ return tooltip;
+ }
+
/**
* Tells if the decoration added by this decorator should be visible at
* image export or print. By default true is returned to have decoration
@@ -210,6 +236,7 @@ public abstract class AbstractSiriusDecorator extends AbstractDecorator {
*/
public void addDecoration(final IDecoration decoration) {
decorations.add(decoration);
+ refreshTooltip(decoration);
}
/**
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/providers/decorators/DescribedDecorator.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/providers/decorators/DescribedDecorator.java
index 30095fe7a6..1916faada7 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/providers/decorators/DescribedDecorator.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/providers/decorators/DescribedDecorator.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008, 2008 THALES GLOBAL SERVICES.
+ * Copyright (c) 2008, 2015 THALES GLOBAL SERVICES.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -10,22 +10,13 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.tools.internal.providers.decorators;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.gef.EditPart;
-import org.eclipse.gef.GraphicalEditPart;
-import org.eclipse.gmf.runtime.diagram.ui.services.decorator.AbstractDecorator;
-import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoration;
import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget;
import org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecoratorTarget.Direction;
import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
-import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart;
+import org.eclipse.sirius.diagram.ui.tools.api.decorators.AbstractSiriusDecorator;
import org.eclipse.sirius.diagram.ui.tools.api.figure.WorkspaceImageFigure;
import org.eclipse.sirius.viewpoint.Decoration;
import org.eclipse.sirius.viewpoint.description.DecorationDescription;
@@ -37,12 +28,8 @@ import org.eclipse.swt.graphics.Image;
* Decorator from a {@link Decoration}.
*
* @author mPorhel
- *
*/
-public class DescribedDecorator extends AbstractDecorator {
-
- /** the decorations being displayed */
- private List<IDecoration> decorations = Collections.<IDecoration> emptyList();
+public class DescribedDecorator extends AbstractSiriusDecorator {
/**
* Create a decorator.
@@ -54,53 +41,24 @@ public class DescribedDecorator extends AbstractDecorator {
super(decoratorTarget);
}
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecorator#activate()
- */
- public void activate() {
- }
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.gmf.runtime.diagram.ui.services.decorator.IDecorator#refresh()
- */
+ @Override
public void refresh() {
- removeDecorations();
- final View view = (View) getDecoratorTarget().getAdapter(View.class);
- if (view != null && view.eResource() != null) {
- final EditPart editPart = (EditPart) getDecoratorTarget().getAdapter(EditPart.class);
- if (editPart == null || editPart.getParent() == null || editPart.getViewer() == null) {
- return;
- }
- if (editPart instanceof org.eclipse.gef.GraphicalEditPart) {
- final IFigure figure = ((org.eclipse.gef.GraphicalEditPart) editPart).getFigure();
-
- final Dimension size = figure.getSize();
-
- if (size.width < 10 && size.width > 0 && size.height < 10 && size.height > 0) {
- return;
- }
- }
- int margin = -1;
- if (editPart instanceof org.eclipse.gef.GraphicalEditPart) {
- margin = MapModeUtil.getMapMode(((org.eclipse.gef.GraphicalEditPart) editPart).getFigure()).DPtoLP(margin);
- }
-
- final DDiagramElement element = ((IDiagramElementEditPart) editPart).resolveDiagramElement();
+ super.refresh();
+ EditPart editPart = (EditPart) getDecoratorTarget().getAdapter(EditPart.class);
+ int margin = -1;
+ if (editPart instanceof org.eclipse.gef.GraphicalEditPart) {
+ margin = MapModeUtil.getMapMode(((org.eclipse.gef.GraphicalEditPart) editPart).getFigure()).DPtoLP(margin);
+ }
+ if (editPart instanceof IDiagramElementEditPart) {
+ DDiagramElement element = ((IDiagramElementEditPart) editPart).resolveDiagramElement();
if (element != null) {
- for (final Decoration decoration : element.getDecorations()) {
+ for (Decoration decoration : element.getDecorations()) {
Image image = getImage(decoration);
if (image != null) {
addDecoration(getDecoratorTarget().addShapeDecoration(image, getPosition(decoration), margin, false));
}
}
}
-
}
}
@@ -157,48 +115,14 @@ public class DescribedDecorator extends AbstractDecorator {
}
}
- private void removeDecorations() {
- for (final IDecoration decoration : decorations) {
- // getDecoratorTarget().removeDecoration(decoration);
- if (decoration instanceof IFigure && ((IFigure) decoration).getParent() != null) {
- ((IFigure) decoration).getParent().remove((IFigure) decoration);
- }
-
- final GraphicalEditPart ownerEditPart = (GraphicalEditPart) getDecoratorTarget().getAdapter(GraphicalEditPart.class);
- ownerEditPart.getViewer().getVisualPartMap().remove(decoration);
- }
- decorations = new ArrayList<IDecoration>();
- }
-
- /**
- *
- * {@inheritDoc}
- *
- * @see org.eclipse.gmf.runtime.diagram.ui.services.decorator.AbstractDecorator#deactivate()
- */
@Override
- public void deactivate() {
- removeDecorations();
+ protected Direction getDirection(EditPart editPart) {
+ return null;
}
- /**
- * Get the IDecorations of this DescribedDecorator.
- *
- * @return Returns the decorations.
- */
- public List<IDecoration> getDecorations() {
- return decorations;
- }
-
- /**
- *
- * Add an IDecoration to this DescribedDecorator.
- *
- * @param decoration
- * IDecoration to add.
- */
- public void addDecoration(final IDecoration decoration) {
- decorations.add(decoration);
+ @Override
+ protected Image getDecorationImage(EditPart editPart) {
+ return null;
}
}
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
index cfc8053509..3acfa5e176 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
@@ -344,6 +344,14 @@
<code>org.eclipse.sirius.ext.gef.query.EditPartQuery</code> has been added. It allows to retrieve all children of the current part.
</li>
</ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.jface">Changes in
+ <code>org.eclipse.sirius.ext.jface</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.
+ </li>
+ </ul>
<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in
<code>org.eclipse.sirius.ext.gmf.runtime</code>
</h4>
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
index 7d2663a062..eb38f3dfb3 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
@@ -89,6 +89,10 @@ h4. Changes in @org.eclipse.sirius.ext.gef@
* <span class="label label-success">Added</span> The new class @org.eclipse.sirius.ext.gef.query.EditPartQuery@ has been added. It allows to retrieve all children of the current part.
+h4. Changes in @org.eclipse.sirius.ext.jface@
+
+* <span class="label label-success">Added</span> The new class @org.eclipse.sirius.ext.jface.viewers.IToolTipProvider@ has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.
+
h4. Changes in @org.eclipse.sirius.ext.gmf.runtime@
* <span class="label label-success">Added</span> 2 new @getIntersection@ methods have been added in org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper. They are similar to the existing @getIntersection@ methods, but they consider the nearest point on the figure if there is no intersection.
diff --git a/plugins/org.eclipse.sirius.ext.jface/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.ext.jface/META-INF/MANIFEST.MF
index 239825797f..5328e92b37 100644
--- a/plugins/org.eclipse.sirius.ext.jface/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.ext.jface/META-INF/MANIFEST.MF
@@ -6,3 +6,4 @@ Bundle-Version: 3.1.0.qualifier
Bundle-Vendor: %providerName
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Localization: plugin
+Export-Package: org.eclipse.sirius.ext.jface.viewers;version="3.1.0"
diff --git a/plugins/org.eclipse.sirius.ext.jface/src/org/eclipse/sirius/ext/jface/viewers/IToolTipProvider.java b/plugins/org.eclipse.sirius.ext.jface/src/org/eclipse/sirius/ext/jface/viewers/IToolTipProvider.java
new file mode 100644
index 0000000000..bb8a461c7e
--- /dev/null
+++ b/plugins/org.eclipse.sirius.ext.jface/src/org/eclipse/sirius/ext/jface/viewers/IToolTipProvider.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Robin Stocker and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Robin Stocker - extracted API out of CellLabelProvider
+ *******************************************************************************/
+package org.eclipse.sirius.ext.jface.viewers;
+
+/**
+ * Interface to provide tool tip information for a given element.
+ *
+ * @see org.eclipse.jface.viewers.CellLabelProvider
+ *
+ * @since 3.10
+ */
+public interface IToolTipProvider {
+
+ /**
+ * Get the text displayed in the tool tip for object.
+ *
+ * @param element
+ * the element for which the tool tip is shown
+ * @return the {@link String} or <code>null</code> if there is not text to
+ * display
+ */
+ String getToolTipText(Object element);
+
+}
diff --git a/plugins/org.eclipse.sirius.table.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.table.ui/META-INF/MANIFEST.MF
index ecdf965d02..363ab17556 100644
--- a/plugins/org.eclipse.sirius.table.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.table.ui/META-INF/MANIFEST.MF
@@ -47,4 +47,5 @@ Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.sirius.ext.base;version="2.1.0",
org.eclipse.sirius.ext.emf.ui.properties;version="3.0.0",
+ org.eclipse.sirius.ext.jface.viewers;version="3.1.0",
org.eclipse.sirius.ext.swt;version="2.0.0"
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java
index 1bda6a4a4f..935b0236f6 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/DTableViewerManager.java
@@ -25,6 +25,7 @@ import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnPixelData;
import org.eclipse.jface.viewers.ColumnViewerEditor;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
@@ -247,7 +248,7 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
treeViewer.setContentProvider(dTableContentProvider);
// The input for the table viewer is the instance of DTable
treeViewer.setInput(dRepresentation);
-
+ ColumnViewerToolTipSupport.enableFor(treeViewer);
treeViewer.getTree().setLinesVisible(true);
treeViewer.getTree().setHeaderVisible(true);
fillMenu();
@@ -271,8 +272,8 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
// Create a new CellFocusManager
final TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(treeViewer, new FocusCellOwnerDrawHighlighter(treeViewer));
// Create a TreeViewerEditor with focusable cell
- TreeViewerEditor.create(treeViewer, focusCellManager, new DTableColumnViewerEditorActivationStrategy(treeViewer), ColumnViewerEditor.TABBING_HORIZONTAL
- | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
+ TreeViewerEditor.create(treeViewer, focusCellManager, new DTableColumnViewerEditorActivationStrategy(treeViewer),
+ ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
// Set after the setInput to avoid layout call it several time for
// nothing at opening
headerTreeColumn.getColumn().addControlListener(tableViewerListener);
@@ -355,7 +356,8 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
}
/**
- * Initialize a cache and add, if needed, the contextual menu for the table. <BR>
+ * Initialize a cache and add, if needed, the contextual menu for the table.
+ * <BR>
* Cached the actions of creation and deletion in order to increase
* performance and not calculate it on each contextual menu.<BR>
* Problem for action on column header :
@@ -667,11 +669,11 @@ public class DTableViewerManager extends AbstractDTableViewerManager {
treeViewerColumn.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider));
if (newColumn instanceof DFeatureColumn) {
- treeViewerColumn.setEditingSupport(new DFeatureColumnEditingSupport(treeViewer, (DFeatureColumn) newColumn, getEditingDomain(), getAccessor(), getTableCommandFactory(),
- (AbstractDTableEditor) treeEditor));
+ treeViewerColumn.setEditingSupport(
+ new DFeatureColumnEditingSupport(treeViewer, (DFeatureColumn) newColumn, getEditingDomain(), getAccessor(), getTableCommandFactory(), (AbstractDTableEditor) treeEditor));
} else if (newColumn instanceof DTargetColumn) {
- treeViewerColumn.setEditingSupport(new DTargetColumnEditingSupport(treeViewer, (DTargetColumn) newColumn, getEditingDomain(), getAccessor(), tableCommandFactory,
- (AbstractDTableEditor) treeEditor));
+ treeViewerColumn.setEditingSupport(
+ new DTargetColumnEditingSupport(treeViewer, (DTargetColumn) newColumn, getEditingDomain(), getAccessor(), tableCommandFactory, (AbstractDTableEditor) treeEditor));
}
treeViewerColumn.getColumn().setData(TABLE_COLUMN_DATA, newColumn);
treeViewerColumn.getColumn().addControlListener(tableViewerListener);
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableColumnHeaderLabelProvider.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableColumnHeaderLabelProvider.java
index 63948c2bcb..1e262703f2 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableColumnHeaderLabelProvider.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableColumnHeaderLabelProvider.java
@@ -10,14 +10,15 @@
*******************************************************************************/
package org.eclipse.sirius.table.ui.tools.internal.editor.provider;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.ui.PlatformUI;
-
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
import org.eclipse.sirius.table.metamodel.table.DColumn;
import org.eclipse.sirius.ui.tools.api.provider.DSemanticTargetBasedLabelProvider;
import org.eclipse.sirius.ui.tools.api.views.ViewHelper;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.PlatformUI;
/**
* {@link ILabelProvider} for the top level line representing column header.
@@ -30,19 +31,12 @@ public class DTableColumnHeaderLabelProvider extends DSemanticTargetBasedLabelPr
/**
* Constructor.
- *
- * @param decorator
*/
public DTableColumnHeaderLabelProvider() {
super(ViewHelper.INSTANCE.createAdapterFactory());
this.decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.sirius.ui.tools.api.provider.DSemanticTargetBasedLabelProvider#getText(java.lang.Object)
- */
@Override
public String getText(final Object element) {
String text = ""; //$NON-NLS-1$
@@ -53,11 +47,7 @@ public class DTableColumnHeaderLabelProvider extends DSemanticTargetBasedLabelPr
return text;
}
- /**
- * Overridden to decorate the returned Image.
- *
- * {@inheritDoc}
- */
+ @Override
public Image getImage(Object element) {
Image image = super.getImage(element);
if (decorator != null) {
@@ -69,4 +59,13 @@ public class DTableColumnHeaderLabelProvider extends DSemanticTargetBasedLabelPr
return image;
}
+ @Override
+ public String getToolTipText(Object element) {
+ String tooltip = null;
+ IToolTipProvider tooltipProvider = (IToolTipProvider) Platform.getAdapterManager().getAdapter(element, IToolTipProvider.class);
+ if (tooltipProvider != null) {
+ tooltip = tooltipProvider.getToolTipText(element);
+ }
+ return tooltip;
+ }
}
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableDecoratingLabelProvider.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableDecoratingLabelProvider.java
index c78aaa3566..f6bd430f43 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableDecoratingLabelProvider.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableDecoratingLabelProvider.java
@@ -10,14 +10,16 @@
*******************************************************************************/
package org.eclipse.sirius.table.ui.tools.internal.editor.provider;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.swt.graphics.Image;
import org.eclipse.sirius.ext.base.Option;
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
import org.eclipse.sirius.table.business.api.helper.TableHelper;
import org.eclipse.sirius.table.metamodel.table.DCell;
import org.eclipse.sirius.table.metamodel.table.DColumn;
import org.eclipse.sirius.table.metamodel.table.DLine;
+import org.eclipse.swt.graphics.Image;
/**
* Inherits {@link DTableColumnLabelProvider} to decorate DTableElement.
@@ -42,11 +44,7 @@ public class DTableDecoratingLabelProvider extends DTableColumnLabelProvider imp
this.decorator = decorator;
}
- /**
- * Overridden to decorate the returned Image.
- *
- * {@inheritDoc}
- */
+ @Override
public Image getImage(Object element) {
Image image = super.getImage(element);
if (decorator != null) {
@@ -70,4 +68,13 @@ public class DTableDecoratingLabelProvider extends DTableColumnLabelProvider imp
return image;
}
+ @Override
+ public String getToolTipText(Object element) {
+ String tooltip = null;
+ IToolTipProvider tooltipProvider = (IToolTipProvider) Platform.getAdapterManager().getAdapter(element, IToolTipProvider.class);
+ if (tooltipProvider != null) {
+ tooltip = tooltipProvider.getToolTipText(element);
+ }
+ return tooltip;
+ }
}
diff --git a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableLineLabelProvider.java b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableLineLabelProvider.java
index b752a6454c..11147642e0 100644
--- a/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableLineLabelProvider.java
+++ b/plugins/org.eclipse.sirius.table.ui/src/org/eclipse/sirius/table/ui/tools/internal/editor/provider/DTableLineLabelProvider.java
@@ -10,18 +10,18 @@
*******************************************************************************/
package org.eclipse.sirius.table.ui.tools.internal.editor.provider;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.swt.graphics.Image;
-
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
import org.eclipse.sirius.table.metamodel.table.DLine;
import org.eclipse.sirius.ui.tools.api.provider.DSemanticTargetBasedLabelProvider;
import org.eclipse.sirius.ui.tools.api.views.ViewHelper;
+import org.eclipse.swt.graphics.Image;
/**
* Label provider for lines.
*
- *
* @author dlecan
*/
public class DTableLineLabelProvider extends DSemanticTargetBasedLabelProvider implements ILabelProvider {
@@ -31,18 +31,14 @@ public class DTableLineLabelProvider extends DSemanticTargetBasedLabelProvider i
/**
* Constructor.
*
- * @param decorator the decorator to use.
+ * @param decorator
+ * the decorator to use.
*/
public DTableLineLabelProvider(ILabelDecorator decorator) {
super(ViewHelper.INSTANCE.createAdapterFactory());
this.decorator = decorator;
}
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.sirius.ui.tools.api.provider.DSemanticTargetBasedLabelProvider#getText(java.lang.Object)
- */
@Override
public String getText(final Object element) {
if (element instanceof DLine) {
@@ -52,11 +48,7 @@ public class DTableLineLabelProvider extends DSemanticTargetBasedLabelProvider i
return ""; //$NON-NLS-1$
}
- /**
- * Overridden to decorate the returned Image.
- *
- * {@inheritDoc}
- */
+ @Override
public Image getImage(Object element) {
Image image = super.getImage(element);
if (decorator != null && element instanceof DLine) {
@@ -68,4 +60,14 @@ public class DTableLineLabelProvider extends DSemanticTargetBasedLabelProvider i
return image;
}
+ @Override
+ public String getToolTipText(Object element) {
+ String tooltip = null;
+ IToolTipProvider tooltipProvider = (IToolTipProvider) Platform.getAdapterManager().getAdapter(element, IToolTipProvider.class);
+ if (tooltipProvider != null) {
+ tooltip = tooltipProvider.getToolTipText(element);
+ }
+ return tooltip;
+ }
+
}
diff --git a/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF
index 85cceec720..a92deda731 100644
--- a/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.tests.junit/META-INF/MANIFEST.MF
@@ -73,7 +73,8 @@ Require-Bundle: org.eclipse.sirius.tests.sample.benchmark,
org.eclipse.sirius.tests.sample.scxml,
org.eclipse.sirius.tests.sample.component.design,
org.eclipse.sirius.common.acceleo.aql;bundle-version="3.1.0",
- org.eclipse.sirius.common.acceleo.aql.ide;bundle-version="3.1.0"
+ org.eclipse.sirius.common.acceleo.aql.ide;bundle-version="3.1.0",
+ org.eclipse.ui.navigator;bundle-version="3.5.200"
Bundle-Activator: org.eclipse.sirius.tests.SiriusTestsPlugin
Eclipse-LazyStart: true
Bundle-Localization: plugin
@@ -206,4 +207,5 @@ Import-Package: org.eclipse.sirius.ext.base;version="1.0.0",
org.eclipse.sirius.ext.base.collect;version="1.0.0",
org.eclipse.sirius.ext.base.relations;version="1.0.0",
org.eclipse.sirius.ext.emf;version="1.0.0",
+ org.eclipse.sirius.ext.jface.viewers;version="3.1.0",
org.eclipse.sirius.ext.swt;version="1.0.0"
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.aird b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.aird
new file mode 100644
index 0000000000..0804a6da41
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.aird
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<viewpoint:DAnalysis xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:description_2="http://www.eclipse.org/sirius/table/description/1.1.0" xmlns:description_3="http://www.eclipse.org/sirius/tree/description/1.0.0" xmlns:diagram="http://www.eclipse.org/sirius/diagram/1.1.0" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.2/notation" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" xmlns:table="http://www.eclipse.org/sirius/table/1.1.0" xmlns:tree="http://www.eclipse.org/sirius/tree/1.0.0" xmlns:viewpoint="http://www.eclipse.org/sirius/1.1.0" xsi:schemaLocation="http://www.eclipse.org/sirius/description/1.1.0 http://www.eclipse.org/sirius/1.1.0#//description http://www.eclipse.org/sirius/diagram/description/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description http://www.eclipse.org/sirius/table/description/1.1.0 http://www.eclipse.org/sirius/table/1.1.0#//description http://www.eclipse.org/sirius/tree/description/1.0.0 http://www.eclipse.org/sirius/tree/1.0.0#//description http://www.eclipse.org/sirius/diagram/description/style/1.1.0 http://www.eclipse.org/sirius/diagram/1.1.0#//description/style" xmi:id="_h_Y1EVU3EeWac8QKzk2I0Q" selectedViews="_ib6ZAFU3EeWac8QKzk2I0Q" version="10.1.0.201507101000">
+ <semanticResources>Bug460075.ecore</semanticResources>
+ <ownedViews xmi:type="viewpoint:DRepresentationContainer" xmi:id="_ib6ZAFU3EeWac8QKzk2I0Q">
+ <ownedRepresentations xmi:type="diagram:DSemanticDiagram" xmi:id="_jZusIFU3EeWac8QKzk2I0Q" name="new Bug460075DiagramDef">
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_jZvTMFU3EeWac8QKzk2I0Q" source="DANNOTATION_CUSTOMIZATION_KEY">
+ <data xmi:type="diagram:ComputedStyleDescriptionRegistry" xmi:id="_jZvTMVU3EeWac8QKzk2I0Q"/>
+ </ownedAnnotationEntries>
+ <ownedAnnotationEntries xmi:type="description:AnnotationEntry" xmi:id="_jaT68FU3EeWac8QKzk2I0Q" source="GMF_DIAGRAMS">
+ <data xmi:type="notation:Diagram" xmi:id="_jaT68VU3EeWac8QKzk2I0Q" type="Sirius" element="_jZusIFU3EeWac8QKzk2I0Q" measurementUnit="Pixel">
+ <children xmi:type="notation:Node" xmi:id="_sb3bAFU3EeWac8QKzk2I0Q" type="2001" element="_sbK3cFU3EeWac8QKzk2I0Q">
+ <children xmi:type="notation:Node" xmi:id="_sb-vwFU3EeWac8QKzk2I0Q" type="5002">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_sb-vwVU3EeWac8QKzk2I0Q" y="5"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_scJu4FU3EeWac8QKzk2I0Q" type="3003" element="_sbbWIFU3EeWac8QKzk2I0Q">
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_scJu4VU3EeWac8QKzk2I0Q" fontName="Cantarell"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_scJu4lU3EeWac8QKzk2I0Q"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_sb3bAVU3EeWac8QKzk2I0Q" fontName="Cantarell" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_sb3bAlU3EeWac8QKzk2I0Q" x="280" y="65" width="51" height="46"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_scBzEFU3EeWac8QKzk2I0Q" type="2002" element="_sbiq4FU3EeWac8QKzk2I0Q">
+ <children xmi:type="notation:Node" xmi:id="_scDBMFU3EeWac8QKzk2I0Q" type="5006"/>
+ <children xmi:type="notation:Node" xmi:id="_scFdcFU3EeWac8QKzk2I0Q" type="7001">
+ <children xmi:type="notation:Node" xmi:id="_scLkEFU3EeWac8QKzk2I0Q" type="3007" element="_sbnjYFU3EeWac8QKzk2I0Q">
+ <children xmi:type="notation:Node" xmi:id="_scMLIFU3EeWac8QKzk2I0Q" type="5003">
+ <layoutConstraint xmi:type="notation:Location" xmi:id="_scMLIVU3EeWac8QKzk2I0Q" y="5"/>
+ </children>
+ <children xmi:type="notation:Node" xmi:id="_scMyMFU3EeWac8QKzk2I0Q" type="3003" element="_sbpYkFU3EeWac8QKzk2I0Q">
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_scMyMVU3EeWac8QKzk2I0Q" fontName="Cantarell"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_scMyMlU3EeWac8QKzk2I0Q"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_scLkEVU3EeWac8QKzk2I0Q" fontName="Cantarell" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_scLkElU3EeWac8QKzk2I0Q" x="30" y="30" width="51" height="46"/>
+ </children>
+ <styles xmi:type="notation:SortingStyle" xmi:id="_scFdcVU3EeWac8QKzk2I0Q"/>
+ <styles xmi:type="notation:FilteringStyle" xmi:id="_scFdclU3EeWac8QKzk2I0Q"/>
+ </children>
+ <styles xmi:type="notation:ShapeStyle" xmi:id="_scBzEVU3EeWac8QKzk2I0Q" fontName="Cantarell" fontHeight="8"/>
+ <layoutConstraint xmi:type="notation:Bounds" xmi:id="_scBzElU3EeWac8QKzk2I0Q" x="75" y="55"/>
+ </children>
+ <styles xmi:type="notation:DiagramStyle" xmi:id="_jaT68lU3EeWac8QKzk2I0Q"/>
+ </data>
+ </ownedAnnotationEntries>
+ <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_sbK3cFU3EeWac8QKzk2I0Q" name="c1" width="3" height="3" resizeKind="NSEW">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:Square" xmi:id="_sbbWIFU3EeWac8QKzk2I0Q" labelPosition="node">
+ <description xmi:type="style:SquareDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@nodeMappings[name='EClassMapping']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@nodeMappings[name='EClassMapping']"/>
+ </ownedDiagramElements>
+ <ownedDiagramElements xmi:type="diagram:DNodeContainer" xmi:id="_sbiq4FU3EeWac8QKzk2I0Q" name="p1">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <semanticElements xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <decorations xmi:type="viewpoint:Decoration" xmi:id="_VWeCYVVbEeWjyIjO2TbJdw">
+ <description xmi:type="description_1:MappingBasedDecoration" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@decorationDescriptionsSet/@decorationDescriptions[name='decorator']"/>
+ </decorations>
+ <arrangeConstraints>KEEP_LOCATION</arrangeConstraints>
+ <arrangeConstraints>KEEP_SIZE</arrangeConstraints>
+ <arrangeConstraints>KEEP_RATIO</arrangeConstraints>
+ <ownedStyle xmi:type="diagram:FlatContainerStyle" xmi:id="_sblHIFU3EeWac8QKzk2I0Q" borderSize="1" borderSizeComputationExpression="1">
+ <description xmi:type="style:FlatContainerStyleDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@containerMappings[name='EPackageMapping']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:ContainerMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@containerMappings[name='EPackageMapping']"/>
+ <ownedDiagramElements xmi:type="diagram:DNode" xmi:id="_sbnjYFU3EeWac8QKzk2I0Q" name="c2" width="3" height="3" resizeKind="NSEW">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <ownedStyle xmi:type="diagram:Square" xmi:id="_sbpYkFU3EeWac8QKzk2I0Q" labelPosition="node">
+ <description xmi:type="style:SquareDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@nodeMappings[name='EClassMapping']/@style"/>
+ </ownedStyle>
+ <actualMapping xmi:type="description_1:NodeMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@nodeMappings[name='EClassMapping']"/>
+ </ownedDiagramElements>
+ </ownedDiagramElements>
+ <description xmi:type="description_1:DiagramDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']"/>
+ <filterVariableHistory xmi:type="diagram:FilterVariableHistory" xmi:id="_jZvTMlU3EeWac8QKzk2I0Q"/>
+ <activatedLayers xmi:type="description_1:Layer" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer"/>
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#/"/>
+ </ownedRepresentations>
+ <ownedRepresentations xmi:type="table:DTable" xmi:id="_vgxWcFU3EeWac8QKzk2I0Q" name="new Bug460075EditionTableDef" headerColumnWidth="105">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#/"/>
+ <lines xmi:type="table:DLine" xmi:id="_vgxWcVU3EeWac8QKzk2I0Q" label="p1">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <lines xmi:type="table:DLine" xmi:id="_vgxWclU3EeWac8QKzk2I0Q" label="c2">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <lines xmi:type="table:DLine" xmi:id="_vgxWc1U3EeWac8QKzk2I0Q" label="a2">
+ <target xmi:type="ecore:EAttribute" href="Bug460075.ecore#//p1/c2/a2"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="Bug460075.ecore#//p1/c2/a2"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EAttributeLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_vgxWdFU3EeWac8QKzk2I0Q" label="a2" column="_vgxWe1U3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EAttribute" href="Bug460075.ecore#//p1/c2/a2"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="Bug460075.ecore#//p1/c2/a2"/>
+ </cells>
+ </lines>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EClassLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_vgxWdVU3EeWac8QKzk2I0Q" label="c2" column="_vgxWe1U3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ </cells>
+ </lines>
+ <semanticElements xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EPackageLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_vgxWdlU3EeWac8QKzk2I0Q" label="p1" column="_vgxWe1U3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <semanticElements xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ </cells>
+ </lines>
+ <lines xmi:type="table:DLine" xmi:id="_vgxWd1U3EeWac8QKzk2I0Q" label="c1">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <lines xmi:type="table:DLine" xmi:id="_vgxWeFU3EeWac8QKzk2I0Q" label="a1">
+ <target xmi:type="ecore:EAttribute" href="Bug460075.ecore#//c1/a1"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="Bug460075.ecore#//c1/a1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EAttributeLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_vgxWeVU3EeWac8QKzk2I0Q" label="a1" column="_vgxWe1U3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EAttribute" href="Bug460075.ecore#//c1/a1"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="Bug460075.ecore#//c1/a1"/>
+ </cells>
+ </lines>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EClassLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_vgxWelU3EeWac8QKzk2I0Q" label="c1" column="_vgxWe1U3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ </cells>
+ </lines>
+ <columns xmi:type="table:DFeatureColumn" xmi:id="_vgxWe1U3EeWac8QKzk2I0Q" cells="_vgxWdlU3EeWac8QKzk2I0Q _vgxWdVU3EeWac8QKzk2I0Q _vgxWdFU3EeWac8QKzk2I0Q _vgxWelU3EeWac8QKzk2I0Q _vgxWeVU3EeWac8QKzk2I0Q" featureName="name">
+ <originMapping xmi:type="description_2:FeatureColumnMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedColumnMappings[name='NameMapping']"/>
+ </columns>
+ <description xmi:type="description_2:EditionTableDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']"/>
+ </ownedRepresentations>
+ <ownedRepresentations xmi:type="tree:DTree" xmi:id="_xH7hgFU3EeWac8QKzk2I0Q" name="new Bug460075TreeDef">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#/"/>
+ <ownedTreeItems xmi:type="tree:DTreeItem" xmi:id="_xH7hgVU3EeWac8QKzk2I0Q" name="p1">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <semanticElements xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <ownedStyle xmi:type="tree:TreeItemStyle" xmi:id="_xH7hglU3EeWac8QKzk2I0Q"/>
+ <actualMapping xmi:type="description_3:TreeItemMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075TreeDef']/@subItemMappings[name='EPackageTreeItemMapping']"/>
+ </ownedTreeItems>
+ <description xmi:type="description_3:TreeDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075TreeDef']"/>
+ </ownedRepresentations>
+ <ownedRepresentations xmi:type="table:DTable" xmi:id="_xwjnwFU3EeWac8QKzk2I0Q" name="new Bug460075CrossTableDef" headerColumnWidth="131">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#/"/>
+ <lines xmi:type="table:DLine" xmi:id="_xwjnwVU3EeWac8QKzk2I0Q" label="p1">
+ <target xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <lines xmi:type="table:DLine" xmi:id="_xwjnwlU3EeWac8QKzk2I0Q" label="c2">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <lines xmi:type="table:DLine" xmi:id="_xwjnw1U3EeWac8QKzk2I0Q" label="a2">
+ <target xmi:type="ecore:EAttribute" href="Bug460075.ecore#//p1/c2/a2"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="Bug460075.ecore#//p1/c2/a2"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EAttributeLineMapping']"/>
+ </lines>
+ <lines xmi:type="table:DLine" xmi:id="_xwjnxFU3EeWac8QKzk2I0Q" label="r2 : c1">
+ <target xmi:type="ecore:EReference" href="Bug460075.ecore#//p1/c2/r2"/>
+ <semanticElements xmi:type="ecore:EReference" href="Bug460075.ecore#//p1/c2/r2"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EReferenceLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_xwkO0FU3EeWac8QKzk2I0Q" label="X" column="_xwkO1VU3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EReference" href="Bug460075.ecore#//p1/c2/r2"/>
+ <semanticElements xmi:type="ecore:EReference" href="Bug460075.ecore#//p1/c2/r2"/>
+ <intersectionMapping xmi:type="description_2:IntersectionMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@intersection.0"/>
+ </cells>
+ </lines>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']"/>
+ </lines>
+ <semanticElements xmi:type="ecore:EPackage" href="Bug460075.ecore#//p1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EPackageLineMapping']"/>
+ </lines>
+ <lines xmi:type="table:DLine" xmi:id="_xwkO0VU3EeWac8QKzk2I0Q" label="c1">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <lines xmi:type="table:DLine" xmi:id="_xwkO0lU3EeWac8QKzk2I0Q" label="a1">
+ <target xmi:type="ecore:EAttribute" href="Bug460075.ecore#//c1/a1"/>
+ <semanticElements xmi:type="ecore:EAttribute" href="Bug460075.ecore#//c1/a1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EAttributeLineMapping']"/>
+ </lines>
+ <lines xmi:type="table:DLine" xmi:id="_xwkO01U3EeWac8QKzk2I0Q" label="r1 : c2">
+ <target xmi:type="ecore:EReference" href="Bug460075.ecore#//c1/r1"/>
+ <semanticElements xmi:type="ecore:EReference" href="Bug460075.ecore#//c1/r1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EReferenceLineMapping']"/>
+ <cells xmi:type="table:DCell" xmi:id="_xwkO1FU3EeWac8QKzk2I0Q" label="X" column="_xwkO1lU3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EReference" href="Bug460075.ecore#//c1/r1"/>
+ <semanticElements xmi:type="ecore:EReference" href="Bug460075.ecore#//c1/r1"/>
+ <intersectionMapping xmi:type="description_2:IntersectionMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@intersection.0"/>
+ </cells>
+ </lines>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <originMapping xmi:type="description_2:LineMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']"/>
+ </lines>
+ <columns xmi:type="table:DTargetColumn" xmi:id="_xwkO1VU3EeWac8QKzk2I0Q" label="c1" cells="_xwkO0FU3EeWac8QKzk2I0Q" width="639">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//c1"/>
+ <originMapping xmi:type="description_2:ElementColumnMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedColumnMappings.0"/>
+ </columns>
+ <columns xmi:type="table:DTargetColumn" xmi:id="_xwkO1lU3EeWac8QKzk2I0Q" label="c2" cells="_xwkO1FU3EeWac8QKzk2I0Q">
+ <target xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <semanticElements xmi:type="ecore:EClass" href="Bug460075.ecore#//p1/c2"/>
+ <originMapping xmi:type="description_2:ElementColumnMapping" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedColumnMappings.0"/>
+ </columns>
+ <description xmi:type="description_2:CrossTableDescription" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']"/>
+ </ownedRepresentations>
+ <viewpoint xmi:type="description:Viewpoint" href="Bug460075.odesign#//@ownedViewpoints[name='Bug460075Viewpoint']"/>
+ </ownedViews>
+</viewpoint:DAnalysis>
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.ecore b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.ecore
new file mode 100644
index 0000000000..9050ebfbd9
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.ecore
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="">
+ <eClassifiers xsi:type="ecore:EClass" name="c1">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="a1"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="r1" eType="#//p1/c2"/>
+ </eClassifiers>
+ <eSubpackages name="p1">
+ <eClassifiers xsi:type="ecore:EClass" name="c2">
+ <eStructuralFeatures xsi:type="ecore:EAttribute" name="a2"/>
+ <eStructuralFeatures xsi:type="ecore:EReference" name="r2" eType="#//c1"/>
+ </eClassifiers>
+ </eSubpackages>
+</ecore:EPackage>
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.odesign b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.odesign
new file mode 100644
index 0000000000..bc8bc8c579
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/Bug460075.odesign
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<description:Group xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:description="http://www.eclipse.org/sirius/description/1.1.0" xmlns:description_1="http://www.eclipse.org/sirius/diagram/description/1.1.0" xmlns:description_2="http://www.eclipse.org/sirius/table/description/1.1.0" xmlns:description_3="http://www.eclipse.org/sirius/tree/description/1.0.0" xmlns:style="http://www.eclipse.org/sirius/diagram/description/style/1.1.0" name="Bug460075" version="10.1.0.201507271600">
+ <ownedViewpoints name="Bug460075Viewpoint">
+ <ownedRepresentations xsi:type="description_1:DiagramDescription" name="Bug460075DiagramDef" domainClass="ecore.EPackage" enablePopupBars="true">
+ <defaultLayer name="Default">
+ <nodeMappings name="EClassMapping" semanticCandidatesExpression="feature:eClassifiers" domainClass="ecore.EClass">
+ <style xsi:type="style:SquareDescription" labelPosition="node" resizeKind="NSEW">
+ <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <color xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='gray']"/>
+ </style>
+ </nodeMappings>
+ <containerMappings name="EPackageMapping" semanticCandidatesExpression="feature:eSubpackages" domainClass="ecore.EPackage" reusedNodeMappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@nodeMappings[name='EClassMapping']" reusedContainerMappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@containerMappings[name='EPackageMapping']">
+ <style xsi:type="style:FlatContainerStyleDescription" borderSizeComputationExpression="1">
+ <borderColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+ <foregroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='light_gray']"/>
+ </style>
+ </containerMappings>
+ <decorationDescriptionsSet>
+ <decorationDescriptions xsi:type="description_1:MappingBasedDecoration" name="decorator" decoratorPath="/DesignerTestProject/decorator_lock.png" mappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075DiagramDef']/@defaultLayer/@containerMappings[name='EPackageMapping']"/>
+ </decorationDescriptionsSet>
+ </defaultLayer>
+ </ownedRepresentations>
+ <ownedRepresentations xsi:type="description_2:EditionTableDescription" name="Bug460075EditionTableDef" domainClass="ecore.EPackage">
+ <ownedLineMappings name="EPackageLineMapping" reusedSubLines="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EClassLineMapping'] //@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EPackageLineMapping']" reusedInMappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EPackageLineMapping']" domainClass="ecore.EPackage" semanticCandidatesExpression="feature:eSubpackages"/>
+ <ownedLineMappings name="EClassLineMapping" reusedInMappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075EditionTableDef']/@ownedLineMappings[name='EPackageLineMapping']" domainClass="ecore.EClass" semanticCandidatesExpression="feature:eClassifiers">
+ <ownedSubLines name="EAttributeLineMapping" domainClass="ecore.EAttribute" semanticCandidatesExpression="feature:eAttributes"/>
+ </ownedLineMappings>
+ <ownedColumnMappings name="NameMapping" featureName="name"/>
+ </ownedRepresentations>
+ <ownedRepresentations xsi:type="description_2:CrossTableDescription" name="Bug460075CrossTableDef" domainClass="ecore.EPackage">
+ <ownedLineMappings name="EPackageLineMapping" reusedSubLines="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping'] //@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EPackageLineMapping']" reusedInMappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EPackageLineMapping']" domainClass="ecore.EPackage" semanticCandidatesExpression="feature:eSubpackages"/>
+ <ownedLineMappings name="EClassLineMapping" reusedInMappings="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EPackageLineMapping']" domainClass="ecore.EClass" semanticCandidatesExpression="feature:eClassifiers">
+ <ownedSubLines name="EAttributeLineMapping" domainClass="ecore.EAttribute" semanticCandidatesExpression="feature:eAttributes"/>
+ <ownedSubLines name="EReferenceLineMapping" domainClass="ecore.EReference" semanticCandidatesExpression="feature:eReferences"/>
+ </ownedLineMappings>
+ <ownedColumnMappings name="EClassColumnMapping" domainClass="ecore.EClass"/>
+ <intersection name="IntersectionMapping" lineMapping="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedLineMappings[name='EClassLineMapping']/@ownedSubLines[name='EReferenceLineMapping']" columnMapping="//@ownedViewpoints[name='Bug460075Viewpoint']/@ownedRepresentations[name='Bug460075CrossTableDef']/@ownedColumnMappings.0" labelExpression="X" columnFinderExpression="feature:eType"/>
+ </ownedRepresentations>
+ <ownedRepresentations xsi:type="description_3:TreeDescription" name="Bug460075TreeDef" domainClass="ecore.EPackage">
+ <subItemMappings name="EPackageTreeItemMapping" domainClass="ecore.EPackage" semanticCandidatesExpression="feature:eSubpackages">
+ <defaultStyle>
+ <labelColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='black']"/>
+ <backgroundColor xsi:type="description:SystemColor" href="environment:/viewpoint#//@systemColors/@entries[name='white']"/>
+ </defaultStyle>
+ </subItemMappings>
+ </ownedRepresentations>
+ </ownedViewpoints>
+</description:Group>
diff --git a/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/decorator_lock.png b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/decorator_lock.png
new file mode 100644
index 0000000000..70dfd61a8f
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.junit/data/unit/tooltip/decorator_lock.png
Binary files differ
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java
index 02e5daf50c..f75a7c98d3 100644
--- a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/suite/common/AllCommonPluginTests.java
@@ -10,6 +10,9 @@
*******************************************************************************/
package org.eclipse.sirius.tests.suite.common;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
import org.eclipse.sirius.tests.unit.api.componentization.DiagramComponentizationManagerTest;
import org.eclipse.sirius.tests.unit.api.componentization.DiagramExtensionDescriptionTest;
import org.eclipse.sirius.tests.unit.api.componentization.MetamodelSpecificationInRepresentationExtensionDescriptionTest;
@@ -61,6 +64,7 @@ import org.eclipse.sirius.tests.unit.common.RestoreSessionFromEditorInputTests;
import org.eclipse.sirius.tests.unit.common.SaverTest;
import org.eclipse.sirius.tests.unit.common.SiriusCrossReferenceAdapterTests;
import org.eclipse.sirius.tests.unit.common.SubMenusPrioritiesTest;
+import org.eclipse.sirius.tests.unit.common.TooltipProviderTests;
import org.eclipse.sirius.tests.unit.common.TransientSessionTests;
import org.eclipse.sirius.tests.unit.common.WorkspaceResourceSyncTestCase;
import org.eclipse.sirius.tests.unit.common.ZombieViewpointsTest;
@@ -275,7 +279,11 @@ public class AllCommonPluginTests extends TestCase {
suite.addTestSuite(ReloadSessionTest.class);
suite.addTestSuite(EclipseUtilTest.class);
suite.addTestSuite(CompoundInterpreterTestCase.class);
-
+ // TooltipProviderTests must be executed with the inner IAdapterFactory
+ // not with another one
+ if (Platform.getAdapterManager().hasAdapter(EcorePackage.eINSTANCE, IToolTipProvider.class.getName())) {
+ suite.addTestSuite(TooltipProviderTests.class);
+ }
suite.addTestSuite(TransientSessionTests.class);
suite.addTestSuite(RestoreSessionFromEditorInputTests.class);
suite.addTestSuite(SiriusCrossReferenceAdapterTests.class);
diff --git a/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/TooltipProviderTests.java b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/TooltipProviderTests.java
new file mode 100644
index 0000000000..d198f4bf4b
--- /dev/null
+++ b/plugins/org.eclipse.sirius.tests.junit/src/org/eclipse/sirius/tests/unit/common/TooltipProviderTests.java
@@ -0,0 +1,229 @@
+/*******************************************************************************
+ * Copyright (c) 2015 THALES GLOBAL SERVICES and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.tests.unit.common;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.Label;
+import org.eclipse.emf.common.ui.viewer.IViewerProvider;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramRootEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.services.decorator.Decoration;
+import org.eclipse.jface.viewers.CellLabelProvider;
+import org.eclipse.jface.viewers.ContentViewer;
+import org.eclipse.jface.viewers.IBaseLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.sirius.business.api.dialect.DialectManager;
+import org.eclipse.sirius.business.api.session.SessionManager;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.ui.tools.internal.editor.DDiagramEditorImpl;
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
+import org.eclipse.sirius.table.metamodel.table.DTable;
+import org.eclipse.sirius.tests.SiriusTestsPlugin;
+import org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper;
+import org.eclipse.sirius.tests.support.api.SiriusTestCase;
+import org.eclipse.sirius.tests.support.api.TestsUtil;
+import org.eclipse.sirius.tools.api.command.ICommandFactory;
+import org.eclipse.sirius.tree.DTree;
+import org.eclipse.sirius.ui.business.api.dialect.DialectUIManager;
+import org.eclipse.sirius.ui.tools.api.views.modelexplorerview.IModelExplorerView;
+import org.eclipse.sirius.viewpoint.DRepresentation;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.navigator.CommonNavigator;
+import org.eclipse.ui.navigator.CommonViewer;
+
+import com.google.common.collect.Iterables;
+
+/**
+ * Tests for {@link IToolTipProvider} with different dialects and Model Explorer
+ * view.
+ *
+ * @author <a href="mailto:esteban.dugueperoux@obeo.fr">Esteban Dugueperoux</a>
+ */
+public class TooltipProviderTests extends SiriusTestCase {
+
+ private static final String PATH = "/data/unit/tooltip/";
+
+ private static final String REPRESENTATIONS_RESOURCE_NAME = "Bug460075.aird";
+
+ private static final String SEMANTIC_RESOURCE_NAME = "Bug460075.ecore";
+
+ private static final String MODELER_RESOURCE_NAME = "Bug460075.odesign";
+
+ private static final String DECORATOR_IMAGE_NAME = "decorator_lock.png";
+
+ private EPackage rootEPackage;
+
+ private AdapterFactory adapterFactory;
+
+ @Override
+ protected ICommandFactory getCommandFactory() {
+ return null;
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ EclipseTestsSupportHelper.INSTANCE.copyFile(SiriusTestsPlugin.PLUGIN_ID, PATH + MODELER_RESOURCE_NAME, TEMPORARY_PROJECT_NAME + "/" + MODELER_RESOURCE_NAME);
+ EclipseTestsSupportHelper.INSTANCE.copyFile(SiriusTestsPlugin.PLUGIN_ID, PATH + SEMANTIC_RESOURCE_NAME, TEMPORARY_PROJECT_NAME + "/" + SEMANTIC_RESOURCE_NAME);
+ EclipseTestsSupportHelper.INSTANCE.copyFile(SiriusTestsPlugin.PLUGIN_ID, PATH + REPRESENTATIONS_RESOURCE_NAME, TEMPORARY_PROJECT_NAME + "/" + REPRESENTATIONS_RESOURCE_NAME);
+ EclipseTestsSupportHelper.INSTANCE.copyFile(SiriusTestsPlugin.PLUGIN_ID, PATH + DECORATOR_IMAGE_NAME, TEMPORARY_PROJECT_NAME + "/" + DECORATOR_IMAGE_NAME);
+ closeWelcomePage();
+ PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().setPerspective(PlatformUI.getWorkbench().getPerspectiveRegistry().findPerspectiveWithLabel("Modeling"));
+ TestsUtil.synchronizationWithUIThread();
+ URI sessionResourceURI = URI.createPlatformResourceURI(TEMPORARY_PROJECT_NAME + "/" + REPRESENTATIONS_RESOURCE_NAME, true);
+ session = SessionManager.INSTANCE.getSession(sessionResourceURI, new NullProgressMonitor());
+ session.open(new NullProgressMonitor());
+ Resource semanticResource = session.getSemanticResources().iterator().next();
+ rootEPackage = (EPackage) semanticResource.getContents().get(0);
+
+ adapterFactory = new AdapterFactory();
+ Platform.getAdapterManager().registerAdapters(adapterFactory, EObject.class);
+ }
+
+ public void testTooltipOnDiagramDialect() {
+ Collection<DRepresentation> allRepresentations = DialectManager.INSTANCE.getAllRepresentations(session);
+ DDiagram dDiagram = Iterables.getOnlyElement(Iterables.filter(allRepresentations, DDiagram.class));
+ IEditorPart editor = DialectUIManager.INSTANCE.openEditor(session, dDiagram, new NullProgressMonitor());
+ TestsUtil.synchronizationWithUIThread();
+ assertTrue(editor instanceof DDiagramEditorImpl);
+ DDiagramEditorImpl dDiagramEditorImpl = (DDiagramEditorImpl) editor;
+ IFigure layer = dDiagramEditorImpl.getDiagramEditPart().getLayer(DiagramRootEditPart.DECORATION_PRINTABLE_LAYER);
+ Iterable<Decoration> decorationsIterable = Iterables.filter(layer.getChildren(), Decoration.class);
+ assertEquals(1, Iterables.size(decorationsIterable));
+ Decoration decoration = Iterables.getOnlyElement(decorationsIterable);
+ IFigure toolTip = decoration.getToolTip();
+ assertTrue(toolTip instanceof Label);
+ Label label = (Label) toolTip;
+ assertEquals(TooltipProvider.TOOLTIP, label.getText());
+ DialectUIManager.INSTANCE.closeEditor(editor, false);
+ TestsUtil.synchronizationWithUIThread();
+ }
+
+ public void testTooltipOnTableEditionDialect() {
+ List<DRepresentation> allRepresentations = new ArrayList<DRepresentation>(DialectManager.INSTANCE.getAllRepresentations(session));
+ DTable dEditionTable = (DTable) allRepresentations.get(1);
+ IEditorPart editor = DialectUIManager.INSTANCE.openEditor(session, dEditionTable, new NullProgressMonitor());
+ TestsUtil.synchronizationWithUIThread();
+ assertTrue(editor instanceof IViewerProvider);
+ IViewerProvider viewerProvider = (IViewerProvider) editor;
+ Viewer viewer = viewerProvider.getViewer();
+ assertTrue(viewer instanceof TreeViewer);
+ TreeViewer treeViewer = (TreeViewer) viewer;
+ CellLabelProvider labelProvider = treeViewer.getLabelProvider(0);
+ String toolTipText = labelProvider.getToolTipText(rootEPackage.getESubpackages().get(0));
+ assertEquals(TooltipProvider.TOOLTIP, toolTipText);
+ DialectUIManager.INSTANCE.closeEditor(editor, false);
+ TestsUtil.synchronizationWithUIThread();
+ }
+
+ public void testTooltipOnCrossTableDialect() {
+ List<DRepresentation> allRepresentations = new ArrayList<DRepresentation>(DialectManager.INSTANCE.getAllRepresentations(session));
+ DTable dCrossTable = (DTable) allRepresentations.get(2);
+ IEditorPart editor = DialectUIManager.INSTANCE.openEditor(session, dCrossTable, new NullProgressMonitor());
+ TestsUtil.synchronizationWithUIThread();
+ assertTrue(editor instanceof IViewerProvider);
+ IViewerProvider viewerProvider = (IViewerProvider) editor;
+ Viewer viewer = viewerProvider.getViewer();
+ assertTrue(viewer instanceof TreeViewer);
+ TreeViewer treeViewer = (TreeViewer) viewer;
+ CellLabelProvider labelProvider = treeViewer.getLabelProvider(0);
+ String toolTipText = labelProvider.getToolTipText(rootEPackage.getESubpackages().get(0));
+ assertEquals(TooltipProvider.TOOLTIP, toolTipText);
+ DialectUIManager.INSTANCE.closeEditor(editor, false);
+ TestsUtil.synchronizationWithUIThread();
+ }
+
+ public void testTooltipOnTreeDialect() {
+ Collection<DRepresentation> allRepresentations = DialectManager.INSTANCE.getAllRepresentations(session);
+ DTree dTree = Iterables.getOnlyElement(Iterables.filter(allRepresentations, DTree.class));
+ IEditorPart editor = DialectUIManager.INSTANCE.openEditor(session, dTree, new NullProgressMonitor());
+ TestsUtil.synchronizationWithUIThread();
+ assertTrue(editor instanceof IViewerProvider);
+ IViewerProvider viewerProvider = (IViewerProvider) editor;
+ Viewer viewer = viewerProvider.getViewer();
+ assertTrue(viewer instanceof ContentViewer);
+ ContentViewer contentViewer = (ContentViewer) viewer;
+ IBaseLabelProvider labelProvider = contentViewer.getLabelProvider();
+ assertTrue(labelProvider instanceof CellLabelProvider);
+ CellLabelProvider cellLabelProvider = (CellLabelProvider) labelProvider;
+ String toolTipText = cellLabelProvider.getToolTipText(rootEPackage.getESubpackages().get(0));
+ assertEquals(TooltipProvider.TOOLTIP, toolTipText);
+ DialectUIManager.INSTANCE.closeEditor(editor, false);
+ TestsUtil.synchronizationWithUIThread();
+ }
+
+ public void testTooltipOnModelExplorer() {
+ IViewPart modelExplorerView = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(IModelExplorerView.ID);
+ assertNotNull(modelExplorerView);
+ assertTrue(modelExplorerView instanceof CommonNavigator);
+ CommonNavigator commonNavigator = (CommonNavigator) modelExplorerView;
+ CommonViewer commonViewer = commonNavigator.getCommonViewer();
+ IBaseLabelProvider labelProvider = commonViewer.getLabelProvider();
+ assertTrue(labelProvider instanceof CellLabelProvider);
+ CellLabelProvider cellLabelProvider = (CellLabelProvider) labelProvider;
+ String toolTipText = cellLabelProvider.getToolTipText(rootEPackage.getESubpackages().get(0));
+ assertEquals(TooltipProvider.TOOLTIP, toolTipText);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ Platform.getAdapterManager().unregisterAdapters(adapterFactory);
+ adapterFactory = null;
+ rootEPackage = null;
+ session.close(new NullProgressMonitor());
+ session = null;
+ super.tearDown();
+ }
+
+ static class AdapterFactory implements IAdapterFactory {
+
+ private static final Class<?>[] CLASSES = { IToolTipProvider.class };
+
+ @Override
+ public Object getAdapter(Object adaptableObject, @SuppressWarnings("rawtypes") Class adapterType) {
+ if (adapterType == IToolTipProvider.class) {
+ return adapterType.cast(new TooltipProvider());
+ }
+ return null;
+ }
+
+ @Override
+ public Class<?>[] getAdapterList() {
+ return CLASSES;
+ }
+
+ }
+
+ static class TooltipProvider implements IToolTipProvider {
+
+ public static final String TOOLTIP = "toolTip";
+
+ @Override
+ public String getToolTipText(Object element) {
+ return TOOLTIP;
+ }
+
+ }
+
+}
diff --git a/plugins/org.eclipse.sirius.tree.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.tree.ui/META-INF/MANIFEST.MF
index 83e695e556..ce6bf4f0ad 100644
--- a/plugins/org.eclipse.sirius.tree.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.tree.ui/META-INF/MANIFEST.MF
@@ -43,4 +43,5 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="3.8.0",
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
Import-Package: org.eclipse.sirius.ext.base;version="2.1.0",
- org.eclipse.sirius.ext.emf.ui.properties
+ org.eclipse.sirius.ext.emf.ui.properties,
+ org.eclipse.sirius.ext.jface.viewers;version="3.1.0"
diff --git a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java
index eef3102c37..7ff3af8e89 100644
--- a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java
+++ b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/DTreeViewerManager.java
@@ -28,7 +28,7 @@ import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.util.LocalSelectionTransfer;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.ColumnViewerEditor;
-import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ISelectionProvider;
@@ -187,18 +187,19 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator();
AdapterFactory adapterFactory = TreeUIPlugin.getPlugin().getItemProvidersAdapterFactory();
DTreeDecoratingLabelProvider labelProvider = new DTreeDecoratingLabelProvider(adapterFactory, decorator);
- treeViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(labelProvider));
+ treeViewer.setLabelProvider(labelProvider);
fillMenu();
initializeEditingSupport();
initializeDragAndDropSupport();
initializeKeyBindingSupport();
+ ColumnViewerToolTipSupport.enableFor(treeViewer);
// Create a new CellFocusManager
final TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(treeViewer, new FocusCellOwnerDrawHighlighter(treeViewer));
// Create a TreeViewerEditor with focusable cell
- TreeViewerEditor.create(treeViewer, focusCellManager, new DTableColumnViewerEditorActivationStrategy(treeViewer), ColumnViewerEditor.TABBING_HORIZONTAL
- | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
+ TreeViewerEditor.create(treeViewer, focusCellManager, new DTableColumnViewerEditorActivationStrategy(treeViewer),
+ ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
// The input for the table viewer is the instance of DTable
treeViewer.setInput(dRepresentation);
@@ -259,8 +260,8 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
ISelectionProvider selectionProvider = this.treeViewer;
this.treeViewer.addDragSupport(supportedOperations, new ByteArrayTransfer[] { LocalSelectionTransfer.getTransfer() }, new ModelDragTargetAdapter(selectionProvider));
- this.treeViewer.addDropSupport(supportedOperations, new ByteArrayTransfer[] { LocalSelectionTransfer.getTransfer() }, new DTreeItemDropListener(this.treeViewer, this.editingDomain,
- this.treeCommandFactory, this.accessor));
+ this.treeViewer.addDropSupport(supportedOperations, new ByteArrayTransfer[] { LocalSelectionTransfer.getTransfer() },
+ new DTreeItemDropListener(this.treeViewer, this.editingDomain, this.treeCommandFactory, this.accessor));
}
/**
@@ -299,7 +300,8 @@ public class DTreeViewerManager extends AbstractDTableViewerManager {
}
/**
- * Initialize a cache and add, if needed, the contextual menu for the table. <BR>
+ * Initialize a cache and add, if needed, the contextual menu for the table.
+ * <BR>
* Cached the actions of creation and deletion in order to increase
* performance and not calculate it on each contextual menu.<BR>
*/
diff --git a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/DTreeItemLabelProvider.java b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/DTreeItemLabelProvider.java
index d7fbddf732..f811973bd3 100644
--- a/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/DTreeItemLabelProvider.java
+++ b/plugins/org.eclipse.sirius.tree.ui/src/org/eclipse/sirius/tree/ui/tools/internal/editor/provider/DTreeItemLabelProvider.java
@@ -16,12 +16,14 @@ import java.text.MessageFormat;
import java.util.List;
import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.sirius.common.tools.api.resource.FileProvider;
import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
import org.eclipse.sirius.tree.DTreeItem;
import org.eclipse.sirius.tree.TreeItemStyle;
import org.eclipse.sirius.tree.ui.provider.Messages;
@@ -186,4 +188,14 @@ public class DTreeItemLabelProvider extends DSemanticTargetBasedLabelProvider im
}
return false;
}
+
+ @Override
+ public String getToolTipText(Object element) {
+ String tooltip = null;
+ IToolTipProvider tooltipProvider = (IToolTipProvider) Platform.getAdapterManager().getAdapter(element, IToolTipProvider.class);
+ if (tooltipProvider != null) {
+ tooltip = tooltipProvider.getToolTipText(element);
+ }
+ return tooltip;
+ }
}
diff --git a/plugins/org.eclipse.sirius.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.sirius.ui/META-INF/MANIFEST.MF
index 44dff2412e..cbcac0c5c7 100644
--- a/plugins/org.eclipse.sirius.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.sirius.ui/META-INF/MANIFEST.MF
@@ -120,4 +120,5 @@ Import-Package: org.eclipse.sirius.ext.base;version="2.0.0",
org.eclipse.sirius.ext.base.relations;version="2.0.0",
org.eclipse.sirius.ext.emf.ui,
org.eclipse.sirius.ext.emf.ui.properties,
+ org.eclipse.sirius.ext.jface.viewers;version="3.1.0",
org.eclipse.sirius.ext.swt;version="2.0.0"
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/navigator/filter/FilteredCommonTree.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/navigator/filter/FilteredCommonTree.java
index 9a7799a567..2cb0364390 100644
--- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/navigator/filter/FilteredCommonTree.java
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/common/navigator/filter/FilteredCommonTree.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2009 IBM Corporation and others.
+ * Copyright (c) 2004, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -22,10 +22,12 @@ import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.IContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.sirius.ui.tools.internal.views.modelexplorer.TooltipAwareNavigatorDecoratingLabelProvider;
import org.eclipse.sirius.viewpoint.provider.SiriusEditPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.ACC;
@@ -335,6 +337,8 @@ public class FilteredCommonTree extends Composite {
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
treeComposite.setLayoutData(data);
createTreeControl(treeComposite, treeStyle);
+ // Enable tooltip
+ ColumnViewerToolTipSupport.enableFor(getViewer());
}
/**
@@ -383,11 +387,11 @@ public class FilteredCommonTree extends Composite {
commonTreeViewer.getControl().addDisposeListener(new DisposeListener() {
/*
* (non-Javadoc)
- *
* @see
* org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse
* .swt.events.DisposeEvent)
*/
+ @Override
public void widgetDisposed(DisposeEvent e) {
refreshJob.cancel();
}
@@ -456,6 +460,7 @@ public class FilteredCommonTree extends Composite {
// CHECKSTYLE:OFF Original method
protected WorkbenchJob doCreateRefreshJob() {
return new WorkbenchJob("Refresh Filter") { //$NON-NLS-1$
+ @Override
public IStatus runInUIThread(IProgressMonitor monitor) {
IStatus result = null;
if (commonTreeViewer.getControl().isDisposed()) {
@@ -606,6 +611,7 @@ public class FilteredCommonTree extends Composite {
protected void createFilterText(Composite aParent) {
filterText = doCreateFilterText(aParent);
filterText.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+ @Override
public void getName(AccessibleEvent e) {
String filterTextString = filterText.getText();
if (filterTextString.length() == 0 || filterTextString.equals(initialText)) {
@@ -646,6 +652,7 @@ public class FilteredCommonTree extends Composite {
});
filterText.addFocusListener(new FocusAdapter() {
+ @Override
public void focusGained(FocusEvent e) {
if (!useNewLook) {
/*
@@ -654,6 +661,7 @@ public class FilteredCommonTree extends Composite {
*/
Display display = filterText.getDisplay();
display.asyncExec(new Runnable() {
+ @Override
public void run() {
if (!filterText.isDisposed()) {
if (getInitialText().equals(filterText.getText().trim())) {
@@ -666,6 +674,7 @@ public class FilteredCommonTree extends Composite {
}
}
+ @Override
public void focusLost(FocusEvent e) {
if (!useNewLook) {
return;
@@ -679,6 +688,7 @@ public class FilteredCommonTree extends Composite {
if (useNewLook) {
filterText.addMouseListener(new MouseAdapter() {
+ @Override
public void mouseDown(MouseEvent e) {
if (filterText.getText().equals(initialText)) {
// XXX: We cannot call clearText() due to
@@ -691,6 +701,7 @@ public class FilteredCommonTree extends Composite {
}
filterText.addKeyListener(new KeyAdapter() {
+ @Override
public void keyPressed(KeyEvent e) {
// on a CR we want to transfer focus to the list
boolean hasItems = getViewer().getTree().getItemCount() > 0;
@@ -703,6 +714,7 @@ public class FilteredCommonTree extends Composite {
// enter key set focus to tree
filterText.addTraverseListener(new TraverseListener() {
+ @Override
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_RETURN) {
e.doit = false;
@@ -732,6 +744,7 @@ public class FilteredCommonTree extends Composite {
});
filterText.addModifyListener(new ModifyListener() {
+ @Override
public void modifyText(ModifyEvent e) {
textChanged();
}
@@ -742,6 +755,7 @@ public class FilteredCommonTree extends Composite {
// pressed)
if ((filterText.getStyle() & SWT.ICON_CANCEL) != 0) {
filterText.addSelectionListener(new SelectionAdapter() {
+ @Override
public void widgetDefaultSelected(SelectionEvent e) {
if (e.detail == SWT.ICON_CANCEL)
clearText();
@@ -808,6 +822,7 @@ public class FilteredCommonTree extends Composite {
* @param background
* background <code>Color</code> to set
*/
+ @Override
public void setBackground(Color background) {
super.setBackground(background);
if (filterComposite != null && (!useNewLook || useNativeSearchField(filterComposite))) {
@@ -834,9 +849,9 @@ public class FilteredCommonTree extends Composite {
IAction clearTextAction = new Action("", IAction.AS_PUSH_BUTTON) { //$NON-NLS-1$
/*
* (non-Javadoc)
- *
* @see org.eclipse.jface.action.Action#run()
*/
+ @Override
public void run() {
clearText();
}
@@ -872,11 +887,13 @@ public class FilteredCommonTree extends Composite {
clearButton.addMouseListener(new MouseAdapter() {
private MouseMoveListener fMoveListener;
+ @Override
public void mouseDown(MouseEvent e) {
clearButton.setImage(pressedImage);
fMoveListener = new MouseMoveListener() {
private boolean fMouseInButton = true;
+ @Override
public void mouseMove(MouseEvent e) {
boolean mouseInButton = isMouseInButton(e);
if (mouseInButton != fMouseInButton) {
@@ -888,6 +905,7 @@ public class FilteredCommonTree extends Composite {
clearButton.addMouseMoveListener(fMoveListener);
}
+ @Override
public void mouseUp(MouseEvent e) {
if (fMoveListener != null) {
clearButton.removeMouseMoveListener(fMoveListener);
@@ -907,18 +925,22 @@ public class FilteredCommonTree extends Composite {
}
});
clearButton.addMouseTrackListener(new MouseTrackListener() {
+ @Override
public void mouseEnter(MouseEvent e) {
clearButton.setImage(activeImage);
}
+ @Override
public void mouseExit(MouseEvent e) {
clearButton.setImage(inactiveImage);
}
+ @Override
public void mouseHover(MouseEvent e) {
}
});
clearButton.addDisposeListener(new DisposeListener() {
+ @Override
public void widgetDisposed(DisposeEvent e) {
inactiveImage.dispose();
activeImage.dispose();
@@ -926,11 +948,13 @@ public class FilteredCommonTree extends Composite {
}
});
clearButton.getAccessible().addAccessibleListener(new AccessibleAdapter() {
+ @Override
public void getName(AccessibleEvent e) {
e.result = WorkbenchMessages.FilteredTree_AccessibleListenerClearButton;
}
});
clearButton.getAccessible().addAccessibleControlListener(new AccessibleControlAdapter() {
+ @Override
public void getRole(AccessibleControlEvent e) {
e.detail = ACC.ROLE_PUSHBUTTON;
}
@@ -1015,6 +1039,7 @@ public class FilteredCommonTree extends Composite {
textChanged();
} else {
getDisplay().asyncExec(new Runnable() {
+ @Override
public void run() {
if (!filterText.isDisposed() && filterText.isFocusControl()) {
setFilterText(initialText);
@@ -1128,85 +1153,98 @@ public class FilteredCommonTree extends Composite {
}
}
if (patternFilter == null) {
- SiriusEditPlugin
- .getPlugin()
- .getLog()
- .log(new Status(IStatus.ERROR, SiriusEditPlugin.ID, "Required filter " + PatternFilter.ID
- + " is not present. Filter support of Model Explorer view will not function correctly.")); //$NON-NLS-1$ //$NON-NLS-1$
+ SiriusEditPlugin.getPlugin().getLog().log(
+ new Status(IStatus.ERROR, SiriusEditPlugin.ID, "Required filter " + PatternFilter.ID + " is not present. Filter support of Model Explorer view will not function correctly.")); //$NON-NLS-2$
}
super.init();
+ setLabelProvider(new TooltipAwareNavigatorDecoratingLabelProvider(getNavigatorContentService().createCommonLabelProvider()));
}
+ @Override
public void add(Object parentElementOrTreePath, Object childElement) {
getPatternFilter().clearCaches();
super.add(parentElementOrTreePath, childElement);
}
+ @Override
public void add(Object parentElementOrTreePath, Object[] childElements) {
getPatternFilter().clearCaches();
super.add(parentElementOrTreePath, childElements);
}
+ @Override
protected void inputChanged(Object input, Object oldInput) {
getPatternFilter().clearCaches();
super.inputChanged(input, oldInput);
}
+ @Override
public void insert(Object parentElementOrTreePath, Object element, int position) {
getPatternFilter().clearCaches();
super.insert(parentElementOrTreePath, element, position);
}
+ @Override
public void refresh() {
getPatternFilter().clearCaches();
super.refresh();
}
+ @Override
public void refresh(boolean updateLabels) {
getPatternFilter().clearCaches();
super.refresh(updateLabels);
}
+ @Override
public void refresh(Object element) {
getPatternFilter().clearCaches();
super.refresh(element);
}
+ @Override
public void refresh(Object element, boolean updateLabels) {
getPatternFilter().clearCaches();
super.refresh(element, updateLabels);
}
+ @Override
public void remove(Object elementsOrTreePaths) {
getPatternFilter().clearCaches();
super.remove(elementsOrTreePaths);
}
+ @Override
public void remove(Object aParent, Object[] elements) {
getPatternFilter().clearCaches();
super.remove(aParent, elements);
}
+ @Override
public void remove(Object[] elementsOrTreePaths) {
getPatternFilter().clearCaches();
super.remove(elementsOrTreePaths);
}
+ @Override
public void replace(Object parentElementOrTreePath, int index, Object element) {
getPatternFilter().clearCaches();
super.replace(parentElementOrTreePath, index, element);
}
+ @Override
public void setChildCount(Object elementOrTreePath, int count) {
getPatternFilter().clearCaches();
super.setChildCount(elementOrTreePath, count);
}
+ @Override
public void setContentProvider(IContentProvider provider) {
getPatternFilter().clearCaches();
super.setContentProvider(provider);
}
+ @Override
public void setHasChildren(Object elementOrTreePath, boolean hasChildren) {
getPatternFilter().clearCaches();
super.setHasChildren(elementOrTreePath, hasChildren);
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/TooltipAwareNavigatorDecoratingLabelProvider.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/TooltipAwareNavigatorDecoratingLabelProvider.java
new file mode 100644
index 0000000000..1b822fd479
--- /dev/null
+++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/TooltipAwareNavigatorDecoratingLabelProvider.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.ui.tools.internal.views.modelexplorer;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.sirius.ext.jface.viewers.IToolTipProvider;
+import org.eclipse.ui.internal.navigator.NavigatorDecoratingLabelProvider;
+
+/**
+ * A specific {@link NavigatorDecoratingLabelProvider} to manage tooltip.
+ *
+ * @author <a href="mailto:esteban.dugueperoux@obeo.fr">Esteban Dugueperoux</a>
+ */
+@SuppressWarnings("restriction")
+public class TooltipAwareNavigatorDecoratingLabelProvider extends NavigatorDecoratingLabelProvider {
+
+ /**
+ * Default constructor.
+ *
+ * @param commonLabelProvider
+ * a common {@link ILabelProvider}
+ */
+ public TooltipAwareNavigatorDecoratingLabelProvider(ILabelProvider commonLabelProvider) {
+ super(commonLabelProvider);
+ }
+
+ @Override
+ public String getToolTipText(Object element) {
+ String tooltip = null;
+ IToolTipProvider tooltipProvider = (IToolTipProvider) Platform.getAdapterManager().getAdapter(element, IToolTipProvider.class);
+ if (tooltipProvider != null) {
+ tooltip = tooltipProvider.getToolTipText(element);
+ }
+ return tooltip;
+ }
+
+}

Back to the top