したがって、PLAY_COMMAND_ID
とSTOP_COMMAND_ID
という2つのコマンドがあります。それぞれのコマンドにはそれぞれ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)
方法の終了時に呼び出されます。