2011-05-05 67 views
11

我想覆蓋Eclipse文件>保存菜單操作來添加一些功能。 我曾嘗試下面的東西覆蓋Eclipse文件>保存操作

一)創建一個新的動作,並把它添加到全球行動處理器

actionBars.setGlobalActionHandler(ActionFactory.SAVE.getId(), mySaveAction); actionRegistry.registerAction(action);

B)創建一個新的處理程序,並覆蓋保存命令

<extension point="org.eclipse.ui.handlers"> 
<handler commandId="org.eclipse.ui.file.save" 
    class="com.diagrams.ui.SaveFileHandler"> 
<enabledWhen> 
    <with variable="activePartId"> 
    <equals 
    value="com.diagrams.editors.MultiPageEditor" /> 
    </with> 
</enabledWhen> 
<activeWhen> 
    <with variable="activePartId"> 
    <equals 
    value="com.diagrams.editors.MultiPageEditor" /> 
    </with> 
</activeWhen> 
</handler> 
</extension> 

使用這兩種方法,我已經能夠覆蓋鍵盤Ctrl + S功能,但「文件>保存」菜單似乎工作不同。

會很感激的任何幫助,感謝

回答

5

在RCP應用程序中,您可以在ActionBarAdvisor中貢獻Save操作。這也會註冊該操作,以便從保存命令中使用該操作。

但是作爲Eclipse IDE中的插件,IDE提供了ActionBarAdvisor並在File菜單中掛接了Save操作。因爲這在技術上不是命令(操作是SWT.Selection監聽器之上的步驟),這就是爲什麼您無法覆蓋文件>保存操作。

但是,每個部分都提供了自己的保存實現,因此您可以在MultiPageEditor中執行任何您想要的操作。

另一種選擇是使用org.eclipse.ui.commands.ICommandService.addExecutionListener(IExecutionListener)並添加一個IExecutionListener(或IEL2)。這可以偵聽保存命令,該ID在org.eclipse.ui.IWorkbenchCommandConstants中聲明。

+0

感謝Paul的澄清。我查詢的主要動機是,我需要區分從File> Save和被調用時由於文件被關閉而調用的保存。我現在能夠完成我的任務,爲什麼要重寫編輯器中的onSave和isSaveNeededOnClose方法。但是如果將來需要的話,我會記住聽者的方法。 – 2011-05-06 18:35:34

+0

這仍然是真的嗎?它似乎並沒有爲我工作(在靛藍):( – snim2 2012-04-20 20:08:05

+0

是的,它適用於靛藍(雖然目前在朱諾,即將到來) – 2012-04-24 13:16:23

0

它可能有一些做當選擇對一個按鍵主菜單中的activePartId是不同的,或者使用右鍵菜單。你看過其他的擴展點嗎?

+0

從我認爲activePartId應該是相同的。此外,我還有其他一些行爲(我已經創建),它們顯示在File菜單中的相同activePartId。我查看了命令和處理程序擴展點,這看起來是正確的方法。我應該使用另一個擴展點嗎? – 2011-05-05 17:18:11