我有一个具有多个TableViewer
的编辑器,所以我不能只使用ISelectionService
来访问当前活动的选择。
要解决此问题,我的编辑器在创建表后使用ToolItem#setData
:
final IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
final IMenuService menuService = (IMenuService) window.getService(IMenuService.class);
final ToolBarManager manager = new ToolBarManager(new ToolBar(parent, SWT.NONE));
menuService.populateContributionManager(manager, TOOLBAR_URI);
manager.update(true);
for (final ToolItem item : manager.getControl().getItems()) {
item.setData(TABLE_VIEWER, myTableViewer);
}
以便处理程序可以像这样访问数据:
public Object execute(ExecutionEvent event) throws ExecutionException {
final Widget toolItem = ((Event) event.getTrigger()).widget;
final TableViewer myTableViewer = (TableViewer) toolItem.getData(TABLE_VIEWER);
// do magic...
return null;
}
这一切都很好,但是现在当我想根据选择启用/禁用处理程序时出现问题,例如在未选择任何内容时将其禁用。
通常的方法是通过 plugin.xml 以及标签enabledWhen
和activeWhen
来定义类似的内容。问题是我无法访问查看器。
我认为最可能的情况是获得一个PropertyTester
,但是它们也没有获得它们所附加的命令/处理程序的任何上下文(因为据推测它们可能会附加到完全不同的事物上)。
这就是为什么我对选择一无所知。
如何在周围的GUI上启用处理程序?