今のシリアルポートモーフはRectangleMorphのサブクラスなので、形はただの青い四角である。利用者がこの四角を見てシリアルポートと連想しにくいので、シリアルポートモーフにシリアルポートの画像を付けたいと考えた。画像のデータを保持する変数としてクラス変数 imageDataを追加した。 そして、画像ファイルをBase64を用いてテキストファイルに変換してimageDataに入れた。 シリアルポートモーフもスケッチモーフもモーフのサブクラスである。スケッチモーフのインスタンスは簡単に画像を持つ事が出来るので、スケッチモーフのメソッドを利用すればシリアルポートモーフに画像を付けることが出来るだろうと考えた。スケッチモーフの内容を参考した結果、 画像に関連するインスタンス変数originalForm, rotatedFormが必要であることが分かったのでSerialPortMorphにこれらを追加した。 次のクラスメソッドは SketchMorphのメソッドから利用した。
initialize
| f |
f := Base64MimeConverter
mimeDecodeToBytes: (ReadStream on: self imageData).
Image := Form fromBinaryStream: f
初期化インスタンスメソッドは次のように作った。
initialize
super initialize.
Image notNil
ifFalse: [self class initialize].
portNumber := -1.
receivedData := 0.
originalForm := Image.
rotatedForm := originalForm.
self extent: originalForm extent