따라서 PLAY_COMMAND_ID
및 STOP_COMMAND_ID
으로 식별되는 두 개의 명령이 있습니다. 각각의 명령에는 각각 playHandler
과 stopHandler
의 핸들러가 있습니다 (이들은 AbstractHandler
클래스를 확장하고 있습니다).Command Eclipse Plugin 개발의 IHandlerActivation 활성화/비활성화시이 코드의 문제점
이러한 명령은 내보기의 도구 모음에있는 버튼 스타일로 제공됩니다. 기본적으로 내가 원하는 것은 처음에는 PLAY_COMMAND
이 활성화되어 있지만 STOP_COMMAND
은 활성화되어 있지 않습니다. PLAY_COMMAND
을 클릭하면 STOP_COMMAND
이 활성화되고 그 자체는 비활성화됩니다 (PLAY_COMMAND
). 그리고 그 반대의 경우 STOP_COMMAND
클릭.
그래서 내가하는 일은 이와 같습니다. 처음에는 재생 버튼을 클릭 한 다음 정지 버튼이 활성화되고 재생 버튼이 비활성화되었습니다. 정지 버튼을 클릭 한 다음 재생 버튼이 활성화되고 정지 버튼이 비활성화됩니다.하지만 재생 버튼을 클릭하면 다시 말하면, 정지 버튼이 활성화되어있을 때도 재생 버튼은 여전히 활성화되어 있습니다). 그래서 여기 내 코드와 무슨 일이야 :
private AbstractHandler playHandler, stopHandler, pauseHandler, stepHandler;
private IHandlerActivation playActivation, stopActivation, pauseActivation, stepActivation;
private void createHandlers(){
final IHandlerService handlerService = (IHandlerService)getSite().getService(IHandlerService.class);
playHandler = new AbstractHandler() {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
handlerService.deactivateHandler(playActivation);
if(stopActivation == null){
stopActivation = handlerService.activateHandler(STOP_COMMAND_ID, stopHandler);
} else {
handlerService.activateHandler(stopActivation);
}
return null;
}
};
stopHandler = new AbstractHandler() {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
handlerService.deactivateHandler(stopActivation);
handlerService.activateHandler(playActivation);
return null;
}
};
playActivation = handlerService.activateHandler(PLAY_COMMAND_ID, playHandler);
}
}
createHandlers()
방법은 내보기에 createPartControl(Composite parent)
방법의 끝에서 호출됩니다.