class MenuWidget

Public Class Methods

new(x, y, items, foreground=:white, background=:black, highlight=:red) click to toggle source
# File lib/delve/widgets/menu.rb, line 2
def initialize(x, y, items, foreground=:white, background=:black, highlight=:red)
  raise 'Cannot initialize menu widget when x is nil' unless x
  raise 'Cannot initialize menu widget when y is nil' unless y
  raise 'Cannot initialize menu widget when items is nil' unless items
  raise 'Cannot initialize menu widget when items is empty' if items.empty?

  @x = x
  @y = y
  @items = items
  @selected_index = 0
  @fg = foreground
  @bg = background
  @highlight = highlight
end

Public Instance Methods

draw(display) click to toggle source
# File lib/delve/widgets/menu.rb, line 41
def draw(display)
  raise 'Cannot draw text when display is nil' unless display

  items = 0
  @items.keys.each do |key|
    chars = 0
    y = determine_y display
    @items[key].each_char do |c|
      fg = @selected_index == items ? @bg : @fg
      bg = @selected_index == items ? @fg : @bg
      x = determine_x display
      text_color = (c == key || c == key.upcase) ? @highlight : fg
      display.draw(x + chars, y + items, c, text_color, bg)
      chars += 1
    end
    items += 1
  end
end
next() click to toggle source
# File lib/delve/widgets/menu.rb, line 22
def next
  @selected_index += 1
  if @selected_index >= @items.keys.length
    @selected_index = 0
  end
end
previous() click to toggle source
# File lib/delve/widgets/menu.rb, line 29
def previous
  @selected_index -= 1
  if @selected_index < 0
    @selected_index = @items.keys.length - 1
  end
end
select(key) click to toggle source
# File lib/delve/widgets/menu.rb, line 36
def select(key)
  return false if !@items.keys.include? key
  @selected_index = @items.keys.index key
end
selected_item() click to toggle source
# File lib/delve/widgets/menu.rb, line 17
def selected_item
  key = @items.keys[@selected_index]
  @items[key]
end

Private Instance Methods

determine_x(display) click to toggle source
# File lib/delve/widgets/menu.rb, line 61
def determine_x display
  if @x == :center
    return (display.width / 2.0).ceil - (longest_line / 2.0).floor
  end
  @x
end
determine_y(display) click to toggle source
# File lib/delve/widgets/menu.rb, line 68
def determine_y display
  if @y == :center
    return ((display.height / 2.0).ceil) - (@items.keys.length / 2.0).floor
  end
  @y
end
longest_line() click to toggle source
# File lib/delve/widgets/menu.rb, line 75
def longest_line
  value = -1
  @items.keys.each do |key|
    if value < @items[key].length
      value = @items[key].length
    end
  end
  return value
end