Sha256: 226f647be2f10cffd200266557fce7260d4e189e78ede90f8d7293b81391e41a

Contents?: true

Size: 1.62 KB

Versions: 5

Compression:

Stored size: 1.62 KB

Contents

require_relative 'observable'
require_relative 'observer'

module Glimmer
  module SWT
    # 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
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
glimmer-0.4.8 lib/glimmer/swt/list_selection_binding.rb
glimmer-0.4.7 lib/glimmer/swt/list_selection_binding.rb
glimmer-0.4.6 lib/glimmer/swt/list_selection_binding.rb
glimmer-0.4.5 lib/glimmer/swt/list_selection_binding.rb
glimmer-0.4.4 lib/glimmer/swt/list_selection_binding.rb