覆盖Eclipse文件>保存操作
我想覆盖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功能,但“文件>保存”菜单似乎工作不同。
会很感激的任何帮助,感谢
在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
中声明。
它可能有一些做当选择对一个按键主菜单中的activePartId是不同的,或者使用右键菜单。你看过其他的扩展点吗?
从我认为activePartId应该是相同的。此外,我还有其他一些行为(我已经创建),它们显示在File菜单中的相同activePartId。我查看了命令和处理程序扩展点,这看起来是正确的方法。我应该使用另一个扩展点吗? – 2011-05-05 17:18:11
感谢Paul的澄清。我查询的主要动机是,我需要区分从File> Save和被调用时由于文件被关闭而调用的保存。我现在能够完成我的任务,为什么要重写编辑器中的onSave和isSaveNeededOnClose方法。但是如果将来需要的话,我会记住听者的方法。 – 2011-05-06 18:35:34
这仍然是真的吗?它似乎并没有为我工作(在靛蓝):( – snim2 2012-04-20 20:08:05
是的,它适用于靛蓝(虽然目前在朱诺,即将到来) – 2012-04-24 13:16:23