Eclipse Editor插件:isSaveAsAllowed

时间:2014-09-24 08:06:10

标签: java eclipse save editor eclipse-plugin

使用我的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;
}

但这不起作用,尽管该方法正确返回truefalse。为了进行测试,我创建了无法更改页面的条件,然后按Ctrl + S并查看文件已保存,因为显示脏状态的星号消失了。

我是否需要采取其他措施来实现我的要求?

UPD:

可能的方法是:

@Override
public void doSave(IProgressMonitor monitor)
{
    if (pageChangeEnabled)
    {
        // handle save action
    }
}

我对此解决方案的不满意是用户可能会感到困惑:保存操作看起来很活跃,但实际上并非如此。

1 个答案:

答案 0 :(得分:1)

isSaveAsAllowed方法仅用于确定'文件>另存为......'可以使用。它不用于'文件>保存”。

如果您不想允许'文件>保存'你可以覆盖:

public boolean isDirty()

并阻止编辑器报告它是脏的。这也会阻止显示编辑器脏的'*'显示。

您可能需要在更改editorDirtyStateChanged()标记时致电pageChangeEnabled,让编辑再次致电isDirty

您也可以覆盖doSave,在这种情况下,您应该在进度监视器上调用setCanceled。您可能还想显示一个MessageDialog来解释您没有进行保存的原因。