« MarkerUtilitiesクラス | トップページ | テキストのフォーマット(1.戦略の作成) »

2004.09.12

テキストエディタのコンテキストメニューID

ビューやエディタのコンテキストメニュー(右クリックで表示されるメニュー)にアクションを追加するときに,そのコンテキストメニューのIDを知る必要がある。ビューに関しては「特定ビューへのコンテキストメニュー項目の追加」で既に取り上げている。ではエディタの場合はどうなのか,ということで今回の話題としてみよう。

Eclipseの多くのテキストエディタはAbstractTextEditorクラスを継承しているが,テキストエディタのコンテキストメニューのIDはAbstractTextEditorクラスで決定される(もちろんAbstractTextEditorクラスを継承していないエディタは対象外)。特に何も指定がなければ,テキストエディタのコンテキストメニューのIDは,

  エディタID.EditorContext

となる。例えば「yoichiro.eclipse.editor.HogeEditor」というIDのエディタがあったとしたら,そのエディタのコンテキストメニューのIDは「yoichiro.eclipse.editor.HogeEditor.EditorContext」となる。また,Eclipseに標準で搭載されるテキストエディタとJavaエディタに関しては,

  ・デフォルトテキストエディタ(TextEditorクラス)
    org.eclipse.ui.DefaultTextEditor.EditorContext

  ・Javaエディタ(CompilationUnitEditorクラス)
    org.eclipse.jdt.ui.CompilationUnitEditor.EditorContext

となる。何かのテキストエディタのコンテキストメニューに対してアクションを追加したければ,対象のエディタのIDを知ることができれば実現できる。

さて,上記とは別に,Javaエディタのコンテキストメニューにアクションを追加する際,コンテキストメニューのIDに#CompilationUnitEditorContextという文字列を指定している記述をよく見受けると思う。本ブログでも「Javaエディタのコンテキストメニュー」にて#CompilationUnitEditorContextについて紹介している。Javaエディタの場合は,上記の「org.eclipse.jdt.ui.CompilationUnitEditor.EditorContext」でもいいし,「#CompilationUnitEditorContext」でも良い。さて,#CompilationUnitEditorContextはどこから来たのだろうか?

AbstractTextEditorクラスでは,コンテキストメニューのIDをサブクラスにて自由に決めることができる。AbstractTextEditorクラスのsetEditorContextMenuIdメソッドにコンテキストメニューとしたい文字列を指定することで,「エディタID.EditorContext」とは別にコンテキストメニューが設定される

上記で紹介したデフォルトテキストエディタとJavaエディタでは,setEditorContextMenuIdメソッドを使って独自にコンテキストメニューのIDを設定している

  ・デフォルトテキストエディタ(TextEditorクラス)
    #TextEditorContext
      (TextEditorクラスのinitializeEditorメソッド内で設定)

  ・Javaエディタ(CompilationUnitEditorクラス)
    #CompilationUnitEditorContext
      (CompilationUnitEditorクラスのコンストラクタ内)

setEditorContextMenuIdメソッドを使って設定されたコンテキストメニューのIDは,Javadocに記載されるなりしないと,ソースを見ることなしに知ることはできない。TextEditorクラスのAPIリファレンスにはちゃんと記載されているが,Javaエディタに関してはCompilationUnitEditorクラスがinternalなこともあり,特にドキュメントに記載がない。

AbstractTextEditorクラスを継承してテキストエディタを自作して,setEditorContextMenuIdメソッドを使って独自にコンテキストメニューのIDを設定したときは,ちゃんとAPIリファレンスなどにコンテキストメニューのIDを記載すると,開発者に優しいエディタになるだろう。

|

« MarkerUtilitiesクラス | トップページ | テキストのフォーマット(1.戦略の作成) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/1421178

この記事へのトラックバック一覧です: テキストエディタのコンテキストメニューID:

« MarkerUtilitiesクラス | トップページ | テキストのフォーマット(1.戦略の作成) »