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.
120 lines
3.1 KiB
120 lines
3.1 KiB
6 months ago
|
@tool
|
||
|
extends PanelContainer
|
||
|
|
||
|
|
||
|
enum Modes {EDIT, ADD}
|
||
|
|
||
|
var mode := Modes.EDIT
|
||
|
var item :TreeItem = null
|
||
|
|
||
|
|
||
|
func _ready() -> void:
|
||
|
hide()
|
||
|
%Character.resource_icon = load("res://addons/dialogic/Editor/Images/Resources/character.svg")
|
||
|
%Character.get_suggestions_func = get_character_suggestions
|
||
|
|
||
|
%WholeWords.icon = get_theme_icon("FontItem", "EditorIcons")
|
||
|
%MatchCase.icon = get_theme_icon("MatchCase", "EditorIcons")
|
||
|
|
||
|
func _on_add_pressed() -> void:
|
||
|
if visible:
|
||
|
if mode == Modes.ADD:
|
||
|
hide()
|
||
|
return
|
||
|
elif mode == Modes.EDIT:
|
||
|
save()
|
||
|
|
||
|
%AddButton.text = "Add"
|
||
|
mode = Modes.ADD
|
||
|
show()
|
||
|
%Type.selected = 0
|
||
|
_on_type_item_selected(0)
|
||
|
%Where.selected = 2
|
||
|
_on_where_item_selected(2)
|
||
|
%Old.text = ""
|
||
|
%New.text = ""
|
||
|
|
||
|
|
||
|
func open_existing(_item:TreeItem, info:Dictionary):
|
||
|
mode = Modes.EDIT
|
||
|
item = _item
|
||
|
show()
|
||
|
%AddButton.text = "Update"
|
||
|
%Type.selected = info.type
|
||
|
_on_type_item_selected(info.type)
|
||
|
if !info.character_names.is_empty():
|
||
|
%Where.selected = 1
|
||
|
%Character.set_value(info.character_names[0])
|
||
|
else:
|
||
|
%Where.selected = 0
|
||
|
_on_where_item_selected(%Where.selected)
|
||
|
|
||
|
%Old.text = info.what
|
||
|
%New.text = info.forwhat
|
||
|
|
||
|
func _on_type_item_selected(index:int) -> void:
|
||
|
match index:
|
||
|
0:
|
||
|
%Where.select(0)
|
||
|
%Where.set_item_disabled(0, false)
|
||
|
%Where.set_item_disabled(1, false)
|
||
|
%Where.set_item_disabled(2, true)
|
||
|
1:
|
||
|
%Where.select(0)
|
||
|
%Where.set_item_disabled(0, false)
|
||
|
%Where.set_item_disabled(1, false)
|
||
|
%Where.set_item_disabled(2, true)
|
||
|
2:
|
||
|
%Where.select(1)
|
||
|
%Where.set_item_disabled(0, true)
|
||
|
%Where.set_item_disabled(1, false)
|
||
|
%Where.set_item_disabled(2, true)
|
||
|
3,4:
|
||
|
%Where.select(0)
|
||
|
%Where.set_item_disabled(0, false)
|
||
|
%Where.set_item_disabled(1, true)
|
||
|
%Where.set_item_disabled(2, true)
|
||
|
%PureTextFlags.visible = index == 0
|
||
|
_on_where_item_selected(%Where.selected)
|
||
|
|
||
|
|
||
|
func _on_where_item_selected(index:int) -> void:
|
||
|
%Character.visible = index == 1
|
||
|
|
||
|
|
||
|
func get_character_suggestions(search_text:String) -> Dictionary:
|
||
|
var suggestions := {}
|
||
|
|
||
|
#override the previous _character_directory with the meta, specifically for searching otherwise new nodes wont work
|
||
|
var _character_directory = DialogicResourceUtil.get_character_directory()
|
||
|
|
||
|
var icon := load("res://addons/dialogic/Editor/Images/Resources/character.svg")
|
||
|
suggestions['(No one)'] = {'value':null, 'editor_icon':["GuiRadioUnchecked", "EditorIcons"]}
|
||
|
|
||
|
for resource in _character_directory.keys():
|
||
|
suggestions[resource] = {
|
||
|
'value' : resource,
|
||
|
'tooltip' : _character_directory[resource],
|
||
|
'icon' : icon.duplicate()}
|
||
|
return suggestions
|
||
|
|
||
|
|
||
|
func save():
|
||
|
if %Old.text.is_empty() or %New.text.is_empty():
|
||
|
return
|
||
|
if %Where.selected == 1 and %Character.current_value == null:
|
||
|
return
|
||
|
|
||
|
var previous := {}
|
||
|
if mode == Modes.EDIT:
|
||
|
previous = item.get_metadata(0)
|
||
|
item.get_parent()
|
||
|
item.free()
|
||
|
|
||
|
var ref_manager := find_parent('ReferenceManager')
|
||
|
var character_names := []
|
||
|
if %Character.current_value != null:
|
||
|
character_names = [%Character.current_value]
|
||
|
ref_manager.add_ref_change(%Old.text, %New.text, %Type.selected, %Where.selected, character_names, %WholeWords.button_pressed, %MatchCase.button_pressed, previous)
|
||
|
hide()
|