En Una breve introducción a los inspectores, explicamos cómo
configurar las propiedades de una instancia morph individual para
gestionar un evento específico. En este caso, una propiedad informaba a
Cuis-Smalltalk de que nos interesaba un evento determinado
(#handlesMouseDown), mientras que una segunda propiedad
definía el comportamiento con un bloque de código que se ejecutaba cada
vez que se producía este evento.
Alternativamente, para gestionar eventos en una clase morph determinada,
definimos el comportamiento con métodos de instancia. En la clase
Morph, observa las categorías de métodos event y
event handling testing.
La categoría de métodos event handling testing (prueba de
gestión de eventos) enumera los métodos que devuelven un valor booleano
para indicar si se debe notificar a la instancia sobre determinados
eventos. Echemos un vistazo a uno de estos métodos,
handlesMouseDown:, cuyo comentario merece la pena leer:
Morph>>handlesMouseDown: aMouseButtonEvent "Do I want to receive mouseButton messages ? - #mouseButton1Down:localPosition: - #mouseButton1Up:localPosition: - #mouseButton2Down:localPosition: - #mouseButton2Up:localPosition: - #mouseButton3Down:localPosition: - #mouseButton3Up:localPosition: - #mouseMove:localPosition: - #mouseButton2Activity NOTE: The default response is false. Subclasses that implement these messages directly should override this one to return true. Implementors could query the argument, and only answer true for (for example) button 2 up only." "Use a property test to allow individual instances to dynamically specify this." ^ self hasProperty: #'handlesMouseDown:'
Tal y como se define por defecto, este método y los demás controladores comprueban si una instancia ha definido una propiedad con el mismo nombre que el método estándar. De este modo, cada instancia individual puede añadir su propio comportamiento.
En una clase morph en la que queremos que todas las instancias
gestionen los eventos de pulsación del ratón, simplemente sobrescribimos
el método adecuado para que devuelva true:
MyMorph>>>>handlesMouseDown: aMouseButtonEvent ^ true
Ahora, en la categoría del método events de la clase
Morph, encontramos los controladores enumerados en el comentario
anterior. Una ScrollBar, un tipo de Morph que representa el
control de posición de una lista, desplaza el contenido de la lista
cuando se pulsa el botón 1 del ratón:
ScrollBar>>mouseButton1Down: aMouseBtnEvent position: eventPosition "Update visual feedback" self setNextDirectionFromEvent: aMouseBtnEvent. self scrollByPage
Para descubrir otros eventos disponibles para tu morph, explora con el Browser del sistema como se ha descrito anteriormente.