vieweditattachhistorytopchangessearchhelp

モーフの複数選択やサブモーフのレイアウト

モーフもたくさん扱うようになってくると、選択して一挙に動かしたくなります。そんなときに便利なのが、選択モーフです。選択もモーフなのかいっ!<お約束です。--sumim - 2002-11-27, 15:20:20

選択モーフを作るには、デスクトップ上でマウスポインタを shift-ドラッグします。矩形が描かれるのでそれに選択したいモーフを含むように矩形の大きさを調整します。--sumim - 2002-11-27, 15:22:00

External Image

External Image

選択されるモーフは多岐に渡る可能性があるため(ということにしておいてください)、一挙に変えられるのは色くらいなものですが、平行移動や一括複製/削除などに役立つ…程度に考えておくとよいと思います。でも、単純な整列は赤ハローメニューから可能です。align centers horizontally などを選ぶと、横並びにできます。--sumim - 2002-11-27, 15:28:54

place into... は今はいじらないでください。次のトピックです。--sumim - 2002-11-27, 15:29:38

やってみました>選択モーフ.これは一時的な物なのでしょうか?
>選択もモーフなのかいっ!
できればつっこんでみたかったです(笑)--人狼 - 2002-11-27, 15:32:20

そうです薄命です。仕事を終えると(もしくは別の場所をクリックすると)消えてしまいます。--sumim - 2002-11-27, 15:33:40

>平行移動や一括複製/削除などに役立つ
との事ですので,今はその程度(ドローツールみたい)にしておきます.単純整列も試してみました.--人狼 - 2002-11-27, 15:34:32

ただ何かの拍子(エラーなどが生じたときなど)に取り残されてしまう(青い線が画面に残る)こともあるので、そう言う場合はモーフとして選択して削除してやってください。だってモーフだもん(笑)。--sumim - 2002-11-27, 15:34:36

そう言う事もあるんですね.了解です,そう言う時は選択して削除します.

>だってモーフだもん
名言です(笑)--人狼 - 2002-11-27, 15:44:05

次はレイアウトです。システムウインドウをよく観察するとおわかりいただけるように、ウインドウの外枠(オーナー、ですな)の縦横比や大きさに伴って中のボタンやペイン(サブモーフたち)が追従します。先の例で Rectangle に Ellipse をサブモーフ化してもこういうことは起こらないはずです。このからくりを紹介しましょう。--sumim - 2002-11-27, 16:47:17

両方を再度確認してきました.確かに単にサブモーフ化してもそう言う事は起こりませんでした.--人狼 - 2002-11-27, 16:50:31

まず、準備をします。Rectangle をひとつ用意してちょっと大きめにし、accept drops しておきます。そこに改めて Rectangle や RoundRect、Ellipse、Star、Polygon、Curve、Text、Clock といった細々したモーフをドロップインしていってください。--sumim - 2002-11-27, 16:48:49

そうそう。オーナーの Rectangle の赤ハロメニューは右上の虫ピンボタンをクリックしてパレット化しておくのがよいでしょう。--sumim - 2002-11-27, 16:50:04

External Image

準備完了しました.
>虫ピンボタンをクリックしてパレット化
おぉっ.覚えると便利そうな技が.--人狼 - 2002-11-27, 16:55:36

ええ。この機能は結構、重宝しますよ。--sumim

ここで登場するのが layout サブメニューです。まず、注意していただきたいのが、このサブメニューの中の proportional layoutclip to cell size は実装されていないようなので機能しないこと、あといくつかの項目は条件が整わないとエラーを発してしまうことです。いずれにせよ、このサブメニューはパズルゲームのような様相を呈していますので、システムを解析する気がないときは、あまり深く考えないほうがよさそうです(^_^;)。--sumim - 2002-11-27, 16:56:36

proportional layoutclip to cell sizeは実装されていないようなので機能しない
実装されていないよう,ならばうかつに選択しない方がよろしいですね.留意します.
>システムを解析する気がないときは、あまり深く考えないほうがよさそう
当面は学習ですので,解析する気にはならないと思います.--人狼 - 2002-11-27, 17:03:03

逆に解析しさえすれば、謎の動き…というのを排除できるのも Smalltalk のよいところです。もっといえば、隠し機能が隠されない…という欠点(?)もありますが(笑)。ま、そういう安心感があるのはオープンソースのよいとこです。--sumim

おっしゃる通り,それがオープンソースの良いところなのですよね.重々承知しております.が,今の私にとってSqueakのソースを読むなどは,まだまだ先の事でしょう.--人狼 - 2002-11-27, 17:12:49

まず、一番効果が分かりやすい layoutchild layouthorizontal resizingshrink wrap もしくは、vertical resizing の同じサブメニュー項目です。これを設定すると、サブモーフの最右端、もしくは最下端のものの位置に合わせてオーナーの右もしくは下端が自動的に動きます。--sumim - 2002-11-27, 17:06:15

External Image

サブモーフによって,オーナーの右端または下端が動くのですね.普通とは逆の発想ですね.--人狼 - 2002-11-27, 17:14:36

そうですね。いろいろな機能をもったサブモーフを配置しておいて、最後にこの設定をすれば、ぴったりと収まり、その後、サブモーフが動くようなことがあっても、それなりにオーナーは変形して追従できる…という発想だと思います。--sumim - 2002-11-27, 17:23:40

なるほど.そう言う発想なのですね.この設定の時はオーナーの黄ハローによるリサイズは無視されるのですね.例えば…horizontal resizingrightにすると,横のリサイズだけが有効になる.いや,すごいなぁ.--人狼 - 2002-11-27, 17:29:17

次は、すぐ下の space fill に…と行けないのが、この layout メニューの喰えないところです。この項目を使うには、準備が必要になります。まず、設定した shrink wrap を元、つまり rigid に戻してやってください。その後に、layouttable layout オプションを設定します。--sumim - 2002-11-27, 17:26:02

External Image

すると、サブモーフたちは一斉に前へならえ!で左端に整列します。この状態では、サブモーフを選択して茶色ハローで動かそうとしても動きません。--sumim - 2002-11-27, 17:28:56

>サブモーフたちは一斉に前へならえ!で左端に整列します
なりました.茶色ハローでの移動は出来ません.黄色ハローのリサイズ・青ハローでの回転は出来ました.整列の状態も一緒に変わりますね.--人狼 - 2002-11-27, 17:32:52

これが“テーブル”レイアウトです。この状態で、いくつかの設定を試してみましょう。talbe layout サブサブメニューにそのオプションのためのサブメニューがあります(Apple が当初、サブメニュー化を UI ガイドラインで禁じたわけが分かるような気がします(笑))。list direction では並ぶ方向を決めます。wrap directionは、今のようにオーナーからはみ出してしまわないように折り返しのしかたを決めます。とりあえず、それぞれ left to righttop to bottom を選んでおきましょう。--sumim - 2002-11-27, 17:34:14

メニューのlayouttable layoutを選択した=「“テーブル”レイアウト」ですね.う〜ん,確かにサブメニューにサブメニューはUIとして如何かと感じます.
ともあれ,list directionwrap directionはOKです.--人狼 - 2002-11-27, 17:48:52

cell positioning は、各サブモーフをそれぞれが許される区画(セル)のどの部分に配置するかを決めます。list centeringwrap centering は今の場合、それぞれ、各行の位置揃えと“センテンス”、つまりサブモーフの集団全体の位置揃えといったところでしょうか。--sumim - 2002-11-27, 17:37:44

テーブルレイアウトですから,セルなんですね.cell positioningは色々と試しました.想像通りです.list centeringは各行の位置揃え,warp centeringがセンテンスの位置揃えですね.「今の場合」とあるのは,list direction等によって,行を列と読み替える必要があるからでしょうか.--人狼 - 2002-11-27, 17:54:26

いえ。左から右、上から下の文章に置き換えることができるから「今の場合」としました。--sumim

了解しました.--人狼

で、やっぱり上手く動かないオプションがあるのですが、動く条件を探すのが面倒なので(^_^;)、お得意のパッチを当ててしまいましょう(ぉぃぉぃ。今のままだと、cell spaceingglobal ... が動きません。そこで、こいつ を例によって file-in (環境を保存しているのならそのまま、そうでないならいったん終了して、起動後、file-in、save and quit して再起動)してください。--sumim - 2002-11-27, 17:55:32

file-in完了しました.と,言ったところでお出かけです.--人狼 - 2002-11-27, 17:58:27

了解です。--sumim

これで、list spacingequal にすると、オーナーの右端を縮めて3行以上に渡った場合でも同じ間隔で並ぶようになります。で、問題の cell spacing ですが、local rect はその行の中でもっとも大きなサブモーフを基準に等間隔で並びます。local square はさらに、その行のもっとも大きなサブモーフを含むことができる最小の正方形の領域として整列します。global ... はそれを、全サブモーフで行ないます。こうすると縦横に整列するはずです。--sumim - 2002-11-27, 18:03:41

External Image

おはようございます.
list spacingequalにすると、オーナーの右端を縮めて3行以上に渡った場合でも同じ間隔で並ぶ
はい,確認しました.
cell spacinglocal rectlocal squareの動作も確認しました.整列させるだけでも,色々と出来て便利(でも覚えるのが大変(^^;)ですね.--人狼 - 2002-11-28, 09:50:59

では、いったんメニューを消してオーナーの Rectangle を削除して、また、新しく Rectangle をオーナーにしたてて(大きく、赤ハローメニューパレット化、accept drops)ください。今度は、同じ Rectangle(小)を複数、サブモーフとして登録します。--sumim - 2002-11-27, 20:41:55

table layout オプションを設定します(下図)。さらに、left to righttop to bottom を前回と同じように選びます。--sumim - 2002-11-27, 20:45:33

External Image

change layout inset... を選んでマウスポインタをドラッグすると、オーナーの内側にどのくらい余白をとるかを決められます。--sumim - 2002-11-27, 20:52:47

change layout inset...は,メニューを選択した時のマウスの位置が左上端になるのですね.そこからの移動で左上の位置を調整しているんですね.左と上の間隔を一つの操作で設定するのには慣れが必要みたいです(^^;--人狼 - 2002-11-28, 09:57:00

まあ、この UI はなんとかせんとあかんと思います(笑)。--sumim - 2002-11-28, 09:58:51

External Image

change cell inset... では、セル間にとる余白を設定します。--sumim - 2002-11-27, 20:54:06

change cell inset...も動きはchange layout inset...同様ですね.慣れてきたかも.(使いやすいかどうかは別(^^;)--人狼 - 2002-11-28, 09:58:58

External Image

最後に本題の伸び縮みする設定です。まず、分かりやすくするためにサブモーフを3つくらいまで減らします。すべてのサブモーフlayoutchild layouthorizontal resizingspace fill オプションを設定し、ひとつのサブモーフだけ layoutchild layoutvertical resizingspace fill オプションを設定して様子を見てみてください。--sumim - 2002-11-27, 21:09:07

>本題の伸び縮みする設定
やってみました.ん〜と,horizontal resizingvertical resizingも設定項目は同じですよね.rigidは「堅い」と言う意味ですから,オーナーの中で位置固定.shrink wrapは…「伸び縮みして覆う」?横にはみ出るなら下に,下にはみ出るなら横に移動するのかな?space fillは「隙間をうめろ」かな?オーナーの内側の余白とセル間の余白を保つように,自らの大きさを変えるかな?--人狼 - 2002-11-28, 10:10:40

このメニューはちょっと名前の付け方(child> なんたら…)がおかしくて、本来なら、横方向/縦方向についてサブモーフ依存的にするか、オーナー依存的にするのかが明示的になるようなメニュー項目名にすべきですね。--sumim - 2002-11-28, 10:14:13

たしかに,おっしゃっているように明示的なメニュー名の付け方でしたら,覚えなくてもメニューを見れば判ったのに,と思います.--人狼


External Image

まあ、あんまし詰め込んでもいけませんからこの程度にしておきましょう。いずれにせよ、これらはメニューからだけでなく、モーフへメッセージを送信するメッセージ式の評価でまったく同じ設定が(複数モーフ and/or 複数オプションにおいて一挙に)できるということを頭の片隅に置いておいてください。--sumim - 2002-11-28, 10:05:55

>これらはメニューからだけでなく、モーフへメッセージを送信するメッセージ式の評価でまったく同じ設定
はい,そうですね.即ち
>メニューの実行はそのモーフに対するメッセージの送信にほかなりません
と言う事ですね.--人狼 - 2002-11-28, 10:12:41

>複数モーフ and/or 複数オプションにおいて一挙に
複数のオブジェクトに対して同じメッセージを送る=複数モーフ
オブジェクトにメッセージを連鎖的(と言うのが正しいのかな?)に送る=複数オプション
なのかな?連鎖的と言うのは…オブジェクトAにメッセージαを送るとAが返るので,それにメッセージβを送る.すると,またAが返ってくるのでγ…と言うのを想像しています--人狼 - 2002-11-28, 10:12:41 - 2002-11-28, 10:16:29

ページのリファクタリングは二人でやるとコンフリクトするので、人狼さんは気にせず、文章を追加していってください。--sumim - 2002-11-28, 10:15:41

リファクタリングの件は了解です.お任せします.--人狼 - 2002-11-28, 10:17:55

連鎖的と言うのは…
たとえば、オーナーの Rectangle が self で参照できる場合、
self submorphsDo: [ :submrph |
    submrph メッセージ1; メッセージ2; メッセージ3 ... ]
といううイメージです。--sumim
- 2002-11-28, 10:24:16

ちなみに ; はカスケードで、返値を無視して同じオブジェクトにメッセージを送り続けます。これがないときは、続くメッセージは返値のオブジェクトに送られます。--sumim - 2002-11-28, 10:28:07

>というイメージです
う〜んと(^^;文法が判ってないので「おぉっ!なるほど!」とは言えないのですが,雰囲気的には判るような…あるサブモーフに複数のメッセージを送るところは,上の解釈であってるみたいな気がします.それを,複数のサブモーフに対してループしているのかな?--人狼 - 2002-11-28, 10:28:04

いや、雰囲気でいいんですよ(笑)。--sumim - 2002-11-28, 10:31:13

ここで、submrph には self のサブモーフが次々に束縛されます。ま、ループですわな。--sumim - 2002-11-28, 10:32:34

メッセージαを送るとAが返る
細かいことをいうとこれがちょっと違っていて、カスケードか複数のメッセージ式を使うことで返値を無視します。送るメッセージによってはA自身が返るとは限らないので。--sumim
- 2002-11-28, 10:34:54

上の式はカスケード表現を使わないと
self submorphsDo: [ :submrph |
    submrph メッセージ1.
    submrph メッセージ2.
    submrph メッセージ3.
    ... ]
となります。--sumim
- 2002-11-28, 10:37:39

; はカスケードで、返値を無視して同じオブジェクトにメッセージを送り続けます
なるほど.了解です.この概念を知らなかったので,「オブジェクト メッセージ」の式に当てはめて考え出したのが,上述の解釈でした.了解です.--人狼

このページを編集 (17766 bytes)


Congratulations! 以下の 1 ページから参照されています。

This page has been visited 2258 times.