LibreOffice5(2)コンテクストメニューをカスタマイズする例

2015-10-24

旧ブログ

t f B! P L

前の関連記事:LibreOffice5(1)officehelper.bootstrap()を使う


右クリニックメニューのカスタマイズ方法がIntercepting Context Menusに載っていますがそれを読んでもよくわからず途方にくれていましたがようやく動く例を見つけて、取り掛かる気になりました。
(2016.12.26追記。LbireOffice5.2からGUIでカスタマイズできるようになりました。linuxBean14.04(131)LibreOfiice5.2のインストール参照。)

右クリックメニューのカスタマイズした動く例をようやく発見


[Calc] Gérer un menu contextuel (clic droit) (Consulter le sujet) • Forum OpenOffice.org NeoOffice LibreOffice

正月にぶらぶら検索していたらこのページを発見しました。

2010年の投稿ですが、Présences.odsをダウンロードして実行したところLibreOffice4.2.6.2でもちゃんと動きました(LibreOffice5.4でも動きました)。

右クリックメニューカスタマイズは本当はできないのではないかと疑心暗鬼になっていたのですが、これでまたやる気がでてきました。

Présences.odsはBasicで書いてあるのでPythonに書き換えないといけませんが、しばらくマクロをいじっていなかったのでリハビリがてら、まずIntercepting Context Menusの例からやってみようと思います。

、、、とここまで書いたのが2015年の正月過ぎなのでもう10ヶ月ほど経過しています。

LibreOffice4.4で動かなかったのでどうなるか様子を見ていました。


LibreOffice5.0.2.2では右クリックメニューのカスタマイズがちゃんと動作しているようです。

狙い通りに動いているかどうかはダウンロード元がフランス語の掲示板なのではっきりわかりませんがたぶんちゃんと動いています。

マクロ自体もBasicで書いてあるのでよくわからないですけど、、、

Javaで右クリックメニューのカスタマイズの例


Intercepting Context Menusと同じJavaの例がそのチュートリアルのFramework/Tutorial/Context Menu Interceptionにも載っています。

これらはOpenOffice.org 2.x/3.0のものなので動くがわからないので、linuxBean14.04(83)LibreOfiice5.0.2のインストールでビルドし例のソースフォルダた/opt/libreoffice5.0/sdk/examplesをContextMenuInterceptorで検索すると/opt/libreoffice5.0/sdk/examples/DevelopersGuide/OfficeDevにContextMenuInterceptor.javaが引っかかってきました。

これはOffice Developmentの章の例なので、ContextMenuInterceptorの解説が載っているWriting UNO Componentsの章とは違います。
(2015.11.1追記Office Developmentの章に書いてあるところがわかりました。Controllers - Apache OpenOffice Wikiです。)

とりあえずlinuxBean14.04(51)Eclipse4.5のインストールと静的コールグラフ生成と同様にしてEclipseでこの例のプロジェクトを読み込んでみます。

プロジェククト名はDevelopersGuide_OfficeDevとしました。

Librariesも同様に選択しました。

パッケージエクスプローラでContextMenuInterceptor.javaを選択した状態でRun→Run。

Writerが起動して文章が入力されました。


作成されたドキュメントフレームのすべてのコンテクストメニューに「Help」の項目が追加され、そのサブメニューに「Content」、「Help Agent」、「Tips」が含まれています。
(フレームについてはLibreOffice(32)デベロッパーガイド4:コンポーネントフレームワークへ。)

と、書いてありますが右クリックしても「Help Agent」がでてきません。
(2017.10.21追記。「Help Agent」が表示されない原因はこの項目に割り当てられたCommandURLが存在しないのが原因です。)

linuxBean14.04(83)LibreOfiice5.0.2のインストールでmakeでビルドしたものをmake ContextMenuInterceptor.runで実行しても同じ結果でした。


EclipseのコンソールタブのTerminateボタンをクリックすると追加されたコンテクストメニューの項目Helpが消えました。

この例をいじっていけばなんとかなりそうですね。

LibreOffice 4.5 SDK - Developer's Guide ExamplesをみてもContextMenuInterceptorの例はOffice Development Examplesに分類されていますね。

Framework/Tutorial/Context Menu Interception - Apache OpenOffice Wikiが詳しく書いてあるのでこれで学習するとします。

(2017.10.21追記

OfficeDev/contextmenuinterceptor.py at 7f301629a917561720c9ac7a37e32de1f1bfd12d · p--q/OfficeDev

ContextMenuInterceptor.javaをPythonにしました。

オートメーションでしか動作しません。

オートメーションではinput()で入力待ちにしないとそのままスクリプトが終わってしまいます。

逆にそれをマクロで実行するとマクロ内ではキー入力を受け取れないのでLibreOfficeがフリーズします。

LibreOffice5.4ではコマンドURLがslotではメニュー項目のContentのアイコンは表示されませんでした。Javaでも同じでした。

Calc(28)コンテクストメニューをカスタマイズする: その1でCalcを対象にさらに突っ込んでやっています。)

参考にしたサイト


Intercepting Context Menus - Apache OpenOffice Wiki
右クリニックメニューのカスタマイズの解説

[Calc] Gérer un menu contextuel (clic droit) (Consulter le sujet) • Forum OpenOffice.org NeoOffice LibreOffice
右クリックメニューのカスタマイズ、Basicで動くCalcの例

Framework/Tutorial/Context Menu Interception - Apache OpenOffice Wiki
右クリックメニューのカスタマイズのチュートリアル。

HowTo_modify_context_menu.pdf
日本語の解説ですが古いのでいまも動くかはわかりません。

次の関連記事:LibreOffice5(3)IPython NotebookでUNOオブジェクトの属性を木で出力する

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ