Voices
以下は、Mac OS X 10.4.11 上の Xcode 2.5 で説明しています。このウィジェットは、BlankWidgetで解説したことは繰り返しませんので、そちらを参照してください。また、コマンド行ツールの同期使用については、Uptime(引数なし)や Which(引数あり)を見てください。
1 ウィジェット
Voices には 1-Synchronous(同期)と 2-Asynchronus(非同期)という 2 つのフォルダがあります。まず同期バージョンについて説明し、それから、非同期バージョンで違う部分を説明します。Voices.wdgt は、以下のようなウィジェットです。
「Available Voices(使用可能な声)」をクリックするとメニューが出現し、そこから声を選べます。そして下の「Speak(話す)」というボタンを押すと、「Fred」なら「Hi, I'm Fred」という風に声を出します。上の長方形の部分にはテキストが入力やペーストできるようになっていて、そこにテキストを入れてから「Speak」ボタンを押すと、そのテキストを読み上げます。
2 ファイル構成
このサンプルのファイル構成は以下のようになります。
Default.png は、濃い青色の背景部分だけの画像です。Background.png も同じです。Button.png と Button_down.png はどちらも薄い灰色で同じに見えますが、白い背景にコピーしてみれば、Button.png のほうが少しだけ明るいことがわかります。これは透明度をもっているので、暗い背景に合成すると、逆に Button_down.png のほうが明るくなります。Menu.png はメニュー部分の灰色画像です。TextArea.png はテキスト入力部分の灰色の背景画像です。
Info.plist は、BlankWidget とほぼ同じキーですが、widget オブジェクトの system メソッドでコマンド行ツールを使うため、AllowSystem キーが TRUE に設定されていることに注意してください。主要 HTML ファイルは、Voices.html に指定されています。
3 Voices.html
それでは、主要 HTML ファイルを見てみます(空行は除去して詰めています)。
Which.html
<html>
<head>
<!-- スタイルシートは別のファイル内に格納されたほうがいい。これはウィジェットに対するデザインを収容。
ウィジェット内の各言語プロジェクトディクレクトリは独自のHelloWelt.cssファイルを持つことに注意
これは言語にもとづいて、ウィジェットの各ローカル化が異なるデザインを持つから
Dashboard はユーザーの言語環境設定により自動的に正しい CSS ファイルをウィジェットに提供する -->
<style type="text/css">
@import "Voices.css";
</style>
<!-- JavaScript ファイルはローカル化修正と動作を含むウィジェットに必要な動作を収容 -->
<script type='text/javascript' src='Voices.js' charset='utf-8'/>
</head>
<body onload="setup();"> <!-- setup() は本体テキストのローカル化を試みる -->
<img src="Images/Background.png"> <!-- ウィジェットの背景 -->
<img class="textArea" src="Images/TextArea.png"> <!-- ウィジェットの背景 -->
<img class="voiceMenu" src="Images/Menu.png"> <!-- ウィジェットの背景 -->
<div id="voiceMenuText">Available Voices</div>
<div id="theButton" onmousedown='speak();' onmouseup='buttonUpOut();'
onmouseout='buttonUpOut();'>
<img id="speakButton" src="Images/Button.png">
<div id="speakButtonText">Speak</div>
</div>
<textarea id="textInput" scrollbars='false'></textarea>
<select id='voicePopup' onchange='voiceChanged(this);'>
<option value="Agnes">Agnes</option>
<option value="Albert">Albert</option>
<option value="Bad News">Bad News</option>
<option value="Bahh">Bahh</option>
<option value="Bells">Bells</option>
<option value="Boing">Boing</option>
<option value="Bruce">Bruce</option>
<option value="Bubbles">Bubbles</option>
<option value="Cellos">Cellos</option>
<option value="Deranged">Deranged</option>
<option value="Fred" selected>Fred</option>
<option value="Good News">Good News</option>
<option value="Hysterical">Hysterical</option>
<option value="Junior">Junior</option>
<option value="Kathy">Kathy</option>
<option value="Pipe Organ">Pipe Organ</option>
<option value="Princess">Princess</option>
<option value="Ralph">Ralph</option>
<option value="Trinoids">Trinoids</option>
<option value="Vicki">Vicki</option>
<option value="Victoria">Victoria</option>
<option value="Whisper">Whisper</option>
<option value="Zarvox">Zarvox</option>
</select>
</body>