Eclipse plugin 如何使propertysheetpage成为选择提供者?

Eclipse plugin 如何使propertysheetpage成为选择提供者?,eclipse-plugin,eclipse-rcp,Eclipse Plugin,Eclipse Rcp,我有一个贡献的命令和它的处理程序。处理程序的execute事件必须获取properties视图中实际选择的属性的值并对其执行操作,如果未选择属性,则必须禁用该事件 我试过: 1) 将选择提供程序设置为从属性视图提供选择的内容。本例中的某些内容只是我的PropertySheetPage的PropertySheetViewer,但我无法将其设置为选择提供程序,因为PropertySheetPage的查看器是私有的,没有getter 2) 重写PropertySheetPage的createContr

我有一个贡献的命令和它的处理程序。处理程序的execute事件必须获取properties视图中实际选择的属性的值并对其执行操作,如果未选择属性,则必须禁用该事件

我试过:

1) 将选择提供程序设置为从属性视图提供选择的内容。本例中的某些内容只是我的PropertySheetPage的PropertySheetViewer,但我无法将其设置为选择提供程序,因为PropertySheetPage的查看器是私有的,没有getter

2) 重写PropertySheetPage的createControl方法:此方法为PropertySheetView创建树控件。可以为该树控件安装一个选择侦听器,所以也许我可以让我的命令处理程序实现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())


是否有人对此有任何线索,或者有任何其他可能的方法来解决这个问题呢?

有一个
handleEntrySelection(ISelection selection)
方法,您可以覆盖该方法,以获得有关查看器中选择更改的通知(尽管
PropertySheetPage
@noextend

第二部分(更新处理程序)比通常情况下要复杂一些。当工作台选择更改时,命令/处理程序会自动更新(您只需要实现
setEnabled(objectevaluationcontext)
)。但是由于
PropertySheetPage
设计用于在全局选择更改时更改其输入,因此您必须找到一些自定义方法来通知/更新处理程序

据我所知,目前无法使用自定义变量扩展平台命令事件处理机制,因此您只需使用workbench直接查找处理程序。

我添加了一个私有“选择”属性和它的getter/setter,作为自定义通知/更新处理程序的方式。我想用有关如何使用IHandlerService查找处理程序的信息更新答案会很有趣,我可以编辑答案以添加此信息吗?