S-JIS[2013-08-24/2015-04-28] 変更履歴

Xtextラベル

Xtextのラベルのメモ。


概要

Xtextで生成されたエディターでは、アウトラインツールチップ等で表示される名前(ラベル)やアイコンはLabelProviderを経由して取得している。
ラベルは、デフォルトでは構文ルールのname変数の値となる。

また、リンクを張っているオブジェクトを検索した際に出るツリーにはDescriptionLabelProviderから取得されたラベルが使われている。
デフォルトでは「名前 - ルールクラス名」という表示になる。

LabelProviderやDescriptionLabelProviderの雛形クラスは自動生成されているので、それらをカスタマイズすることが出来る。


Javaソースへの変換

Xtext 2.4.2では、ソース整形クラスとして生成されるファイルはXtend用である。[2015-04-28]
個人的には新しい言語を覚えるよりJavaの方が分かり易いので、Javaで実装したい。

XtendはJavaに似ているので、Javaに変換するのも難しくない。

元のxtendファイルは、ファイル自体は削除せずに、中身を空にしておく。
中身が残っていると同じクラスがJavaとXtendの両方で定義されることになり、コンパイルエラーになる。
xtendファイル自体を消してしまうと、次にxtextファイルをビルドしたときにまた生成されてしまうので、ファイル自体は残しておく必要がある。

ExampleLabelProvider.java:

package com.example.ui.labeling;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider;

import com.google.inject.Inject;
/**
 * Provides labels for a EObjects.
 * 
 * see http://www.eclipse.org/Xtext/documentation.html#labelProvider
 */
public class ExampleLabelProvider extends DefaultEObjectLabelProvider {

	@Inject
	public ExampleLabelProvider(AdapterFactoryLabelProvider delegate) {
		super(delegate);
	}
}

ラベルの実装例

ラベルを定義するには、textメソッドを実装する。[2015-04-28]
引数はルールのクラス。

import com.example.QualifiedName;

import org.eclipse.emf.common.util.EList;
public class ExampleLabelProvider extends DefaultEObjectLabelProvider {
〜
	protected String text(QualifiedName element) {
		StringBuilder sb = new StringBuilder();
		EList<String> list = element.getName();
		for (String s : list) {
			if (sb.length() != 0) {
				sb.append('.');
			}
			sb.append(s);
		}
		return sb.toString();
	}
}

アイコンの実装例

イメージ(アイコン)を定義するには、imageメソッドを実装する。[2015-04-28]
引数はルールのクラス。

import jp.hishidama.xtext.dmdl_editor.dmdl.Attribute;

import org.eclipse.swt.graphics.Image;
public class DMDLLabelProvider extends DefaultEObjectLabelProvider {
〜
	protected Image image(Attribute element) {
		return JavaUI.getSharedImages().getImage(ISharedImages.IMG_OBJS_ANNOTATION);
	}
}

Imageを返す他に、ファイル名を返すことも出来る。
この場合、プロジェクト直下のiconsディレクトリーにあるファイルが読み込まれる。

	protected String image(Model element) {
		return "hoge.gif";
	}

Xtext目次へ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま