2012-04-30 20 views
1

ViewPartという拡張ビューがあります。このビューでは、ツールバーメニューを追加したいと思います。Eclipseプラグイン開発でビューツールバーのメニュー/アクションを無効/有効にする方法

私が知っている、我々はActionContributionItemActionを使用して、ツールバーのメニューを追加し、ViewPartcreatePartControl方法からToolBarMenuに追加することができます。

私はこれを知りません:どうすればツールバーメニューをプログラムで有効/無効にできますか?

だから基本的に、私は、ビューをツールバーにプレイ停止、および一時停止ボタンを追加します。したがって、最初は、の再生ボタンが有効になっており、他のボタンは無効になっています。 Playボタンを押すと無効になり、その他のボタンは有効になります。

詳細については、私が達成したいことは次の画像のようなものです。

赤い円では無効になり、青い円では有効になります。代わりにアクションを使用しての

View

答えて

5

は、Eclipseのコマンドを見て(彼らはきれいな方法で行動のための交換や関数である)を持つ:http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/guide/workbench_cmd.htm

あなたが有効にすることができ、そのドキュメントに表示されますコマンドを無効にすると、それが使用されているすべての場所が自動的に状態を自動的に更新します。

+0

お薦めリンクありがとうございます。私はそれを読んだが、(おそらく私がそれを見逃している)私はプログラムでコマンドを無効/有効にする方法を見つけられなかった。この[link](http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_cmd_handlers.htm)から、IHandleService経由でコマンドをアクティブにする方法が示されていますしかし、それを有効/無効にする方法については言及していません。 –

+2

あなたのハンドラを使って 'IHandler2'インタフェースを実装すると、ハンドラを見つけてそれを動的に有効/無効にすることができます。 –

+0

答えにたくさん感謝します。私はそれを試してみます:) –

2

私はgoogleでつまずいて見つけた別のアプローチがあります。このアプローチは、ISourceProviderを使用して可変状態を提供しています。したがって、そのクラス(ISourceProviderを実装する)でコマンドの有効化/無効化の状態を提供できます。ここでは詳細リンクhttp://eclipse-tips.com/tutorials/1-actions-vs-commands?showall=1

+0

リンクはもう機能しません。 – andruso

2

これを試してみてください。..

1:あなたの行動を実装します。例:PlayAction、StopAction

Public class StartAction extends Action { 

@Override 
public void run() { 
    //actual code run here 
} 

@Override 
public boolean isEnabled() { 
    //This is the initial value, Check for your respective criteria and return the appropriate value. 
    return false; 
} 

@Override 
public String getText() { 
    return "Play"; 
} 
} 

2:あなたの視野の一部を登録し、これはあなたを助けるでしょう

Public class Playerview extends ViewPart 
    { 

@Override 
public void createPartControl(Composite parent) { 

//your player UI code here. 


    //Listener registration. This is very important for enabling and disabling the tool bar level buttons 
    addListenerObject(this); 


    //Attach selection changed listener to the object where you want to perform the action based on the selection type. ex; viewer 
    viewer.addselectionchanged(new SelectionChangedListener()) 



     } 
     } 

    //selection changed 

    private class SelectionChangedListener implements ISelectionChangedListener  { 

    @Override 
    public void selectionChanged(SelectionChangedEvent event) { 
     ISelection selection = Viewer.getSelection(); 
     if (selection != null && selection instanceof StructuredSelection) { 
      Object firstElement = ((StructuredSelection)selection).getFirstElement(); 

      //here you can handle the enable or disable based on your selection. that could be your viewer selection or toolbar. 
      if (playaction.isEnabled()) { //once clicked on play, stop should be enabled. 
       stopaction.setEnabled(true); //Do required actions here. 
       playaction.setEnabled (false); //do 

      } 

     } 

    } 

    } 

希望を(プレイヤーは一部を表示します)。

関連する問題