|
org.eclipse.ui.IViewPart? はパースペクティブ内のひとつのビュー(コンソールとか、パッケージエクスプローラとかの)を表すインターフェースです。このインターフェースを実装することによって、自作のビューを作成することが出来ます。 拡張ポイント †org.eclipse.ui.views plugin.xmlのサンプル †<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>
ポイント †plugin.xmlを開いているときのプロパティビューより、classを選択すると対応するクラス(ここではcom.samples.myview.SimpleView?)のスケルトンをウィザードが作ってくれます。 ビューを画面に描画するとき*1createPartControl?が呼ばれるので、このメソッド内でウィジェットを配置していきます。 TIPS †選択されたときに起動するメソッドsetFocus †自分が選択されたときに、ビュー内を更新したいときなどに使用します。 public void setFocus() {
ウィジェットの更新処理
}
など ISelectionListener?を実装する †ビューは選択しているオブジェクトの情報を表示することが多いので、選択しているものが変わったときにウィジェットを更新する、というアルゴリズムにしたいことが多いと思います。その場合はISelectionListener?を実装します。 public void selectionChanged(IWorkbenchPart part,ISelection selection){
ウィジェットの更新処理
}
この場合、自分(this)を IWorkbenchPage?インターフェースにattachする必要がありますが、createPartControl?メソッド内で getViewSite().getPage().addSelectionListener(this); とすればよいでしょう。もしくはinit(IViewSite? site)で site.getPage().addSelectionListener(this); ですね。 このリスナですが、呼ばれるタイミングは、
などみたいですが、
は呼ばれないんですね。ようわからんです。 ちなみに引数のメソッドは IWorkbenchPart part :選択されたビュー ISelection selection :そのビューの中で、選択されたオブジェクト となっています。 設定の保存とリストア †設定の保存とリストアには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には、以前ビューを閉じたとき、以下のメソッドで内容が保存されます。*2 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);
}
この記事は
現在のアクセス:18795 |