如何使用兼容层以编程方式在Eclipse Mars中使用文本编辑器?

时间:2016-03-18 15:59:44

标签: eclipse-rcp

我正在使用3.x-4.x兼容性层,我正在尝试打开并使用编辑器。我们现有的代码在实现IPartListener2的类中看起来像这样:

public void partOpened(IWorkbenchPartReference partRef) {
        if (partRef instanceof IEditorReference) {
            //force editor area visible
            partRef.getPage().setEditorAreaVisible(true);
            // if the editors are currently minimimized and we try to maximize them, then we'll cause a bug.
            if (partRef.getPage().getPartState(partRef) == IWorkbenchPage.STATE_MINIMIZED) {
                return; // so exit here
            }
            //check preferences
            final boolean maximized = EnterpriseManager.isMaximized();
            if (maximized) {
                partRef.getPage().setPartState(partRef, 1);
            }
        } 
    }

现在的问题是,只要在Mars中打开一个编辑器,它就不像以前那样在页面布局上打开最大化,但是窗口大小要小得多。

此外,在打开的编辑器规则栏上选择“还原”图标会导致编辑器的位置不稳定,编辑器的一部分位于布局的一部分中,而其他部分则显示在页面布局的其他区域中。

如何使用兼容层实现正确,可预测的编辑器使用?

1 个答案:

答案 0 :(得分:0)

猜测但可能是Eclipse 4不喜欢在处理setEditorAreaActive时调用setPartStatepartOpened方法。在Display.asyncExec代码完成之后,您可以尝试使用partOpened来延迟调用这些代码。

类似的东西:

public void partOpened(final IWorkbenchPartReference partRef) {
  Display.getDefault().asyncExec(new Runnable()
    {
      @Override
      public void run()
      {
        if (partRef instanceof IEditorReference) {
          //force editor area visible
          partRef.getPage().setEditorAreaVisible(true);
          // if the editors are currently minimimized and we try to maximize them, then we'll cause a bug.
          if (partRef.getPage().getPartState(partRef) == IWorkbenchPage.STATE_MINIMIZED) {
              return; // so exit here
          }
          //check preferences
          final boolean maximized = EnterpriseManager.isMaximized();
          if (maximized) {
            partRef.getPage().setPartState(partRef, IWorkbenchPage.STATE_MAXIMIZED);
          }
        }
      }
    });
}