![]() |
[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. |
|