2011-01-21 12 views
5

ユーザーがアクセス可能なビューを制御するためのカスタムパースペクティブスイッチャーが必要な小さなRCPアプリケーションで作業していました。ここで私は、視点を切り替えるために2つのボタンを備えたツールバーを追加しようとしています。Eclipse/RCPでのツールバーの位置付け

私は、物事をいくらか支配する最も良い方法は、視点を切り替えるために私のtheeアクション/コマンドを呼び出すApplicationActionBarAdvisorに2番目のツールバーを追加することだと考えました。

それでは、私は次のようになりfillCoolBar方法における第二ToolBarContributionItemを作成しましょう:

protected void fillCoolBar(ICoolBarManager coolBar) { 
    IToolBarManager toolbar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    ToolBarContributionItem mainBar = new ToolBarContributionItem(toolbar, "main"); 
    coolBar.add(mainBar); 

    toolbar.add(openViewAction); 
    toolbar.add(newConnectionAction); 

    //Custom perspective switcher bar 
    IToolBarManager perspectives = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    ToolBarContributionItem perspectiveBar = new ToolBarContributionItem(perspectives, "perspectives"); 
    coolBar.add(perspectiveBar);   
} 

任意のアイデアそれは、ウィンドウの右側になりますので、私はツールバーを揃えることができますか?私はこのポジションをハードコーディングしたいと思っています。

よろしく、 マイケル

答えて

4

は、私は同様の問題を持っていた:私は左側に標準ツールバーと左側の検索テキストとボタンを持っていると思いました。私は本当に解決策ではありませんでした。私が行ったことは、CoolBarManagerのレイアウトが変更されるようにToolBarContributionItemのfillメソッドをオーバーライドすることです。これは、(この場合には十分だった)Windows上ではなく、Linux上で動作しますが、良い解決策はありませんが、それは多分に役立ちます:

protected void fillCoolBar(ICoolBarManager coolBar) { 
    coolBar.setLockLayout(true); 

    IToolBarManager mainToolBar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    coolBar.add(new ToolBarContributionItem(mainToolBar, "main"));  
    fillMainToolBar(mainToolBar); 

    IToolBarManager searchToolBar = new ToolBarManager(SWT.FLAT | SWT.RIGHT); 
    ToolBarContributionItem searchBarItem = new ToolBarContributionItem(
      searchToolBar, "search") { 
     @Override 
     public void fill(CoolBar coolBar, int index) { 
      super.fill(coolBar, index); 
      // change the layout of the cool-bar to have the search 
      // controls on the right side 
      GridLayout coolBarLayout = new GridLayout(2, false); 
      coolBarLayout.marginHeight = 0; 
      coolBarLayout.marginWidth = 0; 
      coolBarLayout.horizontalSpacing = 20; 
      coolBarLayout.verticalSpacing = 0; 
      coolBarLayout.marginLeft = 10; 
      coolBar.setLayout(coolBarLayout); 
      GridData mainGridData = new GridData(SWT.LEFT, SWT.CENTER, true, 
        false); 
      GridData searchGridData = new GridData(SWT.RIGHT, SWT.CENTER, 
        false, false); 
      coolBar.getItem(0).getControl().setLayoutData(mainGridData); 
      coolBar.getItem(1).getControl().setLayoutData(searchGridData); 
     } 
    }; 
    coolBar.add(searchBarItem); 
    searchToolBar.add(new SearchTextControl()); 
    searchToolBar.add(searchAction); 
} 
+0

なぜLinuxでは動作しないのですか?プラットフォームに依存する魔法はここにはありません。 (私はLinuxを使用していません、私はちょうど興味があります:)) –

4

は、あなたたちはこれをコードにしたいのはなぜ?トリミングバーのlocationURIと共にmenuContributions拡張ポイントを使用することができます。 locationURIはMenuUtilクラスで利用可能です

+0

あなたは正しいです。しかし、メニュー貢献度がlocationURIを使用して正しく整列されていると定義する可能性はありません。 – Michael