将参数传递给视图

Mic*_*ael 4 java eclipse swt eclipse-plugin eclipse-rcp

在我的RCP应用程序中,TreeViewer左侧有一个带有导航的视图,右侧有一个用于我的视图的文件夹.透视图如下所示:

public void createInitialLayout(IPageLayout layout) {
    layout.setEditorAreaVisible(false);
    layout.setFixed(false);

    layout.addStandaloneView(NavigationView.ID, false, IPageLayout.LEFT, 0.7f, layout.getEditorArea());

    right = layout.createFolder("right", IPageLayout.RIGHT, 0.3f, "com.my.app.views.browser.navigation");


    layout.getViewLayout(WallpaperView.Id).setCloseable(false);//dummy view to keep the folder from closing
    layout.getViewLayout(WallpaperView.Id).setMoveable(false);      

    right.addView(WallpaperView.Id);        
    //add some placeholders for the potential views
    right.addPlaceholder(DefaultAdminView.ID+":*");

}
Run Code Online (Sandbox Code Playgroud)

我想根据用户在导航树中选择的内容打开不同的视图.认为这不会很难.我的导航树视图:

tree = new TreeViewer(composite);
tree.setContentProvider(new BrowserNavigationTreeContentProvider());
tree.setLabelProvider(new BrowserNavigationTreeLabelProvider());
tree.setInput(UserProfileAdvisor.getProject());     

//register Mouselistener for doubleclick events
tree.addDoubleClickListener(new IDoubleClickListener(){

    @Override
    public void doubleClick(DoubleClickEvent event) {
        TreeSelection ts = (TreeSelection) event.getSelection();
        Object selectedItem = ts.getFirstElement();
        String viewId = DefaultAdminView.ID;                

         //set viewId depending on the selectedItem.class
        try {
            PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE);

        } catch (PartInitException e) {
            ILogHelper.error("The view for the selected object could not be opened", e);
        }
    }

});
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.只有一个小问题:我需要以某种方式将对象(比如selectedItem)传递给我的视图,以便让用户与其内容进行交互.我怎么做?

我已经看到一些例子,我的一些同事写了一个他们放在右侧的自己的视图.然后他们添加了一个CTabFolder,实例化了视图并手动添加了它们.有更聪明的解决方案吗?

Mar*_*ato 10

创建一个新的界面,给它一个类似的方法accept( Object parameter ),让你的视图实现它.

然后,当你这样做时PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE),showView返回一个IViewPart.将此返回值转换为您的接口并调用该accept方法.


Tom*_*del 9

使用SelectionService,请参考Eclipse RCP让两个视图进行通信

在"导航"中实现SelectionProvider,在打开的视图中,您可以从选择服务中请求所选对象(参见文章)

HTH Tom