我们在RAP中使用Eclipse API,application.This使用Eclipse Modeling框架。当页面被编辑时,Model变为Dirty,因此,Save Button被启用。
在我们的编辑器页面中,当页面中出现错误时,我们将编辑器页面的验证标志设置为false,这将反过来在page.Then上显示红色标记,通常保存按钮也会变为启用状态。
但是,我想改变这个behavior.When一些错误标记出现在页面上,我不想启用保存按钮,.It不应该允许用户在错误阶段保存模型。保存按钮应该被禁用,我如何才能做到这一点。请澄清我的疑虑。
发布于 2011-01-30 04:41:51
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)方法中实现一个显示错误的对话框。更棘手的部分是覆盖关闭脏编辑器的默认行为。工作台将显示一个对话框,其中包含Yes、No和Cancel。要覆盖此行为,必须在编辑器中实现接口org.eclipse.ui.ISaveablePart2以覆盖promptToSaveOnClose()方法。在此方法中,必须再次使用您的逻辑来检查模型中的错误。如果有错误,这个方法必须返回ISaveablePart2.CANCEL,这样只要脏模型中有错误,编辑器就不能关闭。
HTH汤姆
https://stackoverflow.com/questions/4839083
复制相似问题