タイトルAppleScript Working》ボタン系のコントロールを使ってみる(2)カテゴリーProjectBuilder/Interface Builder, AppleScript, AppleScript Working
作成日2002/1/5 19:30:51作成者新居雅行
ラジオボタンは少し独特の使い方を行う。ラジオボタンは、ボタンが複数並んだものだが、とりあえずInterface Builderではそうしたボタンの集合を1つのコントロールとして扱う。このラジオボタン群にも、AppleScript名を付けておく。

◇配置したラジオボタンとそのInfoパレット
 

Infoパレットのタイトルを見て分かるように、ラジオボタンというクラスではなく、NSMatrixというクラスである。このクラスはコントロールが複数あるものを扱うもので、その中の1つ1つの要素(この場合は1つ1つのボタンは「セル」)と呼ばれる。AppleScriptのフレームワークでも、MatrixやCell、Button Cellといったクラスが定義されている。
上記の図のラジオボタン群のInfoパレットで、Attributesのメニューを選択した状態を見てもらいたい。いろいろな設定があるが、右下にRow/Colという入力部分がある。ここで、何行何列のラジオボタン群を構築するかを指定する。必要な数を指定すればよい。なお、ここで、行列数を変更した後は、Infoパレットの下にある「Tags = Positions」というボタンをクリックしておく。このタグについては後から説明しよう。
次に、ラジオボタンの特定のボタンをダブルクリックすると、ラジオボタン群内のセル(つまり1つのボタン)を選択することができる。この状態で、1つ1つのボタンの名前を指定することができる。もちろん、InfoパレットのTitleで指定したり、直接ボタン名を書き換えればよい。

◇ラジオボタン1つ1つはダブルクリックして編集できる
 

ここで、個々のボタンのTagという設定に注意を払ってもらいたい。「Tags = Positions」ボタンをクリックすると、ここには0から順番に数字が設定される。ラジオボタンのうち、どれが選択されているかをプログラムで知るには、このタグを手がかりにする必要があるので、タグにはユニークな値が設定されている必要がある。そうした値の割り当てはいずれにしても自動的にできるが、たとえば用途によっては100、200などと異なる番号にしてもいい。まずは表にまとめておこう。

◇ラジオボタンのコントロールで利用するプロパティ
[Controlクラス]
 current cell(参照):現在選択されているボタン
[curent cellプロパティで得られたボタン]
 tag(整数):コントロールに設定されているタグの数値
 title(文字列):ボタン名
 alternate title(文字列):ボタン名の代替え文字列(オンのときの文字)

現在選択されているボタンはcurrent cellプロパティで得られるので、そこで得られたセルの参照から、tagプロパティを得て、どのボタンが選択されているかを判別することができる。つまり、タグがボタンごとに異なる値であることは、判別する場合には前提となるわけだ。ボタン名が必要なら、通常のボタンと同じように、titleプロパティを使えばよい。たとえば、あるボタンをクリックしたとき、ラジオボタン群「rb」において選択されているボタンに応じて異なる処理をするとなると、次のようなプログラムとなる。

-- ボタンをクリックして呼び出されるハンドラ
on clicked theObject
set targetWindow to window of theObject
set radioButtons to control "rb" of targetWindow
set selectTag to tag of current cell of radioButtons
if selectTag is 0 then
-- 1つ目のボタンが選択されている場合
else if selectTag is 1 then
-- 2つ目のボタンが選択されている場合
else if selectTag is 2 then
-- 3つ目のボタンが選択されている場合
else if selectTag is 3 then
-- 4つ目のボタンが選択されている場合
end if
end clicked

もちろん、stateプロパティも利用できるが、選択しているラジオボタンのstateプロパティは必ず0になるので、その意味では使う場面は考えにくい。
タグの数値については、Interface Builderで自動的に設定した場合、左上から0となるが、列が複数ある場合には、行ごとに番号を割り振る。ここでの図のように、2列ある場合、タグが0は左上のラジオボタンだが、タグが1となるのはその右にある1行目2列目のボタンである。2行目1列目のボタンはタグは2となる…といった具合だ。
なお、ラジオボタン群であるMatrixオブジェクトに、複数のCell(ないしはButton Cell)オブジェクトが所属するような構成になっているので、選択している以外のセルをプログラムから使えるようにも思えるのだが、どうも思ったように行かない。また、特定のセルに対してclickedイベントを設定しても、イベントの発生は処理されているようだが、きちんとハンドラ自体を呼び出さない。どうも、current cellプロパティで得られたセルに対する処理しかうまくできないようである。大方の作業は特に問題はないとは思われるが、ボタン名をダイナミックにプログラムで変更したいと言う作業は現状ではちょっと厳しいのではないだろうか。

ここでAppleScriptと少し離れるが、NSButton系のコントロールを配置して、Interface BuilderのInfoパレットにあるAttributesを御覧いただきたい。ここではたくさんの設定ができるようになっているので、いろいろな設定を試してみて、どんなボタンがあるのかを自分で調べておくとよいだろう。設定をしてCommand+Rで模擬実行ができるので、どんな見かけなのかとか動作についてはすぐに調べられる。
アイコンの設定ができるようになっていて、IconとAlt. Iconが設定できる。アイコンはとにかくグラフィックスファイルをまずはどこかで用意しておく。サイズは特に限定はされていないようであるし、フォーマットもJPEGなどでかまわない。そして、MainMenu.nibなど、nibファイルのメインのウインドウにあるImagesのタブを選択する。アイコンにしたいグラフィクスをそこにドラッグ&ドロップすると、プロジェクトに追加するかどうかを問い合わせるシートがでてくるので、そこで追加することにしてやれば、自動的にプロジェクトに追加される。そして、Infoパレットでは、Imagesタブに見えている名前をIconのところに指定してやればいい。たとえば、icon.jpgというファイルを登録すると、iconとなるので、その拡張子を抜きにした名前を指定すればいいのである。すると、即座にボタンにアイコンがでてくる。また、ビルドしたアプリケーションにも自動的にグラフィックスのファイルはコピーされる。なお、Imagesのタブにあるアイコンを、ボタンにそのままドラッグ&ドロップすることで、アイコンに指定することもできる。
Soundはクリックしたときなどに出る音であり、アイコンと扱いは同じである。Soundsタブに登録するが、実は最初からかなりの数の効果音がSoundsのタブで見えるようになっている。これはシステム側で用意されている警告音であるので、そこで選んで(選択してInfoパレットでプレイボタンを押すことで試聴できる)、その名前をボタンのInfoパレットのSoundところにキータイプすればいいわけだ。あるいは、Soundsに見えているアイコンを、ボタンにドラッグ&ドロップして指定することもできる。作業はこちらの方が楽で確実かもしれない。
Equivは、クリックしたのと等価なキー操作を定義する。文字キーでもいいがreturnなどを指定してもいいし、Commandキーなどの修飾キーを組み合わせることもできる。TypeやBehaviorにはいろいろな選択肢がある。パレットに見えているボタン以外にもいろいろな設定ができるので、ぜひとも試してもらいたいところである。
AppleScriptでのプログラムももちろん重要であるが、Cocoaのフレームワークに用意されたコントロール自体の機能も合わせて知っておくと、アプリケーション作成はより効果的にできるようになるだろう。
(この項、以上)
関連リンク