テキストのフォーマット(2.戦略の登録)
さて,前回の「テキストのフォーマット(1.戦略の作成)」では,各区画用にフォーマット処理クラスを作成した。しかし,テキストエディタが直接これらのオブジェクトを利用するわけではない。ではどうなっているかというと,JFaceが提供しているテキストエディタフレームワークは,フォーマット処理をIContentFormatterオブジェクトに依頼する。IContentFormatterインタフェースには,指定されたコンテントタイプに対応するIFormattingStrategyオブジェクトを返すgetFormattingStrategyメソッドが規定されている。つまり,フレームワークからフォーマット処理を依頼されたIContentFormatterオブジェクトは,それに対して登録されたIFormattingStrategyオブジェクトをコンテントタイプに応じて利用することによりフォーマット処理を遂行していくのである。
IFormattingStrategyインタフェースの実装クラスは前回自作したが,IContentFormatterインタフェースに関してはEclipseがデフォルト実装クラスとしてContentFormatterクラスを提供してくれている。通常はContentFormatterクラスを使用すればよい。
IContentFormatterオブジェクトをエディタに提供する処理は,SourceViewerConfigurationクラスのサブクラスで行う。SourceViewerConfigurationクラスのサブクラスにてgetContentFormatterメソッドをオーバーライドし,その中でContentFormatterオブジェクトを生成して返却するようにする。
public class MySourceViewerConfiguration extends SourceViewerConfiguration {
...
public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) {
ContentFormatter formatter = new ContentFormatter();
formatter.setFormattingStrategy(
new MetaPartFormattingStrategy(), "META_PART");
formatter.setFormattingStrategy(
new ContentPartFormattingStrategy(), "CONTENT_PART");
return formatter;
}
}
ContentFormatterオブジェクトを生成し,setFormattingStrategyメソッドを使ってIFormattingStrategyオブジェクトを登録する。setFormattingStrategyメソッドには,第1引数にIFormattingStrategyオブジェクトを,第2引数に対象とする区画の識別子を指定する。そしてIFormattingStrategyオブジェクトが登録されたContentFormatterオブジェクトをgetContentFormatterメソッドの結果として返却する。もちろん上記のSourceViewerConfigurationクラスのサブクラスのインスタンスをAbstractTextEditorクラスのsetSouceViewerConfigurationメソッドを使って登録することも忘れずに。
以上でフォーマット機能の追加は完了である。しかし,このままではフォーマット処理を呼び出すことができず,宝の持ち腐れになってしまう。次回「テキストのフォーマット(3.戦略の呼び出し)」はフォーマット機能を呼び出すための処理について紹介する。
| 固定リンク
この記事へのコメントは終了しました。
コメント