diff options
-rw-r--r-- | plugins/org.eclipse.emf.common.ui/src/org/eclipse/emf/common/ui/viewer/ColumnViewerInformationControlToolTipSupport.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.common.ui/src/org/eclipse/emf/common/ui/viewer/ColumnViewerInformationControlToolTipSupport.java b/plugins/org.eclipse.emf.common.ui/src/org/eclipse/emf/common/ui/viewer/ColumnViewerInformationControlToolTipSupport.java index 228b6d203..c235e171f 100644 --- a/plugins/org.eclipse.emf.common.ui/src/org/eclipse/emf/common/ui/viewer/ColumnViewerInformationControlToolTipSupport.java +++ b/plugins/org.eclipse.emf.common.ui/src/org/eclipse/emf/common/ui/viewer/ColumnViewerInformationControlToolTipSupport.java @@ -13,6 +13,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.util.Arrays; +import java.util.List; import org.eclipse.emf.common.ui.CommonUIPlugin; import org.eclipse.emf.common.util.URI; @@ -95,6 +96,53 @@ public final class ColumnViewerInformationControlToolTipSupport this.viewer = viewer; } + public URI getURI(Object object) + { + IContentProvider contentProvider = viewer.getContentProvider(); + if (contentProvider instanceof IStructuredContentProvider) + { + IStructuredContentProvider structuredContentProvider = (IStructuredContentProvider)contentProvider; + List<Object> elements = Arrays.asList(structuredContentProvider.getElements(viewer.getInput())); + if (structuredContentProvider instanceof ITreeContentProvider) + { + return traverse(elements, (ITreeContentProvider)structuredContentProvider, object); + } + else + { + int index = elements.indexOf(object); + if (index != -1) + { + return URI.createURI("path:/" + index); + } + } + } + return null; + } + + protected URI traverse(List<Object> elements, ITreeContentProvider treeContentProvider, Object object) + { + int index = elements.indexOf(object); + if (index != -1) + { + return URI.createURI("path:/" + index); + } + Object parent = treeContentProvider.getParent(object); + if (parent != null) + { + URI uri = traverse(elements, treeContentProvider, parent); + if (uri != null) + { + List<Object> children = Arrays.asList(treeContentProvider.getChildren(parent)); + index = children.indexOf(object); + if (index != -1) + { + return uri.appendSegment(Integer.toString(index)); + } + } + } + return null; + } + public void changing(LocationEvent event) { URI uri = URI.createURI(event.location); |