eclipse-rcp - 从 GEF 编辑器创建微型轮廓 View

标签 eclipse-rcp eclipse-gef

我试图在 Eclipse 大纲 View 中显示 GEF 编辑器中包含的图形的微型 View ,但大纲中显示“大纲不可用”。这是我创建的 ContentOutlinePage:

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);
  }

我错过了什么吗?

最佳答案

重写方法 getControl() 解决了问题:

private SashForm sash;

...

@Override
public Control getControl() {
    return sash;
}

其中 sash 是在 createControl() 中传递给 LightweightSystem 的 SashForm。

关于eclipse-rcp - 从 GEF 编辑器创建微型轮廓 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22670665/

相关文章:

maven - 使用 Tycho 构建产品时出现 "Icon(s) not replaced"错误

eclipse - 我在 Eclipse 插件中的什么位置放置了一个利用多个 View 的算法

java - 具有可见图形的 EditPart 不在 EditPartRegistry 中 - 为什么?

java - 退出时保存 ViewPart

java - Eclipse 中的draw2d依赖问题与zest

java - 如何访问 plugin.xml 中的数据?

java - Eclipse:如何在垂直标尺上自定义标记的绘制

java - SWT 在 RCP 应用程序中加载字体

java - 如何在服务器上创建 GEF 图的图像

java - 当在 GEF 上打开同一文件的不同视角时,如何打开不同的插件