我正在使用E4 RCP应用程序,并且有一个上下文菜单,其中的菜单项是否可见取决于选择。我发现这样做的方法是使用plugin.xml中定义的核心表达式,如下所示:
<extension
point="org.eclipse.core.expressions.definitions">
<definition
id="com.foo.bar.test.core.expression">
<with variable="org.eclipse.ui.selection">
<iterate ifEmpty="false">
<or>
<instanceof value="com.foo.bar.Class1">
</instanceof>
<instanceof value="com.foo.bar.Class2">
</instanceof>
</or>
</iterate>
</with>
</definition>
这可以工作,并且如果所选项目是Class1或Class2的实例,则显示菜单项。
这一切似乎都是一种极其讨厌的做事方式!当其中许多添加时,它将成为维护和调试的噩梦。
任何人都可以演示一种不太像XML的方式吗? Java中的纯编程方法会很棒!
最佳答案
例如,核心表达式不适用于工具栏项目。您可以在命令处理程序中使用以下变通办法:
public class SomeHandler {
protected MToolItem toolItem;
@CanExecute
@Inject
public boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION) @Optional ISelection selection)
{
boolean canExecute = ...
setToolItemVisible(canExecute);
...
}
private void setToolItemVisible(final boolean visible) {
if (toolItem != null) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
toolItem.setVisible(visible);
}
});
}
}
}
由EModelService检索
toolItem
的位置