158 lines
4.2 KiB
GDScript
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()
|