2011-12-30 24 views
0

我有一个贡献的命令和处理程序。处理程序的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())的引用。

有没有人对此有任何线索,或者有任何其他可能的解决方法?

回答

1

handleEntrySelection(ISelection selection)方法在PropertySheetPage,您可以覆盖,以通知查看器中的选择更改(虽然PropertySheetPage@noextend)。

第二部分(更新处理程序)比它通常会更棘手。当工作台选择改变时,命令/处理程序会自动更新(您只需执行setEnabled(Object evaluationContext)AbstractHandler)。但由于PropertySheetPage被设计为改变其对全局选择改变的输入,所以你必须找到一些自定义的方式来通知/更新你的处理程序。

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

+0

我已经在我的命令处理程序中添加了一个私有“选择”属性,并为其添加了一个getter/setter作为自定义通知/更新处理程序的方式。我认为用IHandlerService更新答案和有关如何查找处理程序的信息会很有趣,我可以编辑答案来添加此信息吗? – roirodriguez 2012-01-05 09:06:41

+0

@roirodriguez继续前进:) – 2012-01-05 09:11:10

相关问题