更新 E4 中处理程序的检查状态

Update Checked State of Handler in E4

在 E3 中,我们有几个处理程序需要检查,因此处理程序必须确定何时进行检查。那时候这是一件容易的事:

public class MyHandler extends AbstractHandler implements IElementUpdater {
    @Override
    public void updateElement(UIElement element, Map parameters) {
        element.setChecked(calculateCheckState());
    }
}

我找到了 this similar question,但范围更广(更新所有命令,而我只想在框架认为有必要时设置选中状态)。由于工具和菜单项可以是检查项或单选项,因此必须以某种方式实现。

那么如何在E4中设置handler的检查状态呢?

您可以在处理程序的 @CanExecute 方法中设置检查 (selected) 状态,方法如下:

@CanExecute
public boolean canExecute(MItem item)
{
  item.setSelected(... checked state ....);

  return true;
}

对于菜单项,每次显示菜单时都会调用 @CanExecute 方法。

对于工具栏项目,您可能需要使用 IEventBroker UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC 事件来强制方法 运行.

eventBroker.send(UIEvents.REQUEST_ENABLEMENT_UPDATE_TOPIC, argument);

argument 可以是

  • UIEvents.ALL_ELEMENT_ID 更新所有项目。
  • 要更新的单个项目的id。
  • A Selector (org.eclipse.e4.ui.workbench.Selector) 到 select 个要更新的项目。