すみません、日付が変わってしまいました。ASUGのカンファレンスの後、すっかり飲んでしまって、実はさらにその後、奥さん達に飲み会に合流だったので、すっかり、酔っぱらっています。木曜に記事を書きためていて良かった(笑)。
(新居雅行 msyk@mdonline.jp)
この記事の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イベントハンドラを定義してもエラーがでて実際には呼び出しはおこなわないのである。これはバグなのか、筆者のシステムの不具合なのかは分からない。
(この項、続く)
カテゴリ:AppleScript, AppleScript Working
――――ポップアップメニューのプログラミング
AppleScript側のオブジェクト構成は、次のようになっている。ただし、popup buttonから、menu itemの集合を参照できる場合もある。
popup button ― menu → menu item
まず、いずれの項目も、項目名は、titleプロパティで扱う。popup buttonの場合は、画面に見えている項目名がtitleプロパティで取得できる。従って、ポップアップメニューの選択された項目名は、titileプロパティを使えば分かる。たとえば、変数theWindowが、ポップアップメニューのあるウインドウを参照しているとして、ポップアップメニューのAppleScript Nameがp1だとすると、次のようにして選択したメニュー項目名をダイアログボックスに表示できる。
set thePopup to popup button "p1" of theWindow
display dialog (title of thePopup) as string
一方、プルダウンメニューはtitleで項目名は取り出せるが、取り出すことはあまりないかもしれないが、場合によっては書き換えたいと思うところだろう。しかしながら、プルダウンメニューにしたときにはtitleプロパティには書き換えができないので、別の方法を使う。これは後でしよう。
ポップアップメニューで、ある項目を選択したいときには、current menu itemプロパティを使う。これに、選択したいmenu itemを設定するのであるが、変数thePopupがポップアップメニューを参照しているとして、たとえば、2つ目の項目を選択させたいのなら、次のようなプログラムとなる。
set current menu item of thePopup to menu item 2 of thePopup
ここでは、menu itemがpopup buttonに属するような使い方での記述が可能である。
一方、メニュー項目をプログラムで新たに作りたい場合には、popup buttonのmenuのmenu itemsに新しいmenu itemを作るといった階層を追った記述が必要になる。たとえば、thePopupがポップアップメニューを参照している場合、次のようなプログラムで、最初の項目のさらに前に新しく「NewItem」というメニュー項目を作成する。
make new menu item at the before menu item 1 of menu 1 of thePopup ツ
with properties {title:"NewItem"}
ここではat以降に、最初のメニュー項目の前という記述を行ったが、メニューの最後に項目を追加するなら「at the end of menu items…」でいいだろう。
なお、ポップアップメニューの「nemu 1」つまり、menuの集合の最初のものを参照して、それに含まれるmenu itemの集合を参照している。こうしないで、「menu 1 of」を省略してもメニュー項目は作られるが、メニュー項目は選択できない状態になっているので、ここではきちんとオブジェクト階層をたどるのが基本のようだ。
なお、プルダウンメニューの場合、実はコントロールに見えているのはメニュー項目の1つ目である。従って、前のプログラムと同じように、menu itemの集合の最初にmenu itemを作ってしまうと、その新たに作った項目名が、コントロール上に見える文字列となる。
popup buttonやmenu itemには、enabledというプロパティがあり、これをfalseに設定することで、選択できないグレーの項目にすることができる。
menu itemにあるseparator itemというプロパティは、その項目が、メニューのグルー訳の区切り項目かどうかを判断するのに利用できるだろう。
menu itemにあるstateプロパティはメニュー項目に設定されたチェックマークの有無を調べることができる。あるいはチェックを設定することができる。プルダウンメニューでは使うことがあるかもしれない。このstateの値が2ならチェックが入り、他の値なチェックは入らない。ポップアップメニューは選択されている項目にチェックが入るのだが、この処理は自動的に行われているので、逆にいえばむやみにメニュー項目にチェックは入れない方がいいだろう。
(この項、以上)
カテゴリ:AppleScript, AppleScript Working
FM-TechはファイルメーカーProのトレーニング「ファイルメーカーPro入門」を、2002年2月21日(火)〜22日(水)に、東京・お茶の水にあるユニバーサルインターネットコミュニケーションズトレーニングルームで開催する。両日とも10:00〜17:00に開催され、受講料は55,000円となっている。1人に1台のWindowsマシンを使いながらのハンズオン形式のトレーニングとなっている。ファイルメーカーの基本から、データベースやレイアウトの作成、リレーション、スクリプト、Web公開といった一連の機能をマスターする。FM-Techは、ジェネコムとバルーンヘルプによるファイルメーカーPro専門トレーニングプロジェクトである。FM-TechではWebデータベースの構築についてのセミナーを予定しているほか、個別トレーニングも受け付けている。
関連リンク:FM-Tech
カテゴリ:データベース
サウンドプログラミング環境のMaxを取り上げた書籍「トランスMaxエクスプレス」を執筆したノイマンピアノ(赤松正行氏と佐近田展康氏)は、出版記念レクチャー&コンサートとして「トランスMaxナイト」を2002年2月23日(土)に、神戸ポートアイランドのジーベックホールで開催する。15:00〜17:30がレクチャーで、19:00〜21:00がコンサートとなっている。出演は、青木孝允(SILICOM)、竹村延和+アキツユコ、赤松正行+角正之、佐近田展康、展示は赤松正行、カズトート研究所より行われる。入場料は3,000円となっている。最先端のコンピュータミュージックをじっくり堪能できるイベントになりそうだ。
関連リンク:トランスMaxエクスプレス
カテゴリ:イベント