LibreOffice5(63)オプションページを持つ拡張機能の例を作る: その1

2017-07-28

旧ブログ

t f B! P L
LibreOffice5(61)オプションダイアログの作成例: MaximumPageSize.oxtのMaximumPageSize.oxtを作り変えて、オプションページを持つ拡張機能の例を作りました。

前の関連記事:LibreOffice5(62)Map AppFont (ma)とピクセル


オプションページとオプションダイアログの定義


オプションページとオプションダイアログの定義がよくわからなかったので勝手に定義します。


ツール→オプション、で表示されるこのページを、オプションページ、とします。

XContainerWindowEventHandlerインターフェイスのcallHandlerMethod()メソッドの第一引数で渡されるxWindowはUnoControlDialogサービスのインスタンスになっています。

このUnoControlDialogの大きさを確認すると幅644pxと高さ423pxになっていました(LibreOffice5(62)Map AppFont (ma)とピクセル参照)。


オプションページからウィンドウのタイトルバーを除いて右上から幅644px、高さ423pxを切り取ってみるとこの部分になります。

だからこの部分をオプションダイアログと決めます。

オプションページをもつ拡張機能の例のPyDevプロジェクト


p--q/OptionsDialog

MaximumPageSize.oxtにいろいろ手を加えました。

OptionsDialog.oxtを拡張機能に登録してそれを選択すると拡張機能マネージャーでオプションボタンが出現します。

LibreOffice 5.2以上にしかインストールできないと思いますがそれは単にdescription.xmlでそう設定しているだけで、それをはずせば5.1でも動くと思います。

5.0以下で動かすにはstructの部分をPyUNOの古い書き方に変えないといけないと思います(linuxBean14.04(131)LibreOfiice5.2のインストール参照)。


オプションボタンをクリックするとオプションページが開きます。


unopkgで拡張機能に登録したときはオプションダイアログの部分だけが地域化されていますが、LibreOfficeからオプションページを呼び出した時は左側のロードマップコントロールに表示される項目も地域化されています。

Windows10にインストールしたLibreOffice 5.2.4.2でもちゃんとLibreOfficeの言語設定に従って地域化されました。

OKボタンをクリックすると値が保存されますが、独自のコンポーネントデータノードに保存されるだけなので、何も影響を及ぼしません。

このオプションページが呼び出せるのは、Writerドキュメントからツール→オプション、でオプションページを呼び出したときだけです。

拡張機能マネージャーのオプションボタンからは常に呼び出せます。

またインターネット、LibreOffice→メモリー、LibreOffice→セキュリティ、というオプションページを非表示にします。

変更したのは次の6点です。

1 オプションダイアログに載せるコントロールをランタイムで作成(component.py)

2 オプションダイアログの国際化にPythonのgettextモジュールを使う(component.po)

3 拡張機能マネージャーにオプションボタンを表示する(description.xml)

4 独自コンポーネントノードに値を保存する(config.xcs)

5 拡張機能マネージャーか、Writerからオプションページを呼び出した時だけに表示する(OptionsDialog.xcu)

6 一部のオプションページを非表示にする(OptionsDialog.xcu)

これらの変更に伴ってoxtファイルに含まれるファイルが増えました。
.
├── LICENSE
├── LICENSE-ja
├── META-INF
│   └── manifest.xml
├── OptionsDialog.components
├── OptionsDialog.xcu
├── config.xcs
├── description.xml
├── descriptions
│   ├── description_en.txt
│   └── descripton_ja.txt
├── dialogs
│   └── optionsdialog.xdl
├── icons
│   └── extension.png
├── optionsdialoghandler.py
└── pythonpath
    └── optionsdialog
        ├── component.py
        └── locale
            └── ja
                └── LC_MESSAGES
                    └── component.mo
1と2によってdialogsフォルダ内のフォルダはオプションダイアログの下地となるxdlファイル一つだけになり、代わりの2のためにcomoponent.moファイルが追加になっています。

4のためにconfig.xcsが追加になっています。

PyUNOコンポーネントの定義はoptionsdialoghandler.pyでは実装サービス名とサービス名の定義のみとして、PyUNOコンポーネントにするクラスはpythonpathフォルダ内に入れたcomponent.pyでしています(LibreOffice5(61)オプションダイアログの作成例: MaximumPageSize.oxt参照)。

manifest.xml、OptionsDialog.components、description.xml、OptionsDialog.xcu、config.xcs、これらのファイルはtoolsフォルダにあるスクリプトで書き出しています。

その他のLICENSE、LICENSE-ja、description_en.txt、descripton_ja.txt、extension.png、といったファイルはすべてdescription.xmlファイルのためのもので、これらは自分で作成しないといけません。
.
├── LICENSE
├── LICENSE-ja
├── descriptions
│   ├── description_en.txt
│   └── descripton_ja.txt
├── dialogs
│   └── optionsdialog.xdl
├── icons
│   └── extension.png
├── optionsdialoghandler.py
└── pythonpath
    └── optionsdialog
        ├── component.py
        └── locale
            └── ja
                └── LC_MESSAGES
                    └── component.mo
toolsフォルダのスクリプトで作成しないファイル一覧はこのようになります。

このうちmoファイルはpoファイルからpoeditで自動作成したものです(linuxBean14.04(158)Pythonモジュールを多言語対応にする)。

optionsdialog.xdlは変更する必要がなく、optionsdialoghandler.pyでは実装サービス名とサービス名を定義しただけで他は形式化しており、LICENSEとLICENSE-jaも既存のライセンスを使っているので、いちから作成しないといけないファイルは次の4つだけになります。
.
├── descriptions
│   ├── description_en.txt
│   └── descripton_ja.txt
├── icons
│   └── extension.png
└── pythonpath
    └── optionsdialog
        ├── component.py
descriptionsフォルダ内にあるtxtファイルでは拡張機能マネージャーのタイトルの下に表示される説明文を各言語ごとに書きます。

extension.pngは拡張機能マネージャーで表示されるアイコンです。

optionsdialog.pyではPyUNOコンポーネントにするクラスを書きます。

オプションダイアグ作成のためのクラスにするにはXContainerWindowEventHandlerインターフェイスを実装するだけです。

description.xmlファイルを作成するには拡張機能についてのバージョンや依存関係、作者名などの情報が必要ですがそれらについてはconfig.iniファイルを用意してそれを読み込んでdescription.xmlファイルを作成するようにしています。

次の関連記事:LibreOffice5(64)オプションページを持つ拡張機能の例を作る: その2

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ