Top > Extensions > Options

オプションページ Edit

ツール - オプションの設定に拡張機能独自の設定を追加できます。また、拡張機能マネージャからも設定ページを開くことができます。(2.3 以降)

拡張機能利用前などに必要な設定があるときに利用します。

概要 Edit

オプションページの追加は /org.openoffice.Office.OptionsDialog の Nodes 以下のノードに独自の 子ノードを追加することで行います。また、追加する項目の表示位置もある程度決めることができます。

オプションページに表示するダイアログはダイアログエディタで作成します。

また、オプションダイアログの動作を行う .awt.XContainerWindowEventHandler インターフェースを備えたサービスが必要です。

注: オプションページの設定を保存しておく方法を事前に準備しておく必要があります。構成ファイルや独自の設定ファイルなど。

ダイアログ Edit

ダイアログは丁度オプションページにはまるようなサイズ、さらにタイトルバーを「なし」に設定して作成します。ダイアログのサイズは高さ 185、幅 260 くらいです。

ダイアログを作成したら、エクスポートします。特にダイアログライブラリに入れておく必要も、manifest.xml ファイルに記述は必要ありません。拡張機能パッケージの分かるところに入れておきます (dialogs ディレクトリなどを作成するとよい)。

オプションダイアログを多言語化しているときには文字列リソースも忘れずに同じディレクトリに入れときます。大抵は次のようなファイルがあります。

  • Dialog1.xdl
  • Dialog1_en_US.default
  • Dialog1_en_US.properties
  • Dialog1_ja_JP.properties

オプションページダイアログ用サービス Edit

オプションページダイアログの動作を行うサービスを作成します。このサービスには .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 はなぜかイベントがきません。)

最大ページサイズ変更 に簡単な例があります。ダイアログが複数ある場合でもサービスは一つで大丈夫です。xWindow からダイアログ名を取得することでどのページのダイアログのイベントか判断できます。

ページの指定 (リーフ) Edit

ページの指定は次のように行います。以下の例はページを追加するときに記述する部分で、実際には他のノード内に記述します。

Leaves 内に一つもしくは複数の独自の子ノードを追加することで各ページを追加します。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
<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>
項目説明
Id拡張機能 ID と同じにすると、拡張機能マネージャのページから利用できるようになります
Labelオプションページの左側にあるツリー構造に表示されるラベル。ローカライズできます
OptionsPageこのページに表示するダイアログのファイルを指定します。%origin% は使って設定ファイルのパスに置き換えられます
EventHandlerServiceダイアログのイベントを取り扱う .awt.XContainerWindowEventHandler インターフェースを実装したサービスの実装名を記述します
GroupId複数のオプションページをツリーに並べて表示したい時に指定します
GroupIndexグループ化したオプションページの並べる順序を指定します

ノード Edit

オプションページを既存のノードに追加することができます。また、新しくノードを作成することもできます。

このノード内に上記のページ指定 (リーフ) を入れることでそのノードにオプションページを追加します。

既存ノードへの追加 Edit

Writer ノードへ追加してみます。Nodes の子ノードに Writer を指定するとページが Writer ノードに追加されて Writer ドキュメントに関連する設定項目に並んで表示されるようになります。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
<?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">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">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 参照。

新たなノードの作成 Edit

独自のノードを作成するには次のようにノードに独自の名前を付けます。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
  <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>
項目説明
Labelツリーに表示されるラベル。ローカライズできます
OptionsPageオプションページのダイアログ指定
AllModulestrue に設定するとすべてのモジュールでこのノードが表示されます

子ページは Leaves ノード内に上記と同様に記述します。

このノードページではダイアログのイベントが発生しません。ただ表示されるだけです。(EventHandlerService を指定できません。)

モジュール Edit

ノードを新しく定義したとき、そのノードがどのドキュメントモジュールで表示されるかを指定します。

Modules 内に表示するモジュール名をサービス名で指定します。さらに、その Nodes 内に定義したノード名を指定します。以下では上で作成した新しいノード mytools.op1.node をテキストドキュメントからオプションダイアログを開いときに表示されるように指定しています。

  0
  1
  2
  3
  4
  5
  6
<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>

位置の指定が必要な時には、次のように指定します。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
<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>

拡張機能のオプションページを表示した状態で開く Edit

ツール - オプションメニューでは最後に選択したページが開かれます。拡張機能の特定のオプションページを開いた状態で表示するには次のようにします。

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 プロトコルのままですが、そのまま渡してかまいません。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes