Class: Glimmer::DataBinding::ListSelectionBinding

Inherits:
Object
  • Object
show all
Includes:
Glimmer, Observable, Observer
Defined in:
lib/glimmer/data_binding/list_selection_binding.rb

Overview

SWT List widget selection binding

Constant Summary collapse

PROPERTY_TYPE_UPDATERS =
{
  :string => lambda { |widget_proxy, value| widget_proxy.swt_widget.select(widget_proxy.swt_widget.index_of(value.to_s)) },
  :array => lambda { |widget_proxy, value| widget_proxy.swt_widget.selection=(value || []).to_java(:string) }
}
PROPERTY_EVALUATORS =
{
  :string => lambda do |selection_array|
    return nil if selection_array.empty?
    selection_array[0]
  end,
  :array => lambda do |selection_array|
    selection_array
  end
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Glimmer

included

Constructor Details

#initialize(widget_proxy, property_type) ⇒ ListSelectionBinding

Initialize with list widget and property_type property_type :string represents default list single selection property_type :array represents list multi selection



53
54
55
56
57
58
59
60
# File 'lib/glimmer/data_binding/list_selection_binding.rb', line 53

def initialize(widget_proxy, property_type)
  property_type = :string if property_type.nil? or property_type == :undefined
  @widget_proxy = widget_proxy
  @property_type = property_type
  @widget_proxy.on_widget_disposed do |dispose_event|
    unregister_all_observables
  end
end

Instance Attribute Details

#widget_proxyObject (readonly)

Returns the value of attribute widget_proxy.



33
34
35
# File 'lib/glimmer/data_binding/list_selection_binding.rb', line 33

def widget_proxy
  @widget_proxy
end

Instance Method Details

#call(value) ⇒ Object



62
63
64
# File 'lib/glimmer/data_binding/list_selection_binding.rb', line 62

def call(value)
  PROPERTY_TYPE_UPDATERS[@property_type].call(@widget_proxy, value) unless evaluate_property == value
end

#evaluate_propertyObject



66
67
68
69
# File 'lib/glimmer/data_binding/list_selection_binding.rb', line 66

def evaluate_property
  selection_array = @widget_proxy.swt_widget.send('selection').to_a #TODO refactor send('selection') into proper method invocation
  PROPERTY_EVALUATORS[@property_type].call(selection_array)
end