在 Eclipse e4 RCP 中,可以通过在模型定义中添加visible-when 表达式来控制工具栏和菜单项的可见性。
我想使用 e4 风格的命令式表达式而不是旧的核心表达式。 命令式表达式是通过创建一个类来定义的,该类的方法用 @Evaluate 注释并返回一个布尔值。
我的问题如下: 当 @Evaluate-method 最终被调用时,是否有可能以某种方式找出该方法是为哪个 MItem 调用的?
我可以通过依赖注入将 Eclipse 上下文传递到方法中,获取 MApplication 对象并从那里查找任何 MItem。然而,问题是我不知道要寻找哪个 MItem。
我无法将 MItem 直接注入到方法中,就像可以将 MPart 注入到处理程序中一样。
我想要实现什么: 我的程序可以在多种“模式”下运行(将其视为不同的视角)。根据模式的不同,不同的菜单和工具栏项目应该是可见或不可见的。
但是,我不想为每个项目创建不同的命令式表达式来控制其可见性。 我不想创建一个巨大的命令式表达式来在其方法体内单独定义每个项目的可见性。 它应该可以通过一种通用的命令式表达式来实现。
我的想法是为每个项目可见的每个模式添加标签(在模型编辑器中)。 例如,我们将模式称为 A、B 和 C。如果某个项目应该在模式 A 和 B 中可见,但在模式 C 中不可见,我想将标签“A”和“B”添加到项目中.
为了实现这一点,我需要能够找出为哪个 MItem 调用了 @Evaluate 方法。然后我可以从项目中获取标签并将其与当前模式进行比较。
命令式表达式中似乎无法获取当前项。
可以获取当前命令式表达式模型对象
MImperativeExpression
,并且还可以设置标签。
@Evaluate
public boolean test(MImperativeExpression expression)
{
List<String> tags = expression.getTags();
...