1

私のEclipse 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 のエディタの 1 つをクリックした後も、メニュー オプションを有効にすることです。

どうすればいいですか?

4

1 に答える 1

0

targetEditorまず、がnullかどうかを確認する必要はありません。これは、アクションが既に を介してエディターにフックされているためplugin.xmlです。

2 つ目は、API があることですisMachineHallEditingMode()。これにより、左側のツリーが選択されているかどうかがわかり、アクションが適切に機能するはずです。

でアクションを常に有効に設定することが重要です。有効化処理は で行われるため、パラメータは空にする必要があります。plugin.xmlEnables 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());
     }       
}
于 2013-08-09T10:08:50.973 に答える