【问题标题】:Eclipse RCP dynamic MenuContribution hide and unhide with CoreExpressionEclipse RCP 动态 MenuContribution 使用 CoreExpression 隐藏和取消隐藏
【发布时间】:2019-11-24 16:55:18
【问题描述】:

我目前正在尝试在我的 Eclipse RCP 应用程序中为 MenuContribution 添加visibleWhen 条件。我们有不同版本的应用程序,我们用IClientConfiguration 接口/服务来区分它们,它或多或少地用作功能切换。

取决于女巫app-$version.product 被称为不同的实现配置将应用程序的一部分。

但是.. 了解当前情况:我们有一个在通用 fragment.e4xmi 中定义的菜单,我想根据配置隐藏一个菜单。为此,我添加了切换 isAdminMenuActive()。我希望我可以创建一个 CoreExpression 并(以某种方式)使用该服务的返回值。但不幸的是,我现在无法让它工作。

我尝试了以下内容: 片段.e4xmi:

    <elements xsi:type="menu:MenuContribution" xmi:id="_ZuL6oA4IEeqbk5lJVdc6WQ" elementId="com.example.client.menucontribution.administration" parentId="com.example.product.main.menu">
      <children xsi:type="menu:Menu" xmi:id="_ngOY4LOMEemRpJf6BiOdqQ" elementId="com.example.client.menu.administration" label="%UI.general.administration">
        <visibleWhen xsi:type="ui:CoreExpression" xmi:id="_rrmcQA4lEeqbk5lJVdc6WQ" coreExpressionId="com.example.client.configuration.adminMenuActiveExpression"/>
        <children xsi:type="menu:HandledMenuItem" xmi:id="_B4RqsLONEemRpJf6BiOdqQ" elementId="com.example.client.menuitem.action.administration" label="%UI.action" tooltip="%UI.action" command="_XnSp8LOPEemRpJf6BiOdqQ"/>
      </children>
    </elements>

插件.xml

<extension
    point="org.eclipse.core.expressions.definitions">
    <definition
       id="com.example.client.configuration.adminMenuActiveExpression">
       <with variable="com.example.client.configuration.adminMenuActive">
            <equals
                  value="true">
            </equals>
         </with>
     </definition>
</extension>

Startapp.java

    @PostConstruct
    public void init(IEclipseContext context) {
        context.set(com.example.client.configuration.adminMenuActive,
                configuration.isAdminMenuActive().toString());
    }

当前的行为是无论加载哪种配置,菜单都不会显示。我已经尝试过是否将变量添加到IEclipseContext,这发生在应用程序启动阶段的早期。目前我不知道出了什么问题。

【问题讨论】:

    标签: eclipse eclipse-plugin eclipse-rcp rcp


    【解决方案1】:

    您可以使用“命令式表达式”,而不是在 fragment.e4xmi 中使用核心表达式。您可以通过更改片段编辑器中的“Visible-When Expression”来做到这一点。

    命令式表达式指定一个直接调用的 Java 类,以便更轻松地访问您的代码。调用标记为@Evaluate 的方法来评估表达式。可能是这样的:

    @Evaluate
    public boolean evaluate(@Named("com.example.client.configuration.adminMenuActive") String active)
    {
      return Boolean.valueOf(active); 
    }
    

    使用它可以更轻松地查看正在发生的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多