]> Untitled Git - wolf-seeking-sheep.git/blob - addons/dialogic/Editor/Common/ReferenceManager_AddReplacementPanel.gd
Updated export config options
[wolf-seeking-sheep.git] / addons / dialogic / Editor / Common / ReferenceManager_AddReplacementPanel.gd
1 @tool
2 extends PanelContainer
3
4
5 enum Modes {EDIT, ADD}
6
7 var mode := Modes.EDIT
8 var item: TreeItem = null
9
10
11 func _ready() -> void:
12         hide()
13         %Character.resource_icon = load("res://addons/dialogic/Editor/Images/Resources/character.svg")
14         %Character.get_suggestions_func = get_character_suggestions
15
16         %WholeWords.icon = get_theme_icon("FontItem", "EditorIcons")
17         %MatchCase.icon = get_theme_icon("MatchCase", "EditorIcons")
18
19 func _on_add_pressed() -> void:
20         if visible:
21                 if mode == Modes.ADD:
22                         hide()
23                         return
24                 elif mode == Modes.EDIT:
25                         save()
26
27         %AddButton.text = "Add"
28         mode = Modes.ADD
29         show()
30         %Type.selected = 0
31         _on_type_item_selected(0)
32         %Where.selected = 2
33         _on_where_item_selected(2)
34         %Old.text = ""
35         %New.text = ""
36
37
38 func open_existing(_item:TreeItem, info:Dictionary):
39         mode = Modes.EDIT
40         item = _item
41         show()
42         %AddButton.text = "Update"
43         %Type.selected = info.type
44         _on_type_item_selected(info.type)
45         if !info.character_names.is_empty():
46                 %Where.selected = 1
47                 %Character.set_value(info.character_names[0])
48         else:
49                 %Where.selected = 0
50         _on_where_item_selected(%Where.selected)
51
52         %Old.text = info.what
53         %New.text = info.forwhat
54
55 func _on_type_item_selected(index:int) -> void:
56         match index:
57                 0:
58                         %Where.select(0)
59                         %Where.set_item_disabled(0, false)
60                         %Where.set_item_disabled(1, false)
61                         %Where.set_item_disabled(2, true)
62                 1:
63                         %Where.select(0)
64                         %Where.set_item_disabled(0, false)
65                         %Where.set_item_disabled(1, false)
66                         %Where.set_item_disabled(2, true)
67                 2:
68                         %Where.select(1)
69                         %Where.set_item_disabled(0, true)
70                         %Where.set_item_disabled(1, false)
71                         %Where.set_item_disabled(2, true)
72                 3,4:
73                         %Where.select(0)
74                         %Where.set_item_disabled(0, false)
75                         %Where.set_item_disabled(1, true)
76                         %Where.set_item_disabled(2, true)
77         %PureTextFlags.visible = index == 0
78         _on_where_item_selected(%Where.selected)
79
80
81 func _on_where_item_selected(index:int) -> void:
82         %Character.visible = index == 1
83
84
85 func get_character_suggestions(search_text:String) -> Dictionary:
86         var suggestions := {}
87
88         #override the previous _character_directory with the meta, specifically for searching otherwise new nodes wont work
89         var _character_directory := DialogicResourceUtil.get_character_directory()
90
91         var icon := load("res://addons/dialogic/Editor/Images/Resources/character.svg")
92         suggestions['(No one)'] = {'value':null, 'editor_icon':["GuiRadioUnchecked", "EditorIcons"]}
93
94         for resource in _character_directory.keys():
95                 suggestions[resource] = {
96                                 'value'         : resource,
97                                 'tooltip'       : _character_directory[resource],
98                                 'icon'          : icon.duplicate()}
99         return suggestions
100
101
102 func save() -> void:
103         if %Old.text.is_empty() or %New.text.is_empty():
104                 return
105         if %Where.selected == 1 and %Character.current_value == null:
106                 return
107
108         var previous := {}
109         if mode == Modes.EDIT:
110                 previous = item.get_metadata(0)
111                 item.get_parent()
112                 item.free()
113
114         var ref_manager := find_parent('ReferenceManager')
115         var character_names := []
116         if %Character.current_value != null:
117                 character_names = [%Character.current_value]
118         ref_manager.add_ref_change(%Old.text, %New.text, %Type.selected, %Where.selected, character_names, %WholeWords.button_pressed, %MatchCase.button_pressed, previous)
119         hide()