0

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

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

但是,我想改变这种行为。当页面上出现一些错误标记时,我不想启用保存按钮,它不应该允许用户在错误阶段保存模型。保存按钮应该被禁用,我怎样才能做到这一点。请清除我的疑问。

4

1 回答 1

1

EMF 生成的编辑器使用命令堆栈侦听器向编辑器触发 PROP_DIRTY。如果此属性被触发,底层框架将向编辑器询问脏状态的#isDirty 方法。这是您可以实现逻辑的地方。

@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 汤姆

于 2011-01-29T20:41:50.910 回答