スケルトンコードを作成し、実装を追加する
作成したviewエレメントを選択すると、[プロパティ]ビューで設定を編集することができます。classプロパティには既定値が設定されています。拡張ポイント<org.eclipse.ui.views>のドキュメントを見てみましょう。
注:class 属性の値は、org.eclipse.ui.IViewPartをインプリメントするクラスの完全修飾名でなければなりません。新規ビューを開発する場合は、org.eclipse.ui.part.ViewPartをサブクラス化する方法が一般的です。
これに従い、この拡張ビューを実装するクラスを用意しましょう。classプロパティを選択して右端の[...]ボタンをクリックし、開いたウィザードで[新規Javaクラスの生成]を選択し[終了]をクリックします(画面10)。
こうすることで、「ViewPart1」という、ViewPartクラスを継承したクラススケルトンが生成されます。
このスケルトンには、以下の3つのメソッドが提供されています。これらを具体的に実装することで、プラグインの機能を実現していくわけです。
- <createPartControl(Composite Parent)>
- <ViewPart1() (コンストラクタ)>
- <setFocus()>
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
それではスケルトンに実装を追加していきましょう。実装例(ViewPart1.java)と併せて読み進めてください。
ビューが生成されたときにまず実行されるのは<createPartControl(Composite)メソッド>です。ここで、SWTの<Canvas>を1つ貼り付けておきます。このcanvasに、自分自身を<PaintListener>として<add>しておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
描画は、PaintListenerクラスのpaintControl()メソッドをオーバーライドすることで実装していきます。現在時刻を基に、時針、分針、秒針を描画すればよいでしょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
周期的に再描画を行うためのスレッドを実装します。まず、自分自身にRunnableインターフェイスのrun()メソッドを実装しておきます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
そして、createPartControl()メソッド内で、自分自身を引数としたスレッドを新たに作って走らせておきましょう。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
run()メソッドの中ではcanvasの再描画を行えばいいわけですが、非UIスレッドからは直接描画することができないので、<スレッド化の問題>に記述されている要領で、Display#asyncExec()を経由してcanvas.redraw()してもらうようにします。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
最後に、このビューが破棄されるときに、再描画用のスレッドを停止する処理を実装すれば、一通りの完成となります。
テスト実行してみよう
さて、一通り完成したところで実行してみましょう。Eclipseのプラグイン開発環境は、開発したプラグインをその場で実行してみる機能を備えています。[実行]メニューの[次を実行]から、[ランタイムワークベンチ](読者は以前からこのメニューが気になっていたのではないでしょうか?)を選択してみてください(画面12)。
しばらくすると、新しいEclipseワークベンチが起動します。これが、ランタイムワークベンチという、プラグインのテストを行うための実行環境です。新しく起動したワークベンチでアナログクロックプラグインを実行してみます。[ウィンドウ]メニューから[ビューの表示]→[その他]を選択します(画面13)。
すると[ビューの表示]ダイアログが開きます。[その他]ツリーを展開すると、org.ocharake.matobaa.analogClock.view1というビューが登録されています(画面14)。
これをクリックすれば、ランタイムワークベンチにアナログ時計が表示されるはずです。うまく動きましたか?
さて、これだけではプラグインの機能としては少し寂しいですね。また、このままではプラグインとして再配布することができません。次回は、アクションを拡張とプラグインの国際化(日本語化)を行い、プラグインとして配布可能なようにプラグインのパッケージ化を行います。
筆者プロフィール
的場 聡弘(まとば あきひろ;matobaa)
現在、株式会社NTTデータ ビジネス開発事業本部に所属。社内技術支援業務に携わり、主にJ2SEおよびJ2EEを用いたシステム構築に係わる方式設計や障害対応を担当している。おちゃらけプログラマ七号機(http://www.ocharake.org/)や、ぱ〜む脱力ゲーム協会(http://palmgames.tripod.co.jp/)の公認脱力作家という顔も持つ。
岡本 隆史(おかもと たかし)
NTTデータ 技術開発本部 所属。Debian GNU/Linuxの優れたメンテナンス性と他のディストリビューションを圧倒するパッケージ数に引かれDebianを使い始めたのをきっかけに、Debian プロジェクトの開発者となりJavaサポートの強化を行う。『Jakartaプロジェクト徹底攻略』(技術評論社)、『WEB+DB PRESS』(技術評論社)、『Java World』(IDGジャパン)、『JAVA Developer』(ソフトバンクパブリッシング)などで執筆活動を行っている。
Copyright © ITmedia, Inc. All Rights Reserved.