[SML 7745] Re: 第15回Smalltalk勉強会@京都

AOKI Atsushi atsushi @ cc.kyoto-su.ac.jp
2010年 1月 11日 (月) 18:38:51 JST


(10/01/11 17:01), 濱崎治さん wrote:
> 次回はユーザーインターフェース周りを重点的に取り組むということで、
> UMLによるモデルと、Controllerに書くことになるであろう、マウスの
> クリックとドラッグに関わるプログラムの断片を書きました。

ありがとうございます。

> UMLのモデルはastah* community版を使用して書きました。
> 以下のところから入手することが可能です。
> http://astah.change-vision.com/ja/product/astah-community.html

昨年の11月ぐらいに名称がJUDEから変更になったのですよね。

> 如何なものでしょう?
> ご意見を頂ければありがたいです。

拝見します。

参考のため、マウスの青・黄・赤ボタンの押下を検出して、クリッ
ク動作をするか、ドラック動作をするか、いずれかを決めるコード
を末尾に添えます。mouseButtonChecking がキーメソッドです。

------------------------------------------------------------
AOKI Atsushi          http://www.cc.kyoto-su.ac.jp/~atsushi/

ProjectM.Controller

Smalltalk Studies in Kyoto on 2009/12/27 at 23:30 by AOKI Atsushi

category:

Forest-ProjectZ

inheritance:

Core.Object
    UI.Controller
        ProjectM.Controller

instance variables:

class instance variables:

shared variables:

instance methods:

blueButtonPressedEvent: event [events]
    self mouseButtonActivity.
    ^nil

redButtonPressedEvent: event [events]
    self mouseButtonActivity.
    ^nil

yellowButtonPressedEvent: event [events]
    self mouseButtonActivity.
    ^nil

mouseButtonActivity [activities]
    Cursor crossHair
        showWhile:
            [| symbol |
            symbol := self mouseButtonChecking.
            symbol = #click ifTrue: [self clickActivity].
            symbol = #grab ifTrue: [self grabActivity]].
    self sensor waitNoButton

mouseButtonChecking [activities]
    | mouse limit |
    mouse := self sensor.
    limit := Time millisecondClockValue + 333.
    [Time millisecondClockValue < limit]
        whileTrue:
            [mouse anyButtonPressed ifFalse: [^#click].
            Processor yield].
    ^#grab

clickActivity [activities]
    (view whichOfNodes: self sensor cursorPoint)
        ifNotNil:
            [:aNode |
            Transcript
                cr;
                show: aNode getName]

grabActivity [activities]
    | mouse previous current |
    mouse := self sensor.
    previous := current := mouse cursorPoint.
    [mouse anyButtonPressed]
        whileTrue:
            [current := mouse cursorPoint.
            previous = current
                ifFalse:
                    [(self view)
                        scrollBy: current - previous;
                        displayOn: view graphicsContext.
                    previous := current]]

class methods:


SML メーリングリストの案内