В моем приложении 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
, создали экземпляры представлений и добавили их вручную.Есть ли более разумное решение?