2011-07-29 58 views
3

我想寫一些我認爲是一個非常簡單的Eclipse插件,但我真的很難找到我的方式,因爲我從來沒有使用過PDE。Eclipse插件:創建一個動態菜單和相應的處理程序?

基本上我想要做的是在Java Project上下文菜單中添加一個子菜單,該菜單將列出項目根目錄中的一堆可用文件。然後,在選擇其中一個子菜單項時,我希望調用該處理程序並傳遞所選文件的名稱。

到目前爲止,我已設法通過向org.eclipse.ui.menus擴展點添加動態menuContribution來正確顯示菜單。我已經定義了我自己的CompoundContributionItem,它查找適當目錄中的所有文件並填充菜單。每個菜單項都連接到我的處理程序(擴展AbstractHandler),並且每次選擇菜單項時都會調用處理程序。我不知道該怎麼做是讓我的處理程序根據選擇的菜單項實際執行某些操作。如果它以某種方式傳遞了菜單項標籤的字符串就足夠了,但我猜測可能有更好的方法。

我試着翻看org.eclipse.debug.ui的代碼,看看它們是如何與運行/調試配置一起做的,因爲這幾乎就是我想要的。他們從項目的.launches目錄中選取.launch文件並將其顯示在列表中。代碼雖然非常複雜,但還有許多與其無關的其他行爲,所以作爲一名初學者,我正在努力想方設法解決它。而且,他們似乎做了與我不同的方式,所以可能是我的方法完全錯誤。任何幫助或指針,將不勝感激。

回答

3

內彈出菜單的plugin.xml我終於找到這個問題的答案我自己。在plugin.xml中,可以爲每個命令指定參數,例如

<commandParameter 
    id="commandParameterID" 
    name="Name of the Parameter" 
    optional="false"> 
</commandParameter> 

現在,當我動態創建每個菜單項,我可以只是我的參數添加到參數地圖CommandContributionItemParameter對象。

CommandContributionItemParameter param = new CommandContributionItemParameter(PlatformUI.getWorkbench(), null, "CommandID", CommandContributionItem.STYLE_PUSH); 
param.parameters = new HashMap<String, String>(); 
param.parameters.put("commandParameterID", "TheValue"); 

被添加這樣的參數是在處理程序類訪問如下:

public Object execute(ExecutionEvent event) throws ExecutionException { 
    System.out.println(event.getParameter("commandParameterID")); 
    return null; 
} 
相關問題