前の関連記事:LibreOffice5(113)埋め込みマクロフォルダを読み書きする方法:まとめ
ドキュメントに割り当てることができるイベント
イベント駆動型マクロ - LibreOffice Help
ツール→カスタマイズ、イベント、でドキュメントのイベント名一覧が見れます。
「マクロ」ボタンをクリックするとそれぞれのイベントにマクロを割り当てることができます。
イベントのUNO APIでの名前はLibreOffice: Events Service Referenceで確認できます。
これらすべてのイベントが使えるわけでなく、実際にどのイベントが使えるかはドキュメントモデルをdocとするとdoc.getEvents().getElementNames()で取得できます。
しかし上のダイアログで表示されている以外にOnVisAreaChanged、OnModeChanged、OnStorageChangedの3つのイベント名がでてきました。
この3つのイベントがどういう状況で呼び出されるのかわかりませんでした。
ドキュメントイベントの「文書の読み込み終了時」と「文書を開いた時」の違い
「文書の読み込み終了時」と「文書を開いた時」の違いがよくわからなかったので調べてみました。
List of Supported Events - Apache OpenOffice Wiki
「文書の読み込み終了時」はOnLoadFinishedイベント、「文書を開いた時」はOnLoadイベントに該当するようです。
OnLoadFinishedイベントは文字通り文書の読み込み終了時です。
「読み込み終了時」なのでドキュメントが見えるかどうかは関係ないので、hiddenで読み込んでも読み込みが完了すれば
(2017.12.23追記。ドキュメントを開くときのイベントを取得してみるとOnLoadFinishedは呼ばれていないようでした。Calc(48)ドキュメントイベントを調べる参照。)
それに対してOnLoadイベントはビューが完全に作成された時点で発生します。
ということでドキュメントを開いた時は、読み込んだ時点でOnLoadFinishedイベントが発生し(未確認)、ビューが完成した時点でOnLoadイベントが発生します。
なのでイベントが発生する順番はOnLoadFinished→OnLoadになります(未確認)。
これは英語の意味としては順番が矛盾するので、イベント名をOnLoadからOnOpenに変更しよう、という議論がされています(83692 – Add interface for OnLoadFinished event)。
こうなってしまったのは、OnLoadイベントがまず実装されて、そのあとにOnLoadFinishedイベントが実装されたという歴史的な理由なのですが、すでに実装されている名前を変更するのはなかなか難しいようです。
日本語訳はこのことを反映して、OnLoadイベントの訳はOnOpenに相当する「文書を開いた時」になっています。
「文書を開いた時」はビューが完成したときに発生するイベントなので、hiddenで読み込んだ時は「文書を開いた時」(OnLoad)イベントが発生しないことになります。
これでOnLoadFinishedとOnLoadの違いはわかりましたが、OnLoadがビューを完成した時とすると「ビューの作成時」(OnViewCreated)との違いが分からないですね。
OnCreateイベント(「文書作成時」)とOnNewイベント(「新規文書の開始時」)の関係も同様で、OnCreateがドキュメントが新規作成されたとき、OnNewはドキュメントが新規作成されてビューが完成したときに発生します、、、このときもOnLoadが発生するのでしょうか、、、
ということでドキュメントイベントの順番を出力するマクロを作成することにしました。
参考にしたサイト
LibreOffice: Events Service Reference
UNO APIでのイベント名一覧。
List of Supported Events - Apache OpenOffice Wiki
OnLoadFinishedとOnLoadの違い。
83692 – Add interface for OnLoadFinished event
OnLoadFinishedとOnLoadの議論。
0 件のコメント:
コメントを投稿