|
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); |