EventListener.st
author Claus Gittinger <cg@exept.de>
Wed, 03 Dec 2003 12:48:56 +0100
changeset 1869 c6800c75b7d0
parent 1770 e044357844f9
child 1939 f72ff9a773e5
permissions -rw-r--r--
resource file handling cleaned up

"
 COPYRIGHT (c) 1995 by Claus Gittinger
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"



"{ Package: 'stx:libview2' }"

Object subclass:#EventListener
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'Interface-Support'
!

!EventListener class methodsFor:'documentation'!

copyright
"
 COPYRIGHT (c) 1995 by Claus Gittinger
	      All Rights Reserved

 This software is furnished under a license and may be used
 only in accordance with the terms of that license and with the
 inclusion of the above copyright notice.   This software may not
 be provided or otherwise made available to, or used by, any
 other person.  No title to or ownership of the software is
 hereby transferred.
"


!

documentation
"
    abstract class for event listeners. EventListeners can be used to intercept
    incoming events (keyboard & mouse) directly from a sensor, or even
    for a complete display device.
    A concrete application is the bubble help, which tracks entering/leaving
    views, and pops up some help message. 
    See concrete code in ActiveHelp.

    For each intercepted event, a corresponding method is called for in instances
    of myself - these MUST return true, if the event is to be ignored (i.e.
    assumed to be processed and consumed by the reader, 
    and MUST return false, if the normal event procedure should be performed. 
    Since this is an abstract class,
    all of my intercept methods return false. 
    They are meant to be redefined in concrete subclasses.

    [see also:]
	WindowSensor WindowEvent WindowGroup

    [author:]
	Claus Gittinger
"
! !

!EventListener methodsFor:'events'!

buttonMotion:buttonState x:x y:y view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:57:54 / cg"
!

buttonMultiPress:button x:x y:y view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:57:58 / cg"
!

buttonPress:button x:x y:y view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:58:01 / cg"
!

buttonRelease:button x:x y:y view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:58:03 / cg"
!

hasKeyboardFocus:aBoolean view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false
!

keyPress:key x:x y:y view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:58:08 / cg"
!

keyRelease:key x:x y:y view:aView
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:58:11 / cg"
!

mouseWheelMotion:state x:x y:y amount:amount deltaTime:dTime view:aView
    "not handled here - can be redefined in a concrete subclass"

    ^ false

    "Modified: / 23.4.1996 / 21:57:54 / cg"
    "Created: / 21.5.1999 / 13:07:13 / cg"
!

pointerEnter:state x:x y:y view:view
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:58:14 / cg"
!

pointerLeave:state view:view
    "not handled here - should be redefined in a concrete subclass"

    ^ false

    "Modified: 23.4.1996 / 21:58:17 / cg"
!

postCreateView:aView
    ^ self
!

preCreateView:aView
    ^ self
! !

!EventListener methodsFor:'events-window creation'!

preCreateView:aView origin:org
    "invoked right before a view is about to be physically created.
     May return a new origin."

    ^ org
! !

!EventListener methodsFor:'listen'!

listen
    "install myself as listener"

    WindowSensor addEventListener:self

    "
     |listener|

     listener := EventListener new.
     listener listen.
     (Delay forSeconds:20) wait.
     listener unlisten
    "
!

processEvent:ev
    "process an event; if true is returned, the event is considered to be
     'eaten' by the listener, and not passed to the view.
     If false is returned, the event is processed as usual.
     Here, the event is dispatched into one of the button*/key* etc. methods"

    Error handle:[:ex |
        ('Listener [info]: error while processing event: ' , ex description) printCR.
        ^ false
    ] do:[
        ^ ev dispatchWithViewArgumentTo:self
    ]
!

unlisten
    "uninstall myself as listener"

    WindowSensor removeEventListener:self 
! !

!EventListener class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libview2/EventListener.st,v 1.21 2003-05-07 15:03:34 cg Exp $'
! !