ObjectSquare [1999 年 7 月号]

[Happy Squeaking!!]


8. Squeak演習:マルチビューの実現

8.1  新たなCounterビューの作成


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.

Prev.

Index

Next