







第55回
■
■SqueakではじめるSmalltalk入門 第55回
■
本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。SqueakのMorphicGUIでは、ウインドウやメニューなど目に見えるものはすべて「モーフ」と呼ばれるオブジェクトで構成されています。今回は、身近なウインドウとメニューについて、たしかにこれらがモーフであることを、前回のモーフの共通操作の復習をかねて確認してみましょう。
▼ウインドウをモーフとして扱う
SqueakシステムのMorphic GUIにおいてウインドウは、タイトルバーのドラッグによる移動や、クローズボタンよる「閉じる」操作など、Macライクな操作が可能なように作り込まれています。しかし一方で、ウインドウはモーフでもあるので、コマンドクリックによる選択やハローによる属性の変更といった、前回のMorphのインスタンスと同様の操作も受け付けます。
Morph allSubclasses includes: SystemWindow " => true "
SystemWindow allSuperclasses includes: Morph " => true "
デスクトップメニュー → 開く… → ワークスペースなどの操作で、適当なウインドウを開き、まず、ウインドウ内の適当な場所で、コマンドキーを押しながらドラッグしてみてください。ウインドウはモーフとして選択され(自分用のハローを表示)、マウスポインタの動きに追従するはずです。タイトルバーを使わずともこうしてモーフであるウインドウを移動することができます。
[fig.A]モーフとして選択されたウインドウ

「コマンドドラッグ」といえば、OS 9以前からあって、OS Xでも使えるTIPSのひとつに「ウインドウのタイトルバーをドラッグする際にコマンドキーを押しておくと、そのウインドウをアクティベートせずに移動できる」という操作があるのをご存じでしょうか。Morphic GUIにおけるコマンドドラッグによるモーフの移動は、他のモーフとの前後の位置関係を変えないので、ウインドウに用いたならば、くだんのTIPSと似た効果が期待できそうですね。
選択時にモーフを囲むように現れるハローの機能も見てみましょう。左上の×印(ピンク色)ハローは、ウインドウをモーフとしてゴミ箱に移動します。他のモーフと同様に、ゴミ箱から取り出すことも可能です(ゴミ箱をダブルクリック)。Squeakシステムの設定が「モーフをゴミ箱に移動せずにただちに削除する」モードに設定(Preferences disable: #preserveTrash、または、ヘルプ… → プリファレンス → morphic → preserveTrash のチェックをオフ)されている場合は、ピンク色ハローは、ウインドウのクローズボックスとまったく同じ働きをします。
黄色ハローについても、ウインドウの右下隅をドラッグして行なうサイズ変更と同じ働きをします。もちろんウインドウには、四隅と上下左右の境界のドラッグという、もっと柔軟なサイズ変更のためのUIが作り込まれているので、わざわざこの黄色ハローを使う必要はありません。ここでは、他のモーフと同様に大きさを変えることも可能であることを確認できればよいと思います。右上の緑色ハローは、ウインドウをモーフとして同じものを複製します。
それがどんな役に立つのかは不明ながらも、見ていてとても楽しい機能が青色ハローによるウインドウの回転です。ウインドウは回転した後も、文字の入力や編集を通常どおり行なえます。ペイント系に対する、ドロー系の図形オブジェクトの特徴として「回転操作を行なうことができる」点を挙げることがありますが、ウインドウの回転は、まさにドロー系オブジェクトであるモーフにより作られたウィジェットならではの「お遊び」ではないでしょうか。
[fig.B]モーフとして回転させたウインドウ

▼ポップアップメニューとメニュー項目をモーフとして扱う
ポップアップメニューもウインドウ同様、自身もモーフであり、かつ、さらにメニュー項目といった「部分」もモーフにより構成されています。たとえば、デスクトップをクリックしてポップアップするお馴染みの「デスクトップメニュー」(別名「ワールドメニュー」)も、ポップアップ後、メニュー項目を選択する代わりに、コマンドドラッグによる移動が可能です。
[fig.C]モーフとして選択、移動中のメニュー

青色ハローによる回転も可能です。ウインドウ同様、回転してもメニューとして機能し続けます。
[fig.D]モーフとして回転しても機能し続けるメニュー

メニューを選択してからさらに、適当なメニュー項目を改めてコマンドクリックすると、その項目をモーフとして選択できます。
[fig.E]モーフとして選択されたメニュー項目

この状態で、たとえば黒色ハローでピックアップしたり、緑色ハローで複製を作って特定のメニュー項目を独立して取り出すことが可能です。こうして取り出したメニュー項目は、たいてい、もとのメニューで選択したときと同じ挙動を保持していますから、たとえばデスクトップメニューの「開く…」のように、頻繁に使用するメニュー項目があれば、その複製を作ってデスクトップに置いておくのもよいかもしれません。
[fig.F]取り出した「開く…」メニュー項目

この「メニュー項目」モーフに限らず、ウインドウのタイトルバーやスクロールバー、さらにその中にあるパーツ類もすべてはより細分化されたモーフで構成されています。このように、他のモーフに組み込まれて、その部品として機能するモーフのことを「サブモーフ(submorph)」と呼びます。次回はこのサブモーフ化という機構について、もうすこし掘り下げてみましょう。
このページを編集 (4684 bytes)
 |
以下の 1 ページから参照されています。 |
This page has been visited 948 times.