Sha256: d7164711121b785fd8ea41e095c6be1885c6a9d0507f99c621e71d2c95533c18

Contents?: true

Size: 1.73 KB

Versions: 19

Compression:

Stored size: 1.73 KB

Contents

require 'glimmer'
require 'glimmer/data_binding/observable'
require 'glimmer/data_binding/observer'

module Glimmer
  module DataBinding
    # SWT List widget selection binding
    class ListSelectionBinding
      include Glimmer
      include Observable
      include Observer

      attr_reader :widget_proxy

      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
      }

      # Initialize with list widget and property_type
      # property_type :string represents default list single selection
      # property_type :array represents list multi selection
      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

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

      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
    end
  end
end

Version data entries

19 entries across 19 versions & 2 rubygems

Version Path
glimmer-dsl-swt-0.1.2 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-dsl-swt-0.1.1 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-dsl-swt-0.1.0 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.8.2 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.8.1 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.8.0 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.8 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.7 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.6 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.5 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.4 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.3 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.2 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.1 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.7.0 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.6.0 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.5.11 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.5.10 lib/glimmer/data_binding/list_selection_binding.rb
glimmer-0.5.9 lib/glimmer/data_binding/list_selection_binding.rb