2012-04-30 6 views
1

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

答えて

0

これは私が見つけたものですactivateHandler(IHandlerActivation)メソッドを呼び出すときに返されるIHandlerActivationが無効になっているときに、同じハンドラをアクティブにするときに再び使用することはできません。したがって、解決策はhandlerService.activateHandler(playActivation)の代わりにhandlerService.activateHandler(commandID, playHandler)を呼び出すことです。

関連する問題