Sha256: f3e18876390e26c2b7b39c7cd6f79821e1d52ea883a1db3d703cc6a041be6a6a

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

# encoding: utf-8

module Fidgit
class ComboBox < Button
  event :changed

  def index; @menu.index(@value) end
  def value; @value; end
  
  def value=(value)
    if @value != value
      @value = value
      item = @menu.find(@value)
      self.text = item.text
      self.icon = item.icon
      publish :changed, @value
    end

    value
  end

  def index=(index)
    if index.between?(0, @menu.size - 1)
      self.value = @menu[index].value
    end

    index
  end

  # @param (see Button#initialize)
  # @option (see Button#initialize)
  # @option options [] :value
  def initialize(options = {}, &block)
    options = {
      background_color: default(:background_color),
      border_color: default(:border_color),
    }.merge! options

    @value = options[:value]
    
    @hover_index = 0

    @menu = MenuPane.new(show: false) do
      subscribe :selected do |widget, value|
        self.value = value
      end
    end

    super('', options)

    rect.height = [height, font_size + padding_top + padding_bottom].max
    rect.width = [width, font_size * 4 + padding_left + padding_right].max
  end

  def item(text, value, options = {}, &block)
    item = @menu.item(text, value, options, &block)

    # Force text to be updated if the item added has the same value.
    if item.value == @value
      @text = item.text
    end

    item
  end

  def clicked_left_mouse_button(sender, x, y)
    @menu.x = self.x
    @menu.y = self.y + height + border_thickness
    $window.game_state_manager.current_game_state.show_menu @menu

    nil
  end

  protected
  # Any combo-box passed a block will allow you access to its methods.
  def post_init_block(&block)
      case block.arity
        when 1
          yield self
        when 0
          instance_methods_eval &block
        else
          raise "block arity must be 0 or 1"
      end
  end
end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fidgit-0.0.5alpha lib/fidgit/elements/combo_box.rb