2011-05-05 82 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