![]() |
[1999 年 7 月号] |
[Happy Squeaking!!]
CounterTextViewは、ボールド体文字列でCounterの値を表示しただけでしたが、今回は新たなViewであるCounterLineView を定義し、線の位置によって値を確認できるようにします。
まずは、CounterLineViewというクラスを定義します。
StandardSystemView subclass: #CounterLineView
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'MVC tutorial'
表示用としてdisplayView操作を定義します。
(CounterLineView >> displayingカテゴリ)
displayView
| count box max min line |
super displayView.
count := self model data.
box := self insetDisplayBox.
max := box width.
min := 0.
(count > max) ifTrue: [count := max].
(count < min) ifTrue:[count := min].
self clearInside.
line := Line new.
line beginPoint: (box topLeft + (Point x: count y:0)).
line endPoint: (box bottomLeft + (Point x: count y:0)).
line displayOn: Display.
Squeakのグラフィックライブラリの詳細についての解説ではないので、詳細については説明を避けます。基本的には、DisplayTextのかわりにLine(DisplayObjectのサブクラス)を使い、モデルから取得した現在のカウンタ値をx座標として直線を引いているだけです。
次に更新受け取りメッセージを作成します。
(CounterLineView >> updatingカテゴリ)
update: anAspect
anAspect == #data
ifTrue:
[Transcript cr; show: 'now update'.
self displayView].
前の演習でアスペクトの使い方を習ったので、引数anAspectの指定により更新のフィルタリングを行うようにしています。しかし基本的には、CounterTextViewのupdate: と同様、ビューの再表示用にdisplayViewを呼び出すだけです。
最後はビューが使うデフォルトのコントローラを示すメソッドです。
これはCounterTextViewと同じように実装します。
(CounterLineView >> control accessカテゴリ)
defaultControllerClass
^CounterKeyboardController
では、ひとまずシングルビューで、新しく作られたCounterLineViewの見栄えを確認してみましょう。
ワークスペースで以下の式を"do it"します。
| counterView |
counterView := CounterLineView new.
counterView model: (Counter new).
counterView label: counterView name.
counterView maximumSize: 200 @ 100.
counterView minimumSize: 50 @ 30.
counterView borderWidth: 5.
counterView backgroundColor: Color yellow.
counterView controller open.
キーボードのuとdで操作しましょう。線の表示位置が変化していきます。

CounterLineViewの表示
今までのソースです。
FileIn: CounterLineView.st (<=Click)
| © 1999-2001 OGIS-RI Co., Ltd. |
|