我试图覆盖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;保存”菜单似乎工作方式不同。
非常感谢任何帮助,谢谢
答案 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有所不同。你看过其他扩展点吗?