Items in the inspiration list and the sync result columns now each have their own background box, alternating between two shades, with a small gap between them. When a long name wraps over several lines it is still clear which lines belong together. The sync columns keep their alternating white and orange text.
58 lines
1.8 KiB
GDScript
58 lines
1.8 KiB
GDScript
class_name ListRow
|
|
extends PanelContainer
|
|
## One item in a list of names, such as the inspiration list or a sync result column.
|
|
##
|
|
## Every row has its own background, alternating between two shades, so it is clear
|
|
## where an item starts even when its text wraps over several lines.
|
|
|
|
const EVEN_BACKGROUND: Color = Color(1, 1, 1, 0.05)
|
|
const ODD_BACKGROUND: Color = Color(1, 1, 1, 0.11)
|
|
|
|
static var _even_style: StyleBoxFlat
|
|
static var _odd_style: StyleBoxFlat
|
|
|
|
## The label showing the item's text.
|
|
var label: Label
|
|
|
|
## The item's text.
|
|
var text: String:
|
|
get:
|
|
return label.text
|
|
|
|
|
|
## Creates the row for item number [param row] (counting from 0) in a list.
|
|
static func create(
|
|
item_text: String,
|
|
row: int,
|
|
font_size: int,
|
|
alignment: HorizontalAlignment = HORIZONTAL_ALIGNMENT_LEFT,
|
|
) -> ListRow:
|
|
var list_row: ListRow = ListRow.new()
|
|
list_row.add_theme_stylebox_override("panel", _style(row % 2 != 0))
|
|
list_row.label = Label.new()
|
|
list_row.label.add_theme_font_size_override("font_size", font_size)
|
|
list_row.label.text = item_text
|
|
list_row.label.horizontal_alignment = alignment
|
|
list_row.label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
|
list_row.add_child(list_row.label)
|
|
return list_row
|
|
|
|
|
|
# Rows share two styles instead of each creating its own
|
|
static func _style(odd: bool) -> StyleBoxFlat:
|
|
if _even_style == null:
|
|
_even_style = _make_style(EVEN_BACKGROUND)
|
|
_odd_style = _make_style(ODD_BACKGROUND)
|
|
return _odd_style if odd else _even_style
|
|
|
|
|
|
static func _make_style(background: Color) -> StyleBoxFlat:
|
|
var style: StyleBoxFlat = StyleBoxFlat.new()
|
|
style.bg_color = background
|
|
style.set_corner_radius_all(4)
|
|
style.content_margin_left = 8
|
|
style.content_margin_right = 8
|
|
style.content_margin_top = 2
|
|
style.content_margin_bottom = 2
|
|
return style
|