class Fidgit::ComboBox

Constants

ARROW_IMAGE

Public Class Methods

new(options = {}, &block) click to toggle source

@param (see Button#initialize) @option (see Button#initialize) @option options [] :value

Calls superclass method Fidgit::Button::new
# File lib/fidgit/elements/combo_box.rb, line 40
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

  @@arrow ||= Gosu::Image[ARROW_IMAGE]

  super('', options)

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

Public Instance Methods

clear() click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 92
def clear
  self.text = ""
  self.icon = nil
  @menu.clear
end
clicked_left_mouse_button(sender, x, y) click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 84
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
draw() click to toggle source
Calls superclass method
# File lib/fidgit/elements/combo_box.rb, line 78
def draw
  super
  size = height / @@arrow.width.to_f
  @@arrow.draw x + width - height, y, z, size, size
end
index() click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 14
def index; @menu.index(@value) end
index=(index) click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 29
def index=(index)
  if index.between?(0, @menu.size - 1)
    self.value = @menu[index].value
  end

  index
end
item(text, value, options = {}, &block) click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 64
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
    self.text = item.text
    self.icon = item.icon
  end

  recalc

  item
end
value() click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 15
def value; @value; end
value=(value) click to toggle source
# File lib/fidgit/elements/combo_box.rb, line 17
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

Protected Instance Methods

layout() click to toggle source
Calls superclass method
# File lib/fidgit/elements/combo_box.rb, line 99
def layout
  super

  # Max width of all items + allow size for the arrow.
  rect.width = [@menu.width + height, min_width].max

  nil
end
post_init_block(&block) click to toggle source

Any combo-box passed a block will allow you access to its methods.

# File lib/fidgit/elements/combo_box.rb, line 111
def post_init_block(&block)
  with(&block)
end