« Contributing to Eclipse本のサンプルコード | トップページ | ステータスバーへのコンポーネント登録と削除 »

2005.11.22

ステータスバーへのアクセス

Eclipseの最下部には,いろんな情報を通知してくれるステータスバーが位置している。自作プラグインから,このステータスバーを利用したいと思うことも多いだろう。今回は,Eclipseのステータスバーへアクセスするための方法を紹介する。

statusbar

Eclipseの下部に配置されているステータスバーは,状況依存のステータスバーである。つまり,状況によって表示される内容が異なるということだ。ここで言う状況とは,ワークベンチ内で何が選択されているか,という状況である。例えばテキストエディタがアクティブになれば,編集属性やキャレットの位置が表示されるし,アウトラインビューがアクティブになれば,アウトラインに関する情報に表示が切り替わる。表示できる領域は限られているので,今どこに着目しているかによって表示が限定されるということだ。

ステータスバーを管理しているオブジェクトは,IStatusLineManagerインタフェースで表される。「ワークベンチウィンドウに張り付いているんだから,IWorkbenchWindowインタフェースに取得メソッドがあるんじゃないの?」と思ってしまうが,そんなに簡単ではない。なぜなら,状況依存という特徴があるからだ。

まずは,特定のViewに依存するステータスバーオブジェクトの取得方法から紹介しよう。ViewPartクラスのサブクラス内で,以下のようにすればステータスバーオブジェクトを得ることができる。

  IViewSite viewSite = getViewSite();
  IActionBars actionBars = viewSite.getActionBars();
  IStatusLineManager manager = actionBars.getStatusLineManager();

このmanagerオブジェクトに対してコンポーネントやアクションを登録することで,そのViewに特化したステータスバーに登録することができる。もちろん状況依存なので,managerに登録されたコンポーネントやアクションは,そのViewがアクティブになったときにしか表示されない。

次は,特定のEditorに依存するステータスバーオブジェクトの取得方法を紹介する。EditorPartクラスのサブクラス内で,以下のようにすればステータスバーオブジェクトを得ることができる。

  IEditorSite editorSite = getEditorSite();
  IActionBars actionBars = editorSite.getActionBars();
  IStatusLineManager manager = actionBars.getStatusLineManager();

このmanagerオブジェクトに対してコンポーネントやアクションを登録することで,そのEditorに特化したステータスバーに登録することができる。もちろん状況依存なので,managerに登録されたコンポーネントやアクションは,そのEditorがアクティブになったときにしか表示されない。

さて,上記の方法では,特定のViewやEditorがアクティブにならなければ,せっかく登録したコンポーネントやアクションが表示されない。時には状況に依存せずに常にコンポーネントやアクションをステータスバーに表示させておきたいこともあるだろう。状況非依存のステータスバーオブジェクトを得る方法があるのだが,Eclipse的には反則気味なやり方になる。internalパッケージのクラスを利用しなければならないからだ。

  WorkbenchWindow workbenchWindow = (WorkbenchWindow)getSite().getWorkbenchWindow();
  IActionBars actionBars = workbenchWindow.getActionBars();
  IStatusLineManager manager = actionBars.getStatusLineManager();

WorkbenchPartクラス(ViewPartやEditorPartの親)のサブクラス内で上記の処理を行うことによって,状況非依存のステータスバーのオブジェクトを得ることができる。このmanagerオブジェクトに対してコンポーネントやアクションを登録することで,ViewやEditorの選択状態に関わらず,常にコンポーネントやアクションが表示されるようになる。

ただでさえ狭い領域なので,ステータスバーにはむやみに常に表示されてしまうようなコンポーネントやアクションを登録するべきではない。internalパッケージにしか取得メソッドが存在しないのは,推奨できない方法なんだというメッセージが含まれているのだろう。よほど特殊な場合でなければ状況依存の方法を採用し,どうしてもという時は,16x16のアイコンの登録くらいに押さえておくようにすべきだろう。

|

« Contributing to Eclipse本のサンプルコード | トップページ | ステータスバーへのコンポーネント登録と削除 »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: ステータスバーへのアクセス:

« Contributing to Eclipse本のサンプルコード | トップページ | ステータスバーへのコンポーネント登録と削除 »