覆盖Eclipse文件>保存动作

时间:2011-05-05 14:48:57

标签: eclipse file save override eclipse-rcp

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

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

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

非常感谢任何帮助,谢谢

2 个答案:

答案 0 :(得分:6)

在RCP应用程序中,您可以在ActionBarAdvisor中提供Save操作。这也会记录操作,以便从save命令中获取。

但作为Eclipse IDE中的插件,IDE提供ActionBarAdvisor并在“文件”菜单中连接“保存”操作。因为这在技术上不是命令(操作比SWT.Selection侦听器高出一步),这就是为什么你不能覆盖文件&gt;保存操作。

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

另一个选项是使用org.eclipse.ui.commands.ICommandService.addExecutionListener(IExecutionListener)并添加IExecutionListener(或IEL2)。这可以侦听save命令,ID在org.eclipse.ui.IWorkbenchCommandConstants中声明。

答案 1 :(得分:0)

当选择主菜单与按键或使用右键单击菜单时,它可能与activePartId有所不同。你看过其他扩展点吗?