タイトルAppleScript Working》ボタン系のコントロールを使ってみる(1)カテゴリーProjectBuilder/Interface Builder, AppleScript, AppleScript Working
作成日2002/1/5 19:30:23作成者新居雅行
Mac OS XのDeveloper Toolsに搭載されたAppleScript Studioを使った簡単なアプリケーションを前回の記事では紹介した。しばらくは、ウインドウに配置したコントロール類をAppleScriptでコントロールする方法を紹介して行くことにしよう。まずはボタン類で使う機会の多い機能を紹介しよう。
前回にも紹介したように、Interface Builderを使ってユーザインタフェースを作成し、各コントロールのイベントに対応する部分のプログラムをAppleScriptで作成をすればよい。こうしたイベントは、いずれにしても、ウインドウないしはその中のコントールから発生する。そのとき、イベントハンドラにはイベントが発生したオブジェクトへの参照が得られるので、何らかの方法で、そのコントロールが配置されているウインドウへの参照が得られる。それをもとに、ウインドウ内の各コントロールを参照できるのである。コントロールが所属するウインドウを参照するにはwindowプロパティを使う。また、Interface BuilderではAppleScriptでの名前を指定することができるので、その名前が「button1」ならそれを使って、たとえば、Control "button1"として、特定のボタンを参照することができる。id番号などでの指定など他にコントロールを指定する方法があるのだが、固定的なユーザインタフェースなら、それぞれのコントロールに名前を付けて、その名前で参照するのがいちばん確実で分かりやすいだろう。また、たとえばプッシュボタンならButtonクラスなど、コントロールの種類ごとにクラスが定義されているが、それらはControlクラスを継承している。もちろん、Button "button1"として参照してもいいのだが、コントロールはすべてControlというクラス名で参照してもかまわない。コントロール名に種類が分かりやすい名前をつけておけば混乱はしないだろう。

Interface BuilderのCocoa-Viewsパレットにはたくさんのボタン類があるが、実はもとになるクラスはどれもNSButtonである。AppleScriptのフレームワークではButtonクラスとして定義されているが、これはControlクラスを継承しており、ButtonとControlさらにはそれらの上位クラスのViewやResponderも視野に入れておく必要がある。Buttonだけを調べて分からないことはこうしてクラスの定義をさかのぼる必要があるわけだ。もっとも、ボタンはそれほど複雑なコントロールではないから、あまり気にする必要はないかもしれない。

◇ウインドウにボタン、チェックボックス、ラジオボタンを配置した
 

ボタンを配置し、InfoパレットのAppleScriptのメニューで、名前を設定する。ボタンをクリックして何か処理をさせたい場合には前回に説明したように、ここでActionのClickedイベントに対応するようにチェックを入れて、下側でソースファイルを選択する。簡単なアプリケーションなら、最初から用意されているソースを使えばいいが、コントロールが増えてくると、コントロールごとにソースファイルを用意することになるだろう。というのは、clickedイベントに対応するハンドラは、1つのソースでは1つしか書けない。たとえば、2つのボタンのそれぞれのclickedイベントで同じソースファイルを指定したとする。すると、そのソースのclickedハンドラは、どちらのボタンを押しても同じハンドラが呼び出される。もちろん、そこで条件判断をしてもいいのだが、通常はコントロールごとにソースファイルを用意しておくのが得策だろう。
Interface Builderでは、ボタンの名前を設定できる。ウインドウ上でダブルクリックしてその場で書き換えることもできるが、InfoパレットのAttributesのメニューにあるTitleの設定を書き換えてもよい。いずれにしても、名前が固定したボタンなどはInterface Builderの段階で設定できてしまう。

◇Buttonクラスで利用できるプロパティ
 title(文字列):ボタン名、チェックボックス名、ラジオボタン名など
 alternate title(文字列):ボタン名の代替え文字列(オンのときの文字)
 state(数値):ボタンの状態。オンなら1でオフなら0
 visible(論理値):表示しているかどうか
 enabled(論理値):選択できるかどうか

たとえば、ボタンをクリックしたときに以下のハンドラが呼び出されるとして、AppleScript名が「ch1」のチェックボックスの状態によって判断したいときなどは、stateプロパティを参照すればいいので、たとえば次のようなプログラムになる。

-- ボタンをクリックして呼び出されるハンドラ
on clicked theObject
set targetWindow to window of theObject
if state of control "b1" of targetWindow is 0 then
-- チェックボックスがオフのときの処理
else
-- チェックボックスがオンのときの処理
end if
end clicked

なお、通常のボタンはTitleだが、ボタンをオンにしたときのボタン名は、Infoパレットで言えばAlt. Titleのところで設定できる。もちろん、いずれのボタン名もプログラムでの書き換えは可能だ。チェックボックスがオンのときとオフのときでボタンの名前が変化するということが、単にコントロールへの設定だけでできる。こうした処理に対応するプログラムをいちいち作成する必要はないということである。
(この項、続く)
関連リンク