]> Untitled Git - wolf-seeking-sheep.git/blob - addons/dialogic/Editor/Common/unique_identifiers_manager.gd
Updated export config options
[wolf-seeking-sheep.git] / addons / dialogic / Editor / Common / unique_identifiers_manager.gd
1 @tool
2 extends PanelContainer
3
4
5 func _ready() -> void:
6         if owner.get_parent() is SubViewport:
7                 return
8
9         %TabB.text = "Unique Identifiers"
10         %TabB.icon = get_theme_icon("CryptoKey", "EditorIcons")
11
12         owner.get_parent().visibility_changed.connect(func(): if is_visible_in_tree(): open())
13
14         %RenameNotification.add_theme_color_override("font_color", get_theme_color("warning_color", "Editor"))
15
16
17 func open() -> void:
18         fill_table()
19         %RenameNotification.hide()
20
21
22 func close() -> void:
23         pass
24
25 func fill_table() -> void:
26         var t: Tree = %IdentifierTable
27         t.set_column_expand(1, true)
28         t.clear()
29         t.set_column_title(1, "Identifier")
30         t.set_column_title(0, "Resource Path")
31         t.set_column_title_alignment(0, 0)
32         t.set_column_title_alignment(1, 0)
33         t.create_item()
34
35         for d in [["Characters", 'dch'], ["Timelines", "dtl"]]:
36                 var directory := DialogicResourceUtil.get_directory(d[1])
37                 var directory_item := t.create_item()
38                 directory_item.set_text(0, d[0])
39                 directory_item.set_metadata(0, d[1])
40                 for key in directory:
41                         var item: TreeItem = t.create_item(directory_item)
42                         item.set_text(0, directory[key])
43                         item.set_text(1, key)
44                         item.set_editable(1, true)
45                         item.set_metadata(1, key)
46                         item.add_button(1, get_theme_icon("Edit", "EditorIcons"), 0, false, "Edit")
47
48
49 func _on_identifier_table_item_edited() -> void:
50         var item: TreeItem = %IdentifierTable.get_edited()
51         var new_identifier: String = item.get_text(1)
52
53
54         if new_identifier == item.get_metadata(1):
55                 return
56
57         if new_identifier.is_empty() or not DialogicResourceUtil.is_identifier_unused(item.get_parent().get_metadata(0), new_identifier):
58                 item.set_text(1, item.get_metadata(1))
59                 return
60
61         DialogicResourceUtil.change_unique_identifier(item.get_text(0), new_identifier)
62
63         match item.get_parent().get_metadata(0):
64                 'dch':
65                         owner.get_parent().add_character_name_ref_change(item.get_metadata(1), new_identifier)
66                 'dtl':
67                         owner.get_parent().add_timeline_name_ref_change(item.get_metadata(1), new_identifier)
68
69         %RenameNotification.show()
70         item.set_metadata(1, new_identifier)
71
72
73 func _on_identifier_table_button_clicked(item: TreeItem, column: int, id: int, mouse_button_index: int) -> void:
74         item.select(column)
75         %IdentifierTable.edit_selected(true)
76
77
78 func filter_tree(filter:String= "", item:TreeItem = null) -> bool:
79         if item == null:
80                 item = %IdentifierTable.get_root()
81
82         var any := false
83         for child in item.get_children():
84                 if child.get_child_count() > 0:
85                         child.visible = filter_tree(filter, child)
86                         if child.visible: any = true
87                 else:
88                         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()
89                         if child.visible: any = true
90
91         return any
92
93
94 func _on_search_text_changed(new_text: String) -> void:
95         filter_tree(new_text)