更新 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 个要更新的项目。
在 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 个要更新的项目。