Sha256: 39d399f1c0827ef6855891bfbc4d39a5d56595b1fec68bc2b641021ebabb0507

Contents?: true

Size: 1.08 KB

Versions: 3

Compression:

Stored size: 1.08 KB

Contents

class Shoes
  module Swt
    class ListBox
      include Common::Remove
      include Common::Visibility
      include Common::UpdatePosition
      include ::Shoes::BackendDimensionsDelegations

      attr_reader :dsl, :app

      def initialize(dsl, app)
        @dsl = dsl
        @app = app
        @real = ::Swt::Widgets::Combo.new(
          @app.real,
          ::Swt::SWT::DROP_DOWN | ::Swt::SWT::READ_ONLY
        )
        @real.set_size dsl.element_width, dsl.element_height
        @real.add_selection_listener do |_event|
          @dsl.call_change_listeners
        end
        update_items

        # Set initial selection without triggering callbacks!
        choice = @dsl.style[:choose]
        @real.text = choice if choice
      end

      def update_items
        @real.items = @dsl.items.to_a.map(&:to_s)
      end

      def text
        text = @real.text
        text == '' ? nil : text
      end

      def choose(item)
        @real.text = item
        @dsl.call_change_listeners
      end

      def enabled(value)
        @real.enable_widget value
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
shoes-swt-4.0.0.pre7 lib/shoes/swt/list_box.rb
shoes-swt-4.0.0.pre6 lib/shoes/swt/list_box.rb
shoes-swt-4.0.0.pre5 lib/shoes/swt/list_box.rb