Files
Dawn-Godot/addons/madtalk/components/MainEditor_DialogExport.gd
2025-08-31 17:53:17 -05:00

158 lines
4.2 KiB
GDScript

@tool
extends Window
var mt_ie := MadTalkImportExport.new()
var dialog_data: DialogData
var current_sheet_id: String = ""
var template_ExportSheetListItem := preload("res://addons/madtalk/components/Export_SheetListItem.tscn")
@onready var panel_options := $PanelOptions
@onready var panel_sheets := $PanelSheets
@onready var panel_output := $PanelOutput
@onready var btn_exporter := $PanelOptions/BtnExporter
@onready var exporter_desc := $PanelOptions/ExporterDesc
@onready var panel_locales := $PanelOptions/LocalesPanel
@onready var locales_edit := $PanelOptions/LocalesPanel/LocalesEdit
@onready var output_edit := $PanelOutput/OutputEdit
@onready var label_sheets := $PanelOptions/LabelSheets
@onready var sheet_list := $PanelSheets/SheetScroll/VBox
var export_sheets := []
func setup(data: DialogData, sheet_id: String):
dialog_data = data
current_sheet_id = sheet_id
export_sheets = [sheet_id]
update_exported_sheets()
mt_ie.refresh_list_importers()
# mt_ie.exporters_list = { "absolute path to .gd": "Friendly Name", }
btn_exporter.clear()
for path in mt_ie.exporters_list:
btn_exporter.add_item(mt_ie.exporters_list[path])
btn_exporter.select(-1)
panel_options.show()
panel_sheets.hide()
panel_output.hide()
func set_current_sheet(sheet: String, reset_export_sheet: bool = false):
current_sheet_id = sheet
if reset_export_sheet:
export_sheets = [current_sheet_id]
update_exported_sheets()
func _on_btn_close_pressed() -> void:
hide()
# ------------------------------------------
func extract_locales() -> Array:
var a := Array(locales_edit.text.split("\n"))
var result := []
for i in range(a.size()):
var locale: String = a[i].strip_edges()
if locale.length() > 0:
result.append(locale)
return result
func export():
if (not dialog_data) or (btn_exporter.selected < 0) or (btn_exporter.selected >= mt_ie.exporters_list.size()):
print("MadTalk exporter error")
return
var exporter_script = mt_ie.exporters_list.keys()[ btn_exporter.selected ]
var exporter = load(exporter_script).new()
var locales: Array = extract_locales() if panel_locales.visible else []
var result := ""
for sheet_id: String in export_sheets:
if (not sheet_id in dialog_data.sheets):
continue
if result.length() > 0:
result += "\n\n"
result += exporter.export(dialog_data.sheets[sheet_id], locales)
output_edit.text = result
panel_options.hide()
panel_sheets.hide()
panel_output.show()
output_edit.select_all()
output_edit.grab_focus()
func refresh_export_sheet_list():
for child in sheet_list.get_children():
child.queue_free()
for sheet_id in dialog_data.sheets:
var sheet_data: DialogSheetData = dialog_data.sheets[sheet_id]
var new_item := template_ExportSheetListItem.instantiate()
sheet_list.add_child(new_item)
new_item.get_node("SheetIDLabel").text = sheet_id
new_item.get_node("DescLabel").text = sheet_data.sheet_description
new_item.get_node("BtnSelect").button_pressed = (sheet_id in export_sheets)
func update_exported_sheets(load_from_list: bool = false):
if load_from_list:
export_sheets.clear()
for item in sheet_list.get_children():
if item.get_node("BtnSelect").button_pressed:
export_sheets.append(item.get_node("SheetIDLabel").text)
var s := ""
for sheet_id in export_sheets:
s += "[color=#ffcc55][b]%s[/b][/color]\n" % sheet_id
label_sheets.text = s
func _on_btn_exporter_item_selected(index: int) -> void:
if (btn_exporter.selected < 0) or (btn_exporter.selected >= mt_ie.exporters_list.size()):
print("MadTalk exporter error")
return
var exporter_script = mt_ie.exporters_list.keys()[ btn_exporter.selected ]
var exporter = load(exporter_script).new()
exporter_desc.text = exporter.description
func _on_btn_force_locales_toggled(toggled_on: bool) -> void:
panel_locales.visible = toggled_on
func _on_btn_back_pressed() -> void:
panel_output.hide()
panel_sheets.hide()
panel_options.show()
func _on_btn_export_pressed() -> void:
export()
func _on_btn_manage_sheets_pressed() -> void:
refresh_export_sheet_list()
panel_options.hide()
panel_sheets.show()
panel_output.hide()
func _on_sheets_to_export_btn_ok_pressed() -> void:
update_exported_sheets(true)
panel_options.show()
panel_sheets.hide()
panel_output.hide()