Top / Eclipse / プラグイン開発のTIPS集 / RCP(Eclipse3.4以降)

概要

2010/01/17
注記 かつて Eclipse/プラグイン開発のTIPS集/RCP のページを書きましたが、Eclipseも3.5になりRCP開発もいろいろと便利になりました。そこでいくつか内容をUpdateして3.5向けに書き直してみました。

Eclipseのプラグインを勉強しているついでに、Eclipse3.0で導入されたRCPを使ってみました。RCPとはEclipseベース(ワークベンチベースっていったほうがいいかもしんない)のアプリケーションを作成するためのフレームワークです。今まではプラグインを作って、Eclipseにプラグインしてたわけですが、プラグインが単体で稼働するようになったと考えればよいと思います。 前々からEclipseをベースにして、開発ツール(Rational Application Developer みたいなパターン)だけでなく普通のアプリケーションもこの上で構築できるんでないのってかんがえてたんですが、まさにそのためのフレームワークみたいですね。

手順はプラグインを作るのと基本的に一緒です。ウィザードにしたがって自動生成されるので覚える必要ないですが、実際に作らなくてはいけないプログラムはだいたい

  • org.eclipse.equinox.app.IApplication の実装クラス(実際のアプリケーションになります)
  • org.eclipse.ui.application.WorkbenchAdvisor? のサブクラス(パースペクティブの指定の設定をします)
  • org.eclipse.ui.application.WorkbenchWindowAdvisor? のサブクラス(ワークベンチの設定をします)
  • org.eclipse.ui.application.ActionBarAdvisor? のサブクラス(メニューバーを構築します)
  • org.eclipse.ui.IPerspectiveFactory? の実装クラス(パースペクティブを構築します)

などがあります。

それぞれの役割

IApplication の実装クラス

IApplication の実装クラスはstartメソッドをオーバーライドすればよいようです。だいたいおきまりで、こんな感じ。

public Object start(IApplicationContext context) throws Exception {
  Display display = PlatformUI.createDisplay();
  try {
    int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
    if (returnCode == PlatformUI.RETURN_RESTART)
      return IApplication.EXIT_RESTART;
    else
      return IApplication.EXIT_OK;
  } finally {
    display.dispose();
  }
  
}

WorkbenchAdvisor? のサブクラス

RCPアプリケーションはパースペクティブを一つ以上持つのですが、そのデフォルトのパースペクティブID(plugin.xmlで指定したID)を返すメソッドをオーバーライドします。

private static final String PERSPECTIVE_ID = "nu.mine.kino.plugin.samples.rcp.perspective";
public String getInitialWindowPerspectiveId() {
  return PERSPECTIVE_ID;
}

WorkbenchWindowAdvisor? のサブクラス

ワークベンチ(ウィンドウとか、外枠、みたいなイメージ)を構築する設定を行います。RCPのアプリケーション起動時に呼び出されるメソッドで、起動時のウィンドウサイズやツールバーを出すかなどの設定を行います。

public void preWindowOpen() {
  IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
  configurer.setInitialSize(new Point(400, 300));
  configurer.setShowCoolBar(false);
  configurer.setShowStatusLine(false);
}

IPerspectiveFactory? の実装クラス

RCPアプリケーションで使用するパースペクティブを構築します。たとえばこんな感じ。

public void createInitialLayout(IPageLayout layout) {
  layout.addView("nu.mine.kino.plugin.samples.rcp.view1", IPageLayout.TOP,
      IPageLayout.RATIO_MAX, IPageLayout.ID_EDITOR_AREA);
}

("nu.mine.kino.plugin.samples.rcp.view1"というIDのビューをパースペクティブにセット、の意味)

これらはだいたい初回のウィザードで自動生成されます。

実際にやってみる。

では実際にやってみましょう。まずは空っぽのアプリケーションをRCPで作ってみて、そこのパースペクティブにビューを貼り付けたり、メニューバーを追加したりしてみようと思います。

  • 新規 >> プラグイン・プロジェクト を選択。
  • プロジェクト名に nu.mine.kino.plugin.samples.rcp と入れて「次へ」をクリック
01.png

下記の通り入力して次へ

02.png

サンプルのテンプレートに「Hello RCP」を選択して次へ

03.png

最後に「Add branding」を選択して、終了。

04.png

ウィザードに従って作成するだけで下記のようなplugin.xmlが自動生成されます。

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
     id="application"
     point="org.eclipse.core.runtime.applications">
    <application>
     <run
         class="nu.mine.kino.plugin.samples.rcp.Application">
     </run>
    </application>
   </extension>
   <extension
     point="org.eclipse.ui.perspectives">
    <perspective
      name="RCP Perspective"
      class="nu.mine.kino.plugin.samples.rcp.Perspective"
      id="nu.mine.kino.plugin.samples.rcp.perspective">
    </perspective>
   </extension>
   <extension
     id="product"
     point="org.eclipse.core.runtime.products">
    <product
      application="nu.mine.kino.plugin.samples.rcp.application"
      name="Hello RCP">
     <property
         name="windowImages"
         value="icons/alt_window_16.gif,icons/alt_window_32.gif">
     </property>
    </product>
   </extension>
</plugin>

ここまで作成したRCPアプリケーションは以下よりダウンロードできます。

ソースコード(ViewVC)

いよいよ実行

いよいよ実行します。マニフェストエディタの「Launch an Eclipse application」 をクリックします。

05.png

何にもビューを配置していない空のアプリケーションが起動しました!!

06.png

ビューをパースペクティブに配置する

次にビューを作成し、そのビューを先ほど自動生成されたパースペクティブに配置します。

まずはビューを作成

まずはビューの定義です。プラグインのマニフェストエディタの「Extensions」タブより「Add...」を押下して拡張ポイントの定義を追加します。拡張ポイントは「org.eclipse.ui.views」を選択し「Finish」を押下します。

07.png

さらに エディタのorg.eclipse.ui.views を右クリックし、view を選択してビューを追加します。

08.png

マニフェストエディタにビューが追加されるので、エディタの右側のところで下記の通り入力します。

09.png

次にビュークラスを作成するのですが、上記の「class*:」をクリックするとクラスを作成するダイアログが立ち上がります。とりあえずデフォルト値で「Finish」siteクラスを作成しておきます。

次にパースペクティブにビューを追加

次に、既存のパースペクティブのクラス(nu.mine.kino.plugin.samples.rcp.Perspective)に先のビューを追加します。

public class Perspective implements IPerspectiveFactory {
  public void createInitialLayout(IPageLayout layout) {
    layout.setEditorAreaVisible(false);
    layout.addView("nu.mine.kino.plugin.samples.rcp.view1",
        IPageLayout.LEFT, 0.5f, IPageLayout.ID_EDITOR_AREA);
  }
}

以上で完成です。またまたマニフェストエディタから「Launch an Eclipse application」を選択すると、下記のようにビューが追加されました。

10.png

ここまでのソースコードは以下よりダウンロードできます。

ソースコード(ViewVC)

メニューバーを配置する

つづいてメニューバーを構成していきます。Eclipse/RCPには「コーディングでプログラマティカルに」メニューを構築する方法と「拡張ポイントを用いて宣言的に」構築する方法があるのですが、まずは「コーディングでプログラマティカルに」構築する方法をやってみます。

まずはプログラマティカルに

Eclipse/RCPのフレームワークでメニューバーを構築するのは「org.eclipse.ui.application.ActionBarAdvisor?」のサブクラスです。先ほど自動生成されている「ApplicationActionBarAdvisor?」クラスに以下のようにコードを追加します。

package nu.mine.kino.plugin.samples.rcp;

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
  private IAction aboutAction;

  private IAction quitAction;

  public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
    super(configurer);
  }

  protected void makeActions(IWorkbenchWindow window) {
    {
      aboutAction = ActionFactory.ABOUT.create(window);
      register(aboutAction);
    }
    {
      quitAction = ActionFactory.QUIT.create(window);
      register(quitAction);
    }

  }

  protected void fillMenuBar(IMenuManager menuBar) {
    {
      MenuManager menuManager = new MenuManager("&File",
          IWorkbenchActionConstants.M_FILE);
      menuBar.add(menuManager);
      menuManager.add(quitAction);
    }
    menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
    {
      MenuManager menuManager = new MenuManager("&Help",
          IWorkbenchActionConstants.M_HELP);
      menuBar.add(menuManager);
      menuManager.add(new Separator("group01"));
      // ヘルプと、aboutの間にgroup01というグループを追加
      menuManager.add(aboutAction);
    }
  }
}

上記のようなコーディングで、下記のようなメニュー構成が作られたことになります。

[ワークベンチ]
   |
   |-[File]            - "file"  <- IWorkbenchActionConstants.M_FILE
   |   -[終了]
   |
   |-GroupMarker       - "additions"
   |
   |-[Help]            - "help"  <- IWorkbenchActionConstants.M_HELP
   |   -[検索]
   |   -"セパレータ"   - "group01"
   |   -[○○について] - 

ファイルメニュー

menu01.png

ヘルプメニュー

menu02.png

間に、additionsというマーカーも追加されている

menu03.png

「Launch an Eclipse application」で実行してみると、以下のようにメニューバーが構築されました。

menu04.png

ここまでのソースコードは以下よりダウンロードできます。

ソースコード(ViewVC)

additionsとかgroup01とかってなに?

先のコーディングで、ファイルメニューとヘルプメニューの間に、

menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
(IWorkbenchActionConstants.MB_ADDITIONSは定数値で、実際は"additions"という文字列)

というコードでグループマーカーを追加しました。各メニューの部位にこうやってマーカー(名前)をつけることで、名前を指定して「拡張ポイントを用いて宣言的に」メニューを構築することが可能になります。

詳細はメニューバーを構築するのページを参照ください。

TIPS集

products拡張ポイントについて

EclipseのサイトにBranding your applicationという記事が出ていました。ようするにEclipseベースのRCPアプリケーションにスプラッシュスクリーンを追加したり、独自のアイコンのExeファイルを作成したり、?についてなどというバージョン表示のダイアログを追加するなど、製品アプリケーションのようにするための方法を説明しています。

さてorg.eclipse.core.runtime.applications 拡張ポイントでアプリケーションを作成しましたが、上のような様々な機能を追加するにはapplications拡張ポイントに加え、更に別の拡張ポイント、org.eclipse.core.runtime.products拡張ポイントを使用します。

<extension id="product"
     point="org.eclipse.core.runtime.products">
  <product application="nu.mine.kino.plugin.samples.rcp.application" name="Hello RCP">
     <property name="windowImages"
             value="icons/alt_window_16.gif,icons/alt_window_32.gif">
     </property>
  </product>
</extension>

あとはpropertyタグでさまざまなプロパティを設定することで機能を追加していきます。設定できるプロパティ値はRCPをBrandingするときに使うプロパティ値RCPの製品情報などの画面を追加するを参照してください。

関連リンク


この記事は

選択肢 投票
おもしろかった 10  
そうでもない 0  
Top / Eclipse / プラグイン開発のTIPS集 / RCP(Eclipse3.4以降)

現在のアクセス:13955


添付ファイル: filemenu04.png 1109件 [詳細] filemenu03.png 1024件 [詳細] filemenu02.png 995件 [詳細] filemenu01.png 1043件 [詳細] file10.png 1251件 [詳細] file09.png 1184件 [詳細] file08.png 1128件 [詳細] file07.png 1280件 [詳細] file05.png 1261件 [詳細] file06.png 1130件 [詳細] file04.png 1115件 [詳細] file03.png 1106件 [詳細] file02.png 1228件 [詳細] file01.png 1259件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-09-08 (木) 13:46:12 (820d)