自定义Eclipse透视图,最初不可见的视图堆叠到编辑器区域

时间:2014-04-07 19:27:17

标签: eclipse plugins view perspective

我有一个自定义的perspecitve,只在plugin.xml中声明了一个编辑器区域。 另外,我得到了一个自定义视图,以编程方式打开。我想用编辑器区域堆叠这个视图。 如果我在透视扩展中将其设置为最初可见,则一切正常。

        <view
              id="my.viewID"
              minimized="false"
              relationship="stack"
              relative="org.eclipse.ui.editorss"
              visible="false">
        </view>

但是,如果我设置visible="false",并使用以下代码以编程方式打开它,它始终显示在与ConsoleView堆叠的底部区域。

    IViewPart viewPart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
                .showView("my.viewID", "secondID", IWorkbenchPage.VIEW_ACTIVATE);

当以编程方式打开时,是否有人知道如何将初始隐形视图堆叠到编辑器区域?

我已经尝试了此主题中给出的建议,但没有取得任何成功:Eclipse RCP - relative field of view perspective extension not working

3 个答案:

答案 0 :(得分:3)

有时你无法想象解决方案有多简单:

只需在plugin.xml中的视图ID末尾添加:*即可解决此问题:

<view
          id="my.viewID:*"
          minimized="false"
          relationship="stack"
          relative="org.eclipse.ui.editorss"
          visible="false">
</view>

令人难以置信的是,你发现有多少人说这根本不可能......

答案 1 :(得分:2)

好吧,我已经阅读了关于在编辑器区域放置视图的大部分内容,但没有一个工作。上面的答案1导致plugin.xml出现警告。在Eclipse Luna中,这可以在您的透视图初始化时起作用:

public void createInitialLayout(IPageLayout layout) {
  if ( layout instanceof org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout ) {
    org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout layout4=(org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout)layout;
    layout4.stackView(ID+":*",layout.getEditorArea(),false);
  }
  ...

上面的代码添加了一个带有&#34; ID&#34;的视图。这是一个多视图,添加到隐藏的编辑器堆栈中(最后一个参数是假=&#34;不可见&#34;)。

它也可以与其他Eclipse版本一起使用,但我还没有尝试过。

祝你好运!

答案 2 :(得分:0)

实现此目的最简单的方法是将视图添加到透视图扩展中,如下所示:

<extension point="org.eclipse.ui.perspectiveExtensions">
  <perspectiveExtension targetID="org.my.perspective">
    <view id="org.my.view"
          minimized="false"
          relationship="stack"
          relative="org.eclipse.ui.editorss"
          visible="false">
     </view>
  </perspectiveExtension>
</extension>

然后在没有辅助 ID 的情况下调用 IWorkbenchPage::showView(),即只有这样的一个参数:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("org.my.view");