- 追加された行はこの色です。
- 削除された行はこの色です。
#topicpath
----
//ここにコンテンツを記述します。
#contents
JavaWorldの2004年3月号に特集されていたので、Eclipseのプラグイン開発ツールを触ってみました。
Eclipseはこのプラグインの固まりで、すべての機能はプラグインで作成されているみたいです。ようするにEclipseを機能拡張したい場合はこのプラグインという作法に則って作成するわけですね。
まだ全然やり方がわかりません。とりあえずView(パースペクティブ内の一つのタイルのこと)を拡張して、選択しているファイルのファイル名を表示するプラグインを作成しています。
***とりあえずやってみる
一番簡単なやり方は
- プラグイン開発 >> プラグイン・プロジェクト >> プロジェクト名~
(プロジェクト名はたとえばnu.mine.kino.sampleとか)
-プラグイン・コード生成プログラム >> デフォルト・プラグイン構造~
(何も追加しない単純なテンプレート)
後はすべてデフォルトでOKでよいです。ウィザードが完了すると、単純なプラグイン・プロジェクトの作成完了です。
基本的な構成はできたので、次はプラグインファイル(plugin.xml)の記述です。手順は
-プラグインエディタの拡張タブ >> 追加 >> 汎用ウィザード >> スキーマベースの拡張
-拡張ポイントを org.eclipse.ui.views を選択
-プラグインエディタの拡張タブより、org.eclipse.ui.viewsを右クリック >> 新規 >> Category を追加(Viewを属させるグループの作成)
-さらに拡張タブより、org.eclipse.ui.viewsを右クリック >> 新規 >> View を追加(実際のViewの作成)
とするとViewを追加できます。後はプロパティViewより必要事項を入力します。
ただのビューを表示するだけなら
<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>
で十分です。プロパティViewよりclassを選択すると対応するクラス(ここではcom.samples.myview.SimpleView)のスケルトンもウィザードが作ってくれます。
***メニューやツールバーに機能を追加したい
メニューバーや、ツールバーにプラグインを表示させたいときは
org.eclipse.ui.actionSets
という拡張ポイントを使用します。
ウィザードでHello,Worldプラグインを選択すると、以下のようなplugin.xmlが出力されます。
<extension point="org.eclipse.ui.actionSets">
<actionSet label="サンプル・アクション・セット"
visible="true"
id="nu.mine.kino.example.actionSet">
<menu label="サンプル・メニュー(&M)"
id="sampleMenu">
<separator name="sampleGroup"></separator>
</menu>
<action label="サンプル・アクション(&S)"
icon="icons/sample.gif"
class="nu.mine.kino.example.actions.SampleAction"
tooltip="Hello, Eclipse world"
menubarPath="sampleMenu/sampleGroup"
toolbarPath="sampleGroup"
id="nu.mine.kino.example.actions.SampleAction">
</action>
</actionSet>
</extension>
#ref(01.png)
<menu label="サンプル・メニュー(&M)"
#ref(02.png)
<action label="サンプル・アクション(&S)"
#ref(03.png)
#ref(04.png)
<actionSet label="サンプル・アクション・セット"
***外部のライブラリを使用する
プラグインディレクトリにlibディレクトリなどを作成しておいて、plugin.xmlで
<runtime>
<library name="hoge.jar"/>
<library name="lib/fuga.jar"/> <-外部ライブラリ
</runtime>
とすればOKです。
***プラグインのディレクトリを取得する
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すればよいでしょうか。
** ワークベンチ以下の関連
プラグイン開発で、いろいろなUIにアクセスしたいわけですが、それぞれのUIがどのような関連になっているのかをまとめてみました。
#ref(workbench_decomposed.gif)
***WorkBench
ワークベンチ(ワークベンチ・ウィンドウ)とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。
-クラス名: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().
なので同じなんですね。
ちなみに
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
で IWorkbenchWindow の配列が取得できますが、この配列はEclipseで
ウィンドウ >> 新規ウィンドウ で開いているウィンドウ数です。
***Page
ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページがあります。ページは、パーツをグループ化するためのインプリメンテーション・メカニズムです。
-クラス名:IWorkbenchPage
どうも
WorkbenchWindow -> IWorkbenchPage -> IViewPart
となっているようだ。
System.out.println(window.getActivePage().getLabel());
// ワークベンチの取得
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
//アクティブなエディタの取得
IEditorPart editor = window.getActivePage().getActiveEditor();
AbstractTextEditor aEditor = (AbstractTextEditor) editor;
//エディタ内のドキュメントを取得
IDocument document =
aEditor.getDocumentProvider().getDocument(editor.getEditorInput());
document.addDocumentListener(this);
----
この記事は
#vote(おもしろかった,そうでもない)
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}