【问题标题】:Eclipse e4 Context MenusEclipse e4 上下文菜单
【发布时间】:2016-04-02 00:30:17
【问题描述】:

我正在尝试使用 Eclipse 4.2 构建一个 RCP 应用程序。

第一个问题;我有一个TreeViewer。在树查看器中选择一个项目时,我需要显示两个堆叠的 MParts 之一。如何在 e4 中激活部件堆栈中的部件?

第二;我有一个与我的部件之一关联的上下文菜单。我需要仅在右键单击某些复合材料时才出现菜单。我有一个鼠标按下处理程序,它将包含我需要的所有数据的对象添加到当前上下文 (IEclipseContext),但我不知道如何从 CoreExpression 访问它(这似乎是唯一真正的控制菜单可见性的方法)。鼠标向上时,该对象将从上下文中删除。假设我的班级是RightClickData。如何编写核心表达式来测试当前上下文中是否存在RightClickData 的实例?

编辑,我的Application.e4xmi的一部分:

        <children xsi:type="basic:InputPart" xmi:id="_6nSEEJuhEeGpoZf9DvK6pQ" elementId="com.example.MyEditor" contributionURI="bundleclass://MyPlugin/com.example.MyEditor" label="The Editor" tooltip="My Editor">
          <menus xsi:type="menu:PopupMenu" xmi:id="_UdHPEJ4SEeGi0uxvOaa4gw" elementId="MyPlugin.rsmenu" label="Asdf" tooltip="asdf">
            <children xsi:type="menu:HandledMenuItem" xmi:id="_jwOz0J4SEeGi0uxvOaa4gw" label="Add Column" command="_fhTxwJ4REeGi0uxvOaa4gw"/>
            <children xsi:type="menu:HandledMenuItem" xmi:id="_trlpsJ4SEeGi0uxvOaa4gw" label="Delete Column" command="_iAIkoJ4REeGi0uxvOaa4gw"/>
            <children xsi:type="menu:MenuSeparator" xmi:id="_v8f8YJ4SEeGi0uxvOaa4gw"/>
            <children xsi:type="menu:HandledMenuItem" xmi:id="_wR7Z0J4SEeGi0uxvOaa4gw" label="Add Row" command="_bXrp8J4REeGi0uxvOaa4gw"/>
            <children xsi:type="menu:HandledMenuItem" xmi:id="_yf5GMJ4SEeGi0uxvOaa4gw" label="Delete Row" command="_l58HwJ4REeGi0uxvOaa4gw"/>
          </menus>
        </children>

【问题讨论】:

  • 这应该用 e4、eclipse-juno、eclipse-e4、eclipse-4.2 或类似的东西标记。
  • 对于第二个问题,您是否为您的MPart 创建了一个MPopupMenu 并使用EMenuService 将其与您的上下文菜单连接起来?
  • 我在Application.e4xmi 中设置了一个弹出菜单作为我的一部分。然后我使用EMenuService.registerContextMenu(...) 连接它。

标签: eclipse eclipse-rcp e4


【解决方案1】:

对于第一个问题,您可以使用org.eclipse.e4.ui.workbench.modeling.EPartService.activate(MPart) 激活您想要的部分。

【讨论】:

  • 这就是我所做的:ps.showPart(ps.findPart("my.part.id"), PartState.VISIBLE);PartState 枚举也有 ACTIVATECREATE。变量ps 是从当前上下文中检索到的EPartService 的一个实例。我还必须在Application.e4xmi 中设置零件的ID(对于findPart(String id))。
【解决方案2】:

我这样展示我的部分:

MPart part = partService.findPart("my.part.id");
if( part != null ){
    if( part.isVisible() == false )
        part.setVisible(true);
    partService.showPart( part, PartState.VISIBLE);
}

【讨论】:

    猜你喜欢
    • 2014-07-07
    • 2018-07-02
    • 2017-08-07
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多