2012-10-15 21 views
0

在我主編的「保存」菜單項,我有以下函數來設置編輯器髒每當我做編輯器中的文本控件的一些變化,「中的firePropertyChange(IEditorPart.PROP_DIRTY)」不能讓積極

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

問題是,當調用setDirty(...)時,我可以看到編輯器標題顯示一個符號「*」進入髒狀態,但我看到「Save」菜單項仍然是灰色的(見下面的快照)。 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> 

誰能幫忙看看這個問題?我的實施出了什麼問題?

回答

0

您是否在編輯器類中覆蓋isDirty()?喜歡的東西:

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

是的,我像你的代碼一樣忽略了isDirty()。 – Hua

0

我只是試圖下列代碼添加到ApplicationActionBarAdvisor類,然後保存菜單項可以啓用,我的問題解決了,

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

不「註冊(...) 「必須被稱爲?

奇怪的是,我在沒有調用register(...)的情況下在Eclipse 3.7上運行RCP,保存菜單項可能由firePropertyChange()啓用。但它在eclipse 4.0中不起作用。因此,我在這裏創建了這個問題。

0

嘗試在觸發屬性更改後調用editorDirtyStateChanged()。