Java Eclipse编辑器插件:isSaveAsAllowed
在使用包含多页编辑器的Eclipse插件时,我遇到了方法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
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
可以解决问题。谢谢:)