【问题标题】:Detach view in eclipse rcp and show/hide it programmatically在 Eclipse rcp 中分离视图并以编程方式显示/隐藏它
【发布时间】:2019-03-12 21:37:46
【问题描述】:

我需要一个视图添加到一个 Eclipse rcp 应用程序中,该应用程序是分离的并且最初是隐藏的。在用户操作后,如果它不可见,我想显示/打开它。

我设法在plugin.xml 中将视图添加到我的视角中。但我无法通过 plugin.xml 或代码隐藏或分离它。

我正在使用 eclipse/rcp 3。

有什么想法吗?

插件.xml

   <extension point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension
            targetID="a.company.infop.rcp.fahrplan.ui.perspectives.fahrplanPerspective">
         <view 
               closeable="true"
               id="a.company.infop.rcp.fahrplan.ui.views.verkehrsAnalyseView"
               minimized="false"
               ratio="0.5f"
               relationship="top"
               relative="org.eclipse.ui.editorss">
         </view>
      </perspectiveExtension>
   </extension>

   <extension point="org.eclipse.ui.views">
      <category
            id="a.company.infop.rcp.fahrplan.ui.fahrplanCategory"
            name="%fahrplan">
      </category>
      <view 
            category="a.company.infop.rcp.fahrplan.ui.fahrplanCategory"
            class="a.company.infop.rcp.fahrplan.internal.ui.views.VerkehrsanalyseView"
            icon="icons/suchergbnisse.png"
            id="a.company.infop.rcp.fahrplan.ui.views.verkehrsAnalyseView"
            name="%verkehrsanalyse"
            restorable="true">
      </view>
   </extension>

代码:

public class FahrplanPerspective implements IPerspectiveFactory {

    @Override
    public void createInitialLayout(IPageLayout layout) {
        IWorkbenchPage iWorkbenchPage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        IViewPart verkehrsAnalyseView = iWorkbenchPage.findView("a.company.infop.rcp.fahrplan.ui.views.verkehrsAnalyseView");
        PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(verkehrsAnalyseView);
    }

}

【问题讨论】:

    标签: java eclipse-rcp rcp


    【解决方案1】:

    我之前实现了这种类型的东西,看看这是否有帮助。 https://exploreeclipse.blogspot.com/2014/08/opening-eclipse-editor-or-view-in.html

    为此,您需要有 e4 工作台插件,它提供 org.eclipse.e4.ui.workbench.modeling API 服务。

    IWorkbench workbench = ActivatorPlugin.getDefault().getWorkbench();
    
    //get editorpart somehow which you wanted to open it.
    EditorPart openEditor = /*IDE.openEditor(workbench.getActiveWorkbenchWindow().getActivePage(), module, MyEditorID, false); */
    
    //get editor site
    IWorkbenchPartSite site = openEditor.getSite();
    
    //get model service for editor site
    EModelService modelService = (EModelService) site.getService(EModelService.class);
    MPartSashContainerElement  mpartService = (MPart) site.getService(MPart.class);
    
    //invoke detach on model service with coordinates.
    modelService.detach(mpartService, 100, 100, 700, 700);
    
    
    For view:
    
    //Get view part
    IViewPart view = workbench.getActiveWorkbenchWindow().getActivePage().findView(MyPerspective.ExplorerView_ID);
    
    //get site for view
    
    //invoke detach
    

    【讨论】:

    • 这只是 e4。 e3 中没有EModelService
    • 哦!我没有注意到。你能探索一下这个 org.eclipse.ui.internal.PerspectiveHelper.detachPart(IViewReference ref)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多