将参数传递给视图 [英] Passing parameters to the view

查看:123
本文介绍了将参数传递给视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的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); //虚拟视图保持文件夹关闭
layout.getViewLayout(WallpaperView.Id).setMoveable (假);

right.addView(WallpaperView.Id);
//为潜在的视图添加一些占位符
right.addPlaceholder(DefaultAdminView.ID +:*);

}

我想打开不同的视图,基于什么用户在导航树中选择。认为这不会很难。我的导航树视图:

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

//注册用于doubleclick事件的Mouselistener
tree.addDoubleClickListener(new IDoubleClickListener(){

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

//设置viewId取决于selectedItem.class
try {
PlatformUI.getWorkbench()。getActiveWorkbenchWindow()。getActivePage()。showView(viewId,String.valueOf(++ viewCounter),IWorkbenchPage.VIEW_ACTIVATE);

} catch(PartInitException e){
ILogHelper.error(所选对象的视图无法打开,e);
}
}

});

这似乎工作正常。只有一个微小的问题:
我需要将对象(让我们说为selectedItem)传递给我的视图,以便让用户与其内容交互。我如何做?



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

解决方案

创建一个新的界面,给它一个方法,如 accept(Object参数)并使您的视图实现。



然后,当您执行 PlatformUI.getWorkbench()。getActiveWorkbenchWindow ).getActivePage()。showView(viewId,String.valueOf(++ viewCounter),IWorkbenchPage.VIEW_ACTIVATE)方法 showView 返回一个 IViewPart 。将此回复转发到您的界面,并调用接受方法。


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?

解决方案

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.

这篇关于将参数传递给视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆