【问题标题】:Override Eclipse File > Save Action覆盖 Eclipse 文件 > 保存操作
【发布时间】:2011-08-19 11:24:32
【问题描述】:

我正在尝试覆盖 Eclipse File > Save 菜单操作以添加一些功能。 我尝试了以下方法

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

非常感谢任何帮助,谢谢

【问题讨论】:

    标签: eclipse file save overriding eclipse-rcp


    【解决方案1】:

    在 RCP 应用程序中,您可以在 ActionBarAdvisor 中提供保存操作。这也注册了操作,因此可以从保存命令中使用。

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

    但是,每个部分都提供了自己的保存实现,因此您可以在 MultiPageEditor 中做任何您想做的事情。

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

    【讨论】:

    • 感谢保罗的澄清。我查询的主要动机是我需要区分从 File > Save 调用的保存以及由于文件被关闭而调用的时间。我现在能够完成我的任务,为什么要在编辑器中覆盖 onSave 和 isSaveNeededOnClose 方法。但如果将来需要,我会牢记听众的方法。
    • 这仍然是真的吗?它似乎根本不适合我(在 Indigo 上):(
    • 是的,它适用于 Indigo(虽然目前不在 Juno 中,但即将推出)
    【解决方案2】:

    It might have something to do with the activePartId being different when the main menu is selected versus a keystroke or using the right-click menu.你看过其他扩展点吗?

    【讨论】:

    • 据我所知,activePartId 应该是相同的。此外,我还有其他操作(我创建的)显示在相同 activePartId 的文件菜单中。我查看了命令和处理程序扩展点,这看起来是正确的方法。我应该使用另一个扩展点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 2020-06-25
    • 1970-01-01
    • 2014-11-19
    • 2019-10-10
    • 2018-02-18
    相关资源
    最近更新 更多