1
我想在eclipse大綱視圖中顯示包含在我的GEF編輯器中的圖形的縮略圖,但在大綱中顯示「輪廓不可用」。這是我創建的ContentOutlinePage:從GEF編輯器創建縮略大綱視圖
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.ScalableRootEditPart;
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;
public class OverviewContentPage extends ContentOutlinePage {
private ScrollableThumbnail thumbnail;
private DisposeListener disposeListener;
private GraphicalViewer viewer;
public OverviewContentPage(GraphicalViewer viewer) {
super(viewer);
this.viewer = viewer;
}
@Override
public void createControl(Composite parent) {
Canvas canvas = new Canvas(new SashForm(parent, SWT.VERTICAL), SWT.BORDER);
LightweightSystem lws = new LightweightSystem(canvas);
thumbnail = new ScrollableThumbnail(
(Viewport) ((ScalableRootEditPart) viewer.getRootEditPart()).getFigure());
thumbnail.setSource(((ScalableRootEditPart) viewer.getRootEditPart()).getLayer(LayerConstants.PRINTABLE_LAYERS));
lws.setContents(thumbnail);
disposeListener = new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (thumbnail != null) {
thumbnail.deactivate();
thumbnail = null;
}
}
};
viewer.getControl().addDisposeListener(disposeListener);
}
@Override
public void dispose() {
if(viewer != null) {
if (viewer.getControl() != null && !viewer.getControl().isDisposed())
viewer.getControl().removeDisposeListener(disposeListener);
super.dispose();
}
}
}
在我的GEF編輯,添加以下行:
@Override
public Object getAdapter(Class type) {
...
if(type == IContentOutlinePage.class) {
return new OverviewContentPage(getGraphicalViewer());
}
return super.getAdapter(type);
}
我缺少的東西?