在Eclipse RCP中,如何根据编辑器中的"脏"属性禁用保存工具栏按钮

pau*_*reg 4 java eclipse-rcp

在我的eclipse RCP 3.3应用程序中,我想根据当前编辑器脏标志启用或禁用"保存"工具栏按钮.

我正在尝试使用< enabledWhen >标签,但我无法使其正常工作.

这是plugin.xml中的代码部分:

<command
 commandId="org.acme.command.save"
 icon="icons/save.png"
 id="org.acme.command.save"
 style="push">
 <enabledWhen>
    <instanceof value="activeEditor"/>
     <test property="dirty" value="true"/>
 </enabledWhen>
</command>
Run Code Online (Sandbox Code Playgroud)

你知道这应该是怎么回事吗?

use*_*259 5

工作台提供对"保存"和"全部保存"操作的支持,因此您无需像尝试那样自行实施.

建议的方法是在您的类中添加扩展ActionBarAdvisor的支持.确切的代码将取决于类的结构,但您需要的代码位如下.

在您的字段声明中:

private IWorkbenchAction saveAction;
private IWorkbenchAction saveAllAction;
Run Code Online (Sandbox Code Playgroud)

在你的makeActions方法中:

    saveAction = ActionFactory.SAVE.create(window);
    register(saveAction);

    saveAllAction = ActionFactory.SAVE_ALL.create(window);
    register(saveAllAction);
Run Code Online (Sandbox Code Playgroud)

在fillActionBars方法中:

    IToolBarManager saveToolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT);
    saveToolbar.add(saveAction);
    saveToolbar.add(saveAllAction);
    coolBar.add(new ToolBarContributionItem(saveToolbar, "save"));   
Run Code Online (Sandbox Code Playgroud)

工作台将为您启用启用和禁用功能.

如果您确实想要实现自己的代码来执行此操作,那么您所采用的方法将起作用.您将需要更正XML(例如,instanceof元素正在检查所选对象是否为名为'activeEditor'的类的实例,这可能不是预期的).