【问题标题】:Custom Eclipse perspective, with initially invisble view stacked to editor area自定义 Eclipse 透视图,最初不可见的视图堆叠到编辑器区域
【发布时间】:2014-04-07 19:27:16
【问题描述】:

我得到了一个自定义透视图,其中仅在 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

【问题讨论】:

    标签: eclipse plugins view perspective


    【解决方案1】:

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

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

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

    难以置信有多少次你会发现人们说这根本不可能......

    【讨论】:

      【解决方案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);
        }
        ...
      

      上面的代码添加了一个带有“ID”的视图,它是一个多视图,添加到隐藏的编辑器堆栈中(最后一个参数是 false="not visible")。

      它可能也适用于其他 Eclipse 版本,但我还没有尝试过。

      祝你好运!

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-31
          • 1970-01-01
          • 2014-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-18
          • 1970-01-01
          相关资源
          最近更新 更多