- 追加された行はこの色です。
- 削除された行はこの色です。
#topicpath
----
//ここにコンテンツを記述します。
#contents
**代表的な拡張ポイント
***ビュー (org.eclipse.ui.part.ViewPart)
***アウトライン (org.eclipse.ui.views.contentoutline.ContentOutline)
***エディタ ()
**リスナー一覧
***org.eclipse.ui.ISelectionListener
** ワークベンチ以下の関連
プラグイン開発で、いろいろなUIにアクセスしたいわけですが、それぞれのUIがどのような関連になっているのかをまとめてみました。
#ref(workbench_decomposed.gif)
***WorkBench window
ワークベンチ(ワークベンチ・ウィンドウ)とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。
-クラス名:IWorkbenchWindow
-取得方法:
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で
ウィンドウ >> 新規ウィンドウ で開いているウィンドウたちです。
***Page
ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページがあります。ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。
-クラス名:IWorkbenchPage
で、ページって何だろうなって思って、
IWorkbench workbench = PlatformUI.getWorkbench();
workbench.getActiveWorkbenchWindow().getActivePage().close();
ってやったら、すべてのパースペクティブが閉じてしまいました。
#ref(close.png)
単純にパースペクティブと1対1でもないんでしょうか((どうも WorkbenchWindow -> IWorkbenchPage -> IViewPart となっているようだ))。
また、
workbench.getActiveWorkbenchWindow().getActivePage().getLabel());
としたら、ワークスペース - J2EEってのが表示されました。やっぱ、パースペクティブだよなぁ。
*** アクティブなエディタへの参照の取得
// ワークベンチの取得
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
//アクティブなエディタの取得
IEditorPart editor = window.getActivePage().getActiveEditor();
AbstractTextEditor aEditor = (AbstractTextEditor) editor;
*** エディタ内のドキュメントを取得
IDocument document =
aEditor.getDocumentProvider().getDocument(editor.getEditorInput());
***プラグインのディレクトリを取得する
Log4jの初期化のためにlog4j.xmlを読み込むなど、プラグインディレクトリのパスを取得する場面は結構ありますが、その方法です。
String pluginDirectory = Platform
.resolve(getDefault().getDescriptor().getInstallURL()).getPath();
で取得できます。
ちなみにLog4jの初期化などはAbstractUIPluginのサブクラス(勝手に作られるヤツ)で
public void startup() throws CoreException {
super.startup();
String pluginDirectory = null;
try {
pluginDirectory =
Platform
.resolve(getDefault().getDescriptor().getInstallURL())
.getPath();
} catch (IOException e) {
e.printStackTrace();
}
DOMConfigurator.configure(new File(pluginDirectory, "lib/log4j.xml").toString());
}
などとstartup()をOverrideすればよいでしょうか。
***外部のライブラリを使用する
プラグインディレクトリにlibディレクトリなどを作成しておいて、plugin.xmlで
<runtime>
<library name="hoge.jar"/>
<library name="lib/fuga.jar"/> <-外部ライブラリ
</runtime>
とすればOKです。
*** プロジェクトへの参照を取得する
いわゆるEclipseのプロジェクトへの参照を取得する方法です。
IWorkspaceRoot myWorkspaceRoot =
ResourcesPlugin.getWorkspace().getRoot();
IProject project = myWorkspaceRoot.getProject([プロジェクト名の文字列]);
***ポップアップメニューの拡張
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
objectClass="org.eclipse.core.resources.IResource" <- ファイルとか、フォルダだったら表示
objectClass="org.eclipse.jdt.core.ICompilationUnit" <- いわゆるソースファイルだったら
objectClass="org.eclipse.core.resources.IFile" <- ファイルだったら表示
objectClass="org.eclipse.core.resources.IFolder" <- フォルダだったら表示
id="nu.mine.kino.IResource">
<action label="スクリプト生成(&R)"
class="nu.mine.kino.HogeAction"
menubarPath="additions" <- すでにあるメニューに追加
enablesFor="1" <- 選択したファイルが1つだけの時有効
id="nu.mine.kino.HogeAction">
</action>
</objectContribution>
</extension>
***デバッグするためのダイアログを出したい
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
Shell shell = window.getShell();
MessageDialog.openInformation(shell, "タイトル","メッセージ");
が定番でしょう。windowオブジェクトはメソッドを記述するクラスによってはフィールドから得られたりしますが。。
***ウィンドウに配置されているViewを取得する。
IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage();
IViewReference[] references = page.getViewReferences();
for (int i = 0; i < references.length; i++) {
IViewPart view = references[i].getView(false); <- Viewへの参照が取得できました
MessageDialog.openInformation(window.getShell(), "ViewのtoString()", view.toString());
}
----
この記事は
#vote(おもしろかった[5],そうでもない[0])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}