2012-05-16 45 views
1

我正在尝试使用Eclipse 4.2构建RCP应用程序。Eclipse e4上下文菜单

第一个问题;我有一个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> 
+0

这应该被标记为E4,Eclipse的JUNO,日食-E4,日食4.2,或这种性质的东西。 –

+0

对于第二个问题,你是否为你的'MPart'创建了一个'MPopupMenu',并使用'EMenuService'将它与你的上下文菜单相连接? –

+0

我在'Application.e4xmi'中设置了一个弹出式菜单作为我的部件的一个子部件。然后我使用'EMenuService.registerContextMenu(...)'连接它。 –

回答

1

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

+0

这就是我所做的:'ps.showPart(ps.findPart(“my.part.id”),PartState.VISIBLE);'。 'PartState'枚举也有'ACTIVATE'和'CREATE'。变量'ps'是从当前上下文中检索到的'EPartService'的一个实例。我还必须在'Application.e4xmi'中设置该部分的id(用于'findPart(String id)')。 –

0

我让我看到的部分是这样的:

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