“firePropertyChange(IEditorPart.PROP_DIRTY)”无法激活“保存”菜单项

时间:2012-10-15 02:19:12

标签: eclipse eclipse-plugin eclipse-rcp

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

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

问题是,当调用setDirty(...)时,我可以看到编辑器标题显示符号“*”为脏状态,但我看到“保存”菜单项仍然是灰色的(见下面的快照)。 enter image description here

“保存”菜单项由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>

有人可以帮忙看看这个问题吗?我的实施有什么问题?

3 个答案:

答案 0 :(得分:0)

您是否在编辑器类中覆盖了isDirty()?类似的东西:

@Override
public boolean isDirty() {
    return isDirty;
}

答案 1 :(得分:0)

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

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

是否必须调用“register(...)”?

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

答案 2 :(得分:0)

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