言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Squeak Tweak

Croquet の GUI にも tweak が使われる事もあり、tweak を実験している。勿論、ドキュメントなど無い。まず簡単なツールを作ってみる。

イメージの準備

  • 最新の TCAR(Tweak Core Architecture Release) を http://tweak.impara.de/tcar/ よりダウンロード
  • 解凍、起動の方法は Squeak と同じ。
  • 最新バージョンまで更新するために ? - Choose updates - Tweak-1.1 (alpha) を選択
  • ? - Load updates で最新版にする(結構長い)。

ワークスペースを出す。

  • メニューから、Tools - Workspace でワークスペース(汎用テキスト落書き)が出る。
  • おもむろに 3 + 4 を入力し、選択して ctrl+p (print it) で答えを出す。コンテキストメニューに出ないのが不親切。
  • 実行するだけなら ctrl+d (do it)。以下のプログラムもこの do it で実行する。
  • alt では無く ctrl を使うみたい。このあたりのキーバインドは CPlatform >> codingKeys を見れば分かる。

ただの四角を表示してみる。特に面白くは無いが、四角い物体がマウス位置に現れる

player := CPlayer new.
player open.
player color: Color red.
player inspect.

いきなりですが、摂氏華氏変換器を作ってみる。今までの Squeak Morph と違うところは、Morph が画像オブジェクトに直接プログラムしていく事を推奨していたのに対して、Tweak では CPlayer、Morph では etoys プレイヤに相当する物でプログラムを作って行く点。下のプログラムでレイアウトの指定を CPlayer に対して行うが、実際は costume に委譲される。タイルスクリプトとコードによるプログラミングの垣根がだんだん少なくなる予感。

"ベースになる部分のレイアウトを表示"
converter := CPlayer new.
converter color: Color white.
converter layout: CTableLayout new.
converter hResizing: #shrinkWrap; vResizing: #shrinkWrap.
converter open.

"入力フォームを追加"
converter add: (CLabel new value: 'Centigrade'; yourself).
centigrade := CInputField new value: 0; yourself.
converter add: centigrade.

converter add: (CLabel new value: 'Fahrenheit'; yourself).
fahrenheit := CInputField new value: 0; yourself.
converter add: fahrenheit.

"ここがキモです。それぞれの入力フォームにイベントを設定します。ちょっと Tweak 文法で書いてみた。"
fahrenheit
	startScript: [fahrenheit value := centigrade value * 1.8 + 32]
	when: {centigrade. #accept}.
centigrade
	startScript: [centigrade value := (fahrenheit value - 32) / 1.8]
	when: {fahrenheit. #accept}.