2012-05-16 128 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); 
}