覆盖Eclipse文件>;保存操作

覆盖Eclipse文件>;保存操作,eclipse,file,save,overriding,eclipse-rcp,Eclipse,File,Save,Overriding,Eclipse Rcp,我试图覆盖Eclipse文件>保存菜单操作以添加一些功能。 我试过以下几件事 a) 创建新操作并将其添加到全局操作处理程序 actionbar.setGlobalActionHandler(ActionFactory.SAVE.getId(),mySaveAction); actionRegistry.registerAction(操作); b) 创建新的处理程序并重写save命令 <extension point="org.eclipse.ui.handlers"> <ha

我试图覆盖Eclipse文件>保存菜单操作以添加一些功能。 我试过以下几件事

a) 创建新操作并将其添加到全局操作处理程序

actionbar.setGlobalActionHandler(ActionFactory.SAVE.getId(),mySaveAction);
actionRegistry.registerAction(操作);

b) 创建新的处理程序并重写save命令

<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功能,但“文件>保存”菜单的工作方式似乎有所不同


非常感谢您的帮助,谢谢。这可能与选择主菜单与按键或使用右键单击菜单时activePartId的不同有关。您看过其他扩展点了吗?

在RCP应用程序中,您可以在ActionBarAdvisor中提供保存操作。这也会注册该操作,以便可以从save命令获得该操作

但是作为EclipseIDE中的一个插件,IDE提供了ActionBarAdvisor并在文件菜单中连接了Save操作。因为从技术上讲,这不是一个命令(操作是SWT.Selection侦听器之上的一个步骤),所以您不能覆盖文件>保存操作

但是,每个部分都提供了自己的保存实现,因此您可以在multigeeditor中执行任何操作


另一个选项是使用org.eclipse.ui.commands.ICommandService.addExecutionListener(IEExecutionListener)并添加IEExecutionListener(或IEL2)。它可以监听save命令,ID在
org.eclipse.ui.IWorkbenchCommandConstants

中声明,根据我的计算,activePartId应该是相同的。此外,我还为同一个activePartId创建了其他动作(已创建),这些动作显示在文件菜单中。我查看了命令和处理程序扩展点,这看起来是正确的方法。还有其他扩展点我应该使用吗?谢谢你的澄清。我进行查询的主要动机是,我需要区分正在调用的save与File>save以及由于文件关闭而调用save。现在,我能够完成为什么在编辑器中重写onSave和IsSaveedEnclose方法的任务。但如果将来需要,我会记住听众的方法。这仍然是真的吗?它似乎对我根本不起作用(关于Indigo):(是的,它对Indigo起作用(虽然现在不在Juno,这就来了)