タイトルAppleScript Working》5 _ AppleScript Studioでのポップアップメニュー(1)カテゴリーAppleScript, AppleScript Working
作成日2002/2/8 2:0:3作成者新居雅行
   この記事のPDFファイル(635KB)は以下のアドレスにあります。
   ダウンロードには、MDOnlineのアカウントが必要です。
   pdfs/MDOnline020009.pdf
 ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
AppleScript Studioで使うポップアップメニューの使い方を説明しよう。一般的なポップアップメニューに加えて、ちょっと独特な「ドロップダウンメニュー」という動作も可能である。いずれも、メニューを選択ではあるが、役割は若干異なる。Interface Builderでの操作のポイントに加えて、プログラムでの処理についても説明しよう。

――――ポップアップメニューのコントロール
Interface Builderのツールパレットのうち、上段左から3つめのアイコンを選択すると、Other-Cocoaというウインドウタイトルになる。そこにポップアップメニューのコントロールがあるので、それをウインドウ上などにドラッグ&ドロップすれば利用できるようになる。Cocoaのクラス名は、NSPopupButtonであり、AppleScriptでは、Control Suiteにあるpopup buttonというクラスで扱うことになる。ポップアップメニューのAttributesには、Typeがあって、通常はPopupが選択されている。これは通常のポップアップメニューだ。このときはEnabledなどもあるが、設定はこれだけである。

◇ポップアップメニューのコントロールのAttribes
 

ポップアップメニューのコントロールには、その中にメニューがあって、さらにメニューは複数のメニューアイテムで構成されている。メニュー項目が固定的な場合には、Interface Builderで項目名を設定してしまうのが手軽だろう。そのために、まず、ポップアップメニューをダブルクリックすると、まず「メニュー」が開き、メニューアイテムが選択できるような状態になる。ここで、Infoパレットで、Titleプロパティを書き換えれば、メニュー項目の名前を変更することができる。あるはさらに編集したいメニュー項目名をダブルクリックすることで、その項目名をメニューの上で修正することができる。

◇メニュー項目を変更する
 

ここでは、キーボードショートカットも選択することができる。なお、デフォルトの選択項目にはチェックがつけられるが、メニューを表示したときに最後に選択している項目がデフォルトの選択項目になる。
メニュー項目を削除したい場合には、メニューがでている状態でその項目を選択して、deleteキーを押せばよい。
メニューとして新たな項目を追加したい場合には、ポップアップメニューをダブルクリックしてメニューが表示されている状態にする。そして、ツールパレットの上段でいちばん左にあるアイコンをクリックしてメニュー一覧を出し、そこにある「Item」というブルーのボックスをドラッグして、メニュー項目の中に追加する。メニュー項目を追加して、その後に項目名を書き換えることになる。

◇メニュー項目を追加する
 

なおメニュー項目を区切る項目は、上記のパレットの左の列のいちばん下にある文字の係れていないブルーのボックスである。これをドラッグして設定すると、メニューアイテムの1つとして取り扱われるが、実際にメニューとして表示しているときには空白になって選択もできないものとなる。
メニュー項目の順序はドラッグすることで入れ替えることができる。メニューが表示されている状態で、項目をドラッグすればよい。

◇メニュー項目の順序の入れ替えはドラッグでよい
 

一方、NSPopupButtonのTypeをPullDownを選択すると、プルダウンメニューとなる。コントロールの右側に▼マークがでていれば、これはプルダウンメニューである。ポップアップメニューでは一般には、複数の選択肢から、1つの項目を選択するということに使う。そして、コントロールには選択された項目が表示される。これに対して、プルダウンメニューは、ここでのTitleという属性値が常にコントロールに表示される。そして、クリックすると、メニューがプルダウンし、そしてメニューを選択できる。その意味では、メニューバーにあるメニューに極めて近いと言えるだろう。したがって、何かの機能を呼び出すというような使い方が一般的だと思われる。

◇プルダウンメニューにするとTitleなどが設定できる
 

プルダウンメニューのメニュー項目に関する作業も、ポップアップメニューのときと同様である。プルダウンメニューをダブルクリックするとメニューがでてくるので、項目を選択して、Titleなどを書き換える。なお、プルダウンメニューの場合も、メニューがあって、そこに複数のメニュー項目が属するというのが基本的なオブジェクト構成である。

◇プルダウンメニューのメニューアイテム
 


――――ポップアップメニューでのイベント
ポップアップメニューやプルダウンメニューのAppleScriptの設定をInfoパレットで参照してみる。もちろん、Nameは必要に応じて設定するが、ここでは、いくつかのイベントがあるのでそれらの動作を説明しておこう。

◇コントロールのイベントハンドラ
 

まず、actionのハンドラであるが、これはポップアップメニューで使うのが一般的だろう。ポップアップメニューの項目を選択すると、actionイベントが発生する。イベントハンドラには、ポップアップメニュー自身が引き渡される。したがって、引数のwindowプロパティを見れば、そのポップアップメニューが存在するウインドウを参照できるわけだ。
それから、Menuのグループには、will pop upというイベントがある。これは、ポップアップメニューでも、プルダウンメニューでも、どちらでも利用されることがあるだろう。たとえば、メニューを選択するときの状況によってメニュー項目を切り替えたいような場合にはこのイベントが便利だ。やはりイベントハンドラへは、コントロールへの参照が引数として渡される。
そして、choose menu itemというイベントは、文字通り、メニューを選択したときに発生するイベントだ。ここで、たとえばプルダウンメニューのイベントとして設定してもかまわないが、その場合には、選択された項目名を調べて処理の分岐を自分で組み込む必要がある。一方、メニューアイテム自身に対して、choose menu itemイベントは設定することができる。メニューアイテムごとに個別にイベントハンドラを書きたいときは、こちらのイベントを利用し、スクリプトファイルをそれぞれ別のものを用意することになるだろう。

◇メニューアイテムのイベントハンドラ
 

ところが、実際に、メニューアイテムのchoose menu itemイベントハンドラを定義してもエラーがでて実際には呼び出しはおこなわないのである。これはバグなのか、筆者のシステムの不具合なのかは分からない。
(この項、続く)
関連リンク