ステータスバーへのコンポーネント登録と削除
ステータスバーへのアイコン登録
今回は,Eclipseのワークベンチウィンドウに配置されているステータスバーへアイコン表示コンポーネントを登録する方法を紹介する。アイコンはSWTのLabelコンポーネントを使うので,実質上はSWTコンポーネントのステータスバーへの登録方法となる。
まず,普通にエディタがアクティブなときのステータスバーを見てみると,以下のような感じになっている。
編集モードやキャレットの位置などが,セパレータで区切られて表示されている。もちろん,自分のプラグインの領域を確保したいので,セパレータの登録も是非やっておきたい一つだろう。
まずはワークベンチウィンドウから,ステータスバーマネージャを取得する。この方法は,「ステータスバーへのアクセス」で紹介した手順で行えばよい。基本的には,得られたIStatusLineManagerオブジェクトのaddメソッドを使って,コンポーネントやアクションをステータスバーに登録する。例えば,アクションを登録するには以下のような感じになる。
IStatusLineManager manager = ...; // ステータスバーオブジェクトの取得
manager.add(new Action("アクション") {});
SWTのコンポーネントをステータスバーに登録するためには,IContributionItemインタフェースを実装したクラスのオブジェクトが必要となるが,ControlContributionクラスを使用することが一般的だろう。
manager.add(new ControlContribution("my_id") {
protected Control createControl(Composite parent) {
new Label(parent, SWT.SEPARATOR); // セパレータの登録
Label l = new Label(parent, SWT.NONE); // アイコンの登録
ImageDescriptor desc = ...;
l.setImage(desc.createImage());
return parent;
}
});
登録するIContributionItemオブジェクトには,IDが必要となる。このIDは,ステータスバーからオブジェクトを取得したり削除する際に使用できる。上記では,ControlContributionクラスのコンストラクタにIDを渡している。
セパレータは,Labelクラスのコンストラクタの第2引数にSWT.SEPARATORを渡すことで登録できる。上記の例では,その後にイメージを持つLabelオブジェクトを登録している。createControlメソッドに渡されるCompositeオブジェクトは,レイアウトとしてStatusLine$StatusLineLayoutクラスが適用されていて,コンポーネントの生成順に左から配置してくれるようになっている。
これを実行すると,以下のような感じになる。アイコンは,IP Messengerのものを使用してみた。
登録したIContributionItemオブジェクトを削除するためには,以下のようにすればよい。
IContributionItem item = manager.find("my_id");
manager.remove(item);
manager.update(true);
findメソッドにIDを渡してIContributionItemオブジェクトを取得し,それをremoveメソッドに渡して削除する。その後,updateメソッドを呼び出して,削除したことをステータスバーの表示に反映させる。
上記のIContributionItem系の扱いは,ツールバーやメニューバーに関しても同じなので,覚えておくと応用が利くだろう。
| 固定リンク
この記事へのコメントは終了しました。
コメント