0

在我的编辑器中,每当我在编辑器中对文本小部件进行一些更改时,我都有以下功能可以将编辑器设置为脏,

private void setDirty(boolean b){
        isDirty = b;
        firePropertyChange(IEditorPart.PROP_DIRTY);
    }

问题是当调用 setDirty(...) 时,我可以看到编辑器标题显示符号“*”进入脏状态,但我看到“保存”菜单项仍然是灰色的(见下面的快照)。 在此处输入图像描述

“保存”菜单项由 plugin.xml 定义如下,

<extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="false"
            locationURI="menu:org.eclipse.ui.main.menu">
         <menu
               id="myProject.file"
               label="File">
            <command
                  commandId="org.eclipse.ui.file.save"
                  label="Save"
                  style="push">
            </command>
         </menu>
      </menuContribution>
      <menuContribution
            allPopups="false"
            locationURI="toolbar:org.eclipse.ui.main.toolbar">
         <toolbar
               id="myProject.toolbar1">
            <command
                  commandId="org.eclipse.ui.file.save"
                  label="Save"
                  style="push">
            </command>
         </toolbar>
      </menuContribution>
   </extension>

谁能帮忙看看这个问题?我的实施有什么问题?

4

3 回答 3

0

isDirty()在你的编辑器类中覆盖了吗?就像是:

@Override
public boolean isDirty() {
    return isDirty;
}
于 2012-10-15T14:22:49.373 回答
0

我只是尝试将以下代码添加到 ApplicationActionBarAdvisor 类中,然后可以启用 Save menuitem 并解决了我的问题,

protected void makeActions(IWorkbenchWindow window) {
        register(ActionFactory.SAVE.create(window));
    }

必须调用“寄存器(...)”吗?

奇怪的是,我在 Eclipse 3.7 上运行我的 RCP 而不调用 register(...),保存菜单项可以通过 firePropertyChange() 启用。但它在 Eclipse 4.0 中不起作用。因此,我在这里提出了这个问题。

于 2012-10-16T04:44:59.633 回答
0

在触发属性更改后尝试调用 editorDirtyStateChanged()。

于 2014-05-06T13:02:57.763 回答