package rtt.ui.viewer;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.resource.LocalResourceManager;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.window.ToolTip;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IWorkbenchPage;
import rtt.ui.content.IClickableContent;
import rtt.ui.content.IDecoratableContent;
public class ContentTreeViewer extends TreeViewer {
private class ContentLabelDecorator extends BaseLabelProvider implements
ILabelDecorator {
@Override
public String decorateText(String text, Object element) {
if (element instanceof IDecoratableContent) {
IDecoratableContent content = (IDecoratableContent) element;
return content.decorateText(text, content);
}
return text;
}
@Override
public Image decorateImage(Image image, Object element) {
if (element instanceof IDecoratableContent) {
IDecoratableContent content = (IDecoratableContent) element;
return content.decorateImage(resourceManager, image, content);
}
return image;
}
}
LocalResourceManager resourceManager;
public ContentTreeViewer(Composite parent, int style,
final IWorkbenchPage currentPage) {
super(parent, style | SWT.VIRTUAL);
initViewer(currentPage);
ColumnViewerToolTipSupport.enableFor(this, ToolTip.NO_RECREATE);
}
private void initViewer(final IWorkbenchPage currentPage) {
resourceManager = new LocalResourceManager(
JFaceResources.getResources(), this.getControl());
setContentProvider(new RttTreeContentProvider());
setLabelProvider(new DecoratingLabelProvider(
new RttLabelProvider(),
new ContentLabelDecorator()));
addDoubleClickListener(new IDoubleClickListener() {
@Override
public void doubleClick(DoubleClickEvent event) {
if (event.getSelection() != null
&& event.getSelection() instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection) event
.getSelection();
if (selection.getFirstElement() instanceof IClickableContent) {
((IClickableContent) selection.getFirstElement())
.doDoubleClick(currentPage);
}
}
}
});
}
public ContentTreeViewer(Tree tree, final IWorkbenchPage currentPage) {
super(tree);
initViewer(currentPage);
}
}