<prefpane> 要素リファレンス

by 1 contributor:

概説

<prefpane> は、設定ウィンドウの ペイン (タブ)を意味する要素です。それは <prefwindow> 要素の子要素でなければいけません。

一般的に、一つの <prefpane> 要素は子要素として一つの <preferences> 要素と、ユーザインターフェイスのための追加の要素を含みます。

<prefpane> 要素は、全ての内容をインラインの要素として含めるか、または、src="chrome://uri/to/overlay.xul" 属性によって示された、外部のオーバーレイ用リソースのchrome URIを参照することができます。外部のリソースは、ペインが選択された時に読み込まれます。後者の方法は、あなたの設定ウィンドウの内容が非常に大きい場合に、ウィンドウがユーザに対して表示されるよりも前に一つのペインだけが読み込まれるのに必要な時間と同程度に、ウィンドウ全体が読み込まれるまでの時間を減らすために使うことができます。

XUL構文

<prefpane id="paneGeneral" label="General" src="chrome://path/to/paneOverlay.xul"/>

または

<prefpane id="paneGeneral" label="General" onpaneload="onGeneralPaneLoad(event);">
  <preferences>
    <preference id="pref_one" name="extensions.myextension.one" type="bool"/>
     ... さらにいくつかの設定 ...
  </preferences>

  <checkbox label="Number one?" preference="pref_one"/>
  ... さらにいくつかのユーザインターフェイス要素 ...
</prefpane>

属性

id 
ペインのID。これは動的なオーバーレイで要素をマッチングするために使われることがありますが、もしペインの動的な読み込みを使わない場合でも、すべての <prefpane> 要素に対してidを提供する必要があります。
image 
ペインのボタンに使用される画像のURL。(実行時にこの属性を動的に変更しても、ペインのボタンの画像は更新されません。)
label 
ペインのボタンのラベル文字列。
selected 
そのペインが現在選択されている(アクティブである)かどうかを示します。(XULの作成時にこの属性を指定しても、機能しません。代わりに <prefwindow> 要素の lastSelected 属性を使ってください。)これはよくありません。
src 
前述の通り、そのペインの内容を提供するオーバーレイ用リソースのURLを指定します。

プロパティ

(todo: 実行時にこれらの属性やプロパティに値をセットした時に何が起こるのかを調べること。私はこれらの全てが実行時に機能するとは思わない。)

contentHeight (読み取り専用) 
現在のペインの内容の高さ(ピクセル単位)。
image 
image 属性の値を設定または取得します。(実行時にこのプロパティに値を設定しても機能しません。)
label 
label 属性の値を設定または取得します。(実行時にこのプロパティに値を設定しても機能しません。)
loaded 
そのペインが完全に読み込まれているかどうかを示します。このプロパティはコード内で、本当に読み取り専用になっていなくてはなりません。
preferenceElements (読み取り専用) 
preference 属性を持つ子要素の NodeList
preferences (読み取り専用) 
全ての子要素である <preference> 要素の NodeList
selected 
selected 属性の値を設定または取得します。
src 
src 属性の値を設定または取得します。

メソッド

DOMElement getPreferenceElement(in DOMElement startElement) 
 ??
DOMElement preferenceForElement(in DOMElement element); 
渡された要素を監視している <preference> 要素(言い替えると、 elementpreference 属性で指定されている要素)を取得します。
void userChangedValue(in DOMElement element); 
設定システムのウィジェットの中でユーザが変更した値は、(1)の理由のため、自動的には状態の変化に追従しません。そのウィジェットに関連づけられた preference 要素は、そのウィジェット自身に保持されている状態に基づいて更新されるべきです。例えば、もしあなたがlistbox要素を使っていて、ユーザがlistboxの内容を(アイテムの追加や削除などで)変更し、あなたがその変更を preference 要素に同期的に反映させたい場合、あなたは onsynctopreference イベントハンドラを、 preference 要素に書き込まれるべき値を返すlistbox要素に記述し、あなたがリストの内容について preference 要素の値を変更するような編集を行う度に、 userChangedValue メソッドを呼ばなくてはいけません。
(1) それのために状態の変化が追従するウィジェットに関する例としては、 "command" イベントが発行される時に状態が自動的に追従する、 checkbox 要素が含まれます。
※日本語版注記:上の説明が分かりにくいので解説。この設定システムは、ユーザがUI要素を操作して状態が変化した場合に限って、UI要素の状態の変化を、その要素に関連づけられたpreference要素の値に反映させる。例えばcheckbox要素がクリックされてチェック状態がONになった場合、関連づけられたpreference要素のvalueは追従してtrueになる。しかし、(他の設定に連動するなどして)スクリプト操作でcheckboxの状態をONにした場合は、関連づけられたpreference要素のvalueは追従しないため変化しない。このような場合は、userChangedValueメソッドにcheckboxを渡して、その時のcheckbox要素の状態をpreference要素のvalueに強制的に反映させることができる。
void writePreferences(in boolean flushToDisk); 
このペインの中での変更をすべて設定に書き込みます。オプション指定によって、ディスクに設定を書き込みます。

イベント

paneload 
このイベントは、そのペインが完全に読み込まれた時(例えば、オーバーレイが完全に統合された時)に、ペインの要素において発行されます。あなたはこの要素の onpaneload 属性によって、このイベントのためのイベントハンドラを置くことができます。

複数の prefpanes 要素の使用方法

注意:複数の prefpane 要素を同じprefwindow 要素の中で使う時は、 <script> 要素を prefpane 要素よりも後に置いてもいいですが、それらよりも前に置いてはいけません。さもなくば、そのダイアログは異常な挙動を示し、正常に表示されないでしょう。

正常に働かせるためには、 <script> タグは以下の設定ダイアログの例のように記述してください。:

<prefwindow>
  <prefpane id="paneGeneral" label="General">
    ...
  </prefpane>

  <prefpane id="paneSecurity" label="Security">
    ...
  </prefpane>

  <script type="application/javascript" src="chrome://myext/content/script0.js">
  <script type="application/javascript" src="chrome://myext/content/script1.js">
</prefwindow>

複数のペインを含むダイアログを開く場合、openDialogの機能指定にtoolbarを入れておかないといけません。例:

window.openDialog("chrome//example/content/prefwin.xul", "", "chrome,toolbar");

ドキュメントのタグと貢献者

Contributors to this page: Piro
最終更新者: Piro,