Sha256: 097fd1718b469d6ae3a47dbb1903a6e8dd0d2718cbddcb75bf382f879812771d

Contents?: true

Size: 1.53 KB

Versions: 4

Compression:

Stored size: 1.53 KB

Contents

require_relative 'observable'
require_relative 'observer'

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

    attr_reader :widget
    @@property_type_updaters = {
      :string => lambda { |widget, value| widget.widget.select(widget.widget.index_of(value.to_s)) },
      :array => lambda { |widget, value| widget.widget.selection=((value or []).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, property_type)
      property_type = :string if property_type.nil? or property_type == :undefined
      @widget = widget
      @property_type = property_type
      add_contents(@widget) {
        on_widget_disposed { |dispose_event|
          unregister_all_observables
        }
      }
    end
    def call(value)
      @@property_type_updaters[@property_type].call(@widget, value) unless evaluate_property == value
    end
    def evaluate_property
      selection_array = @widget.widget.send("selection").to_a
      property_value = @@property_evaluators[@property_type].call(selection_array)
      return property_value
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
glimmer-0.4.3 lib/glimmer/command_handlers/models/list_selection_binding.rb
glimmer-0.4.2 lib/glimmer/command_handlers/models/list_selection_binding.rb
glimmer-0.4.1 lib/glimmer/command_handlers/models/list_selection_binding.rb
glimmer-0.4.0 lib/glimmer/command_handlers/models/list_selection_binding.rb