Top > Extensions > Options
*オプションページ [#n7782aa9] ツール - オプションの設定に拡張機能独自の設定を追加できます。また、拡張機能マネージャからも設定ページを開くことができます。(2.3 以降) 拡張機能利用前などに必要な設定があるときに利用します。 #contents **概要 [#rcc3dcf6] オプションページの追加は /org.openoffice.Office.OptionsDialog の Nodes 以下のノードに独自の 子ノードを追加することで行います。また、追加する項目の表示位置もある程度決めることができます。 オプションページに表示するダイアログはダイアログエディタで作成します。 また、オプションダイアログの動作を行う .awt.XContainerWindowEventHandler インターフェースを備えたサービスが必要です。 注: オプションページの設定を保存しておく方法を事前に準備しておく必要があります。構成ファイルや独自の設定ファイルなど。 **ダイアログ [#gc2a2db5] ダイアログは丁度オプションページにはまるようなサイズ、さらにタイトルバーを「なし」に設定して作成します。ダイアログのサイズは高さ 185、幅 260 くらいです。 ダイアログを作成したら、エクスポートします。特にダイアログライブラリに入れておく必要も、manifest.xml ファイルに記述は必要ありません。拡張機能パッケージの分かるところに入れておきます (dialogs ディレクトリなどを作成するとよい)。 オプションダイアログを多言語化しているときには文字列リソースも忘れずに同じディレクトリに入れときます。大抵は次のようなファイルがあります。 -Dialog1.xdl -Dialog1_en_US.default -Dialog1_en_US.properties -Dialog1_ja_JP.properties **オプションページダイアログ用サービス [#ffe90297] オプションページダイアログの動作を行うサービスを作成します。このサービスには .awt.XContainerWindowEventHandler インターフェースを備えておきます。 オプションページでなにか操作があったり初期化されたときなどにこのメソッドが呼ばれます。引数は順にダイアログのコンポーネントウィンドウ、イベント名、メソッド名です。メソッド名は "external_event" です。 boolean callHandlerMethod( [in] XWindow xWindow, [in] any EventObject, [in] string MethodName ) raises( ::com::sun::star::lang::WrappedTargetException ); イベント名はオプションページが最初に開かれたとき (initialize)、オプションページの OK ボタンを押したとき (ok)、元に戻すとき (back) があります。(help はなぜかイベントがきません。) [[最大ページサイズ変更>OOobbs2/71]] に簡単な例があります。ダイアログが複数ある場合でもサービスは一つで大丈夫です。xWindow からダイアログ名を取得することでどのページのダイアログのイベントか判断できます。 **ページの指定 (リーフ) [#pe545970] ページの指定は次のように行います。以下の例はページを追加するときに記述する部分で、実際には他のノード内に記述します。 Leaves 内に一つもしくは複数の独自の子ノードを追加することで各ページを追加します。 #code(xcu){{ <node oor:name="Leaves"> <node oor:name="mytools.op1.1" oor:op="fuse"> <prop oor:name="Id"> <value>mytools.op2</value> </prop> <prop oor:name="Label"> <value xml:lang="en-US">op 1</value> <value xml:lang="ja-JP">op 1</value> </prop> <prop oor:name="OptionsPage"> <value>%origin%/dialogs/General/InputAssistantGeneral.xdl</value> </prop> <prop oor:name="EventHandlerService"> <value>mytools.OptionsDialog2</value> </prop> <prop oor:name="GroupId"> <value></value> </prop> <prop oor:name="GroupIndex"> <value>0</value> </prop> </node> </node> }} |項目|説明|h |Id|[[拡張機能 ID>Extensions/description#j18a3abf]] と同じにすると、拡張機能マネージャのページから利用できるようになります| |Label|オプションページの左側にあるツリー構造に表示されるラベル。ローカライズできます| |OptionsPage|このページに表示するダイアログのファイルを指定します。%origin% は使って設定ファイルのパスに置き換えられます| |EventHandlerService|ダイアログのイベントを取り扱う .awt.XContainerWindowEventHandler インターフェースを実装したサービスの実装名を記述します| |GroupId|複数のオプションページをツリーに並べて表示したい時に指定します| |GroupIndex|グループ化したオプションページの並べる順序を指定します| **ノード [#dd1e3367] オプションページを既存のノードに追加することができます。また、新しくノードを作成することもできます。 このノード内に上記のページ指定 (リーフ) を入れることでそのノードにオプションページを追加します。 ***既存ノードへの追加 [#h0285c0a] Writer ノードへ追加してみます。Nodes の子ノードに Writer を指定するとページが Writer ノードに追加されて Writer ドキュメントに関連する設定項目に並んで表示されるようになります。 #code(xcu){{ <?xml version='1.0' encoding='UTF-8'?> <oor:component-data oor:name="OptionsDialog" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <node oor:name="Nodes"> <node oor:name="Writer" oor:op="fuse"> <node oor:name="Leaves"> <node oor:name="mytools.op1.1" oor:op="fuse"> <prop oor:name="Id"> <value>mytools.op2</value> </prop> <prop oor:name="Label"> <value xml:lang="en-US">op 1</value> <value xml:lang="ja-JP">op 1</value> <value xml:lang="ja">op 1</value> </prop> <prop oor:name="OptionsPage"> <value>%origin%/dialogs/General/InputAssistantGeneral.xdl</value> </prop> <prop oor:name="EventHandlerService"> <value></value> </prop> <prop oor:name="GroupId"> <value></value> </prop> <prop oor:name="GroupIndex"> <value>0</value> </prop> </node> <node oor:name="mytools.op1.2" oor:op="fuse"> <prop oor:name="Id"> <value>mytools.op2</value> </prop> <prop oor:name="Label"> <value xml:lang="en-US">op 2</value> <value xml:lang="ja-JP">op 2</value> <value xml:lang="ja">op 2</value> </prop> <prop oor:name="OptionsPage"> <value>%origin%/dialogs/Replace/InputAssistantReplace.xdl</value> </prop> <prop oor:name="EventHandlerService"> <value></value> </prop> <prop oor:name="GroupId"> <value></value> </prop> <prop oor:name="GroupIndex"> <value>1</value> </prop> </node> </node> </node> </node> </oor:component-data> }} その他のノードの形式は [[Options Dialog Configuration>http://wiki.services.openoffice.org/wiki/Framework/Article/Options_Dialog_Configuration]] 参照。 ***新たなノードの作成 [#o190ff89] 独自のノードを作成するには次のようにノードに独自の名前を付けます。 #code(xcu){{ <node oor:name="Nodes"> <node oor:name="mytools.op1.node" oor:op="fuse"> <prop oor:name="Label"> <value xml:lang="en-US">Options Page 1 Node</value> <value xml:lang="ja-JP">Options Page 1 Node</value> </prop> <prop oor:name="OptionsPage"> <value>%origin%/dialogs/node/InputAssistantNode.xdl</value> </prop> <prop oor:name="AllModules"> <value>true</value> </prop> <node oor:name="Leaves"> ....... </node> </node> </node> }} |項目|説明|h |Label|ツリーに表示されるラベル。ローカライズできます| |OptionsPage|オプションページのダイアログ指定| |AllModules|true に設定するとすべてのモジュールでこのノードが表示されます| 子ページは Leaves ノード内に上記と同様に記述します。 このノードページではダイアログのイベントが発生しません。ただ表示されるだけです。(EventHandlerService を指定できません。) **モジュール [#i8fa3bce] ノードを新しく定義したとき、そのノードがどのドキュメントモジュールで表示されるかを指定します。 Modules 内に表示するモジュール名をサービス名で指定します。さらに、その Nodes 内に定義したノード名を指定します。以下では上で作成した新しいノード mytools.op1.node をテキストドキュメントからオプションダイアログを開いときに表示されるように指定しています。 #code(xcu){{ <node oor:name="Modules"> <node oor:name="com.sun.star.text.TextDocument" oor:op="fuse"> <node oor:name="Nodes"> <node oor:name="mytools.op1.node" oor:op="fuse"/> </node> </node> </node> }} 位置の指定が必要な時には、次のように指定します。 #code(xcu){{ <node oor:name="Modules"> <node oor:name="com.sun.star.text.TextDocument" oor:op="fuse"> <node oor:name="Nodes"> <node oor:name="mytools.op1.node" oor:op="fuse"> <prop oor:name="Index"> <value>0</value> </prop> </node> </node> </node> </node> }} ** 拡張機能のオプションページを表示した状態で開く [#z0d2bd87] ツール - オプションメニューでは最後に選択したページが開かれます。拡張機能の特定のオプションページを開いた状態で表示するには次のようにします。 sub OpenExtensionsOptionPage dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") arg = CreateUnoStruct("com.sun.star.beans.PropertyValue") arg.Name = "OptionsPageURL" arg.Value = "vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE" & _ "/uno_packages/svazblta.tmp_/BookmarksMenu-1.0.0.oxt/dialogs/Options.xdl" dispatcher.executeDispatch(_ ThisComponent.CurrentController.Frame, _ ".uno:OptionsTreeDialog", "", 0, Array(arg)) end sub OptionPage で指定した値を OptionPageURL に指定します。コンフィグレーションから読み込むとvnd.sun.star.expand プロトコルのままですが、そのまま渡してかまいません。 |