2008年10月22日水曜日

NetBeans で OOo アドオン開発 (2)

NetBeans で OOo アドオン開発
今回は実際に NetBeans を使い、開発を行います
前回の環境設定編はコチラになります

まずはメニューより「File > New Project」と選択し、新規プロジェクト作成ウィザードを開きます
プロジェクト選択画面にて「OpenOffice.org > OpenOffice.org アドオン」を選択し、「Next」をクリックします


次にプロジェクト名やプロジェクトの保存場所などを設定します
今回の例ではプロジェクト名を"DialogExampleAddon"、パッケージ名は"com.example"としています


設定後、「Next」ボタンをクリックします

次はユーザーコマンド定義を行います
ここではAddOn名、プロパティ名、アイコン、表示名を設定できます。


また、「言語を追加」ボタンをクリックすると、英語(en)以外の言語(日本語など)を表示名として設定することができます

最後にUI構造を作成します
ここでは先のコマンドを含んだメニューツリーなどの設定を行います


すべてのUIの設定が終わったら、「Finish」ボタンをクリックし,プロジェクトを作成します


プロジェクト作成後、いくつかの雛形ファイルが生成されます
そのうち、"com.example"パッケージ内の"DialogExampleAddon.java"というファイルを開きます

まず、フィールドにXToolkit型の変数m_xToolkitを追加します
private XToolkit m_xToolkit;

次にコンストラクタに、以下のコードを追加します
(コメント間が追加コードです)
public DialogExampleAddOn(XComponentContext context) throws Exception {
m_xContext = context;
// ココから追加分
m_xToolkit = (XToolkit) UnoRuntime.queryInterface(
XToolkit.class,
m_xContext.getServiceManager().createInstanceWithContext("com.sun.star.awt.Toolkit", m_xContext));
// ココまで追加分
}

コマンドを実行された時に実行されるdispatchメソッドには以下のように、メッセージボックスを表示する、showMessageBoxメソッドの呼び出しを記述します
(コメント間が追加コードです)
// com.sun.star.frame.XDispatch:
public void dispatch(com.sun.star.util.URL aURL,
com.sun.star.beans.PropertyValue[] aArguments) {
if (aURL.Protocol.compareTo("com.example.dialogexampleaddon:") == 0) {
if (aURL.Path.compareTo("ShowDialogCommand") == 0) {
// add your own code here
// ココから追加分
showMessageBox("Addon Example", "Hello! OOo Addon!!");
// ココまで追加分

return;
}
}
}

最後に、そのメッセージボックスを表示するshowMessageBoxメソッドを実装します
public void showMessageBox(String sTitle, String sMessage) {
if (null != m_xFrame && null != m_xToolkit) {
try {
// describe window properties.
WindowDescriptor aDescriptor = new WindowDescriptor();
aDescriptor.Type = WindowClass.MODALTOP;
aDescriptor.WindowServiceName = new String("infobox");
aDescriptor.ParentIndex = -1;
aDescriptor.Parent = (XWindowPeer) UnoRuntime.queryInterface(
XWindowPeer.class, m_xFrame.getContainerWindow());
aDescriptor.Bounds = new Rectangle(0, 0, 300, 200);
aDescriptor.WindowAttributes = WindowAttribute.BORDER | WindowAttribute.MOVEABLE | WindowAttribute.CLOSEABLE;
XWindowPeer xPeer = m_xToolkit.createWindow(aDescriptor);
if (null != xPeer) {
XMessageBox xMsgBox = (XMessageBox) UnoRuntime.queryInterface(
XMessageBox.class, xPeer);
if (null != xMsgBox) {
xMsgBox.setCaptionText(sTitle);
xMsgBox.setMessageText(sMessage);
xMsgBox.execute();
}
}
} catch (IllegalArgumentException ex) {
Logger.getLogger(DialogExampleAddOn.class.getName()).log(Level.SEVERE, null, ex);
}
}

}

以上でコマンド実行時にダイアログボックスを表示する仕組みは実装できました
では、実際に動作させます
プロジェクトを右クリックし、表示されるメニューより「OpenOffice.orgで拡張を配備して実行」をクリックします


OpenOffice.orgが起動し、拡張機能マネージャウィンドウにて、先のAddOnをインストールしてよいかの確認ダイアログが表示されます


「はい」をクリックし、インストールを行います
無事インストールが完了すると以下のように表示されます


インストール後、適当な文書を作成し、メニューから作成したメニュー名を選択すると以下のようにダイアログが表示されます


ざっと、ダイアログを表示するだけのAddOnでしたが、NetBeans の OpenOffice API プラグインが面倒な部分をほぼ雛形として作ってくれるので、かなり楽に作成できたかと思います
(探し方が悪いのでしょうが)OOo SDK に関する資料が少なかったため、とっかかりが大変でした
(実際には SDK 同梱のドキュメントにて作成したのですが、日本語のドキュメントがやはりほしいところです)

OOo AddOn 開発する際には、是非 NetBeans と OpenOffice API プラグインをお試し下さい

0 件のコメント: