2013-01-09 2 views
1

Eclipse RCP 응용 프로그램에서 두 번 클릭하여 표시되는 요소를 그리기 위해 다른 편집기를 선택할 수있는 TreeViewer가 있습니다. 내 톱 메뉴에는 도면을 사용/사용 중지 할 수있는 옵션이 있습니다. 편집자에 대한 조치는 다음과 같습니다 :TreeViewer 요소를 클릭 할 때 메뉴를 통해 eclispe rcp 편집기를 활성화/비활성화하십시오.

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

우선 동작이 이미 plugin.xml을 통해 편집기에 연결되어 있으므로 이 null인지 확인하지 않아도됩니다.

두 번째로 API가 isMachineHallEditingMode()임을 알 수 있습니다. 왼쪽 트리를 선택하면 작업이 제대로 작동하는지 알려줍니다.

중요 함으로 설정하면 plugin.xml에 항상이 사용 설정됩니다. 사용 가능 처리는 selectionChanged에서 이루어 지므로 Enables for: 매개 변수는 비워 두어야합니다.

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()); 
    }  
}