【问题标题】:Eclipse Editor Plugin: isSaveAsAllowedEclipse 编辑器插件:isSaveAsAllowed
【发布时间】:2014-09-24 08:06:10
【问题描述】:

在我的 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 并查看文件已保存,因为显示脏状态的星号消失了。

为了实现我的要求,我还需要做些什么吗?

更新:

一种可能的方法是:

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

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

【问题讨论】:

  • “它不起作用”是什么意思?你看到了什么行为?
  • 我更新了问题以更准确地描述它。感谢您的提示。

标签: java eclipse save editor eclipse-plugin


【解决方案1】:

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

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

public boolean isDirty()

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

当您更改 pageChangeEnabled 标志时,您可能需要调用 editorDirtyStateChanged() 以让编辑器再次调用 isDirty

您也可以覆盖doSave,在这种情况下,您应该在进度监视器上调用setCanceled。您可能还想显示MessageDialog,解释您为什么不进行保存。

【讨论】:

  • 我不想影响脏状态的指示,而只是在 pageChangeEnabled 设置为 false 时禁用保存按钮/操作。我更新了问题并添加了可能的解决方案。
  • 我认为MessageDialog 将解决问题。谢谢:)
猜你喜欢
  • 2010-11-09
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
相关资源
最近更新 更多