使用我的Eclipse插件包含多页面编辑器我遇到了方法isSaveEnabled()
的问题,该方法应该被覆盖以禁用或启用保存打开文件的可能性。我禁止在某些条件下更改页面,所以我有相应的字段和方法来实现这一点:
public class ARTEditor
extends FormEditor
implements IResourceChangeListener
{
private boolean pageChangeEnabled;
@Override
protected void pageChange(int newPageIndex)
{
if (pageChangeEnabled)
{
super.pageChange(newPageIndex);
switch (newPageIndex)
{
// handling the change of the active page
}
}
}
// getter + setter for pageChangeEnabled used by other components
}
现在我想禁用/启用相同条件的保存操作。我认为覆盖上述方法就足够了:
@Override
public boolean isSaveAsAllowed()
{
return pageChangeEnabled;
}
但这不起作用,尽管该方法正确返回true
或false
。为了进行测试,我创建了无法更改页面的条件,然后按Ctrl + S并查看文件已保存,因为显示脏状态的星号消失了。
我是否需要采取其他措施来实现我的要求?
UPD:
可能的方法是:
@Override
public void doSave(IProgressMonitor monitor)
{
if (pageChangeEnabled)
{
// handle save action
}
}
我对此解决方案的不满意是用户可能会感到困惑:保存操作看起来很活跃,但实际上并非如此。
答案 0 :(得分:1)
isSaveAsAllowed
方法仅用于确定'文件>另存为......'可以使用。它不用于'文件>保存”。
如果您不想允许'文件>保存'你可以覆盖:
public boolean isDirty()
并阻止编辑器报告它是脏的。这也会阻止显示编辑器脏的'*'显示。
您可能需要在更改editorDirtyStateChanged()
标记时致电pageChangeEnabled
,让编辑再次致电isDirty
。
您也可以覆盖doSave
,在这种情况下,您应该在进度监视器上调用setCanceled
。您可能还想显示一个MessageDialog
来解释您没有进行保存的原因。