このセクションでは、複数のメニューを持つメニューバーの作成方法を見て行きます。
メニューの作成
XUL には、メニューを作る方法がいくつかあります。 最も基本的な方法は、他の多くのアプリケーションが持っているような、複数のメニューが 1 列に並んだメニューバーを追加することです。 また、ポップアップメニューも作成可能です。 XUL のメニュー機能は、いくつかの異なる要素で構成されており、これらを利用してメニューバーやポップアップメニューを作ることができます。 メニューの項目をカスタマイズするのはとても簡単です。
を使用したメニューを作成する方法の一部については既に説明しています。 このセクションはそれを前提に構成しています。menulist
メニューバーは、おおむねツールバーと同じように作成されます。 また、メニューバーはオプションで
の中に置くことができます。 メニューは他のツールバーと同じように動作します。 XUL は、メニュー固有の特殊な機能を提供するために専用の要素をいくつか持っています。toolbox
メニューバーと、メニューの作成に関係する要素は 5 つあります。 以下で簡単に紹介した後、詳細な説明を行っていきます。
menubar
- メニューの列を入れるためのコンテナです。
menu
- 「menu」という名前ですが、実際にはメニューバーに表示されるメニューのタイトルだけを持っています。この要素はメニューバーの中に置くことが可能です。またはメニューバーとは別の場所に置くこともできます。
menupopup
- メニューのタイトルをクリックした時に、ポップアップして表示されるボックスです。このボックスには、利用者に提示する操作項目のリストが含まれます。
menuseparator
- メニューを分割するための線です。この要素は
の中に置かれます。menupopup
メニューバーのメニューは Macintosh を除く全てのプラットフォームで、何でも好きなようにカスタマイズできます。 Macintosh では、システムによって制御されている OS 自身の特別なメニューが画面の上部に置かれるため、その制限を超えたカスタマイズはできません。 どのような特別なスタイル定義や、非メニュー要素を含んだカスタムメニューでも作成する事ができますが、メニューの上に配置した場合に適用されていない可能性があります。 このことは、メニューを作る時には常に留意してください。
簡単なメニューバーの例
簡単なメニューバーの例を以下に示します。
<toolbox flex="1"> <menubar id="sample-menubar"> <menu id="file-menu" label="File"> <menupopup id="file-popup"> <menuitem label="New"/> <menuitem label="Open"/> <menuitem label="Save"/> <menuseparator/> <menuitem label="Exit"/> </menupopup> </menu> <menu id="edit-menu" label="Edit"> <menupopup id="edit-popup"> <menuitem label="Undo"/> <menuitem label="Redo"/> </menupopup> </menu> </menubar> </toolbox>
この画像は、
要素を使って作成した簡単なメニューバーです。 この要素は、メニューを置くための行部分を作ります。 2 つのメニュー、File と Edit が作られています。 menubar
要素は、メニューの一番上にあるタイトルの部分を作り、メニューバーの所に表示されます。 ポップアップは menu
要素を使って作ります。 これは、利用者が親メニューのタイトルをクリックしたときにポップアップされます。 ポップアップのサイズは、その中にある操作項目に合わせて大きくなります。 操作項目自体は、menupopup
要素を使って作成されます。 それぞれが、メニューのポップアップ中の 1 つの操作項目を表しています。menuitem
要素を使って、メニューに分割線を作るも可能です。 この要素は、menuseparator
をグループに分割するために使用します。 英語版章題 menuitem
menubar 要素
要素は、メニューを含んでいるボックスです。 例では、この要素が伸縮可能な menubar
の中に置かれていることに注目してください。 この要素には特別な属性はありませんが、これもボックスの一種です。 このことは、toolbox
属性に orient
vertical
を設定することで、垂直配置のメニューバーが作成可能であることを意味しています。
menu 要素
要素は、menu
に似たような動作をします。 button
は menu
と同じ属性と、いくつかの付加的な属性を受け付けます。button
id
- メニューのタイトルボタンのための一意な識別子。
label
- File や Edit といったメニューに表示するテキスト。
disabled
- この論理型の属性は、メニュー項目を無効にするかどうかを決めます。この設定は可能ですが、メニュー全体を無効にする必要があることは、めったにないと思います。この属性には
true
とfalse
が設定可能です。もちろん、初期値は後者になります。
accesskey
- この属性は、利用者がメニューのアイテムをアクティブにするために押すキーです。この文字は、通常メニュータイトルに下線をつけて表示されます。Mozilla は
label
属性の値を参照し、この属性で指定された文字に下線を付けて表示させます。このため、accesskey
の値にはlabel
のテキストに存在する文字を指定するべきです。(そうしない場合でも、キーによる入力は依然動作します)。【訳注: 日本語の場合、英字がメニューのラベルに直接現れることはまれなので、「(キー)」をラベルに付加して置きます】
要素は、通常は menu
要素の中に配置されます。 しかしながら、このことは必須ではありません。 ただし、menubar
要素の中に置かない場合は、見た目が変わります。 この画像は、前の例からメニューバーを無くしたものを示しています。menubar
menupopup 要素
要素は、メニューの操作項目を含むポップアップウインドウを作成します。 この要素もボックスの一種で、デフォルトでは垂直配置になります。 必要なら水平配置に変更することも可能で、その場合 menupopup
は、横一列に配置されます。 通常、menuitem
と menuitem
のみが menuseparator
に配置されます。 それ以外のどんな要素でも menupopup
に配置することも可能ではありますが、その場合は Macintosh を無視することになります。menupopup
menuitem 要素
要素は menuitem
要素とよく似ており、同じ属性を持っています。menu
id
- メニュー項目の一意な識別子。
label
- Open や Save といったメニュー項目に加えるテキスト。
disabled
- この論理型の属性は、メニュー項目を無効にするかどうかを決めます。この属性には
true
とfalse
が設定可能で、初期値は後者になります。
accesskey
- この属性は、利用者がメニューのアイテムをアクティブにするために押すキーです。この文字は、通常メニュータイトルに下線をつけて表示されます。Mozilla は label 属性の値を参照し、この属性で指定された文字に下線を付けて表示させます。このため、accesskey の値には label のテキストに存在する文字を指定するべきです。
acceltext
- ここには、メニューの操作項目のテキストの隣に表示されている (Ctrl+Zのような) ショートカットキーのテキストを指定します。これは (表示テキストの指定だけであり) メニュー項目をキーボード操作と関係づけるものではありません。メニュー項目とキーを関連づける方法は、後のセクションで説明する予定です。
menuseparator 要素
には特別な属性はありません。 これは、単に次の menuseparator
との間に水平な線を作るだけです。menuitem
次のセクションでは、よりたくさんのメニューの機能を学びます。