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