プラグイン開発で、いろいろな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ってのが表示されました。やっぱ、パースペクティブだよなぁ。
// ワークベンチの取得 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オブジェクトはメソッドを記述するクラスによってはフィールドから得られたりしますが。。
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()); }
この記事は
現在のアクセス:140188