Module: Qt::EventRuntimeDispatch
- Defined in:
- lib/qt/event_runtime_dispatch.rb
Overview
Dispatch helpers for event/signal callbacks from the native bridge.
Constant Summary collapse
- EVENT_RESULT_IGNORE =
0- EVENT_RESULT_CONTINUE =
1- EVENT_RESULT_CONSUME =
2
Class Method Summary collapse
- .dispatch_event(event_handlers, object_handle, event_type, payload) ⇒ Object
- .dispatch_signal(internal_signal_handlers, signal_handlers, object_handle, signal_index, payload) ⇒ Object
- .dispatch_signal_store(signal_handlers, object_handle, signal_index, payload) ⇒ Object
Class Method Details
.dispatch_event(event_handlers, object_handle, event_type, payload) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/qt/event_runtime_dispatch.rb', line 13 def dispatch_event(event_handlers, object_handle, event_type, payload) return EVENT_RESULT_CONTINUE unless object_handle && event_handlers = event_handlers[object_handle.address] return EVENT_RESULT_CONTINUE unless handlers = [event_type] return EVENT_RESULT_CONTINUE unless handlers && !handlers.empty? results = handlers.map { |handler| handler.call(payload) } return EVENT_RESULT_CONSUME if results.any? { |result| result == true || result == :consume } return EVENT_RESULT_IGNORE if results.any? { |result| result == false || result == :ignore } EVENT_RESULT_CONTINUE end |
.dispatch_signal(internal_signal_handlers, signal_handlers, object_handle, signal_index, payload) ⇒ Object
29 30 31 32 33 34 |
# File 'lib/qt/event_runtime_dispatch.rb', line 29 def dispatch_signal(internal_signal_handlers, signal_handlers, object_handle, signal_index, payload) return unless object_handle dispatch_signal_store(signal_handlers, object_handle, signal_index, payload) dispatch_signal_store(internal_signal_handlers, object_handle, signal_index, payload) end |
.dispatch_signal_store(signal_handlers, object_handle, signal_index, payload) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/qt/event_runtime_dispatch.rb', line 36 def dispatch_signal_store(signal_handlers, object_handle, signal_index, payload) return unless signal_handlers = signal_handlers[object_handle.address] return unless .each do |signal_name, entry| next unless entry[:index] == signal_index typed_payload = Qt::DateTimeCodec.decode_for_signal(signal_name, payload) entry[:blocks].dup.each { |handler| handler.call(typed_payload) } end end |