// 下階層用テンプレート #topicpath ---- org.eclipse.ui.IViewPart はパースペクティブ内のひとつのビュー(コンソールとか、パッケージエクスプローラとかの)を表すインターフェースです。このインターフェースを実装することによって、自作のビューを作成することが出来ます。 #contents ***拡張ポイント [#bf717681] org.eclipse.ui.views ***plugin.xmlのサンプル [#w6c2dfc7] <extension point="org.eclipse.ui.views"> <category name="サンプルMyView" <- viewが属するカテゴリ名 id="com.samples.myview"> <- カテゴリのID </category> <view name="シンプルView" <- viewのバーのタイトル category="com.samples.myview" <- viewが属するカテゴリID class="com.samples.myview.SimpleView" <- viewを実装するクラス名 id="com.samples.myview.simpleview"> <- viewのID </view> </extension> ***ポイント [#tf595522] plugin.xmlを開いているときのプロパティビューより、classを選択すると対応するクラス(ここではcom.samples.myview.SimpleView)のスケルトンをウィザードが作ってくれます。 ビューを画面に描画するとき((ウィンドウ >> ビューでこのビューを選ぶ時))createPartControlが呼ばれるので、このメソッド内でウィジェットを配置していきます。 **TIPS [#bba1b972] ***選択されたときに起動するメソッドsetFocus [#x05c0703] 自分が選択されたときに、ビュー内を更新したいときなどに使用します。 public void setFocus() { ウィジェットの更新処理 } など ***ISelectionListenerを実装する [#m70cb5e0] ビューは選択しているオブジェクトの情報を表示することが多いので、選択しているものが変わったときにウィジェットを更新する、というアルゴリズムにしたいことが多いと思います。その場合はISelectionListenerを実装します。 public void selectionChanged(IWorkbenchPart part,ISelection selection){ ウィジェットの更新処理 } この場合、自分(this)を IWorkbenchPageインターフェースにattachする必要がありますが、createPartControlメソッド内で getViewSite().getPage().addSelectionListener(this); とすればよいでしょう。 このリスナですが、呼ばれるタイミングは、 -パッケージエクスプローラ内でなんかを選択した -テキストエディタ内でドラッグした などみたいですが、 -テキストエディタ内で文字列を入力とかした場合 は呼ばれないんですね。ようわからんです。 ***設定の保存とリストア [#qcaeab86] 設定の保存とリストアにはMementoパタンを用いています。たとえば org.eclipse.ui.views.markers.internal.TableView の例だと ビューの初期化時に public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); this.memento = memento; } として、createPartControlメソッドで private void restoreColumnWidths(IMemento memento) { if (memento == null) { return; } columnLayouts = new ColumnLayoutData[getFields().length]; for (int i = 0; i < columnLayouts.length; i++) { Integer width = memento.getInteger(TAG_COLUMN_WIDTH + i); if (width == null) { columnLayouts = null; break; } else { columnLayouts[i] = new ColumnPixelData(width.intValue(), true); } } } とメソッドが呼ばれ、カラムの幅などが前回の値がリストアされます。 initメソッドでフィールドにセットされるmementoには、以前ビューを閉じたとき、以下のメソッドで内容が保存されます。((でそのメメントの状態が次回開くときに再現される)) public void saveState(IMemento memento) { super.saveState(memento); //save column widths TableColumn[] columns = viewer.getTable().getColumns(); for (int i = 0; i < columns.length; i++) { memento.putInteger(TAG_COLUMN_WIDTH + i, columns[i].getWidth()); } saveSelection(memento); //save vertical position Scrollable scrollable = (Scrollable) viewer.getControl(); ScrollBar bar = scrollable.getVerticalBar(); int position = (bar != null) ? bar.getSelection() : 0; memento.putInteger(TAG_VERTICAL_POSITION, position); //save horizontal position bar = scrollable.getHorizontalBar(); position = (bar != null) ? bar.getSelection() : 0; memento.putInteger(TAG_HORIZONTAL_POSITION, position); } ---- この記事は #vote(おもしろかった,そうでもない) -保存とリストアについてですが、IMementoとorg.eclipse.jface.dialogs.IDialogSettings との使い分けが...ようわからんですね。 -- [[きの]] &new{2005-05-12 11:41:07 (木)}; -RCPやってて気づいたのですが、デフォルトではこの機構はOFFになってるみたいです。自分でRCP作るときはWorkbenchAdvisor#initialize(IWorkbenchConfigurer configurer)内でconfigurer.setSaveAndRestore(true);をしないとダメです。 -- [[きの]] &new{2006-03-22 23:31:25 (水)}; #comment #topicpath SIZE(10){現在のアクセス:&counter;}