プラグイン開発で、いろいろなUIにアクセスしたいわけですが、それぞれのUIがどのような関連になっているのかをまとめてみました。
ワークベンチ(ワークベンチ・ウィンドウ)とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();IWorkbench を取得するために AbstractUIPlugin#getWorkbench()てのもありますが
This method exists as a convenience for plugin implementors. The workbench can also be accessed by invoking PlatformUI.getWorkbench().なので同じなんですね。ソースを見ても
public IWorkbench getWorkbench() { <-AbstractUIPlugin#getWorkbench() return PlatformUI.getWorkbench(); }でした。
ちなみに
IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
で IWorkbenchWindow? の配列が取得できますが、この配列はEclipseで ウィンドウ >> 新規ウィンドウ で開いているウィンドウたちです。
ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページがあります。ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。
IWorkbench workbench = PlatformUI.getWorkbench(); workbench.getActiveWorkbenchWindow().getActivePage().close();ってやったら、すべてのパースペクティブが閉じてしまいました。
単純にパースペクティブと1対1でもないんでしょうか*1。
また、
workbench.getActiveWorkbenchWindow().getActivePage().getLabel());
としたら、ワークスペース - J2EEってのが表示されました。やっぱ、パースペクティブだよなぁ。
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .getActivePart().getSite().getPage();
など無限に行き来できるみたいですが、これをみてもわかるとおり、
Workbench(1) -> (N)IWorkbenchWindow(1) -> (N)IWorkbenchPage (1) -> (N)IWorkbenchPart(1) -> (1)IWorkbenchPartSite(1) -> (1)IWorkbenchPage ...
となっています。
IWorkbenchPart?はいわゆるビューやエディタで、それに1対1でIWorkbenchPartSite?があり、名前とかIDとか、ビュー・エディタの情報を管理しています。
IWorkbenchPage?はビューの集まりでパースペクティブかな?もちろんIWorkbenchWindow?とは1対Nとなります。
IWorkbenchWindow?はいわゆるウィンドウです。新しいウィンドウを開くとかやると複数開くので、Workbenchとは1対Nになります。
この記事は
現在のアクセス:16585