【问题标题】:Asking for confirmation before closing an editor in Eclipse RCP在 Eclipse RCP 中关闭编辑器之前要求确认
【发布时间】:2016-10-17 15:25:02
【问题描述】:

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

更多详情:

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

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

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

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

【问题讨论】:

  • 您使用的是 Eclipse 4 吗?您可能可以在 Eclipse 4 中使用自定义 ISaveHandler。这在 e4 应用程序中很容易做到,但不确定如何在 3.x 兼容模式应用程序中做到这一点。
  • @greg-449 我不幸在 3.x 兼容模式下运行。

标签: eclipse-plugin eclipse-rcp


【解决方案1】:

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

MWindow window = ... get main window

IEclipseContext windowContext = window.getContext();

windowContext.set(ISaveHandler.class, ... your save handler);

在 3.x 兼容模式 RCP 中,您可以通过多个接口提供的IServiceLocator 接口获取MWindow。例如在视图或编辑器中:

MWindow window = (MWindow)getSite().getService(MWindow.class);

IWorkbenchWindow 也实现了IServiceLocator。

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

默认实现是org.eclipse.e4.ui.internal.workbench.PartServiceSaveHandler,您可以将其用作所需内容的示例。

【讨论】:

  • 感谢您的建议。但是,我不确定我是否遵循它。我不希望创建自定义保存处理程序,而是让用户选择中止关闭编辑器,无论其内容是否已保存。
  • 自定义保存处理程序 'promptToSave' 方法处理中止保存。
  • 谢谢。我查看了 PartServiceSaveHandler 实现,但它似乎没有帮助。我不是要中止保存操作,而是要中止关闭编辑器,无论它是否脏。换句话说,我试图让用户选择说“我不是故意按那个 (x) 按钮。请不要关闭我的编辑器。”。而且我想给他这个选项,不管编辑器状态(保存与否)。
  • 如果部件不脏,我不知道有什么可以做到的。
猜你喜欢
  • 2011-01-10
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 2018-04-22
  • 2018-07-17
  • 1970-01-01
相关资源
最近更新 更多