S-JIS[2013-01-26] 変更履歴

Eclipseプラグイン ラベル

Eclipseプラグイン開発で扱うラベルについて。


概要

Eclipseプラグインでは、ラベル(文字列および画像)をLabelProviderクラス(IBaseLabelProviderインターフェース)で扱う。

基本的なLabelProviderでは文字列に色を付けることは出来ない(と思う)が、StyledCellLabelProviderを使うと文字列の部分毎に別々の色を付けることが出来る。


基本的な例

画像(アイコン)と文字列を表示するラベル。

import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
public class MyLabelProvider extends LabelProvider {
	@Override
	public Image getImage(Object element) {
		if (element instanceof ModelToken) {
			ImageRegistry registry = Activator.getDefault().getImageRegistry();
			Image image = registry.get("DMDLEditor.MODEL_IMAGE");
			return image;
		}
		return null;
	}

getImage()で画像を返す。nullを返すと画像は表示されない。

	@Override
	public String getText(Object element) {
		if (element instanceof ModelToken) {
			ModelToken token = (ModelToken) element;
			return token.getModelName();
		}
		if (element instanceof PropertyToken) {
			PropertyToken token = (PropertyToken) element;
			String name = token.getPropertyName();
			String type = token.getDataType();
			if (type == null) {
				return name;
			}
			return name + " : " + type;
		}
		return element.toString();
	}
}

getText()で文字列を返す。

※この例のModelTokenとかPropertyTokenは自作のクラス。


スタイル付き文字列

文字列(の一部)に色を付ける(スタイルを指定する)にはStyledCellLabelProviderクラスを使う。

import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Image;
public class MyLabelProvider extends StyledCellLabelProvider {
	@Override
	public void update(ViewerCell cell) {
		Object element = cell.getElement();
		if (element instanceof ModelToken) {
			ModelToken token = (ModelToken) element;
			update(cell, token);
		} else if (element instanceof PropertyToken) {
			PropertyToken token = (PropertyToken) element;
			update(cell, token);
		}

		super.update(cell);
	}

ラベルのデータを取得する為にupdate()が呼ばれる。
引数のcellにデータが入ってくるので、データ(の型)に応じて文字列や画像を設定する。

	protected void update(ViewerCell cell, ModelToken model) {
		StyledString styledString = new StyledString();
		styledString.append(model.getModelName());

		cell.setText(styledString.toString());
		cell.setStyleRanges(styledString.getStyleRanges());

		// 画像
		ImageRegistry registry = Activator.getDefault().getImageRegistry();
		Image image = registry.get("DMDLEditor.MODEL_IMAGE");
		cell.setImage(image);
	}
	protected void update(ViewerCell cell, PropertyToken prop) {
		StyledString styledString = new StyledString();
		styledString.append(prop.getPropertyName());

		String type = prop.getDataType();
		if (type != null) {
			styledString.append(" : " + type, StyledString.DECORATIONS_STYLER);
		}

		cell.setText(styledString.toString());
		cell.setStyleRanges(styledString.getStyleRanges());
	}
}

スタイル(色)を指定できる文字列クラスとして、StyledStringを使う。使い方はStringBuilderのようなイメージ。
append(String)でスタイル指定なしの文字列を追加する。
append(String, Styler)でスタイル指定つきの文字列を追加する。
で、最終的にViewrCellのTextとStyleRangesに文字列とスタイルをセットする。


Stylerの種類は(Eclipse3.7では)3つ用意されている。
これらを指定すると、文字列に色が付く。

スタイルを作りたい場合はStyledString.createColorRegistryStyler(String foregroundColorName, String backgroundColorName)を使う。
色名はJFace(JFaceResources.getColorRegistry())に登録されている名前(JFacePreferencesに定数名が定義されている)を使う。


ちなみに、コンストラクターに(先頭の)文字列およびスタイルを指定することも出来る。

StyledString styledString = new StyledString();
styledString.append(text);
←同じ→
StyledString styledString = new StyledString(text);
StyledString styledString = new StyledString();
styledString.append(text, styler);
←同じ→
StyledString styledString = new StyledString(text, styler);

Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま