GameSprit

自転車やMac・AppleScript、映画・小説やドラマのレビュー、備忘メモ・クイズなどを置いています。

AppleScript : カスタムアイコン付ダイアログを表示する

2012-10-16 22:07:13 | AppleScript
AppleScript では、カスタムなアイコンファイルを指定してダイアログ表示することができる、とむかしどこかに書いたことを思い出した。…そう、これ! AppleScript 0007 - Display dialog アイコン付き表示 - GameSprit


これを利用すると、アイコンを用意してちょっとしたゲームを AppleScript とその UI で作ることができそう。
じゃんけんゲームとか。ここでは、最近使ったものの復習や新たな勉強を兼ねて、このカスタムアイコンでダイアログ表示をしてみます。

まず、どんなものを作るか、検討してみます。簡単に。

アイコンを表示させるには、表示させるアイコンが必要。
では、AppleScript からファイル検索してファイル名の末尾が「.icns」を拾ってみよう。
そこで、検索した結果をリスト化して、そのリストから表示させるアイコンを選択して、ダイアログ表示させよう。


順序立ててみます。

まず、AppleScript からファイル名の末尾が「.icns」のファイルを検索します。
せっかくなので、この機能を実現するために、シェルコマンドから spotlight を利用してみます。
コマンドラインから使う spotlight は、mdfind というコマンドです。
ファイル名を指定して検索するコマンドは「mdfind -name ファイル名(の一部)」です。

その結果をリスト化して、AppleScript の choose from list を使って、そのリストからアイコンファイルを
選びます。これは、AppleScript : weather hacks で天気予報 - GameSprit で使った方法です。

最後に、display dialog コマンドに [with icon file] オプションを使って、アイコンファイル付
ダイアログを表示させます。


さて、それではコードを書いてみます。

シェルコマンドから「なんちゃら.icns」というファイルを検索し、結果を変数 retTxt に格納します。
set retTxt to do shell script "mdfind -name .icns"



結果の行数(= ファイル数)を変数 maxlinenr に格納します。
あとで、ループ処理をするときの上限値を設定するのに使います。
set maxlinenr to (count paragraph of retTxt)



icnsList という空の List を作り、前述の検索したファイルを順に icnsList に加えてゆきます。
paragraph を使うと、1行毎に取り出すことができます。
set icnsList to {}
repeat with i from 1 to maxlinenr

set icnsList to icnsList & paragraph i of retTxt

end repeat







表示したい icns を choose from list を使って選び、選んだ結果を変数 theIcns に格納します。
set theIcns to choose from list icnsList



icns のパス表示を「/」区切りから「:」区切りに変換して、そのアイコンとともにダイアログ表示します。
例えば、「/Developer/Examples/TextEdit/html.icns」を「Macintosh HD:Developer:Examples:TextEdit:html.icns」に変換します。
display dialog "This icon ?" with icon file POSIX file theIcns







まとめると、次のようなスクリプトが完成します。
-- シェルコマンドから「なんちゃら.icns」というファイルを検索し、結果を変数 retTxt に格納する
set retTxt to do shell script "mdfind -name .icns"


-- 結果の行数(= ファイル数)を変数 maxlinenr に格納する
set maxlinenr to (count paragraph of retTxt)

-- icnsList という空の List を作り、前述の検索したファイルを順に icnsList に加えてゆく
set icnsList to {}
repeat with i from 1 to maxlinenr

set icnsList to icnsList & paragraph i of retTxt

end repeat

-- 表示したい icns を選び、選んだ結果を変数 theIcns に格納する
set theIcns to choose from list icnsList

-- icns のパス表示を「/」区切りから「:」区切りに変換して、そのアイコンとともにダイアログ表示する。
display dialog "This icon ?" with icon file POSIX file theIcns






キーワード:AppleScriptdisplay dialogwith icon filechoose from listPOSIX fileparagraphmdfind.icnsspotlight

最新の画像もっと見る

post a comment

ブログ作成者から承認されるまでコメントは反映されません。