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