ステータスバーへのアクセス
Eclipseの最下部には,いろんな情報を通知してくれるステータスバーが位置している。自作プラグインから,このステータスバーを利用したいと思うことも多いだろう。今回は,Eclipseのステータスバーへアクセスするための方法を紹介する。
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のアイコンの登録くらいに押さえておくようにすべきだろう。
| 固定リンク
この記事へのコメントは終了しました。
コメント