80 lines
1.5 KiB
GDScript
80 lines
1.5 KiB
GDScript
tool
|
|
extends VBoxContainer
|
|
|
|
|
|
signal title_clicked(title)
|
|
signal title_dbl_clicked(title)
|
|
|
|
|
|
onready var filter_input: LineEdit = $Filter
|
|
onready var list: ItemList = $List
|
|
|
|
|
|
export var include_end_conversation: bool = false
|
|
|
|
|
|
var titles: Array setget set_titles
|
|
var filter: String = "" setget set_filter
|
|
|
|
|
|
func _ready() -> void:
|
|
filter_input.right_icon = get_icon("Search", "EditorIcons")
|
|
|
|
|
|
func focus_filter() -> void:
|
|
filter_input.grab_focus()
|
|
|
|
|
|
func get_selected_index() -> int:
|
|
if list.is_anything_selected():
|
|
return list.get_selected_items()[0]
|
|
else:
|
|
return -1
|
|
|
|
|
|
func get_item_text(index: int) -> String:
|
|
return list.get_item_text(index)
|
|
|
|
|
|
func set_titles(next_titles: Array) -> void:
|
|
titles = next_titles
|
|
|
|
list.clear()
|
|
if include_end_conversation:
|
|
list.add_item("END CONVERSATION")
|
|
|
|
for title in titles:
|
|
if filter == "" or filter.to_lower() in title.to_lower():
|
|
list.add_item(title.strip_edges())
|
|
|
|
|
|
func select_title(title: String) -> void:
|
|
for i in range(0, list.get_item_count()):
|
|
if list.get_item_text(i) == title.strip_edges():
|
|
list.select(i)
|
|
|
|
|
|
func set_filter(next_filter: String) -> void:
|
|
filter = next_filter
|
|
self.titles = titles
|
|
|
|
|
|
### Signals
|
|
|
|
|
|
func _on_Filter_text_changed(new_text):
|
|
self.filter = new_text
|
|
|
|
|
|
func _on_List_item_selected(index):
|
|
var title = list.get_item_text(index)
|
|
if title == "END CONVERSATION":
|
|
title = "END"
|
|
emit_signal("title_clicked", title)
|
|
|
|
|
|
func _on_List_item_activated(index):
|
|
var title = list.get_item_text(index)
|
|
if title == "END CONVERSATION":
|
|
title = "END"
|
|
emit_signal("title_dbl_clicked", title)
|