class CyberarmEngine::Element::ListBox

Attributes

choose[R]
items[RW]

Public Class Methods

new(options = {}, block = nil) click to toggle source
Calls superclass method CyberarmEngine::Element::Button::new
# File lib/cyberarm_engine/ui/elements/list_box.rb, line 7
def initialize(options = {}, block = nil)
  @items = options[:items] || []
  @choose = options[:choose] || @items.first

  super(@choose, options, block)

  @style.background_canvas.background = default(:background)

  # TODO: "Clean Up" into own class?
  @menu = Stack.new(parent: parent, width: @options[:width], theme: @options[:theme])
  @menu.define_singleton_method(:recalculate_menu) do
    @x = @__list_box.x
    @y = @__list_box.y + @__list_box.height
  end
  @menu.instance_variable_set(:"@__list_box", self)

  def @menu.recalculate
    super

    recalculate_menu
  end

  self.choose = @choose
end

Public Instance Methods

choose=(item) click to toggle source
# File lib/cyberarm_engine/ui/elements/list_box.rb, line 32
def choose=(item)
  valid = @items.detect { |i| i == item }
  raise "Invalid value '#{item}' for choose, valid options were: #{@items.map { |i| "#{i.inspect}" }.join(", ")}" unless valid

  @choose = item

  self.value = item.to_s

  recalculate
end
recalculate() click to toggle source
# File lib/cyberarm_engine/ui/elements/list_box.rb, line 75
def recalculate
  super

  @menu.recalculate
end
released_left_mouse_button(_sender, _x, _y) click to toggle source
# File lib/cyberarm_engine/ui/elements/list_box.rb, line 43
def released_left_mouse_button(_sender, _x, _y)
  show_menu

  :handled
end
show_menu() click to toggle source
# File lib/cyberarm_engine/ui/elements/list_box.rb, line 49
def show_menu
  @menu.clear

  @items.each do |item|
    btn = Button.new(
      item,
      {
        parent: @menu,
        width: 1.0,
        theme: @options[:theme],
        margin: 0,
        border_color: 0x00ffffff
      },
      proc do
        self.choose = item
        @block&.call(item)
      end
    )

    @menu.add(btn)
  end
  recalculate

  root.gui_state.show_menu(@menu)
end