Eclipseのプラグインを勉強しているついでに、Eclipse3.0で導入されたRCPを使ってみました。RCPとはEclipseベース(ワークベンチベースっていったほうがいいかもしんない)のアプリケーションを作成するためのフレームワークです。今まではプラグインを作って、Eclipseにプラグインしてたわけですが、プラグインが単体で稼働するようになったと考えればよいと思います。 前々からEclipseをベースにして、開発ツール(Rational Application Developer みたいなパターン)だけでなく普通のアプリケーションもこの上で構築できるんでないのってかんがえてたんですが、まさにそのためのフレームワークみたいですね。
手順はプラグインを作るのと基本的に一緒です。ウィザードにしたがって自動生成されるので覚える必要ないですが、実際に作らなくてはいけないプログラムはだいたい
などがあります。
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(); } }
RCPアプリケーションはパースペクティブを一つ以上持つのですが、そのデフォルトのパースペクティブID(plugin.xmlで指定したID)を返すメソッドをオーバーライドします。
private static final String PERSPECTIVE_ID = "nu.mine.kino.plugin.samples.rcp.perspective"; public String getInitialWindowPerspectiveId() { return PERSPECTIVE_ID; }
ワークベンチ(ウィンドウとか、外枠、みたいなイメージ)を構築する設定を行います。RCPのアプリケーション起動時に呼び出されるメソッドで、起動時のウィンドウサイズやツールバーを出すかなどの設定を行います。
public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setInitialSize(new Point(400, 300)); configurer.setShowCoolBar(false); configurer.setShowStatusLine(false); }
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で作ってみて、そこのパースペクティブにビューを貼り付けたり、メニューバーを追加したりしてみようと思います。
下記の通り入力して次へ
サンプルのテンプレートに「Hello RCP」を選択して次へ
最後に「Add branding」を選択して、終了。
ウィザードに従って作成するだけで下記のような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アプリケーションは以下よりダウンロードできます。
いよいよ実行します。マニフェストエディタの「Launch an Eclipse application」 をクリックします。
何にもビューを配置していない空のアプリケーションが起動しました!!
次にビューを作成し、そのビューを先ほど自動生成されたパースペクティブに配置します。
まずはビューの定義です。プラグインのマニフェストエディタの「Extensions」タブより「Add...」を押下して拡張ポイントの定義を追加します。拡張ポイントは「org.eclipse.ui.views」を選択し「Finish」を押下します。
さらに エディタのorg.eclipse.ui.views を右クリックし、view を選択してビューを追加します。
マニフェストエディタにビューが追加されるので、エディタの右側のところで下記の通り入力します。
次にビュークラスを作成するのですが、上記の「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」を選択すると、下記のようにビューが追加されました。
ここまでのソースコードは以下よりダウンロードできます。
つづいてメニューバーを構成していきます。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" | -[○○について] -
ファイルメニュー
ヘルプメニュー
間に、additionsというマーカーも追加されている
「Launch an Eclipse application」で実行してみると、以下のようにメニューバーが構築されました。
ここまでのソースコードは以下よりダウンロードできます。
先のコーディングで、ファイルメニューとヘルプメニューの間に、
menuBar.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); (IWorkbenchActionConstants.MB_ADDITIONSは定数値で、実際は"additions"という文字列)
というコードでグループマーカーを追加しました。各メニューの部位にこうやってマーカー(名前)をつけることで、名前を指定して「拡張ポイントを用いて宣言的に」メニューを構築することが可能になります。
詳細はメニューバーを構築するのページを参照ください。
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の製品情報などの画面を追加するを参照してください。
この記事は
現在のアクセス:13682