我有一个贡献的命令和处理程序。处理程序的execute事件必须获取属性视图中实际选定的属性的值并对其执行操作,或者如果未选择任何属性,则会被禁用。如何使一个propertysheetpage成为一个选择提供者?
我已经试过:
1)将选择提供的东西从属性视图提供了选择。在这种情况下,PropertySheetViewer仅用于PropertySheetPage,但我无法将其设置为选择提供程序,因为PropertySheetPage的查看器是私有的,并且没有获取器。
2)覆盖PropertySheetPage的createControl方法:此方法为PropertySheetViewer创建一个Tree控件。一个选择监听器可以安装该树形控件,所以也许我可以让我的命令处理程序实现SelectionListener中......解决办法是像事端:
在我的编辑:
public Object getAdapter(@SuppressWarnings("rawtypes") Class type) {
if (type == IPropertySheetPage.class) {
PropertySheetPage page = new PropertySheetPage() {
@Override
public void createControl(Composite parent) {
super.createControl(parent);
IHandler handler = someWayToGetMyCmdHandler();
((org.eclipse.swt.widgets.Tree) getControl())
.addSelectionListener(handler);
}
};
IPropertySheetEntry entry = new UndoablePropertySheetEntry(
getCommandStack());
page.setRootEntry(entry);
return page;
}
return super.getAdapter(type);
}
我的命令处理程序像我说的那样实现SelectionListener ...这种方法的问题是我找不到一个方法来获取对我贡献的命令处理程序(上面的someWayToGetMyCmdHandler())的引用。
有没有人对此有任何线索,或者有任何其他可能的解决方法?
我已经在我的命令处理程序中添加了一个私有“选择”属性,并为其添加了一个getter/setter作为自定义通知/更新处理程序的方式。我认为用IHandlerService更新答案和有关如何查找处理程序的信息会很有趣,我可以编辑答案来添加此信息吗? – roirodriguez 2012-01-05 09:06:41
@roirodriguez继续前进:) – 2012-01-05 09:11:10