« 2004年1月 | トップページ | 2004年3月 »

2004.02.25

標準マーカーの属性

標準マーカーで紹介した標準マーカーでは,それぞれいくつかの属性を持つように定義されている。標準マーカーの属性については,IMarkerインタフェースで定数として定義されている

各属性についての解説を以下に示す。カッコ内は属性値の型。

  ・transient - IMarker.TRANSIENT(boolean)
    永続可能マーカーに対して,永続化させないようにするかどうかのフラグ属性。
    falseを指定すれば,一時的なマーカーとなる。

  ・severity - IMarker.SEVERITY(int)
    重要度の値の属性。以下の値のどれかから選択。
      IMarker.SEVERITY_INFO - 情報
      IMarker.SEVERITY_WARNING - 警告
      IMarker.SEVERITY_ERROR - エラー

  ・message - IMarker.MESSAGE(String)
    説明文の属性。任意の文字列を指定可能。

  ・location - IMarker.LOCATION(String)
    位置を表す説明文の属性。任意の文字列を指定可能。
    プラットフォームで解釈させるわけではない。
    対人間用の説明文。

  ・priority - IMarker.PRIORITY(int)
    優先度の値の属性。以下の値のどれかから選択。
      IMarker.PRIORITY_LOW - 低
      IMarker.PRIORITY_NORMAL - 通常
      IMarker.PRIORITY_HIGH - 高

  ・done - IMarker.DONE(boolean)
    処理済のものかどうかのフラグ属性。
    Taskマーカーにおいて,タスクが完了したかどうかを指定する。

  ・userEditable - IMarker.USER_EDITABLE(boolean)
    マーカーについてユーザが編集できるかどうかのフラグ属性。
    プラットフォームで解釈されるわけではない。
    各種エディタやビューでuserEditable属性の解釈が行われる。

  ・character start - IMarker.CHAR_START(int)
    Textマーカーがどこから(何文字目から)開始するかを示す属性。

  ・character end - IMarker.CHAR_END(int)
    Textマーカーがどこで(何文字目で)終了するかを示す属性。

  ・line number - IMarker.LINE_NUMBER(int)
    Textマーカーが何行目かを示す属性。

| | コメント (0) | トラックバック (0)

2004.02.24

標準マーカー

Eclipseプラットフォームでは,各種マーカーの基本(継承元)となる標準マーカーが準備されている。標準マーカーは,IMarkerインタフェースに定義されている

  ・Marker - IMarker.MARKER
    すべてのマーカー型の共通親マーカー。
      (transient属性含む)

  ・Problemmarker - IMarker.PROBLEM
    問題を表すマーカー。
      (severitymessagelocation属性含む)
    Tasksビューに項目として表示される。

  ・Taskmarker - IMarker.TASK
    タスク(TODOとか)を表すマーカー。
      (prioritymessagedoneuserEditable属性含む)
    Tasksビューに項目として表示される。

  ・Bookmark - IMarker.BOOKMARK
    ブックマークを表すマーカー。
      (messagelocation属性含む)
    Bookmarkビューに項目として表示される。

  ・Textmarker - IMarker.TEXT
    テキストのある一部分に対するマーカー。
      (charactor startendline number属性含む)

Markerマーカーはルートマーカーであり,すべてのマーカーはこのMarkerマーカーを継承する。上記のMarkerマーカー以外のマーカーはすべてMarkerマーカーを継承している。よって,全マーカーはtransient属性を持つようになる。

TaskmarkerマーカーおよびBookmarkマーカーはそれを直接利用することができるが,基本的には各プラグインで上記の標準マーカーを継承(多重継承可能!)して,新しいマーカーを定義することになる(後述)。ちなみに,上記の標準マーカーは,プラットフォームにより予め処理が提供されている。つまり,Taskmarkerマーカー(およびそれを継承したサブマーカー)は,Tasksビューに自動的に表示されるし,エディタの左縦ルーラーに予め決められたアイコンが表示される。まったく独自のマーカーを定義したければ,Markerマーカーを継承して新規マーカーを定義し,新しいビューを作って独自に項目を表示したり独自のアイコンでマーカーを表現したりすることができる。

| | コメント (0) | トラックバック (0)

2004.02.23

マーカーの削除

リソースにつけられたマーカーを削除するのは簡単にできる。

まずは削除対象のマーカーを探し出す。マーカーを探すには,リソースが持つマーカーの取得で紹介した方法などを使う。探しだしたマーカーのIMarkerオブジェクトに対して,deleteメソッドを呼び出すだけでマーカーを削除できる

  IMarker marker = ...;
  marker.delete();

deleteメソッドの呼び出しとともに,エディタからマーカーが左縦ルーラーから消え,Tasksビューからも項目が削除される。

deleteメソッドを呼び出した後のIMarkerオブジェクトは,既に無効なハンドルなので,それに対して操作を行ってはならない(操作してもいいけど,ほぼ無意味)。

| | コメント (0) | トラックバック (0)

リソースへのマーキング

エディタでTODOやコンパイルエラーの印として表示されるマーカー。もちろん自分でプログラムを書いてマーカーをつける(マーキングする)ことができる。

マーキングは,あるリソースに対して行う。つまり,まずはマーキングの対象となるリソースのIResourceオブジェクトを取得する必要がある。IResourceオブジェクトさえ取得できれば,あとはcreateMarkerメソッドを使ってマーキングすることができる

  IResource resource = ...;
  IMarker marker = resource.createMarker(IMarker.TASK);
  Map attributeMap = new HashMap();
  attributeMap.put(IMarker.MESSAGE, "あとで削除すべし。");
  attributeMap.put(IMarker.LINE_NUMBER, new Integer(100));
  marker.setAttributes(attributeMap);

createMarkerメソッドの引数には,マーカーの種類を表すIDを指定する。IMarkerインタフェースには,いくつかの標準マーカーが定義されている。上記では,TASKマーカー,つまりTODOマーカーを指定している。

マーカーは,いくつかの属性を持つことができる。というか,マーカーの種類によっては必須の属性もある。代表的な属性についてはIMarkerインタフェースで定義されていて,それらについてはTaskビューなどで利用される。上記の例では,IMarker.MESSAGE属性でマーカーにメッセージを付与し,そしてIMarker.LINE_NUMBER属性でマーキングする行番号(100行目)を指定している。これらの属性をMapコレクションに詰めて,setAttributesメソッドに渡してマーカーに与える。

属性をひとつひとつ指定するsetAttributeメソッドも存在するが,できるだけMapに詰めて一回で属性をセットするようにする。なんでかっていうと,マーカーの属性が変化するたびにいろんな処理(再描画とかTasksビューへの通知とか)が呼び出されるため,その処理コストは結構なものになってしまい,プラットフォームに余計な負荷がかかってしまうからである。

実は上記の方法では,マーキングはできるんだけど,エディタの左縦ルーラーにマーカーがすぐに描画されない。エディタを開きなおせば描画されるんだけど・・・。実は,「新規マーカーの作成」で自作したマーカーに,ちゃんと「マーカーのアイコン」でアイコンを登録しておかなければ,マーカーがすぐには描画されない。もちろん標準マーカーであればアイコンがすでに登録されているので,ちゃんとすぐにマーカーが描画される。新規にマーカーを定義したら,アイコンもちゃんと登録しておきましょう,ということである。

| | コメント (2) | トラックバック (0)

2004.02.19

リソースが持つマーカーの取得

ワークスペース内にあるすべてのマーク(コンパイルエラーのマークとか,TODOマークとか)を取得するのは,以下の方法で比較的簡単にできる。

  IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
  IMarker[] markers = root.findMarkers(null, false, IResource.DEPTH_INFINITE);

ワークスペース内のリソースの頂点(ルート)は,IWorkspaceRootインタフェースのインスタンスである。つまり,ワークスペース内に存在する全リソースに対して,IWorkspaceRootインタフェースから辿ることができる。たとえば,Hogeプロジェクト(プロジェクトはIProjectで表され,これはIResourceを継承している)を得たければ,

  IWorksaceRoot root = ...;
  IProject hogeProject = root.getProject("Hoge");

とすることで実現できる。

あるリソースが持つマーカーは,IResourceインタフェースのfindMarkersメソッドで取得できる。これにより,IMarkerインタフェースのインスタンスの配列が得られる。findMarkerメソッドでは,対象となるリソース内のマーカーの検索のほかに,そのリソースが持つ子のリソース内のマーカーも検索対象とすることができる。それを指定するのがfindMarkersメソッドの第3引数。

  ・ IResource.DEPTH_ZERO - 起点リソース内のマーカーのみ検索
  ・ IResource.DEPTH_ONE - 起点リソース内および直接の子リソース内のマーカーを検索
  ・ IResource.DEPTH_INFINITE - 起点リソース内およびリカーシブに追った全てのリソース内のマーカーを検索

マーカーはそれぞれ型を持っている。TODOマーカーであれば「org.eclipse.jdt.core.task」とか,コンパイルエラーであれば「org.eclipse.jdt.core.problem」とかが型である。findMarkersメソッドの第一引数に型の文字列を指定することによって,その型のみを検索対象とすることができる。またマーカーは継承関係があるので,findMarkersメソッドの第2引数をtrueにすることによって,第1引数で指定した型およびそれを継承した型も検索対象とすることができるようになる。

一番最初の例では,第1引数をnullにしている。nullの場合は,全ての型が対象となるので,存在する全マーカーが結果として得られる。nullの場合は第2引数は意味が無いので,trueでもfalseでも一緒の結果になる(はず)。

ワークスペースのルートはIWorkspaceRootオブジェクトであるので,それに対してIResource.DEPTH_INFINITEを用いたfindMarkersメソッドを実行すれば,ワークスペース内(全プロジェクトと表現したほうがいいかも)の全マーカーを検索対象にでき,さらにfindMarkersメソッドの第1引数にnullを指定すれば,ワークスペース内の全マーカーを得ることができるのである。

| | コメント (0) | トラックバック (0)

2004.02.15

アクションの登録先と使用インタフェース

Eclipseでは,いくつかの場所に対してプラグイン開発者がアクションを登録することができる。それぞれの登録場所について,拡張ポイントおよびアクションの実装に必要なインタフェースが違っている。以下にまとめてみよう。

images/parts-name

・メインメニュー,メインツールバー
  拡張ポイント - org.eclipse.ui.actionSets
  インタフェース - IWorkbenchWindowActionDelegate

・Viewツールバー,Viewプルダウンメニュー
  拡張ポイント - org.eclipse.ui.viewActions
  インタフェース - IViewActionDelegate

・Editorツールバー,Editorメニュー
  拡張ポイント - org.eclipse.ui.editorActions
  インタフェース - IEditorActionDelegate

・コンテキストメニュー(あるオブジェクトに対して)
  拡張ポイント - org.eclipse.ui.popupMenus
  エレメント - objectContribution
  インタフェース - IObjectActionDelegate

・コンテキストメニュー(あるビューに対して)
  拡張ポイント - org.eclipse.ui.popupMenus
  エレメント - viewerContribution
  インタフェース - IViewActionDelegate

・コンテキストメニュー(あるエディタに対して)
  拡張ポイント - org.eclipse.ui.popupMenus
  エレメント - viewerContribution
  インタフェース - IEditorActionDelegate

| | コメント (0) | トラックバック (0)

2004.02.14

特定ビューへのコンテキストメニュー項目の追加

コンテキストメニューの公開で紹介した機構によってちゃんと拡張性が確保されているコンテキストメニューに対しては,org.eclipse.ui.popupMenus拡張ポイントを使って,任意のプラグインからメニュー項目を動的に追加することができるようになる。コンテキストメニューのIDを知っていれば,そのコンテキストメニューに対して任意のメニュー項目を追加し,独自のアクションを呼び出すことができる。

では,プラグイン・マニフェストに記述する内容を見ていこう。

  <extension point="org.eclipse.ui.popupMenus">
    <viewerContribution
      id="yoichiro.popupMenu"
      targetID="yoichiro.target.view.contextMenuID">
      <action
        id="yoichiro.popupMenu.item"
        label="Yoichiro's Menu Item"
        menubarPath="additions"
        class="yoichiro.popupMenu.Item">
      </action>
    </viewerContribution>
  </extension>

extension要素のpoint属性で拡張ポイントを指定するのは既にお馴染み。そしてメニュー項目の追加だが,今回はviewerContribution要素を使用する

コンテキストメニューへのアクションの追加では,objectContribution要素を用いた。objectContribution要素を使った場合,基本的にあるリソースのコンテキストメニューに対してアクションを追加する動きになり,あるビューに追加対象が特定されるわけではない。それに対して,viewerContribution要素を使った場合は,ビューが持つあるコンテキストメニューに特定してメニュー項目を追加することができる

viewerContribution要素の属性を見る。id属性は追加するメニュー項目に独自に付与するIDで,任意に決めてよい。次のtargetIDは,追加対象となるコンテキストメニューのIDを記述する。ビューにコンテキストメニューがひとつしかなければ,ビューのIDがコンテキストメニューのIDのこともある(理由はコンテキストメニューの公開を見よ)。

そして具体的なメニュー項目となるアクションの定義をaction要素に記述していく。これはコンテキストメニューへのアクションの追加のときと大体同じだが,ここではmenubarPath属性が重要。menubarPath属性では,コンテキストメニュー内のメニュー項目を追加する場所を指定するコンテキストメニューの公開で,拡張ポジションをIWorkbenchActionConstants.MB_ADDITIONS定数を使って準備した。このIWorkbenchActionConstants.MB_ADDITIONSの値が「additions」なのだ。ビュークラスのAPIリファレンスで特別な拡張ポジションの指定がなければ,「additions」をmenubarPath属性に指定してあげれば,大抵よいはず。実際のアクションの実装クラスはclass属性を用いて指定する。

viewerContribution要素の場合,アクションクラスはIViewActionDelegateインタフェースを実装する必要がある。

上記の記述でメニュー項目を自由に追加することができるようになるが,見てわかるように,コンテキストメニューのIDがわからなければメニュー項目を追加することはできない。つまり,プラグインが提供するビューのAPIリファレンスなどには,ちゃんと「こんな機能をこんなIDで公開しているので,拡張してね」という記載をするように。

| | コメント (0) | トラックバック (1)

2004.02.12

コンテキストメニューの公開

「ビュー上のコンテキストメニュー(1)(2)」でコンテキストメニューの作成方法を解説した。しかし,それだけでは「自分よがりな」メニューであり,他人に優しいメニューではない。

既存のコンテキストメニューへメニュー項目を追加する方法を,「コンテキストメニューへのアクションの追加」で説明した。これにより,Package ExplorerビューやOutlineビューなどに備わっているコンテキストメニューへ,独自のメニュー項目を追加できる。しかし,これは「予めメニュー項目を他のプラグインが追加できるようにしてくれている」からなのだ。

コンテキストメニューは,Eclipseの拡張性を高く保つために,他のプラグインに対してコンテキストメニューが公開される。そして,コンテキストメニューは,メニュー項目を他のプラグインが追加できるように,拡張ポジションを持っておくべきである。「ビュー上のコンテキストメニュー(1)(2)」では,コンテキストメニューの公開も拡張ポジションの準備もしていないため,他人に優しくないのである。

まずコンテキストメニューの公開方法であるが,これは以下のソースコードで実現する。

  MenuManager menuManager = new MenuManager();
  // コンテキストメニュー作成処理(1)(2)
  getSite().registerContextMenu(menuManager,
    getSite().getSelectionProvider());

ViewPartクラスのgetSiteメソッドを呼び出してIWorkbenchPartSiteインタフェースのオブジェクトを取得し,そのregisterContextMenuメソッドにMenuManagerオブジェクトを渡してコンテキストメニューを登録し公開する。この際,コンテキストメニューのIDは,上記の処理を行ったビューのIDに一致する。もしコンテキストメニューのIDを変えたければ,IDを指定して登録するタイプのreigsterContextMenuメソッドもあるので,そっちを使用する。ISelectionProviderインタフェースのオブジェクトは,自作してもいいけど,通常は上記のようにIWorkbenchPartSiteオブジェクトから取得して渡せばよい。

これでコンテキストメニューを公開できたのだが,これでは公開しただけでメニュー項目の追加ができない。拡張ポジションを準備して,メニュー項目が追加される位置を決めておかなければならない。そのためには,コンテキストメニューに以下のメニュー項目を追加しておく。

  public void menuAboutToShow(IMenuManager menu) {
    menu.add(new TestAction());
    menu.add(new Separator(
      IWorkbenchActionConstants.MB_ADDITIONS));
    menu.add(new Separator(
      IWorkbenchActionConstants.MB_ADDITIONS + "-end"));
  }

メニュー項目として,「こっからここまでだよ」とSeparatorオブジェクトを追加して教えてあげる。その際に,IWorkbenchActionConstantsクラスのMB_ADDITIONS定数を指定して,拡張ポジションの区切りであることを示しておく。

上記により,他のプラグインは公開されたコンテキストメニューのIDを元に,独自のメニュー項目を追加することができるようになる。もちろん「そんなことはさせないぜ!」というプラグイン作者は,上記のような拡張機構をつかわないことも自由である。。。

| | コメント (0) | トラックバック (0)

2004.02.11

ビュー上のコンテキストメニュー(2)

さて,後回しにしていたコンテキストメニューへのメニュー項目の作成方法。これは,ビュー上のコンテキストメニュー(1)で紹介したIMenuListenerインタフェースのmenuAboutToShowメソッド内に記述する。menuAboutToShowメソッドは,コンテキストメニューの表示の直前にEclipseプラットフォームから呼び出される

コンテキストメニューの各メニュー項目で呼び出されるアクションは,Actionクラスのサブクラスとして作成する

  class TestAction extends Action {
    TestAction() {
      super();
      setText("Test Menu");
    }
    public void run() {
      // このメニュー項目が選択されたときの処理
    }
  }

コンテキストメニューに表示される文字列をsetTextメソッドでセットしている。メニュー項目がユーザに選択されたときにはrunメソッドが呼び出される。このrunメソッド内に,実行したい処理を記述する

このアクションをIMenuListenerインタフェースのmenuAboutToShowメソッド内で登録する。

  public void menuAboutToShow(IMenuManager menu) {
    menu.add(new TestAction());
  }

これでメニュー項目がコンテキストメニューに追加される。ちなみに,

  menu.add(new Separator());

セパレータがコンテキストメニューに追加される

上記のコードでは,コンテキストメニューが呼び出されるたびにアクションのインスタンスが生成されなおされているが,通常はアクションのインスタンスは使いまわした方が効率的だし,状況依存で使用可否を変えたりすることもしやすくなるだろう。

| | コメント (0) | トラックバック (0)

ビュー上のコンテキストメニュー(1)

ビューの上でマウスの右ボタンを押すと表示されるコンテキストメニューをプログラムにより作成してみる。

コンテキストメニューの作成処理はIViewPartインタフェースの実装クラスのcreatePartControlメソッド内で行うのが一般的である。

  public class TestView extends ViewPart {
    public void createPartControl(Composite parent) {
      Control control = new Label(parent, SWT.NONE);
      createContextMenu(control);
    }
    ...
  }

ビュー内のコンポーネントとしてLabelコンポーネントを配置し,そのLabelコンポーネント上にコンテキストメニューを追加してみる。コンテキストメニューの追加処理はcreateContextMenuメソッドに記述することとして,コンテキストメニューを追加するLabelコンポーネントをそのメソッドに渡している。

では,コンテキストメニューの作成を行うcreateContextMenuメソッドの中身を見てみよう。

  void createContextMenu(Control control) {
    MenuManager menuManager = new MenuManager();
    menuManager.setRemoveAllWhenShown(true);
    menuManager.addMenuListener(new IMenuListener() {
      public void menuAboutToShow(IMenuManager menu) {
        // メニュー項目の作成
      }
    } );
    Menu menu = menuManager.createContextMenu(control);
    control.setMenu(menu);
  }

メニューについての扱いはIMenuManagerインタフェースにより規定されているが,通常はその実装クラスであるMenuManagerクラスを用いる。まずはMenuManagerのインスタンスを生成する。
次にMenuManagerのsetRemoveAllWhenShownメソッドにtrueを渡して,コンテキストメニューが表示される直前にすべてのメニュー項目を削除するよう設定している。「表示する前に削除しちゃってどうするの?」と思うかもしれないが,もちろん削除された後すぐにメニュー項目を作成する。
MenuManagerにIMenuListenerリスナを登録しておくことで,コンテキストメニューの表示の直前にmenuAboutToShowメソッドが呼び出される。順番的には,MenuManagerによりメニュー項目が削除された後にmenuAboutToShowメソッドが呼ばれる。このmenuAboutToShowメソッド内で,メニュー項目を作成する。メニュー項目の作成方法はちょっと後回し。
あとはMenuManagerのcreateContextMenuメソッドを呼び出してMenuオブジェクトを生成し,コントロールのsetMenuメソッドに渡すことで,コンテキストメニューの作成は完了となる。

コンテキストメニューとは「状況依存のメニュー」であり,基本的には「表示前に全メニュー項目を削除し,IMenuListenerリスナ内で動的にメニュー項目を構築する」という手順を実装する。

| | コメント (0) | トラックバック (0)

2004.02.06

ページへのビューの表示・非表示

あるビューをあるページ内に表示する,あるいは,あるページからあるビューを非表示にする場合は,IWorkbenchPageインタフェースの以下のメソッドを使用する。

 ・ビューを表示する - IWorkbenchPage#showView(String viewId)
 ・ビューを非表示にする - IWorkbenchPage#hideView(IViewPart view)

たとえば,アクティブなページにOutlineビューを表示するには,以下のコードを記述する。

  IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
  IWorkbenchPage page = window.getActivePage();
  IViewPart view =
    page.showView("org.eclipse.ui.views.ContentOutline");

showViewメソッドの引数はビューのIDの文字列を渡すのであり,ビューのクラス名ではないことに注意。つまり,もし何かビューを表示したければ,そのビューのIDを知らなければいけないってことになります。

| | コメント (0) | トラックバック (0)

2004.02.05

新規ビューの作成方法

エディタをさまざまな角度から補佐してくれるビュー。ビューは「Window→Show View」メニューで一覧を見ることができるが,それでは物足りないと思ったら,当然自作することができる。

ビューの作成方法の基本は,以下の2点。

 (1) org.eclipse.ui.views拡張ポイントへの自作ビュー定義の記述
 (2) org.eclipse.ui.IViewPartインタフェース実装クラスの作成

(1)は当然プラグイン・マニフェスト内に記述する。(2)について,通常はIViewPartインタフェースを使用するのではなく,org.eclipse.ui.part.ViewPart抽象クラスを継承する。

たとえばこんな感じ。

  <extension point="org.eclipse.ui.views">
    <view
      id="yoichiro.testView"
      name="Test View"
      class="yoichiro.TestView">
    </view>
  </extension>

  package yoichiro;
  public class TestView extends ViewPart {
    public void createPartControl(Composite parent) {
    }
    public void setFocus() {
    }
  }

これだけで「空の」ビューは完成。Run-time Workbenchを起動して,「Window→Show View→Other...」メニューを選択して,Show Viewダイアログを表示する。その中のOtherの中に,Test Viewが追加されている。これを選択してOKボタンを押せば,グレーののっぺらぼうのビューが表示される。

もしOtherではない場所にしたければ,カテゴリを自分で定義すればよい。以下のような感じ。

  <extension point="org.eclipse.ui.views">
    <category
      id="yoichiro"
      name="Yoichiro's View">
    </category>
    <view
      id="yoichiro.testView"
      name="Test View"
      class="yoichiro.TestView"
      category="yoichiro">
    </view>
  </extension>

| | コメント (0) | トラックバック (0)

2004.02.04

ワークベンチウィンドウ→ページ→ビュー

EclipseのUIの構造は,以下のようになっている。

  WorkbenchWindow(1) → (n)IWorkBenchPage(1) → (n)IViewPart

 ・WorkbenchWindow - ワークベンチウィンドウ(Eclipseのウィンドウそのもの)
 ・IWorkBenchPage - ページ(ワークベンチウィンドウ内の区画)
 ・IViewPart - ビュー(ページ内に置かれるPackageExplorerやOutlineなどのパネル)

これらにアクセスするためのAPIは以下のとおり。

 ・ワークベンチの取得
    IWorkbench workbench = PlatformUI.getWorkbench();
 ・ワークベンチウィンドウの取得
    IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
 ・アクティブなワークベンチウィンドウの取得
    IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
 ・ページの取得
    IWorkbenchPage[] pages = window.getPages();
 ・アクティブなページの取得
    IWorkbenchPage page = window.getActivePage();
 ・ページ内で可視状態のビューの取得
    IViewPart[] views = page.getViews();

最後のビューの取得APIだが,上記の方法はすでに推奨されていない方法のようで,今後は,
    IViewReference[] references = page.getViewReferences();
    IViewPart view = references[n].getView(false);
というように取得しなければならないみたい。IViewReference#getView(boolean)の引数の違いによってどのように動作が変わってくるかは,まだ未検証。

| | コメント (0) | トラックバック (0)

« 2004年1月 | トップページ | 2004年3月 »