前の関連記事:LibreOffice5(64)オプションページを持つ拡張機能の例を作る: その2
3 拡張機能マネージャーにオプションボタンを表示する
オプションページのIDと拡張機能のIDを同じにすると拡張機能マネージャーにオプションボタンが表示され、それをクリックするとオプションページを表示させることができます(OOobbs2/71 - ...?)。
拡張機能のIDを定義するためにはdescription.xmlを書かないといけません。
description.xmlの各項目についてはExtensions/description - ...?の解説が詳しいです。
識別子というのがIDになります。
IDはPyUNOコンポーネントファイルの実装サービス名で統一することにしました。
今回の拡張機能には識別子に加えて、バージョン、ライセンス表示、依存性、拡張機能パッケージの表示名、パブリッシャー表示、ターゲットプラットホーム、アイコン、パッケージの説明、を採用することにしました。
リリースノートリンク表示やアップデート、ブラウザでのアップデートについては、拡張機能名.update.xml、というファイルを置いたサーバーを用意しないといけないようです(Description of the Update Information - Apache OpenOffice Wiki)。
GitHubにxmlファイルをおいたファイルへのリンクを貼っても機能しなさそうなので、これらのノードを使うのはやめました。
アップデート情報の代わりにパブリシャー表示のリンクにGitHubリポジトリへのリンクを貼ることにしました。
xmlファイルを作成するのは大変なので、toolsのcreateXMLs.pyで作成することにしました。
拡張機能を作り変えるたびにスクリプトの編集をするのは大変です。
description.xmlは、ノードの値が変化するだけなのでiniファイルを作って、それを元にcreateXMLs.pyのcreateDescriptionFile()でdescription.xmlを作成するのようにしました。
config.iniにdescription.xmlに作成するノードの値を設定します。
iniファイルはconfig.pyでConfigParser()で読み込んでいます。
ConfigParserオブジェクトは辞書として扱えますが、キーはすべて小文字に変換されています。
description.xmlのノードにするときは適当に大文字に直さないといけません、といっても問題が起こるノードはLibreOffice-minimal-versionとLibreOffice-maximal-versionだけしかありません。
config.iniはdescription.xmlの作成のためだけのファイルなのでoxtファイルには含めません。
4 独自コンポーネントノードに値を保存する
MaximumPageSize.oxtでは/opt/libreoffice5.2/share/registry/main.xcdにあるコンポーネントスキーマノードの値を変更していましたが、拡張機能のためのノードを作成して値を保持することにしました。
config.xcsでコンポーネントスキーマノードを定義しています。
xcsファイルと対にしてxcuファイルをoxtファイルに含めないといけないと思い込んでいましたが、Saving and Reading Data for the Options Page - Apache OpenOffice Wikiにある例を参考にxcsファイルを作成してみたら、xcuファイルをoxtファイルに含めなくても値が保存されました。
値は~/.config/libreoffice/4/user/registrymodifications.xcuに保存されていました。
LibreOffice5(25)MRI - UNO Object Inspection Tool:その1のMRIにはconfig.xcsでノードを定義して、config.xcuでデフォルト値が定義されています。
ノードの値を変更してみると、変更後の値はやはりregistrymodifications.xcuに保存されていました。
xcsファイルでもデフォルト値が定義できるので、xcuファイルは作らないことにしました。
数値はxcuファイルでは整数しか保存できないことや、コントロールから取得したときは小数点1桁になるとか、よくわからなかったので、数値を文字列に変換して保存しています。
値を取り出したときにまた数値に変換しています。
config.xcsはcreateXcs.pyで書き出しています。
「標準」ボタンをクリックするとデフォルト値に戻るようにしていますが、LibreOffice5(53)Javaの例:ConfigExamplesをPythonにする その6でやったようにsetPropertyToDefault()メソッドが実装されていないので、xcsファイルで設定したデフォルト値を使って戻すことはできません。
なので、component.pyにもデフォルト値を書いておいてその値を使っていました。
2か所に同じことを設定するのは避けたいので、xcsファイルにはデフォルト値を設定せずにpyファイルだけに設定するのがよさそうです、、、
やっぱり気が変わってコンポーネントスキーマノードにデフォルト値のノードを作ってそこにデフォルト値を保存しておくことにしました。
拡張機能のxcsファイルを編集後にテストするときは、registrymodifications.xcuにあるノードの値を忘れずに消しておかないと、そちらの値が使われて、編集後のxcsファイルの動作確認ができません。
参考にしたサイト
OOobbs2/71 - ...?
オプションページをもつ拡張機能の例とその解説。
Extensions/description - ...?
description.xmlの解説。
Description of the Update Information - Apache OpenOffice Wiki
拡張機能のオンラインアップデート情報の提供方法。
Saving and Reading Data for the Options Page - Apache OpenOffice Wiki
xcsファイルの例。
0 件のコメント:
コメントを投稿