エディターは、オブジェクト (しばしばファイル) の編集が可能なワークベンチの一部分です。 エディターは、 プラットフォーム・ワークベンチ UI に堅固に統合されている場合を除き、ファイル・システム編集ツールと同じ方法で稼働します。 エディターは、常に入力オブジェクト ( IEditorInput) と関連しています。 入力オブジェクトは、編集される文書またはファイルとして考えることができます。 エディターでの変更内容は、ユーザーがそれを保管するまでは有効になりません。
ワークベンチ・ページ内の特定エディター入力に対して、1 つのエディターのみ開くことができます。 例えば、ユーザーがワークベンチ内の readme.txt を編集している場合、 同じパースペクティブでそれを再び開くと、同じエディターがアクティブになります (異なるワークベンチ・ウィンドウまたはパースペクティブから、同じファイルについて、別のエディターを開くことができます) ただし、ビューとは異なり、テキスト・エディターなどの同じエディター・タイプが、 1 つのワークベンチ・ページ内で異なる入力のために何度も開く可能性があります。
ワークベンチへエディターを追加するために、 ワークベンチ拡張ポイント org.eclipse.ui.editors が、 プラグインによって使用されます。エディターを組み込むプラグインは、 エディターの構成情報と共に、plugin.xml ファイル内にエディター拡張を登録しなければなりません。 インプリメンテーション class、およびワークベンチ・メニューとラベルで使用される name および icon などのいくつかのエディター情報は、ビュー情報と類似しています。 さらに、エディター拡張により、ファイル拡張子またはエディターが理解するファイル・タイプのファイル名パターンが指定されます。 また、エディターは contributorClass を定義することができます。 これは、エディターがアクティブのときにワークベンチ・メニューおよびツールバーにアクションを追加するクラスです。
エディター用のインターフェースは、 IEditorPart で定義されますが、プラグインは、 IEditorPart を最初からインプリメントするのではなく、 EditorPart クラスを 拡張するよう選択することができます。
注: またエディター拡張は、外部プログラムを起動するように、または既存の Java コードを呼び出すように構成できます。 ここでは、ワークベンチと実際に堅固に統合され、 IEditorPart を使用してインプリメントされた、 これらのエディターに焦点を置いて説明します。
README ツールでは、独自のコンテンツ・アウトライナー・ページをワークベンチ・アウトライン・ビューへ組み込むことを 主な目的として、カスタム・エディターを提供します。
エディター拡張の構成は、以下のように定義されます。
<extension point = "org.eclipse.ui.editors"> <editor id = "org.eclipse.ui.examples.readmetool.ReadmeEditor" name="%Editors.ReadmeEditor" icon="icons/obj16/editor.gif" class="org.eclipse.ui.examples.readmetool.ReadmeEditor" extensions="readme" contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor"> </editor> </extension>
ここには、id、name、icon、および class のなじみのある構成マークアップが見られます。 extension 属性は、エディターが理解するファイル・タイプを記述します。 (さらに特定する必要のある場合は、ファイル名を指定することもできます。) class はエディターをインプリメントし、contributorClass はエディター関連のアクションを提供する役割があります。 細部にわたってコントリビューターを見てみましょう。
コントリビューター・クラスは、エディター関連のアクションを ワークベンチ・メニューおよびツールバーに追加します。 これは、 IEditorActionBarContributor インターフェースをインプリメントしなければなりません。 特定のワークベンチ・ページが同じタイプの複数のエディターを持つことができるため、コントリビューターはエディター自体から分離されています。 エディターの各インスタンスにアクションおよびイメージを作成させるのではなく、 単一のコントリビューターが、特定タイプのすべてのエディターによって共用されます。
ReadmeEditorActionBarContributor では、 "Editor Action1"、"Editor Action2"、 および "Editor Action3" の 3 つのアクションを組み込みます。 これらは、コンストラクターでセットアップされます。
public ReadmeEditorActionBarContributor() { ... action1 = new EditorAction(MessageUtil.getString("Editor_Action1")); action1.setToolTipText(MessageUtil.getString("Readme_Editor_Action1")); action1.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_DISABLE); action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE_ENABLE); ... action2 = new RetargetAction(IReadmeConstants.RETARGET2, MessageUtil.getString("Editor_Action2")); action2.setToolTipText(MessageUtil.getString("Readme_Editor_Action2")); action2.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_DISABLE); action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE_ENABLE); ... action3 = new LabelRetargetAction(IReadmeConstants.LABELRETARGET3, MessageUtil.getString("Editor_Action3")); action3.setDisabledImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_DISABLE); action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE_ENABLE); ... }
アクションの名前およびアイコンは、plugin.xml 内ではなく、コード内にセットアップされます。 (「再ターゲット可能なアクション」で説明するまで、アクション・クラス内の違いは無視します。)
アクション情報は、ビュー・アクションのマークアップで説明した viewActions 情報と類似していることに注意してください。 同じエディターの異なるインスタンスの間でアクション共用を管理しなければならないため、アクションはコード内でセットアップされます。 コンストラクターにアクションが作成されるときは、エディターの特定のインスタンスから独立しています。
エディターがアクティブになり、アクションがワークベンチ・メニューおよびツールバーにインストールされる必要がある場合、 setActiveEditor メッセージがコントリビューターへ送られます。 コントリビューターは、エディター・アクションを特定のエディターへ接続します。
public void setActiveEditor(IEditorPart editor) { ... action1.setActiveEditor(editor); ... }
このように、README エディターがアクティブなとき、アクションがワークベンチ・メニューおよびツールバーに表示されます。
これらのメニューおよびツールバー項目は、エディターがアクティブな場合にのみ表示されます。 メニューおよびツールバーの項目のロケーションは、指定することができます。 詳しくは、メニューおよびツールバー・パス を参照してください。
README エディターの ReadmeEditor 自体はあまり複雑ではありません。これは、README ファイルが 編集中に、カスタマイズ済みコンテンツ・アウトライナー・ページを「アウトライン」ビューへ組み込むことができるように、 TextEditor クラスを拡張します。 これによって、テキスト・エディター内の振る舞いが変わることはありません。
エディターには、多くの場合、エディターの内容の構造ビューを提供し、 ユーザーがエディターのコンテンツをナビゲートするのを支援する、対応するコンテンツ・アウトライナーがあります。 詳しくは、コンテンツ・アウトライナー を参照してください。
『テキスト・エディターおよびプラットフォーム・テキスト』でテキスト・エディターの インプリメンテーションについて説明します。