Передача параметров в представление - PullRequest
4 голосов
/ 15 февраля 2011

В моем приложении 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+":*");

}

Я хотел бы открыть разные виды в зависимости от того, что пользователь выбирает в дереве навигации.Я подумал, что это не будет трудно.Мое дерево навигации:

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

});

Кажется, это работает нормально.Есть только одна крошечная проблема: мне нужно как-то передать объект (скажем, selectedItem) моему представлению, чтобы позволить пользователю взаимодействовать с его содержимым.Как мне это сделать?

Я видел несколько примеров, когда некоторые из моих коллег написали собственный вид, который они разместили справа.Затем они добавили CTabFolder, создали экземпляры представлений и добавили их вручную.Есть ли более разумное решение?

Ответы [ 2 ]

10 голосов
/ 15 февраля 2011

Создайте новый интерфейс, предоставив ему метод, подобный accept( Object parameter ), и заставьте ваши представления реализовать его.

Затем, когда вы делаете PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(viewId, String.valueOf(++viewCounter), IWorkbenchPage.VIEW_ACTIVATE), метод showView возвращает IViewPart. Приведите это возвращение к вашему интерфейсу и вызовите метод accept.

9 голосов
/ 15 февраля 2011

Используйте для этого SelectionService, см. Eclipse RCP, позволяющий двум представлениям взаимодействовать

Реализуйте SelectionProvider в вашем "Navigation", и в открытом представлении вы можете запросить выбранный объектиз службы выбора (см. статью)

HTH Tom

...