Top / Eclipse / プラグイン開発 / TIPS集

ワークベンチ以下の関連

プラグイン開発で、いろいろなUIにアクセスしたいわけですが、それぞれのUIがどのような関連になっているのかをまとめてみました。

workbench_decomposed.gif

WorkBench? window

ワークベンチ(ワークベンチ・ウィンドウ)とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。

ちなみに

IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();

で IWorkbenchWindow? の配列が取得できますが、この配列はEclipseで ウィンドウ >> 新規ウィンドウ で開いているウィンドウたちです。

Page

ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページがあります。ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。

単純にパースペクティブと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="スクリプト生成(&amp;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());
}

この記事は

選択肢 投票
おもしろかった 5  
そうでもない 0  

Top / Eclipse / プラグイン開発 / TIPS集

現在のアクセス:0


*1 どうも WorkbenchWindow? -> IWorkbenchPage? -> IViewPart? となっているようだ

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS