RCP Perspective有两种观点

时间:2012-04-17 12:17:27

标签: eclipse-rcp

我通过“扩展”创建了两个视图的透视图。第一个视图有一个表,第二个视图有一个树。我想只显示应用程序打开时的第一个视图,当用户从表中选择一个项目时,将此项目名称放在第二个视图的文本字段中,并在第二个视图打开时隐藏第一个视图。我想要当用户按下按钮时,还会隐藏第二个视图并显示第一个视图。这可能吗?。

我设法将项目名称放在第二个视图中,但我无法协调显示和隐藏视图。

1 个答案:

答案 0 :(得分:2)

是的,可以显示和隐藏视图。

1)每个视图都必须有唯一的ID。此ID必须与plugin.xml的视图扩展中的id匹配。

这是我的一个plugin.xml视图扩展。

  <view
        class="gov.bop.rabid.ui.views.PrefetchView"
        icon="icons/folder_user.png"
        id="gov.bop.rabid.ui.views.PrefetchView"
        name="Prefetch"
        restorable="true">
  </view>

这是PrefetchView中的ID定义。

public static final String ID = "gov.bop.rabid.ui.views.PrefetchView";

通常,我将ID与类名相同。这对我来说不那么令人困惑。

2)在PerspectivecreateInitialLayout方法中,您必须使用占位符定义IFolderLayout。再次,这是我的代码。

    IFolderLayout consoleFolder = layout.createFolder(CONSOLE_ID, 
            IPageLayout.BOTTOM, 0.75f, editorArea);
    consoleFolder.addPlaceholder(PrefetchedInmatesView.ID);
    consoleFolder.addPlaceholder(FoundInmatesView.ID);
    consoleFolder.addView(ProcessedInmatesView.ID);

    setClosable(layout, FoundInmatesView.ID, false);
    setClosable(layout, PrefetchedInmatesView.ID, false);
    setClosable(layout, ProcessedInmatesView.ID, false);

3)您需要一个静态方法,允许您从任何其他视图中访问任何视图。我把这个静态方法放在我的Activator课程中,但你可以把它放在任何你想要的地方。

public static IViewPart getView(IWorkbenchWindow window, String viewId) {
    IViewReference[] refs = window.getActivePage().getViewReferences();
    for (IViewReference viewReference : refs) {
        if (viewReference.getId().equals(viewId)) {
            return viewReference.getView(true);
        }
    }
    return null;
}

4)最后,您可以显示和隐藏事件代码中的视图。这是一个例子。

        final PhotoView view = (PhotoView) RabidPlugin.getView(window,
                PhotoView.ID);
        if (view == null)
            return;

                    *** Do stuff with the other view ***

        IWorkbenchPage page = window.getActivePage();
        page.hideView(page.findView(FoundInmatesView.ID));