2013-01-09 50 views
1

上點擊時,在我的Eclipse RCP應用程序我已經從那裏我可以選擇不同的編輯器,繪圖元素,這雙擊後顯示一個TreeViewer中允許通過菜單/確定停用Eclispe的RCP編輯器。在我的頂層菜單中,我有一個允許啓用/取消繪圖的選項。對於編輯的動作如下所示:一個TreeViewer中元素

public class EnableEditorAction implements IEditorActionDelegate { 

IEditor hallEditor = null; 

@Override 
public void run(IAction action) {  
    if (hallEditor != null){ 
     hallEditor.setMachineHallEditMode(true); 
    }  
} 

@Override 
public void setActiveEditor(IAction action, IEditorPart targetEditor) { 
    // check for enabled 
    boolean bEnabled = false; 
    if (targetEditor != null && targetEditor instanceof IMachineHallEditor) { 
     hallEditor = (IMachineHallEditor) targetEditor; 
     bEnabled = !hallEditor.isMachineHallEditingMode(); 
    } 
    action.setEnabled(bEnabled); 
} 

@Override 
public void selectionChanged(IAction action, ISelection selection) { 
    if (hallEditor != null) { 
     action.setEnabled(!hallEditor.isMachineHallEditingMode()); 
    }  
} 

}

我的問題是,一個編輯器中,當點擊菜單選項時,纔會啓用。我想要的是在點擊左側TreeViewer中的一個編輯器之後也啓用菜單選項。

我該怎麼做?

回答

0

首先,您不需要檢查targetEditornull,因爲操作已通過plugin.xml掛鉤到編輯器。

其次,我可以看到你有一個API isMachineHallEditingMode()。這應該告訴你,如果左樹被選中,並且行動應該正常工作。

這是重要將您的操作設置爲始終啓用plugin.xml中。 Enables for:參數應爲空,因爲啓用處理是在您的selectionChanged中完成的。

public class EnableEditorAction implements IEditorActionDelegate { 

    IEditor hallEditor; 

    @Override 
    public void run(IAction action) {  
      hallEditor.setMachineHallEditMode(true); 
    }  

    @Override 
    public void setActiveEditor(IAction action, IEditorPart targetEditor) { 
      hallEditor = (IMachineHallEditor) targetEditor; 
    } 

    @Override 
    public void selectionChanged(IAction action, ISelection selection) { 
      action.setEnabled(!hallEditor.isMachineHallEditingMode()); 
    }  
}