You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.7 KiB

6 months ago
@tool
extends PanelContainer
func _ready() -> void:
if owner.get_parent() is SubViewport:
return
%TabB.text = "Unique Identifiers"
%TabB.icon = get_theme_icon("CryptoKey", "EditorIcons")
owner.get_parent().visibility_changed.connect(func(): if is_visible_in_tree(): open())
%RenameNotification.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor"))
func open() -> void:
fill_table()
%RenameNotification.hide()
func close() -> void:
pass
func fill_table() -> void:
var t: Tree = %IdentifierTable
t.set_column_expand(1, true)
t.clear()
t.set_column_title(1, "Identifier")
t.set_column_title(0, "Resource Path")
t.set_column_title_alignment(0, 0)
t.set_column_title_alignment(1, 0)
t.create_item()
for d in [["Characters", 'dch'], ["Timelines", "dtl"]]:
var directory := DialogicResourceUtil.get_directory(d[1])
var directory_item := t.create_item()
directory_item.set_text(0, d[0])
directory_item.set_metadata(0, d[1])
for key in directory:
var item: TreeItem = t.create_item(directory_item)
item.set_text(0, directory[key])
item.set_text(1, key)
item.set_editable(1, true)
item.set_metadata(1, key)
item.add_button(1, get_theme_icon("Edit", "EditorIcons"), 0, false, "Edit")
func _on_identifier_table_item_edited() -> void:
var item: TreeItem = %IdentifierTable.get_edited()
var new_identifier : String = item.get_text(1)
if new_identifier == item.get_metadata(1):
return
if new_identifier.is_empty() or not DialogicResourceUtil.is_identifier_unused(item.get_parent().get_metadata(0), new_identifier):
item.set_text(1, item.get_metadata(1))
return
DialogicResourceUtil.change_unique_identifier(item.get_text(0), new_identifier)
match item.get_parent().get_metadata(0):
'dch':
owner.get_parent().add_character_name_ref_change(item.get_metadata(1), new_identifier)
'dtl':
owner.get_parent().add_timeline_name_ref_change(item.get_metadata(1), new_identifier)
%RenameNotification.show()
item.set_metadata(1, new_identifier)
func _on_identifier_table_button_clicked(item: TreeItem, column: int, id: int, mouse_button_index: int) -> void:
item.select(column)
%IdentifierTable.edit_selected(true)
func filter_tree(filter:String= "", item:TreeItem = null) -> bool:
if item == null:
item = %IdentifierTable.get_root()
var any := false
for child in item.get_children():
if child.get_child_count() > 0:
child.visible = filter_tree(filter, child)
if child.visible: any = true
else:
child.visible = filter.is_empty() or filter.to_lower() in child.get_text(0).to_lower() or filter.to_lower() in child.get_text(1).to_lower()
if child.visible: any = true
return any
func _on_search_text_changed(new_text: String) -> void:
filter_tree(new_text)