#topicpath
----
#contents
**概要 [#o7544816]
: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 の実装クラス(パースペクティブを構築します)

などがあります。

**それぞれの役割 [#af4328a7]
***IApplication の実装クラス [#b94cc5a5]
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 のサブクラス [#q9c8adec]
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 のサブクラス [#x3fdd5f4]
ワークベンチ(ウィンドウとか、外枠、みたいなイメージ)を構築する設定を行います。RCPのアプリケーション起動時に呼び出されるメソッドで、起動時のウィンドウサイズやツールバーを出すかなどの設定を行います。
 public void preWindowOpen() {
   IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
   configurer.setInitialSize(new Point(400, 300));
   configurer.setShowCoolBar(false);
   configurer.setShowStatusLine(false);
 }


***IPerspectiveFactory の実装クラス [#a223583c]
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のビューをパースペクティブにセット、の意味)

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



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


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

#ref(01.png)


下記の通り入力して次へ
#ref(02.png)


サンプルのテンプレートに「Hello RCP」を選択して次へ
#ref(03.png)


最後に「Add branding」を選択して、終了。
#ref(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)>http://www.masatom.in/viewvc/Examples/branches/V20100117_01/nu.mine.kino.plugin.samples.rcp/?pathrev=150]]

***いよいよ実行 [#t2852cf9]
いよいよ実行します。マニフェストエディタの「Launch an Eclipse application」 をクリックします。
#ref(05.png)

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


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

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

#ref(07.png)


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

#ref(08.png)

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

#ref(09.png)

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

***次にパースペクティブにビューを追加 [#ucda6805]
次に、既存のパースペクティブのクラス(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」を選択すると、下記のようにビューが追加されました。

#ref(10.png)


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

[[ソースコード(ViewVC)>http://www.masatom.in/viewvc/Examples/branches/V20100117_01/nu.mine.kino.plugin.samples.rcp/?pathrev=151]]



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

***まずはプログラマティカルに [#v6d52973]
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"
    |   -[○○について] - 


ファイルメニュー
#ref(menu01.png)

ヘルプメニュー
#ref(menu02.png)


間に、additionsというマーカーも追加されている
#ref(menu03.png)



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

#ref(menu04.png)


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

[[ソースコード(ViewVC)>http://www.masatom.in/viewvc/Examples/branches/V20100117_01/nu.mine.kino.plugin.samples.rcp/?pathrev=153]]


***additionsとかgroup01とかってなに? [#q7eb4992]
先のコーディングで、ファイルメニューとヘルプメニューの間に、
 menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
 (IWorkbenchActionConstants.MB_ADDITIONSは定数値で、実際は"additions"という文字列)
というコードでグループマーカーを追加しました。各メニューの部位にこうやってマーカー(名前)をつけることで、名前を指定して「拡張ポイントを用いて宣言的に」メニューを構築することが可能になります。

詳細は[[メニューバーを構築する>Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Eclipse3.3版)]]のページを参照ください。




**TIPS集 [#o74eb3bc]
***products拡張ポイントについて [#v89ca80d]
Eclipseのサイトに[[Branding your application:http://www.eclipse.org/articles/Article-Branding/branding-your-application.html]]という記事が出ていました。ようするに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するときに使うプロパティ値>Eclipse/プラグイン開発のTIPS集/RCPをBrandingするときに使うプロパティ値]]や[[RCPの製品情報などの画面を追加する>Eclipse/プラグイン開発のTIPS集/RCPの製品情報などの画面を追加する]]を参照してください。


**関連リンク [#e57061e3]
-[[ポップアップやメニューバーにアクションを追加するための拡張ポイント、インターフェースのまとめ>Eclipse/プラグイン開発のTIPS集/org.eclipse.ui.menusまとめ]]
-[[ワークベンチのメニューバーに、プログラマティカルにメニューを構築したり、拡張ポイントを使って宣言的にメニューを構築したい>Eclipse/プラグイン開発のTIPS集/メニューバーを構築する(Eclipse3.3版)]]
-[[RCPをやってみる(Eclipse 3.4以前の記事)>Eclipse/プラグイン開発のTIPS集/RCP]]
-[[RCPの製品情報などの画面を追加する>Eclipse/プラグイン開発のTIPS集/RCPの製品情報などの画面を追加する]]
-[[製品情報などで使用する、プロパティ値の一覧>Eclipse/プラグイン開発のTIPS集/RCPをBrandingするときに使うプロパティ値]]


----
この記事は
#vote(おもしろかった[1],そうでもない[0])

#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS