Class: MenuWidget

Inherits:
Object
  • Object
show all
Defined in:
lib/delve/widgets/menu.rb

Instance Method Summary collapse

Constructor Details

#initialize(x, y, items, foreground = :white, background = :black, highlight = :red) ⇒ MenuWidget

Returns a new instance of MenuWidget.



2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 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

Instance Method Details

#draw(display) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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

#nextObject



22
23
24
25
26
27
# File 'lib/delve/widgets/menu.rb', line 22

def next
  @selected_index += 1
  if @selected_index >= @items.keys.length
    @selected_index = 0
  end
end

#previousObject



29
30
31
32
33
34
# 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) ⇒ Object



36
37
38
39
# 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_itemObject



17
18
19
20
# File 'lib/delve/widgets/menu.rb', line 17

def selected_item
  key = @items.keys[@selected_index]
  @items[key]
end