--- title: ポップアップメニュー slug: Archive/Mozilla/XUL/Tutorial/Popup_Menus tags: - Tutorials - XUL - XUL_Tutorial translation_of: Archive/Mozilla/XUL/Tutorial/Popup_Menus ---
前のセクションでは、メニューバーを使ったメニューの作り方を見てきました。 加えて、XUL ではポップアップメニューを作る機能も持っています。 ポップアップメニューとしては、利用者がマウスの右ボタンを押したときに表示されるメニューが典型的です。
XUL には、3 種類の異なるポップアップがあります。 これらは、主にポップアップを表示させるための方法が異なっています。 以下に概要を示します。
これら 3 つのポップアップは利用者が呼び出すときの方法が異なります。 また、ポップアップの種類は、ポップアップを呼び出す要素の側で指定されることになります。
ポップアップは
要素を使って記述されます。 この要素はボックスの一種で、特別な属性は存在しません。 ポップアップが呼び出されると、ウィンドウが表示され、そこには menupopup
要素の中に置かれた全てのものが含まれています。 また、menupopup
要素の menupopup
属性は、ポップアップを、出したい要素と関連付けるのに必要なため、必ず設定する必要があります。 以下に例を示して、その後に意味を説明していきます。id
<popupset> <menupopup id="clipmenu"> <menuitem label="Cut"/> <menuitem label="Copy"/> <menuitem label="Paste"/> </menupopup> </popupset>
この例は、3 つの操作項目を持つ、単純なポップアップメニューを生成します。 この例では、
要素は、3 つの menupopup
要素を囲っています。 また、menuitem
要素に menupopup
が設定されていることも確認してください。id
要素は、ポップアップメニューの宣言全体を囲みます。 これは、ポップアップのための汎用的なコンテナですが、使用は必須ではありません。 この要素によって、画面上に何かが描画されることはありませんが、全てのポップアップを一箇所にまとめて宣言するための置き場所として使用します。 この popupset
という名前は、複数のポップアップ宣言を内側に置くことができるということから付けられています。 また、別のポップアップの定義を追加する場合には、最初の popupset
要素の後に置くだけで構いません。 複数の menupopup
をファイルに置いても構いませんが、通常は 1 つにまとめるようにします。popupset
これで、ポップアップの作成はできましたので、いよいよポップアップを表示させてみることにします。 このためには、ポップアップを出現させる要素と関係づける必要があります。 これは、ポップアップを、利用者がウィンドウのある一定のエリアをクリックした場合のみに出現させるために必要です。 ポップアップを表示させるエリアは、主にボタンかボックスを用いて指定します。
ポップアップと要素と関係付けるためには、次に示す 3 つの属性のうちの 1 つを要素に加えます。 どの属性を加えるかは、作りたいポップアップの種類に応じて決定されます。 プレインポップアップを作成するには、
属性を要素に加えます。 また、コンテキストポップアップには、popup
属性を加えます。 最後に、ツールチップポップアップの場合は、context
属性を加えます。tooltip
これらの属性の値として、表示させるポップアップの
属性の値を指定する必要があります。 このために、id
要素には、必ず menupopup
属性を設定しなければなりません。 この仕様によって、簡単に複数のポップアップ宣言を 1 つのファイルにまとめておくことができるようになっています。id
上記の例に追加して、コンテキストメニューのポップアップを作ってみることにします。 そのためには、
属性を使用する必要があります。 これは、ポップアップを関係づけたい要素の方に追加します。 以下に、適用した例を示します。context
<popupset> <menupopup id="clipmenu"> <menuitem label="Cut"/> <menuitem label="Copy"/> <menuitem label="Paste"/> </menupopup> </popupset> <box context="clipmenu"> <description value="Context click for menu"/> </box>
ここでは、
要素をボックスと関係づけています。 ボックス内部の任意の場所で、context-click (右クリック) をすれば、ポップアップメニューが表示されます。 ポップアップは、ボックスの子要素の上でクリックした場合であっても表示されます。 したがって、この例で menupopup
要素の上でクリックした場合であっても、ポップアップは表示されます。 description
属性は、同じ id を持つcontext
とボックスを結びつけるのに用いられています。 この例では、menupopup
clipmenu
という id を持つ
が表示されることになります。 これによって、たくさんのポップアップを作成して、それぞれを異なる要素に結びつけることが可能になります。menupopup
1 つの要素に対して、ポップアップの種類が異なる属性を追加することで、複数のポップアップを結びつけることも可能です。 また、同じポップアップを複数の要素と結びつけることも可能です。(これは、このポップアップための構文を採用したことによる優位点のひとつです)。 なお、ポップアップは、XUL 要素にのみ結びつけることが可能で、HTML 要素と結びつけることはできません。
ここでは、ツールチップを作るための簡単な方法を見て行きます。 ツールチップを作る方法は、2 つあります。 最も簡単な方法は、
属性を、ツールチップを設定したい要素に追加することです。(通常は、こちらの方が多く使われています)tooltiptext
2 つめの方法は、ツールチップに表示する内容を含めるために
要素を使用します。 この方法では、個々のツールチップの内容部分を分離するか、またはツールチップの内容を設定するようなスクリプトを用意する必要があります。 しかしながら、この方法を用いた場合、ツールチップにテキストだけでなく任意の内容を使用できます。tooltip
<button label="Save" tooltiptext="Click here to save your stuff"/> <popupset> <tooltip id="moretip" orient="vertical" style="background-color: #33DD00;"> <description value="Click here to see more information"/> <description value="Really!" style="color: red;"/> </tooltip> </popupset> <button label="More" tooltip="moretip"/>
この例にある 2 つのボタンは、それぞれツールチップを持っています。 最初のボタンは、デフォルトのツールチップのスタイルを使用します。 2 つ目のボタンは、背景色とテキストのスタイルを変更した、カスタムツールチップを使用します。 More ボタンには
属性が使われていて、対応する tooltip
要素の tooltip
の値が設定されています。 なお、id
要素も、他のポップアップ系の要素と同様に tooltip
の中に配置可能です。popupset
デフォルトでは、プレインとコンテキストポップアップのウィンドウは、マウスポインタの位置に表示されます。 また、ツールチップは、マウスポインタと重なって隠されることが無いように、要素の少し下に表示されます。 しかしながら、ポップアップの表示位置を、もっと詳細に指示したい場合もあると思います。 例えば、ブラウザのバックボタンをクリックした時に出現するポップアップメニューは、「バックボタンの下」に表示されるべきですが、それはプレインポップアップのデフォルトの表示位置である「マウスポインタの位置」とは異なります。
ポップアップの表示位置を変更するためには、
に付加的な属性である menupopup
を使うことで可能です。 また、position
属性は、position
要素にも設定可能です。 この属性は、ポップアップの表示位置と、ポップアップの呼び出し元の要素の位置関係を指示するために使用します。 ここには、いくつかの値が設定可能です。以下に概要を示します。menupopup
position
属性を popup
要素に加えることで、ポップアップの表示位置を正確に指定することができます。 ポップアップに対して、位置指定を直接ピクセル値で行うことはできません。 position
属性は、3 種類の全てのポップアップで使うことが可能です。 もっとも、ツールチップでは、ほとんど値を変える状況はないと思います。
以下に、ポップアップメニューを持った戻るボタンを作る例を示します。
<popupset> <menupopup id="backpopup" position="after_start"> <menuitem label="Page 1"/> <menuitem label="Page 2"/> </menupopup> </popupset> <button label="Pop Me Up" popup="backpopup"/>
それでは、ファイル検索ダイアログに、簡単なポップアップメニューを追加してみましょう。 簡単にするために、Edit メニューの内容を複製することにします。 また、ポップアップは、最初のタブパネルの上でクリックした時に表示されるようにしたいと思います。
<popupset>
<menupopup id="editpopup">
<menuitem label="Cut" accesskey="t"/>
<menuitem label="Copy" accesskey="c"/>
<menuitem label="Paste" accesskey="p" disabled="true"/>
</menupopup>
</popupset>
<vbox flex="1">
.
.
.
<tabpanel id="searchpanel" orient="vertical" context="editpopup">
この簡単なポップアップは、最初のタブパネルに追加されている Edit メニューと同じようなものになります。 最初のパネル上のどこかで右クリック (Macintosh ではControl+クリック) すれば、ポップアップが表示されるはずです。 また、ポップアップは、それ以外の場所でクリックした場合は表示されません。 テキスト入力欄 (textbox) は、要素自身に組み込まれたポップアップメニューを持っているため、こちらで指定しても上書きされてしまうことに注意してください。
次のセクションでは、どのようにスクロールメニューを作るかを見て行きます。