FormEditor? (org.eclipse.ui.forms.editor.FormEditor?)はEclipseプラグインのマニフェストエディタのような外観のエディタを作成するためのクラスです。Eclipse Formsを使って実装されています。これを使うことで

  • plugin.xmlのマニフェストエディタのような外観
  • 複数タブ(ページ)を持つ

ようなエディタを作成することができます。

クラス構成

まずFormEditor? は org.eclipse.ui.part.MultiPageEditorPart? を継承しています。なので、FormEditor?自体は複数のエディタ(やウィジェット)のまとまりと考えることができます。

通常のMultiPageEditorPart?

protected void createPages();

メソッドをオーバーライドし、各エディタ(やウィジェット)を

editor = new MyEditor();
int index = addPage(editor, getEditorInput());
setPageText(index, editor.getTitle());

としたり、

Composite composite = new Composite(getContainer(), SWT.NONE);
FillLayout layout = new FillLayout();
composite.setLayout(layout);
text = new StyledText(composite, SWT.H_SCROLL | SWT.V_SCROLL);
text.setEditable(false);
int index = addPage(composite);
setPageText(index, "Preview");

などとしていきます。ようするにEditorやCompositeを各ページに追加していくような手順をとります。

それに対してFormEditor? は、同じく

protected void createPages();

ないで

addPage(new HogePage());

と追加していくのですが、登録するクラスが org.eclipse.ui.forms.editor.IFormPage?の実装クラスとなっています。このIFormPage?がEclipse Formsを用いてエディタを作るための起点のインタフェースとなっています。

TextEditor?を追加したい

FormEditor?MultiPageEditorPart? なので、簡単にテキストエディタのページ(plugin.xmlのソースxmlを見るページ)を追加できると思ったけど、なぜかエラーが発生してできませんでした。http://www.koders.com/ でいろいろ探した結果、

SourceEditorPageBridge extends TextEditor implements IFormPage

をつくって FormEditor?#addPagesないで

SourceEditorPageBridge sourcePage = new SourceEditorPageBridge(this);
sourcePage.setInput(this.getEditorInput());

としました。

まとめると

まとめるとクラス構成はだいたいこんな感じになっています

FormEditor(の実装クラス) 1 -> N FormPage(の実装クラス)
1 -> 1 MasterDetailsBlock(の実装クラス) 1 -> N  ItemDetailsPage(の実装クラス)

で、FormEditor? -> FormPage?

FormEditor#addPages(); と
FormEditor#addPage(IEditorPart, IEditorInput);
FormEditor#addPage(new ItemPage(this));

で関連づけられます。

FormPage?MasterDetailsBlock?

FormPage#createFormContent(IManagedForm)

ないでMasterDetailsBlock?#createContent(managedForm)を呼ぶことで処理が委譲されます。

さらにMasterDetailsBlock?ItemDetailsPage?

MasterDetailsBlock#registerPages(DetailsPart)

ないで detailsPart.registerPage(Hoge.class, new HogeDetailsPage?())を呼ぶことで、詳細画面が登録されます。


この記事は

選択肢 投票
おもしろかった 16  
そうでもない 0  

現在のアクセス:15573


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-23 (金) 14:37:10 (87d)