module EventHandler

Defined in:

event.cr
event_handler.cr:1
event_handler.cr:10
events.cr
macros.cr
wrapper.cr

Constant Summary

VERSION = "0.8.0"

Class Method Summary

Instance Method Summary

Macro Summary

Class Method Detail

def self.async=(async : Bool) #

Asynchronous execution flag; default false.

To enable it, set async to true:

EventHandler.async? # => false
EventHandler.async = true

Note that this setting only affects default value.

The value can be overriden using the argument async by every handler which subscribes to an event.


[View source]
def self.async? : Bool #

Asynchronous execution flag; default false.

To enable it, set async to true:

EventHandler.async? # => false
EventHandler.async = true

Note that this setting only affects default value.

The value can be overriden using the argument async by every handler which subscribes to an event.


[View source]
def self.at_beginning : Int32 #

Default insertion index when a handler is to be inserted at the beginning of list; default 0.

Changing this value might cause "Index out of bounds" Exceptions if used without additional considerations, and changing it should rarely be needed.


[View source]
def self.at_beginning=(at_beginning : Int32) #

Default insertion index when a handler is to be inserted at the beginning of list; default 0.

Changing this value might cause "Index out of bounds" Exceptions if used without additional considerations, and changing it should rarely be needed.


[View source]
def self.at_end : Int32 #

Default insertion index when a handler is to be inserted at the end of list; default -1.

Changing this value might cause "Index out of bounds" Exceptions if used without additional considerations, and changing it should rarely be needed.


[View source]
def self.at_end=(at_end : Int32) #

Default insertion index when a handler is to be inserted at the end of list; default -1.

Changing this value might cause "Index out of bounds" Exceptions if used without additional considerations, and changing it should rarely be needed.


[View source]
def self.emit_on_remove_all=(emit_on_remove_all : Bool) #

RemoveHandlerEvent control flag for method remove_all; default true.

It controls whether all handlers removed as part of executing #remove_all will emit a RemoveHandlerEvent. By default, this setting is true.

Disabling it could make sense at application shutdown when executing installed RemoveHandlerEvent handlers is not important.

To disable it, set emit_on_remove_all to false:

EventHandler.emit_on_remove_all? # => true
EventHandler.emit_on_remove_all = false

[View source]
def self.emit_on_remove_all? : Bool #

RemoveHandlerEvent control flag for method remove_all; default true.

It controls whether all handlers removed as part of executing #remove_all will emit a RemoveHandlerEvent. By default, this setting is true.

Disabling it could make sense at application shutdown when executing installed RemoveHandlerEvent handlers is not important.

To disable it, set emit_on_remove_all to false:

EventHandler.emit_on_remove_all? # => true
EventHandler.emit_on_remove_all = false

[View source]

Instance Method Detail

def emit(type : EventHandler::ExceptionEvent.class, event : EventHandler::Event) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::AnyEvent.class, event : EventHandler::Event) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::AddHandlerEvent.class, event : EventHandler::Event) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::RemoveHandlerEvent.class, event : EventHandler::Event) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::ExceptionEvent.class, *args) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::AnyEvent.class, *args) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::AddHandlerEvent.class, *args) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def emit(type : EventHandler::RemoveHandlerEvent.class, *args) #

Emits event type with provided parameters.

If all handlers run synchronously, returns Bool. If any handler runs asynchronously, returns nil.


def handlers(type : EventHandler::ExceptionEvent.class) #

Returns list of handlers for event type.


def handlers(type : EventHandler::AnyEvent.class) #

Returns list of handlers for event type.


def handlers(type : EventHandler::AddHandlerEvent.class) #

Returns list of handlers for event type.


def handlers(type : EventHandler::RemoveHandlerEvent.class) #

Returns list of handlers for event type.


def off(type : EventHandler::ExceptionEvent.class, handler : Proc(EventHandler::ExceptionEvent, Bool)) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::ExceptionEvent.class, hash : UInt64) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::ExceptionEvent.class, wrapper : EventHandler::Wrapper(Proc(EventHandler::Event, Bool))) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::ExceptionEvent.class, at : Int) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AnyEvent.class, handler : Proc(EventHandler::AnyEvent, Bool)) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AnyEvent.class, hash : UInt64) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AnyEvent.class, wrapper : EventHandler::Wrapper(Proc(EventHandler::Event, Bool))) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AnyEvent.class, at : Int) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AddHandlerEvent.class, handler : Proc(EventHandler::AddHandlerEvent, Bool)) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AddHandlerEvent.class, hash : UInt64) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AddHandlerEvent.class, wrapper : EventHandler::Wrapper(Proc(EventHandler::Event, Bool))) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::AddHandlerEvent.class, at : Int) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::RemoveHandlerEvent.class, handler : Proc(EventHandler::RemoveHandlerEvent, Bool)) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::RemoveHandlerEvent.class, hash : UInt64) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::RemoveHandlerEvent.class, wrapper : EventHandler::Wrapper(Proc(EventHandler::Event, Bool))) #

Removes handler from list of handlers for event type.


def off(type : EventHandler::RemoveHandlerEvent.class, at : Int) #

Removes handler from list of handlers for event type.


def on(type : EventHandler::ExceptionEvent.class, handler : Proc(EventHandler::ExceptionEvent, Bool), once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::ExceptionEvent.class, once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::ExceptionEvent -> Bool) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::ExceptionEvent.class, wrapper : EventHandler::Wrapper(Proc(Event, Bool))) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::AnyEvent.class, handler : Proc(EventHandler::AnyEvent, Bool), once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::AnyEvent.class, once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::AnyEvent -> Bool) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::AnyEvent.class, wrapper : EventHandler::Wrapper(Proc(Event, Bool))) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::AddHandlerEvent.class, handler : Proc(EventHandler::AddHandlerEvent, Bool), once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::AddHandlerEvent.class, once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::AddHandlerEvent -> Bool) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::AddHandlerEvent.class, wrapper : EventHandler::Wrapper(Proc(Event, Bool))) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::RemoveHandlerEvent.class, handler : Proc(EventHandler::RemoveHandlerEvent, Bool), once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::RemoveHandlerEvent.class, once = false, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::RemoveHandlerEvent -> Bool) #

Adds handler to list of handlers for event type.


def on(type : EventHandler::RemoveHandlerEvent.class, wrapper : EventHandler::Wrapper(Proc(Event, Bool))) #

Adds handler to list of handlers for event type.


def once(type : EventHandler::ExceptionEvent.class, handler : Proc(EventHandler::ExceptionEvent, Bool), async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::ExceptionEvent.class, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::ExceptionEvent -> Bool) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::AnyEvent.class, handler : Proc(EventHandler::AnyEvent, Bool), async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::AnyEvent.class, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::AnyEvent -> Bool) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::AddHandlerEvent.class, handler : Proc(EventHandler::AddHandlerEvent, Bool), async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::AddHandlerEvent.class, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::AddHandlerEvent -> Bool) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::RemoveHandlerEvent.class, handler : Proc(EventHandler::RemoveHandlerEvent, Bool), async = ::EventHandler.async?, at = ::EventHandler.at_end) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def once(type : EventHandler::RemoveHandlerEvent.class, async = ::EventHandler.async?, at = ::EventHandler.at_end, &handler : EventHandler::RemoveHandlerEvent -> Bool) #

Adds handler to list of handlers for event type. After it triggers once, it is automatically removed.

The same behavior is obtained using #on and providing argument once.


def remove_all_handlers(type : EventHandler::ExceptionEvent.class, emit = ::EventHandler.emit_on_remove_all?) #

Removes all handlers for event type.

If emit is false, RemoveHandlerEvents are not emitted.

If emit is true, RemoveHandlerEvents is emitted once for every distinct Wrapper object removed. See README for detailed description of this behavior.


def remove_all_handlers(type : EventHandler::AnyEvent.class, emit = ::EventHandler.emit_on_remove_all?) #

Removes all handlers for event type.

If emit is false, RemoveHandlerEvents are not emitted.

If emit is true, RemoveHandlerEvents is emitted once for every distinct Wrapper object removed. See README for detailed description of this behavior.


def remove_all_handlers(type : EventHandler::AddHandlerEvent.class, emit = ::EventHandler.emit_on_remove_all?) #

Removes all handlers for event type.

If emit is false, RemoveHandlerEvents are not emitted.

If emit is true, RemoveHandlerEvents is emitted once for every distinct Wrapper object removed. See README for detailed description of this behavior.


def remove_all_handlers(type : EventHandler::RemoveHandlerEvent.class, emit = ::EventHandler.emit_on_remove_all?) #

Removes all handlers for event type.

If emit is false, RemoveHandlerEvents are not emitted.

If emit is true, RemoveHandlerEvents is emitted once for every distinct Wrapper object removed. See README for detailed description of this behavior.


Macro Detail

macro event(e, *args) #

Creates events in a single line; every event is a class inheriting from EventHandler::Event.

Since events are classes, they can be also created manually. See EventHandler::Event for more details.

event MouseClick, x : Int32, y : Int32

[View source]