在我的编辑器中,每当我在编辑器中对文本小部件进行一些更改时,我都有以下功能来设置编辑器脏,
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>
有人可以帮忙看看这个问题吗?我的实施有什么问题?
答案 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()。