メニューの設定をするXMLファイルです。
<menus> <!-- menubar, menu --> </menus>
menusエレメントがトップレベルエレメントになります。menusエレメント以下には0個以上のmenubarエレメントまたはmenuエレメントを置くことができます。
<menubar name="名前"> <!-- menuitem, popupmenu, separator --> </menubar>
menubarエレメントはメニューバーを表します。name属性にはメニューバーの名前を指定します。
以下の名前のメニュバーが定義できます。
<menu name="名前"> <!-- menuitem, popupmenu, separator --> </menu>
menuエレメントはコンテキストメニューを表します。name属性にはコンテキストメニューの名前を指定します。
以下の名前のメニューが定義できます。
またこれら以外の名前のメニューを定義して、toolbars.xmlのbuttonエレメントのdropdown属性に指定したり、ToolPopupMenuアクションで使用することもできます。
<menuitem text="文字列" action="アクション" param="引数" dynamic="動的メニュー名"/>
menuitemエレメントはメニューのアイテムを表します。メニューのアイテムには静的アイテムと動的なアイテムがあります。
静的なアイテムは定義時に決まっているアイテムで、text属性、action属性、param属性を使って指定します。
text属性には表示する文字列を指定します。
action属性にはそのアイテムが選択されたときに実行されるアクションを指定します。
param属性には必要があればアクションに渡す引数を指定します。引数はスペースで区切って複数指定することができます。一つの引数にスペースを含めたい場合には""で括ります。""で括った場合には、その中に含まれる"と\を\でエスケープします。例えば、param属性に@Execute("C:\\Program Files\\QMAIL3\\q3u.exe")を指定する場合には、XML中では以下のようにエスケープされます。
param=""@Execute(\"C:\\\\Program Files\\\\QMAIL3\\\\q3u.exe\")""
動的なアイテムは実行時に決まるアイテムで、通常は実行時に複数のアイテムになります。動的なアイテムは、dynamic属性とparam属性を使って指定します。dynamic属性にはアイテムが選択されたときに実行されるアクションを指定します。param属性にはアクションに渡される引数を生成するマクロを指定します。
param属性に指定したマクロを評価した結果は以下のようなフォーマットになっている必要があります。
例えば、
<menuitem dynamic="MessageCreate" param="'新規\tnew\n返信\treply'"/>
のようにすると、MessageCreateアクションを使って新規と返信の二つのメニューが作成され、それぞれのアイテムを選択したときには、MessageCreateアクションにnewとreplyが引数として渡されます。
この例ではparamのマクロが常に同じ値を返すので動的にする意味がありませんが、状況に応じて返す文字列が返す文字列を変えるようなマクロを指定することで動的にメニューを生成することができます。
これに加えて、以下のアクションをdynamic属性に指定しparam属性を省略すると、以下の説明にあるようなメニューが動的に生成されます。
<separator/>
separatorエレメントはセパレータを表します。
<popupmenu text="文字列"> <!-- menuitem, popupmenu, separator --> </popupmenu>
popupmenuエレメントはポップアップメニューを表します。text属性には表示する文字列を指定します。
start = element menus { ( element menubar { item*, attribute name { xsd:string } } | element menu { item*, attribute name { xsd:string } } )* } item = element menuitem { ( attribute text { xsd:string }, attribute action { xsd:string }, attribute param { xsd:string }? ) | ( attribute dynamic { xsd:string }, attribute param { xsd:string }? ) } | element separator { empty } | element popupmenu { attribute text { xsd:string }, item* }