在关闭Eclipse RCP中的编辑器之前要求确认

时间:2016-10-14 07:27:18

标签: eclipse-plugin eclipse-rcp

TL; DR:在关闭EMF比较定义的CompareEditor之前,我不知道如何向用户显示确认对话框。

更多详情:

我有一个相对简单的用例:我要求用户确认他们希望在按下工作台窗口上的关闭(x)按钮后关闭编辑器。

我已经从Eclipse forum确定将IPartListener附加到窗口不会有帮助,因为只有在窗口关闭后才会调用partClosed()方法。

建议的解决方案是在用户关闭的部分中实现ISaveablePart2接口。但是,我不能这样做,因为该部分来自插件。特别是,它是由EMF Compare定义的CompareEditor。所以我不能添加任何额外的接口。或者,如果我以某种方式可以,我不知道如何(扩展类看起来不像一个选项,因为它是由另一个EMF比较类实例化而不是直接由我的代码实例化)。

我看到的另一个suggestion是使用IPerspectiveListener2而不是IPartListener,因为在该部分实际关闭之前会通知此侦听器。但是,我仍然不知道如何从这个监听器中止关闭该部分。这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用自定义ISaveHandler来处理保存。这是一个仅限Eclipse 4的界面,您在主IEclipseContext的{​​{1}}中注册:

MWindow

在3.x兼容模式RCP中,您可以通过许多接口提供的MWindow window = ... get main window IEclipseContext windowContext = window.getContext(); windowContext.set(ISaveHandler.class, ... your save handler); 接口获取MWindow。例如,在视图或编辑器中:

IServiceLocator

MWindow window = (MWindow)getSite().getService(MWindow.class); 也实现了IWorkbenchWindow

自定义保存处理程序处理告知编辑器部分保存并提示用户执行保存操作。

默认实现是IServiceLocator,您可以将其用作所需内容的示例。