Java Eclipse编辑器插件:isSaveAsAllowed

Java Eclipse编辑器插件:isSaveAsAllowed,java,eclipse,save,editor,eclipse-plugin,Java,Eclipse,Save,Editor,Eclipse Plugin,在使用包含多页编辑器的Eclipse插件时,我遇到了方法isSaveEnabled()的问题,该方法应该被覆盖,以禁用或启用保存打开文件的可能性。我禁止在某些情况下更改页面,因此我有相应的字段和方法来实现: public class ARTEditor extends FormEditor implements IResourceChangeListener { private boolean pageChangeEnabled; @Override p

在使用包含多页编辑器的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
    }
}

我不喜欢这个解决方案,因为用户可能会感到困惑:保存操作看起来是活动的,但实际上不是。

允许使用
isSaveAsAllowed
方法仅用于确定是否可以使用“文件>另存为…”。它不用于“文件>保存”

如果不想允许“文件>保存”,可以覆盖:

public boolean isDirty()
并防止编辑报告它是脏的。这也将防止显示显示编辑器脏的“*”

更改
pagechangenabled
标志时,可能需要调用
editordystatechanged()
,以使编辑器再次调用
isDirty


您还可以覆盖
doSave
,在这种情况下,您应该在进度监视器上调用
setcancelled
。您可能还想显示一个
消息对话框
来解释为什么不执行保存。

什么是“它不工作”?你看到的是什么行为?我更新了问题,以便更准确地描述它。谢谢你的提示。我不想影响脏状态的指示,而只是在
pagechangenabled
设置为
false
时禁用保存按钮/操作。我更新了问题并添加了一个可能的解决方案。我认为
MessageDialog
可以解决问题。谢谢:)