/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.view.Outline;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.LayerConstants;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.ui.parts.ContentOutlinePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
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;
/**
* Shows the workflow editor in a navigatable thumbnail view.
*
* @author Jan Flink
*/
public class OutlineView extends ContentOutlinePage {
private ScrollableThumbnail editorThumbnail;
private DisposeListener disposeListener;
private GraphicalViewer viewer;
private SashForm sash;
public OutlineView(GraphicalViewer viewer) {
super(viewer);
this.viewer = viewer;
}
@Override
public void createControl(Composite parent) {
sash = new SashForm(parent, SWT.VERTICAL);
Canvas canvas = new Canvas(sash, SWT.BORDER);
LightweightSystem lws = new LightweightSystem(canvas);
editorThumbnail = new ScrollableThumbnail(
(Viewport) ((ScalableFreeformRootEditPart) viewer.getRootEditPart()).getFigure());
editorThumbnail.setSource(((ScalableFreeformRootEditPart) viewer.getRootEditPart()).getLayer(LayerConstants.PRINTABLE_LAYERS));
lws.setContents(editorThumbnail);
disposeListener = new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (editorThumbnail != null) {
editorThumbnail.deactivate();
editorThumbnail = null;
}
}
};
viewer.getControl().addDisposeListener(disposeListener);
}
@Override
public Control getControl() {
return sash;
}
@Override
public void dispose() {
if (viewer != null) {
if (viewer.getControl() != null && !viewer.getControl().isDisposed()) {
viewer.getControl().removeDisposeListener(disposeListener);
}
super.dispose();
}
}
}