S-JIS[2013-01-13/2013-10-29] 変更履歴

EclipseプラグインTextEditorクラス

Eclipseプラグイン開発のテキストエディターについて。


概要

Eclipseプラグインでは、テキストエディターのクラス(TextEditor)が用意されている。

TextEditorの描画部分にはJFaceが使われている。


XMLエディターの例

Eclipse3.7では、TextEditorの使用例として、XMLエディターを作るテンプレート「Plug-in with an editor」が用意されている。

プロジェクトの作成

「Plug-in with an editor」テンプレートを利用すると、以下の様なプロジェクトが作られる。


plugin.xml:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

   <extension
         point="org.eclipse.ui.editors">
      <editor
            name="サンプル XML エディター"
            extensions="xml"
            icon="icons/sample.gif"
            contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
            class="exampleeditorplugin.editors.XMLEditor"
            id="exampleeditorplugin.editors.XMLEditor">
      </editor>
   </extension>

</plugin>

DMDLエディターの例

例として、Asakusa FrameworkのDMDLのエディターを作ってみたい。

DMDLファイルの例:

/* アイテム */
item = {
    code : LONG;
    id   : TEXT;
    name : TEXT;
};

プロジェクトの作成

まずはXMLエディターのテンプレートでプラグインプロジェクトを作成する。
DMDLエディター用のソースは0から作成し、必要なものをXMLエディターからコピーしてくる方針とする。
(最終的にはXMLエディターのソースは削除する)


plugin.xml

プロジェクトを作ったら、最初にplugin.xmlをDMDLエディター用に修正する。

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

   <extension
         point="org.eclipse.ui.editors">
      <editor
            name="Asakusa Framework DMDL エディター"
            extensions="dmdl"
            icon="icons/sample.gif"
            contributorClass="org.eclipse.ui.texteditor.BasicTextEditorActionContributor"
            class="jp.hishidama.eclipse_plugin.dmdl_editor.editors.DMDLEditor"
            id="dmdl_editor.editors.DMDLEditor">
      </editor>
   </extension>

</plugin>

エディターの名前とかファイルの拡張子とかクラス名とかIDを付ける。
(アイコンはとりあえず後回し(笑))


DMDLEditor

次に、plugin.xmlで指定したエディタークラスを作成する。(参考:XMLEditor.java)

src/jp/hishidama/eclipse_plugin/dmdl_editor/editors/DMDLEditor.java:

package jp.hishidama.eclipse_plugin.dmdl_editor.editors;

import org.eclipse.ui.editors.text.TextEditor;
public class DMDLEditor extends TextEditor {
	/**
	 * コンストラクター.
	 */
	public DMDLEditor() {
	}

	@Override
	public void dispose() {
		super.dispose();
	}
}

中身は全く何も記述していないが、TextEditorクラスでデフォルトの実装がされているので、もう使える。

Eclipseプラグインをテスト実行して開くEclipse上で拡張子dmdlのファイルを作って開くと、このエディタークラスが実行されている。


エディターのリフレッシュ

エディターをリフレッシュ(データを再解釈)する方法。

TextEditorのhandleEditorInputChangedを呼び出すと、データをリフレッシュできる。
ただしエディター内のデータとファイルの内容が一致していないと、一致させるかどうかの確認ダイアログが出る。
これを確認せずリフレッシュしたい場合は以下のようにすればよい。

	public void refresh() {
		IDocumentProvider provider = getDocumentProvider();
		IDocumentProviderExtension extension = (IDocumentProviderExtension) provider;
		try {
			extension.synchronize(getEditorInput());
		} catch (CoreException e) {
			e.printStackTrace();
		}

		//以下、アウトラインページフォールディングの更新
	}

参考: stackoverflowのEclipse : Update Editor


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