2021年5月16日日曜日

58: LibreOffice/OpenOfficeにメニューアイテム/ツールボタンを登録する

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

マクロ(Python、Java、JavaScript、BeanShell、Basicの)を起動するために。拡張機能を通して。ドキュメントタイプ毎に。

話題


About: LibreOffice
About: Apache OpenOffice
About: Javaプログラミング言語
About: Pythonプログラミング言語
About: JavaScript
About: BeanShell
About: LibreOffice Basic
About: Apache OpenOffice Basic

この記事の目次


開始コンテキスト



ターゲットコンテキスト



  • 読者は、LibreOfficeまたはApache OpenOfficeにメニューアイテムおよびツールボタンを拡張機能を通して登録する方法を知る。

オリエンテーション


任意のPythonマクロを格納する任意のLibreOfficeまたはApache OpenOffice拡張機能を作成することについての記事があります。

任意のLibreOfficeまたはApache OpenOfficeマクロ(拡張機能内に格納されているものを含む)をあなたのプログラムから呼び出すことについての記事があります。

LibreOfficeまたはpache OpenOfficeにキーバインディングを拡張機能を通して登録することについての記事があります。.


本体

ト書き
Hypothesizer 7、Objector 58A、Objector 58Bが、コンピューターの前にいる。


1: メニューアイテムおよびツールボタンを登録する動機


Objector 58A
やつらはそろいもそろってばか者だ!

Hypothesizer 7
何でございますか、サー?

Objector 58A
やつらはばか者だと言ったんだ!

Hypothesizer 7
どなたがですか、もしも、お聞きしてよろしければ?

Objector 58A
あのユーザーたちだよ、もちろん!

Hypothesizer 7
. . . 申し訳ございません、分からないのですが。

Objector 58A
やつらはメニューアイテムを欲しがってるんだよ、キーバインディングを既に俺が付けてやったというのに。

Hypothesizer 7
LibreOfficeかApache OpenOfficeにでしょうか?

Objector 58A
俺はLibreOfficeにキーバインディングを付けたんだ、あんたの前記事にしたがってな。

Hypothesizer 7
それは結構なことです。

Objector 58A
だが、やつらはメニューアイテムを要求してやがる。

Hypothesizer 7
それが彼らを「ばか者」にするとは思いませんが。

Objector 58A
するんだよ!マウスをつかみ、カーソルをずっと上のてっぺんまで動かし、何回かクリックするというような迂遠なことを誰がしたがる、そのかわりに、ただ'Alt' + 'R'を押せばいいだけだというのに?

Hypothesizer 7
彼らはそのキーシーケンスを覚えていないのですよ、多分。

Objector 58A
だからやつらはばか者だと言うんだ!たった1つのキーシーケンスも覚えられない!

Hypothesizer 7
覚えることはできるでしょう(多分)、もしもそれがとても重要なことであれば、しかし、そのキーシーケンスは彼らの人生における中心的関心事ではなく、だから、彼らの記憶からこぼれ落ちかねないのでしょう、もしも、それが頻繁に使われなければ。

Objector 58A
そのキーシーケンスは忘れ得ないものだ: 'Relax(リラックス)'の'R'だ!

Hypothesizer 7
それはどのような性質の機能なのでしょうか?私も試してみたい。 . . . とにかく、もしも、彼らがメニューアイテムを欲しがっているのであれば、なぜいけないのでしょうか?

Objector 58B
私はツールボタンも欲しいわ。

Objector 58A
ここにもばか者がいる。

Objector 58B
なんですって?!

Objector 58A
'Alt' + 'R'を覚えなさい、レディー!

Objector 58B
私はあなたのおバカな機能について話しているんじゃないわよ!私には「リラックス」する必要などありません!

Objector 58A
必要ありそうに聞こえるがな。

Hypothesizer 7
結構です、みなさん。私たちはツールボタンも登録することにします、マダム。


2: 任意のメニューアイテムまたはツールボタンは拡張機能を用いて容易に登録できる


Hypothesizer 7
任意のメニューアイテムまたはツールボタンは拡張機能を用いて容易に登録できます。

Objector 58B
「拡張機能を用いて」ってどういう意味?

Hypothesizer 7
あなたは、いくつかのXMLファイルを作成し、それらを1つのZIPファイルにアーカイブしますが、それが拡張機能ファイルです、マダム。

Objector 58B
私は「いくつかのXMLファイル」を作成する?あなたはそれを「容易」と呼ぶわけ?

Hypothesizer 7
はい、それは容易です。ある以前の記事をお読みください。

そこで、ここで残っている課題は、GUIアイテム群コンフィギュレーションファイルのコンテンツのみです。

拡張機能の1つ良いところは、いくつかの相互に関連したファイル群をパッケージ化できることです。したがって、当該GUIアイテム群から起動されるマクロたちもそのパッケージに入れるというのが自然な方針でしょう。そうすることによって、関連したファイル群の全てを、全体として、登録および登録解除することができるようになります。

Objector 58B
でも、マクロを拡張機能に入れる方法を知らなくちゃいけない。

Hypothesizer 7
ある以前の記事が、任意のPythonマクロを拡張機能に入れる方法を既に取り扱いました。

Objector 58B
「Python」?「Python」ってどういうこと?

Hypothesizer 7
Pythonは、プログラミング言語であって、それであなたはマクロを書けます。

Objector 58B
はあ?マクロはBasicで書くでしょ?

Hypothesizer 7
そうではありません、マダム: マクロはPythonで書けます

Objector 58B
とにかく、どうすれば、Basicマクロを拡張機能に入れられるの?

Hypothesizer 7
ある以降の記事にて御説明いたします。


3: 当該コンフィギュレーションファイルに書くこと


Hypothesizer 7
とにかく、当該コンフィギュレーションファイルのコンテンツは以下のようなものです。

GuiItems.xml

@XML ソースコード
<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office">
	<node oor:name="AddonUI">
		<node oor:name="OfficeMenuBar">
			<node oor:name="theBiasPlanet.testUnoExtension:menu01" oor:op="replace">
				<prop oor:name="Title" oor:type="xs:string">
					<value/>
					<value xml:lang="en">Test</value>
				</prop>
				<prop oor:name="Context" oor:type="xs:string">
					<value>com.sun.star.text.TextDocument</value>
				</prop>
				<node oor:name="Submenu">
					<node oor:name="subMenu01" oor:op="replace">
						<prop oor:name="URL" oor:type="xs:string">
							<value xml:lang="en-US">vnd.sun.star.script:theBiasPlanet.test.unoExtension.oxt/Scripts/python/theBiasPlanet/testUnoExtension/macros/Test1.py$test1?language=Python&amp;location=user:uno_packages</value>
						</prop>
						<prop oor:name="Target" oor:type="xs:string">
							<value>_self</value>
						</prop>
						<prop oor:name="Title" oor:type="xs:string">
							<value/>
							<value xml:lang="en">Test</value>
						</prop>
					</node>
				</node>
			</node>
		</node>
		<node oor:name="OfficeToolBar">
			<node oor:name="theBiasPlanet.testUnoExtension:toolBar01" oor:op="replace">
				<node oor:name="button01" oor:op="replace">
					<prop oor:name="URL">
						<value xml:lang="en-US">vnd.sun.star.script:theBiasPlanet.test.unoExtension.oxt/Scripts/python/theBiasPlanet/testUnoExtension/macros/Test1.py$test1WithAnArgument?language=Python&amp;location=user:uno_packages</value>
					</prop>
					<prop oor:name="Title">
						<value xml:lang="en-US">Test</value>
					</prop>
					<prop oor:name="Target" oor:type="xs:string">
						<value>_self</value>
					</prop>
					<prop oor:name="Context" oor:type="xs:string">
						<value>com.sun.star.text.TextDocument</value>
					</prop>
					<prop oor:name="ImageIdentifier" oor:type="xs:string">
						<value>theBiasPlanet.testUnoExtension:image01</value>
					</prop>
				</node>
			</node>
		</node>
		<node oor:name="Images">
			<node oor:name="theBiasPlanet.testUnoExtension:image01" oor:op="replace">
				<prop oor:name="URL" oor:type="xs:string">
					<value>theBiasPlanet.testUnoExtension:image01</value>
				</prop>
				<node oor:name="UserDefinedImages">
					<prop oor:name="ImageSmallURL" oor:type="xs:string">
						<value>%origin%/images/ExclamationMark.png</value>
					</prop>
					<prop oor:name="ImageBigURL" oor:type="xs:string">
						<value>%origin%/images/ExclamationMark.png</value>
					</prop>
					<prop oor:name="ImageSmallHCURL" oor:type="xs:string">
						<value>%origin%/images/ExclamationMark.png</value>
					</prop>
					<prop oor:name="ImageBigHCURL" oor:type="xs:string">
						<value>%origin%/images/ExclamationMark.png</value>
					</prop>
				</node>
			</node>
		</node>
	</node>
</oor:component-data>

Objector 58A
. . . ふーん、それらの長いやつはマクロ指定でしょう?

Hypothesizer 7
はい、ユーザー所有拡張機能内Pythonマクロ指定です。各タイプの任意のマクロのための表現は、ある以前の記事にて説明されました。

1つの注意点は、任意のツールボタンはマクロを1つの引数付きで呼び出すということです、したがって、そのマクロはその引数を受け取るものでなければなりません。

Objector 58A
何の引数?

Hypothesizer 7
私が知る限り、整数の'0'が渡されるようです。

Objector 58A
はあ?どんなふうに、それは助けになるわけ?

Hypothesizer 7
どのようなふうにもならない、と私は推測します。しかし、マクロはその引数を持っていなけばなりません、いずれにしても。

Objector 58A
. . .

Hypothesizer 7
それら「Context」ノードのそれぞれは、そのGUIアイテムが現れるべきドキュメントタイプを指定します。

Writerには'com.sun.star.text.TextDocument'を、Calcには'com.sun.star.sheet.SpreadsheetDocument'を、Impressには'com.sun.star.presentation.PresentationDocument'を、Drawには'com.sun.star.drawing.DrawingDocument'を、指定できます。

Objector 58B
そのイメージ指定はアイコンでしょう?

Hypothesizer 7
はい。もしも、当該ツールボタンに何もアイコンを欲しくなければ、その「ImageIdentifier」ノードおよび「Images」ノードは省略できます。

Objector 58B
間違いなく欲しいけど。

Hypothesizer 7
もしも、事前登録されたイメージをお使いになりたければ、その「ImageIdentifier」ノードにて'.uno:DataSort'のようなURLを使うことができます。

Objector 58B
はあ?そのURLはどこから来たわけ?

Hypothesizer 7
LibreOfficeまたはApache OpenOfficeのGUIメニューにて、「Tools(ツール)」 -> 「Customize...(カスタマイズ...)」をクリックすし、「Toolbars(ツールバー)」タブをクリックし、「Assigned Commands」にて、あるアイテムを選択し、「Modify(変更)」 -> 「Change Icon...(アイコンの変更)」をクリックし、あるアイコンの上でマウスカーソルをホバリングさせると、ツールチップがそのURLを示します。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>