minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

新規エディタを作成する方法です。
plugin.xmlにエクステンションとして登録します。

<extension point="org.eclipse.ui.editors">
   <editor ... />
</extension>

エディタの定義

エディタを定義します。

<editor
      name="Lrd Editor"
      extensions="lrd"
      icon="icons/lrd_obj.png"
      class="org.limy.eclipse.lrd.editor.LrdEditor"
      id="org.limy.eclipse.lrd.editor.LrdEditor">
id

エディタに付けるID

name

エディタ名

icon

エディタに関連付けるアイコンイメージ

extensions

エディタに関連付けるファイルの拡張子を、カンマで区切って記述します。

class

エディタのクラス名を指定します。
org.eclipse.ui.IEditorPart を実装しているクラスである必要があります。
command / launcher の属性とは同時に使用できません。

command

外部のエディタプログラムを使用する場合に使います。
プログラム名を指定します。ここで指定したプログラムはパスの通ったディレクトリか
プラグインディレクトリ内に配置してある必要があります。
class / launcher の属性とは同時に使用できません。

launcher

ランチャのクラス名を指定します。
org.eclipse.ui.IEditorLauncher を実装しているクラスである必要があります。

前述の command と使い方は似ていますが、こちらはより柔軟な使い方が出来ます。
例えば、開くファイルによって外部プログラムに渡すパラメータを変化させたりすることも可能です。

ファイルを開くと、メソッド open が呼び出されます。

public void open(IPath file)

開こうとしたファイルが引数として与えられるので、この値を利用して
外部プログラムを開いたり、他にも色々な処理を記述することが出来ます。

class / command の属性とは同時に使用できません。

contributorClass

contributorクラス名を指定します。
org.eclipse.ui.IEditorActionBarContributor を実装しているクラスである必要があります。
参考記事 : retargetを使う

default

true に指定すると、このエディタをデフォルトエディタにします。
1つのファイルに2つ以上のエディタが関連付けられている時に意味を持ちます。

filenames

エディタに関連付けるファイル名を、カンマで区切って記述します。
特に指定しない限り、extensions で指定された拡張子のファイル全てが関連付けられます。

symbolicFontName

シンボリックフォント名を指定します。
詳しい使い方は不明です。

エディタクラスの作成例

エディタを表すJavaクラスを生成します。
org.eclipse.ui.editors.text.TextEditor のサブクラスにします。
このクラスは抽象クラスではないので、そのままでも利用できます。
いくつかカスタマイズ方法を挙げてみます。

背景色を変える

createPartControlメソッドをオーバーライドします。

public void createPartControl(Composite parent) {
    super.createPartControl(parent);
    getSourceViewer().getTextWidget().setBackground(color);
}

右クリックメニューを追加する

protected void editorContextMenuAboutToShow(IMenuManager menu) {
    super.editorContextMenuAboutToShow(menu);
    menu.add(new Separator());
    menu.add(new AllBuildAction("&All Build"));
    menu.add(new OpenExternalBrowserAction("&Browse"));
}

IContributionItem または IAction を実装したインスタンスを指定します。

Preferenceページで設定した項目を反映させる

例えば、エディタ内の色付けなどをPreferenceページでカスタマイズできるような
作りにしている場合、設定を変更してもその設定はすぐには反映されません。
これを反映させるには、Editorクラスで以下のメソッドをオーバーライドします。

protected void doSetInput(IEditorInput input) throws CoreException {
    super.doSetInput(input);
    setPreferenceStore(LimyEclipsePlugin.getDefault().getPreferenceStore());
}

これにより、Preferenceを変更したときに特定のメソッドが呼ばれるようになります。
次に、このメソッドをオーバーライドします。

protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
    super.handlePreferenceStoreChanged(event);
    
    // LimyEclipseプラグイン固有処理
    LimyEclipsePlugin.getDefault().updateProviders();
    
    if (getSourceViewer() instanceof SourceViewer) {
        ((SourceViewer)getSourceViewer()).unconfigure();
        getSourceViewer().configure(new XMLSourceViewerConfiguration());
        ((SourceViewer)getSourceViewer()).refresh();
    }
}

プラグイン固有処理をした後で、SourceViewerクラスのメソッドを

の順で呼び出しています。