プラットフォームごとの特殊なメニューに関する考察
多くのメニューコマンドは、慣例によって設置される場所が決定されます。たとえば、「編集」メニューはその機能が利用できるアプリケーションでは必ず「元に戻す」コマンドから始まり、「やり直し」、「切り取り」、「コピー」、「貼り付け」といったように続きます。
メニューアイテムの中には、プラットフォームごとに異なる特定の共通のラベルを持ち、プラットフォームごとに異なる特定の共通の場所に設置されるものがあります。たとえば Windows では、アプリケーションを終了するためのメニューには「終了」というラベルが付けられ、通常は「ファイル」メニューの最後に設置されます。
Macintosh では、「ファイル」メニューの横にアプリケーションの名前が付いた追加のメニューが存在します。このメニューの中にはそのアプリケーションに関連するアイテムがいくつか格納されます。たとえばアプリケーションの設定画面を開いたり、アプリケーションを終了させるメニューアイテムはこの場所に設置するのが適切です。
これは、アプリケーションメニューに設置する必要があるメニューアイテムに対して必ず特定の共通の id を設定することによって実現されます。Mac ではこれらのメニューアイテムはアプリケーションメニューに移動されますが、他のプラットフォームでは元の位置に置かれたままにされます。これにより、すべてのプラットフォームに対して同じ XUL コードを書くのがより簡単になります。以下は自動的に処理されるメニューアイテムの id の一覧です。
menu_FileQuitSeparator | 「終了」アイテムの直前にあるセパレータ |
menu_FileQuitItem | アプリケーションを終了するアイテム |
menu_PrefsSeparator | 「環境設定/オプション」アイテムの直前にあるセパレータ |
menu_preferences | アプリケーションの環境設定を開くアイテム |
aboutSeparator | 「~について」アイテムの直前のセパレータ |
aboutName | アプリケーションの「~について」ダイアログを開くアイテム |
menu_mac_services | システムサービスを提供するメニュー |
menu_mac_hide_app | アプリケーションを隠すためのアイテム |
menu_mac_hide_others | このアプリケーション以外のすべてのアプリケーションを隠すためのアイテム |
menu_mac_show_all | すべてのアプリケーションのウィンドウを表示するアイテム |
最後の 4 つのアイテムは通常は使われませんが、完全を期すために記載しました。
例を示します。
<menubar> <menu label="Tools"> <menupopup> <menuitem label="Spell Check"/> <menuitem id="menu_preferences" label="Preferences" oncommand="window.openDialog('options.xul', '_new', 'chrome');"/> </menupopup> </menu> </menubar>
このメニューアイテムは Macintosh ではアプリケーションメニューに設置されますが、他のプラットフォームでは Tools メニューに残されます。アプリケーションメニューに移動されると、ラベルとショートカットキーはプラットフォームの慣例によって上書きされます。しかし、プラットフォームに関わらず、ユーザが実行すればそのメニューアイテムで command イベントが発生します。