在Eclipse-RAP应用程序中发生验证错误时禁用保存按钮

时间:2011-01-29 19:57:36

标签: eclipse-emf eclipse-rap

我们在RAP应用程序中使用Eclipse API。这使用Eclipse Modeling Frame Work。 当页面被编辑时,模型变脏并且作为结果,保存按钮变为启用。

在我们的编辑器页面中,当页面出现错误时,我们将Editor页面的Validation标志设置为false,这将在页面上显示红色标记。然后通常保存按钮也会变为启用状态

但是,我想改变这种行为。当页面上出现一些错误标记时,我不想启用保存按钮。它不应该允许用户在错误阶段保存模型。 应该禁用保存按钮,我该如何实现。 请清楚我的怀疑。

1 个答案:

答案 0 :(得分:1)

EMF生成的编辑器使用commandstacklistener将PROP_DIRTY激活到编辑器。如果触发了此属性,则底层框架将向编辑器#isDirty Method询问脏状态。这是您可以实现逻辑的地方。

@Override
public boolean isDirty() {
    Diagnostic diagnostic = validateMyModel();
    return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded() && diagnostic.getSeverity() == Diagnostic.OK;
}

本案例不包括用例,当用户对模型进行无效编辑时,编辑器可能已经变脏了。

但这不是恕我直言的最佳方式。因为如果用户关闭编辑器,模型的所有更改都将丢失,而不会发出任何通知(因为缺少脏标志)。所以他可能做了100次有效的修改,1次无效并且丢失了他改变的模型。

更好的方法是在用户想要保存对话框时显示警告消息。如果对话框中有错误,编辑器无法将其状态从脏更改为非脏,用户必须

  • 更正所有错误
  • 关闭编辑并放弃他所有的改变

要实现这一点,您必须在doSave(IProgressMonitor progressMonitor)方法中实现一个显示错误的对话框。更棘手的部分是覆盖关闭脏编辑器的默认行为。工作台将显示带有,是,否和取消的对话框 要覆盖此行为,必须在编辑器中实现接口org.eclipse.ui.ISaveablePart2以覆盖promptToSaveOnClose()方法。在此方法中,必须再次使用您的逻辑来检查模型中的错误。如果有错误,此方法必须返回ISaveablePart2.CANCEL,以便只要脏模型中存在错误,编辑器就不可关闭。

HTH汤姆