【发布时间】:2014-06-12 17:22:31
【问题描述】:
点击TreeViewer时,如何正确给包含ContentOutlineView的部分焦点?
我正在创建自己的类似大纲的视图,当(视图)部分不在焦点上时单击ContentOutlinePage 中的TreeViewer 时,不会正确触发选择事件。我需要在TreeViewer 的选择事件触发之前单击选项卡以使该部分成为焦点。
我创建了自己的FooBarOutlineView,它扩展了PageBookView。我仅为FooBarModelView 部分创建页面并实例化扩展ContentOutlinePage 的FooOutlinePage 或BarOutlinePage
我的BarOutlinePage重载了createControl方法,给TreeViewer添加了一个内容提供者:
public class BarOutlinePage extends ContentOutlinePage {
@Override
public void createControl(Composite parent) {
super.createControl(parent);
getTreeViewer().setContentProvider(new MyContentProvider(new MyTreeModel()));
getTreeViewer().setLabelProvider(new MyViewLabelProvider());
getTreeViewer().setInput("root");
}
}
我的FooBarOutlineView(为简洁起见)看起来像:
public class FooBarOutlineView extends PageBookView {
@Override
protected IPage createDefaultPage(PageBook book) {
MessagePage defaultPage = new MessagePage();
initPage(defaultPage);
defaultPage.setMessage("An outline is not available. (default page)");
defaultPage.createControl(book);
return defaultPage;
}
@Override
protected PageRec doCreatePage(IWorkbenchPart part) {
IPageBookViewPage page = null;
if (part instanceof FooModelView)
page = new FooOutlinePage();
else if (part instanceof BarModelView)
page = new BarOutlinePage();
initPage(page);
page.createControl(getPageBook());
return new PageRec(part, page);
}
@Override
protected boolean isImportant(IWorkbenchPart part) {
return (part instanceof FooBarModelView);
}
}
热烈欢迎任何见解!
【问题讨论】:
-
您是否有理由不使用
ContentOutline类的标准内容大纲视图? -
我的 FooBarOutlineView 响应的是 View,而不是编辑器。如果您能解释一下,我会很乐意将我的大纲页面放入现有的大纲中? (我知道我可能能够覆盖 isImportant 方法)
-
@greg-449 我将
FooBarOutlineView切换为扩展ContentOutline并在我的视图中实现了getAdapter。更整洁(谢谢!),但存在同样的焦点问题。