aboutsummaryrefslogtreecommitdiff
path: root/files/ja/archive/mozilla/xul/popupguide/menuitems/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/ja/archive/mozilla/xul/popupguide/menuitems/index.html')
-rw-r--r--files/ja/archive/mozilla/xul/popupguide/menuitems/index.html169
1 files changed, 169 insertions, 0 deletions
diff --git a/files/ja/archive/mozilla/xul/popupguide/menuitems/index.html b/files/ja/archive/mozilla/xul/popupguide/menuitems/index.html
new file mode 100644
index 0000000000..365b303f32
--- /dev/null
+++ b/files/ja/archive/mozilla/xul/popupguide/menuitems/index.html
@@ -0,0 +1,169 @@
+---
+title: MenuItems
+slug: Archive/Mozilla/XUL/PopupGuide/MenuItems
+translation_of: Archive/Mozilla/XUL/PopupGuide/MenuItems
+---
+<div><span id="Features_of_the_menuitem_Element"></span></div>
+<h2 id="menuitem_.E8.A6.81.E7.B4.A0.E3.81.AE.E6.A9.9F.E8.83.BD" name="menuitem_.E8.A6.81.E7.B4.A0.E3.81.AE.E6.A9.9F.E8.83.BD">menuitem 要素の機能</h2>
+<p>menuitem 要素は単にメニューコマンドのラベルであるだけではなく、さまざまな機能を持っています。</p>
+
+
+
+<div><span id="Adding_Shortcut_Keys_to_Menu_Items"></span></div>
+<h3 id=".E3.82.B7.E3.83.A7.E3.83.BC.E3.83.88.E3.82.AB.E3.83.83.E3.83.88.E3.82.AD.E3.83.BC.E3.81.AE.E8.BF.BD.E5.8A.A0" name=".E3.82.B7.E3.83.A7.E3.83.BC.E3.83.88.E3.82.AB.E3.83.83.E3.83.88.E3.82.AD.E3.83.BC.E3.81.AE.E8.BF.BD.E5.8A.A0">ショートカットキーの追加</h3>
+<p>メニューアイテムにはショートカットキーを関連付けることができます。メニューが開かれている間しか機能しないアクセスキーとは違い、ショートカットキーはどんな時でも機能します。ショートカットキーを作成するには、key 要素を使います。実際にキーボードショートカットを処理するのは key 要素ですが、ショートカットはメニューアイテムのラベルの横に表示されます。これにより、ユーザーはメニューを見ることで、利用できるショートカットキーを知ることができます。</p>
+<div style="overflow: hidden;">
+<pre class="brush:xml">&lt;keyset&gt;
+ &lt;key id="open-key" modifiers="accel" key="O" /&gt;
+ &lt;key id="close-key" modifiers="accel" key="C" /&gt;
+&lt;/keyset&gt;
+&lt;menubar&gt;
+ &lt;menu label="View"&gt;
+ &lt;menupopup&gt;
+ &lt;menuitem label="Open" key="open-key" /&gt;
+ &lt;menuitem label="Close" key="close-key" /&gt;
+ &lt;/menupopup&gt;
+ &lt;/menu&gt;
+&lt;/menubar&gt;
+</pre></div>
+<p><img alt="Image:Popupguide-menushortcut.png" src="/@api/deki/files/303/=Popupguide-menushortcut.png"></p>
+<p><code id="a-key"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/key">key</a></code> 属性によって、2 つのメニューアイテムにショートカットキーが関連付けられています。key 属性は同じドキュメント内の key 要素の id に設定しなければなりません。このようにすると、メニューアイテムのラベルの横にショートカットキーが表示されます。この例の "Open" アイテムは、"accel" 修飾キーを押しながら "O" キーを押すことで実行できます。"accel" 修飾キーはプラットフォームによって異なりますが、ショートカットキーで一般的に使用されるキーになります。たとえば、accel キーが Control キーならば、メニューには "Ctrl + O" と表示されるでしょう。</p>
+<p>普通はやる必要はありませんが、<code id="a-acceltext"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/acceltext">acceltext</a></code> 属性を使うと、メニューに表示されるキーボードショートカットのラベルをカスタマイズすることができます。これはたとえば、現在開かれているウィンドウの一覧を表示するメニューなど、アイテムに関連付けられるキーが変化するような場合に使用するのがいいでしょう。</p>
+
+<pre><code>&lt;menuitem label="First Window" acceltext="1" /&gt;</code></pre>
+
+<p>こうするとキーボードショートカットのラベルが "1" になりますが、そのキーを処理するコードも書く必要があります。</p>
+
+
+
+<div><span id="Adding_Icons_to_Menu_Items"></span></div>
+<h3 id=".E3.82.A2.E3.82.A4.E3.82.B3.E3.83.B3.E3.81.AE.E8.BF.BD.E5.8A.A0" name=".E3.82.A2.E3.82.A4.E3.82.B3.E3.83.B3.E3.81.AE.E8.BF.BD.E5.8A.A0">アイコンの追加</h3>
+<p><code id="a-image"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/image">image</a></code> 属性を使うと、メニューアイテムにアイコンを追加できます。アイコンはメニューアイテムのラベルの左に表示されます。アイコンが表示されるようにするためには、image 属性に加えて、"menuitem-iconic" という特殊なクラスを設定しなければなりません。</p>
+
+<pre>&lt;menuitem id="add-bookmark" class="menuitem-iconic" label="Add Bookmark" image="addbookmark.png" /&gt;</pre>
+
+<p>アイコン画像はメニューアイテム上に表示されるので、かなり小さい画像を使用しなければなりません。メニューアイテムの画像のサイズは、厳密には使用されているテーマによって異なりますが、一般的には 16 x 16 pixel 前後にするべきです。<code id="a-image"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/image">image</a></code> 属性を使ってアイコンを指定する代わりに、スタイルシートで "list-style-image" プロパティを使って画像を参照することもできます。</p>
+
+<pre class="brush:js">#add-bookmark {
+ list-style-image: url('addbookmark.png');
+}</pre>
+
+<p>この手法は menu 要素に対して画像を適用するのにも使用できますが、その場合クラス名には "menu-iconic" を指定しなければなりません。</p>
+
+<pre><code>&lt;menuitem id="bookmark" class="menu-iconic" label="Bookmarks" image="bookmarks.png" /&gt;</code></pre>
+
+
+
+<div><span id="Checkbox_Menu_Items"></span></div>
+<h3 id=".E3.83.81.E3.82.A7.E3.83.83.E3.82.AF.E3.83.9C.E3.83.83.E3.82.AF.E3.82.B9.E5.9E.8B.E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0" name=".E3.83.81.E3.82.A7.E3.83.83.E3.82.AF.E3.83.9C.E3.83.83.E3.82.AF.E3.82.B9.E5.9E.8B.E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0">チェックボックス型メニューアイテム</h3>
+<p>トグル式の動作をするメニューアイテムを使用したい場合があるでしょう。たとえば、ツールバーの表示非表示を切り替えるメニューアイテムなどです。このメニューアイテムには、ツールバーの現在の状態を示すために、ラベルの隣にチェックボックスが表示されます。チェックボックスがオンならばツールバーは表示されており、オフならば表示されていません。ユーザーはメニューアイテムを選択する事でツールバーの表示を切り替えることができます。</p>
+<p>このような種類のメニューアイテムは、<code id="a-type"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/type">type</a></code> 属性を "checkbox" という値に設定すると作成できます。</p>
+
+<pre class="brush:xml">&lt;menu label="View" accesskey="V"&gt;
+ &lt;menupopup&gt;
+ &lt;menuitem label="Show Toolbar" accesskey="T" type="checkbox" checked="true" /&gt;
+ &lt;menuitem label="Show Status Bar" accesskey="S" type="checkbox" /&gt;
+ &lt;/menupopup&gt;
+&lt;/menu&gt;</pre>
+
+<p><img alt="Image:Popupguide-menucheckbox.png" src="/@api/deki/files/301/=Popupguide-menucheckbox.png"></p>
+
+<p>2 つあるメニューアイテムが共にチェックボックス型になっています。1 つめのメニューアイテムは <code id="a-checked"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/checked">checked</a></code> 属性が true に設定されているので、デフォルトでチェックされています。2 つめのメニューアイテムはデフォルトではチェックされていません。ユーザーがメニューアイテムを選択すると command イベントが発生するので、ツールバーやステータスバーなどの状態を変化させるコードを command イベントリスナから実行することができます。メニューアイテムの checked 属性は command イベントが発生する前に自動的に更新されるので、自分で属性値を更新する必要はありません。</p>
+<p>チェック状態は command イベントが発生する前に更新されるので、command イベントリスナ内でメニューアイテムの checked 属性を使用する場合には、チェック状態はすでに新しい状態にあるということに注意してください。</p>
+
+<pre class="brush:xml">&lt;script&gt;
+function changeToolbarState(event) {
+ if (event.target.getAttribute("checked") == "true")
+ showToolbar();
+ else
+ hideToolbar();
+}
+&lt;/script&gt;
+...
+&lt;menuitem label="Show Toolbar" accesskey="T" type="checkbox"
+ oncommand="changeToolbarState();"/&gt;
+</pre>
+
+<p>この例では、メニューアイテムがチェックされているとツールバーを表示し、チェックされていなければツールバーを隠します。</p>
+<p>メニューアイテムが選択された時に、チェックボックスの状態を自動的に更新して欲しくない場合があるかもしれません。これは実行される動作が失敗する可能性がある場合に有効です。単純にチェックボックスの状態を元に戻すというやり方もありますが、余計にややこしくなる可能性があります。 <code id="a-autocheck"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/autocheck">autocheck</a></code> 属性を使うと、チェックボックスが自動的に更新されないようにできます。autocheck 属性を <code>false</code> に設定すると、チェックボックスの状態は自動的に更新されなくなるので、チェック状態を変更するコードを自分で書かなければなりません。</p>
+
+
+<pre class="brush:xml">&lt;script&gt;
+function changeToolbarState(event) {
+ if (event.target.getAttribute("checked") == "true")
+ hideToolbar();
+ event.target.removeAttribute("checked");
+ } else {
+ if (!showToolbar())
+ return;
+ event.target.setAttribute("checked", "true");
+ }
+}
+&lt;/script&gt;
+...
+&lt;menuitem
+ label="Show Toolbar"
+ accesskey="T"
+ type="checkbox"
+ autocheck="false"
+ oncommand="changeToolbarState();" /&gt;</pre>
+
+<p>このバージョンの <code>changeToolbarState</code> 関数は <code id="a-checked"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/checked">checked</a></code> 属性を自分で変更します。メニューアイテムの autocheck 属性が false に設定されているので、checked 属性は自動的に更新されません。コードの条件ブロック部分が入れ替えられていることに注目してください。メニューアイテムがチェックされていたらツールバーを隠し、チェックされていなければツールバーを表示するようになっています。これはあらかじめチェック状態が変更されないからです。この例では関数 showToolbar が失敗する可能性を想定しており、もし false が返されたら checked 属性は変更されません。</p>
+<p>チェック状態を解除する時には、checked 属性を単に false に設定するのではなく、属性自体を取り除くようにしてください。この例では <a href="/ja/docs/DOM/element.removeAttribute">removeAttribute</a> メソッドによって属性を削除しています。</p>
+
+
+
+<div><span id="Radio_Menu_Items"></span></div>
+<h3 id=".E3.83.A9.E3.82.B8.E3.82.AA.E5.9E.8B.E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0" name=".E3.83.A9.E3.82.B8.E3.82.AA.E5.9E.8B.E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0">ラジオ型メニューアイテム</h3>
+<p>一度に一つしかチェックできないようなメニューアイテムのグループを作成したい場合には、ラジオ型のメニューアイテムを使用します。ラジオ型はチェックボックス型と似たような動作をしますが、あるアイテムが選択されると、同じグループにある他のアイテムはすべてチェックが外される点が異なります。ラジオ型のメニューアイテムのチェック状態は、チェックボックス型と同様に自動的に更新されるので、自分で更新する必要はありません。</p>
+<p>ラジオボタンのように動作するメニューアイテムを作成するには、<code id="a-type"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/type">type</a></code> 属性を "<code>radio</code>" に設定します。それに加えて、<code id="a-name"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/name">name</a></code> 属性を、メニューアイテムが属するグループの名前に設定します。name 属性の値はどんな名前にしてもかまいませんが、同じメニュー内にあり、同じ名前を持つメニューアイテムは、すべて同じグループに属することになります。</p>
+
+<pre class="brush:xml">&lt;menu label="Sort" accesskey="S"&gt;
+ &lt;menupopup&gt;
+ &lt;menuitem label="By Name" accesskey="N" type="radio" name="sort" /&gt;
+ &lt;menuitem label="By Date" accesskey="D" type="radio" name="sort" checked="true" /&gt;
+ &lt;menuitem label="By Subject" accesskey="S" type="radio" name="sort" /&gt;
+ &lt;menuseparator/&gt;
+ &lt;menuitem label="Ascending" accesskey="A" type="radio" name="order" checked="true" /&gt;
+ &lt;menuitem label="Descending" accesskey="c" type="radio" name="order" /&gt;
+ &lt;/menupopup&gt;
+&lt;/menu&gt;</pre>
+
+<p><img alt="Image:Popupguide-menuradio.png" src="/@api/deki/files/302/=Popupguide-menuradio.png"></p>
+<p>このメニューでは、 3 つのラジオ型メニューアイテムがすべて "sort" という同じ名前を持っています。そのため、それらのうち 1 つのアイテムを選択すると、そのアイテムがチェックされ、同じグループの他のアイテムはすべてチェックが外されます。最後の 2 つのメニューアイテムは "order" という違うグループに属しています。一方を選択するともう一方のチェックが外されますが、他のグループに属するアイテムには影響を及ぼしません。</p>
+<p>それぞれのグループのうち 1 つのアイテムで、<code id="a-checked"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/checked">checked</a></code> 属性が true に設定されていることに注目してください。これがメニューのデフォルトの値になります。この値が設定されていなければ、デフォルトではグループ内のどのアイテムもチェックされません。</p>
+<p>チェックボックス型のメニューアイテムと同様に、<code id="a-autocheck"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/autocheck">autocheck</a></code> 属性を使って、チェック状態の自動変更を無効にすることができます。この属性はそれぞれのラジオ型メニューアイテムに対して設定する必要があります。</p>
+
+
+
+<div><span id="Disabling_a_Menuitem"></span></div>
+<h3 id=".E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0.E3.81.AE.E7.84.A1.E5.8A.B9.E5.8C.96" name=".E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0.E3.81.AE.E7.84.A1.E5.8A.B9.E5.8C.96">メニューアイテムの無効化</h3>
+<p>アイテムを初期状態で無効にするには、次の例のように <code id="a-disabled"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/disabled">disabled</a></code> 属性を true に設定します。</p>
+
+<pre><code>&lt;menuitem label="Undo" accesskey="U" disabled="true" /&gt;</code></pre>
+
+<p>無効化されると、アイテムはグレーアウトして表示され、関連付けられた動作は実行できなくなります。アイテムが無効化されていると、command イベントは発生しません。適切でないメニューアイテムを無効にするには、<code><span><a href="https://developer.mozilla.org/ja/docs/XUL/Property/disabled">disabled</a></span></code> プロパティを true に設定します。アイテムをふたたび有効にするには、disabled プロパティを false に設定します。無効状態の変更は、popupshowing イベント内で行うのがいいでしょう。popupshowing イベントの詳細は <a href="/ja/docs/XUL/PopupGuide/PopupEvents#The_popupshowing_Event">popupshowing イベント</a>の節を参照して下さい。</p>
+<p>メニューアイテムにコマンドが関連付けられている場合には、コマンドを無効にすることでメニューアイテムを無効にすることができます。たとえば下の例では、<code id="a-disabled"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/disabled">disabled</a></code> 属性によって "Delete" コマンドが無効化されています。</p>
+
+<pre class="brush:xml">&lt;command id="cmd_delete" disabled="true" oncommand="alert('Deleted!');" /&gt;
+&lt;menuitem label="Delete" accesskey="F" command="cmd_deleted" /&gt;</pre>
+
+<p>メニューアイテムがコマンドに結びつけられているため、コマンドが無効化されるとメニューアイテムも無効化されます。コマンドの無効状態が変化すると、それに従ってメニューアイテムの無効状態も更新されます。これは同じコマンドにいくつかのメニューアイテムやボタンを結び付けている場合に役立ちます。コマンドの無効状態を一度変更するだけで、そのコマンドに結び付けられたすべての要素に無効状態が反映されるからです。</p>
+
+
+
+<div><span id="Modifying_a_Menuitem"></span></div>
+<h3 id=".E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0.E3.81.AE.E5.A4.89.E6.9B.B4" name=".E3.83.A1.E3.83.8B.E3.83.A5.E3.83.BC.E3.82.A2.E3.82.A4.E3.83.86.E3.83.A0.E3.81.AE.E5.A4.89.E6.9B.B4">メニューアイテムの変更</h3>
+<p>メニューアイテムのラベルとアクセスキーは、スクリプトから label プロパティと accessKey プロパティを変更する事で動的に変更できます。<code><span><a href="https://developer.mozilla.org/ja/docs/XUL/Property/accessKey">accessKey</a></span></code> というプロパティ名では小文字と大文字が使われているのに対して、XUL の <code id="a-accesskey"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/accesskey">accesskey</a></code> という属性名は小文字のみが使われていることに注意してください。</p>
+<p>たとえば、"Undo" メニューアイテムのラベルを、何を元に戻すかによって変更したいことがあるかもしれません。下の例でこれを実践しています。</p>
+
+<pre class="brush:js">if (gUndoBufferType == "typing") {
+ menuitem.label = "Undo Typing";
+} else if (gUndoBufferType == "paste") {
+ menuitem.label = "Undo Paste";
+} else {
+ menuitem.label = "Undo";
+}</pre>
+
+
+<p>メニューにアイテムを追加したり削除する方法の例は、<a href="/ja/docs/XUL/PopupGuide/MenuModification">メニューの変更</a>を参照して下さい。</p>