list_view
This commit is contained in:
@@ -134,6 +134,27 @@ module BBS
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def list_view(items, x:, y:, height:, scroll:, selected: nil,
|
||||||
|
label: :to_s, hint: nil, hint_y: nil,
|
||||||
|
empty: 'No items found.',
|
||||||
|
style: nil, highlight: nil)
|
||||||
|
visible = items[scroll, height] || []
|
||||||
|
if visible.empty?
|
||||||
|
text empty, x: x, y: y, style: style
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
call_label = label.is_a?(Symbol) ? ->(item) { item.public_send(label) } : label
|
||||||
|
list visible.map { |item| call_label.(item).to_s },
|
||||||
|
x: x, y: y,
|
||||||
|
selected: selected && (selected - scroll),
|
||||||
|
style: style, highlight: highlight
|
||||||
|
|
||||||
|
return unless hint && selected && (item = items[selected])
|
||||||
|
hint_text = (hint.is_a?(Symbol) ? item.public_send(hint) : hint.(item)).to_s.strip
|
||||||
|
text hint_text, x: x, y: (hint_y || y + height + 1), style: style unless hint_text.empty?
|
||||||
|
end
|
||||||
|
|
||||||
def fill(x:, y:, width:, height:, background:)
|
def fill(x:, y:, width:, height:, background:)
|
||||||
background_code = BACKGROUND_COLORS.fetch(background, background.to_s)
|
background_code = BACKGROUND_COLORS.fetch(background, background.to_s)
|
||||||
height.times do |row_offset|
|
height.times do |row_offset|
|
||||||
|
|||||||
Reference in New Issue
Block a user