class TkComponent::Builder::Event

Constants

EVENT_ALIASES
EVENT_ATTRS

Attributes

button_index[RW]
data[RW]
key_code[RW]
key_string[RW]
mouse_wheel_delta[RW]
mouse_x[RW]
mouse_y[RW]
name[RW]
root_mouse_x[RW]
root_mouse_y[RW]
sender[RW]

Public Class Methods

bind_command(name, sender, options, lambda) click to toggle source
# File lib/tk_component/builder/event.rb, line 27
def self.bind_command(name, sender, options, lambda)
  sender.native_item.command do
    event = self.new(name, sender)
    lambda.call(event)
  end
end
bind_event(name, sender, options, lambda, pre_lambda = nil, post_lambda = nil) click to toggle source
# File lib/tk_component/builder/event.rb, line 42
def self.bind_event(name, sender, options, lambda, pre_lambda = nil, post_lambda = nil)
  event_string = self.event_string_for(name, options)
  handler = proc do |x, y, rx, ry, bi, mw, ks, kc, data|
    event = self.new(name, sender)
    event.mouse_x = x
    event.mouse_y = y
    event.root_mouse_x = rx
    event.root_mouse_y = ry
    event.button_index = bi
    event.mouse_wheel_delta = mw
    event.key_string = ks
    event.key_code = kc
    event.data = data
    # The pre_lambda returns true if it wants to prevent the event from firing
    return if pre_lambda.present? && pre_lambda.call(event)
    lambda.call(event)
    post_lambda.call(event) if post_lambda.present?
  end
  sender.native_item.bind(event_string, handler, EVENT_ATTRS)
end
bind_variable(name, sender, options, lambda) click to toggle source
# File lib/tk_component/builder/event.rb, line 34
def self.bind_variable(name, sender, options, lambda)
  handler = proc do
    event = self.new(name, sender)
    lambda.call(event)
  end
  sender.tk_variable.trace('write', handler)
end
emit(name, source, data) click to toggle source
# File lib/tk_component/builder/event.rb, line 23
def self.emit(name, source, data)
  Tk.event_generate(source, "<#{name}>", data: data)
end
new(name, sender) click to toggle source
# File lib/tk_component/builder/event.rb, line 18
def initialize(name, sender)
  @name = name.to_sym
  @sender = sender
end

Private Class Methods

event_string_for(name, options) click to toggle source
# File lib/tk_component/builder/event.rb, line 73
def self.event_string_for(name, options)
  event_name = self.resolve_event_alias(name).to_s.camelize
  event_prefix = ''
  if button = options[:button]
    event_prefix << "B#{button}"
  end
  event_name = event_prefix + '-' + event_name if event_prefix.present?
  event_name
end
resolve_event_alias(name) click to toggle source
# File lib/tk_component/builder/event.rb, line 89
def self.resolve_event_alias(name)
  if (found = EVENT_ALIASES[name])
    name = found
  end
  name
end

Public Instance Methods

data_object() click to toggle source
# File lib/tk_component/builder/event.rb, line 63
def data_object
  @data_object ||= begin
                     ObjectSpace._id2ref(self.data.to_i)
                   rescue
                     nil
                   end
end