Passing parameters to the view

给你一囗甜甜゛ 提交于 2019-12-04 04:00:00

问题


In my RCP application, I have a View with a TreeViewer for Navigation on the left side and a Folder for my views on the right side. The Perspective looks like this:

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+":*");

}

I would like to open different views, based on what the user selects in the navigation tree. Figured that wouldn't be to hard. My Navigation Tree view:

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

});

This seems to work fine. There's just one tiny problem: I need to pass the object (let's say the selectedItem) to my view somehow, in order to let the user interact with its content. How do I do that?

I've seen some examples where some of my colleagues wrote an own View which they placed on the right side. Then they added a CTabFolder, instantiated the views and added them manually. Is there a smarter solution?


回答1:


Create a new interface, giving it a method like accept( Object parameter ) and make your views implement it.

Then, when you do PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE) the method showView returns an IViewPart. Cast this return to your interface and call the accept method.




回答2:


Use the SelectionService for that, please refer to Eclipse RCP let two views communicate

Implement the SelectionProvider in your "Navigation" and in the opened view you can ask for the selected object from the selection-service (see article)

HTH Tom



来源:https://stackoverflow.com/questions/5003962/passing-parameters-to-the-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!