package org.csstudio.sds.ui.internal.editor.outline;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.draw2d.parts.Thumbnail;
import org.eclipse.gef.EditPartViewer;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.RootEditPart;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ContentOutlinePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
public class ThumbnailViewOutlinePage extends ContentOutlinePage implements IContentOutlinePage {
private Canvas _overview;
public ThumbnailViewOutlinePage(EditPartViewer viewer) {
super(viewer);
}
@Override
public void createControl(Composite parent) {
_overview = new Canvas(parent, SWT.NONE);
LightweightSystem lws = new LightweightSystem(_overview);
RootEditPart rep = getViewer().getRootEditPart();
if (rep instanceof ScalableFreeformRootEditPart) {
Thumbnail thumbnail = createThumbnail((ScalableFreeformRootEditPart) rep);
lws.setContents(thumbnail);
DisposeListener disposeListener = createDisposeListenerToViewerControl(thumbnail);
getViewer().getControl().addDisposeListener(disposeListener);
}
}
private Thumbnail createThumbnail(ScalableFreeformRootEditPart root) {
Thumbnail thumbnail = new ScrollableThumbnail((Viewport) root.getFigure());
thumbnail.setBorder(new MarginBorder(3));
thumbnail.setSource(root.getLayer(LayerConstants.PRINTABLE_LAYERS));
return thumbnail;
}
private DisposeListener createDisposeListenerToViewerControl(final Thumbnail _thumbnail) {
return new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (_thumbnail != null) {
_thumbnail.deactivate();
}
}
};
}
@Override
public Control getControl() {
return _overview;
}
}