#06/19/2002 修正
#06/07/2002 新規作成


Morphic入門 (作成中)

Morphicはグラフィックオブジェクトのmorphを扱います。("morph"は、shapeやformを意味するギリシャ語です。)Morphはつかんだり、動かしたりできるビジュアル部品です。morphはサブmorphを持つことができ、これをcomposite morphといいます。omposite morphはひとつのユニットとして、移動、コピー、削除ができます。またmorphicはビジュアル部品としての基本的機能を持ったテンプレートでもあり自由に拡張できます。ですから、morphを使えば、簡単にGUIを構築することができます。
http://www.phaidros.com/DIGTALIS/englisch/sqk/sqk00031.htm
(Programming in Morphic #2 http://minnow.cc.gatech.edu/squeakdoc/11の記事に実装画面を加えた構成のようです)

Morphicのプログラミングには2つの方法があります。
1 クラシック(古典的)スタイル
2 ユーザ・スクリプティング スタイル

クラシック(古典的)スタイル:
Morphクラスのサブクラスをつくり、それを拡張します。この良いお手本は BookPageSorterMorph と EnvelopeEditorMorph です。
http://www.phaidros.com/DIGITALIS/englisch/sqk/sqk00034.htm

ユーザ・スクリプティング スタイル:
Workspaceにコードの断片を書いていろいろ評価してみるように、Parts Binにあるmorph部品をドラッグしていろいろ組み合わせ、動作を確認しながらプログラミングしていきます。
http://www.phaidros.com/DIGITALIS/englisch/sqk/sqk00035.htm

ユーザ・スクリプティングの基本3要素

 "Halo"(ハロ)
 morphの上で、shift+黄ボタンクリックで開きます。
 http://www.phaidros.com/DIGITALIS/englisch/sqk/sqk00036.htm

 "Viewer"(ビュワー)
 プロパティのパラメータを変更したり、起動するスクリプトを設定したりします。インスタンス変数やメソッドの追加もできます。
 Haloより青い眼のマークをクリックすつと開きます。
 http://www.phaidros.com/DIGITALIS/englisch/sqk/sqk00037.htm

 "Scriptor"(スクリプタ)
 Viewerのそれぞれのオブジェクトについて、実際にスクリプトを、書いて、テストし、セーブします。
 http://www.phaidros.com/DIGITALIS/englisch/sqk/sqk00038.htm

ユーザスクリプティンについては、こちらにとても良い説明がありますので、ごらんください。
すみさん Morphic レッスン(もうひとつの Squeak 入門) http://sumim.no-ip.com:8080/morphiclesson 

阿部さんのHPにある記事も大変面白いです。
  平井夏児さんによるMac Fanの特集「Squeakの全貌に迫る」より
  Squeakを知りたいっ! http://squeak.hoops.ne.jp/1213SqHirai/index.htm

#これでつくったmorphのコードのfile outは、そのうちこのあたりを参考にしてまとめるとして
http://www.phaidros.com/DIGITALIS/englisch/sqk/sqk00046.htm

ここでは、クラシックスタイルでコードを書いていきましょう。
以下のテキストをもとに、すすめます。

# (1 Fun with the Morphic Graphics System by John Maloney  予定)

Squeak青本のドラフト原稿より、3章、The Morphic User-Interface Framework, by John Maloney of Disney Imagineering R&D morphic.final.pdf

Morphic をとりあえず動かしてみましょう。

まず、Morph クラスのサブクラス TestMorph を定義します。
 
  Morph subclass: #TestMorph
  instanceVariableNames: 'angle '
  classVariableNames: ''
  poolDictionaries: ''
  category: 'My Stuff'

次に、イベントハンドリングのメソッドを定義します。

  mouseDown: evt
  self position: self position + (100@100).

マウスの左ボタンが押されたら、自分の位置を100@100ポイント、斜め右下に動かします。

  handlesMouseDown: evt
  ^evt shiftPressed not

shiftキーが押されていなかったら、この入力を無視します。

それでは、workspace で
TestMorph new openInWorld


と打ちこんで、alt-d してください。

青い小さなMorphが表示されます。クリックしようとしても逃げていきます。
shiftキーと黄ボタン(3ボタンなら中央)を押してください。halo が表示されますね。

これでも立派なMorphです。



 

 


では次に、このMorphをユーザスクリプティングの側から操作してみましょう。

まず、左ボタンでクリックして Halo を出し、赤い表示の Menuをクリックします。
いろいろありますが、 debug から browse morph class でソースを見てみましょう。さっき入力したクラスが表示されます。(表の左)
Halo の debug からもいけます。(表の真中)
inspect したのが表の右になります。

   

次に、スクリプトをみましょう。haloから青い目をクリックするViewerが表示されます。
"star turn by 5" の行をドラッグし、デスクトップの World にドロップします。スクリプタができて Viewerにも追加されます。(表の左)
このスクリプタのメニュ-から、 "show code texually" を選ぶと、右のスクリプトコードが編集できるようになります。(表の真中)
スクリプタの左から三番目の□をクリックしても同じことができます。
また、上の表の "browse player class" を選ぶと、Browser でソースが表示されます。(下の表の右)
カテゴリー Morphic-UserObjects の Model->Playler クラスのサブクラスとして、ユーザオブジェクトの Player38 ができ、そのメソッドとして実装されています。
ソースの値を100にして、acceptして見てください。当然ながら、スクリプタの表示も同時に変わります.


この方法で、どんなMorphもチェックできます。たとえば、WatchMorph new openInWorld。
workspace で WatchMorph と打って、alt + b なんてのも愛用してます。

あとは、SystemBrowserでMorphをブラウズしていろいろ、遊んでください。
Morphic-Script カテゴリにスクリプト関係のソースが入ってています。

ダウンロード TestMorph.st

(以上)