HighNoonRoulette/addons/localization_editor/LocalizationEditor.gd
2025-08-28 01:55:38 +02:00

97 lines
3.4 KiB
GDScript

# LocalizationEditor : MIT License
# @author Vladimir Petrenko
@tool
extends Control
var _editor: EditorPlugin
var _data:= LocalizationData.new()
@onready var _save_ui = $VBox/Margin/HBox/Save
@onready var _open_ui = $VBox/Margin/HBox/Open
@onready var _file_ui = $VBox/Margin/HBox/File
@onready var _tabs_ui = $VBox/Tabs as TabContainer
@onready var _locales_ui = $VBox/Tabs/Locales
@onready var _remaps_ui = $VBox/Tabs/Remaps
@onready var _placeholders_ui = $VBox/Tabs/Placeholders
@onready var _translations_ui = $VBox/Tabs/Translations
@onready var _auto_translate_ui = $VBox/Tabs/AutoTranslate
const IconResourceTranslations = preload("res://addons/localization_editor/icons/Localization.svg")
const IconResourceRemaps = preload("res://addons/localization_editor/icons/Remaps.svg")
const IconResourceLocales = preload("res://addons/localization_editor/icons/Locales.svg")
const IconResourcePlaceholders = preload("res://addons/localization_editor/icons/Placeholders.svg")
const IconResourcePseudolocalization = preload("res://addons/localization_editor/icons/Pseudolocalization.svg")
const IconResourceTranslation = preload("res://addons/localization_editor/icons/Translation.svg")
const LocalizationEditorDialogFile = preload("res://addons/localization_editor/LocalizationEditorDialogFile.tscn")
var thread
func _ready() -> void:
_tabs_ui.set_tab_icon(0, IconResourceTranslations)
_tabs_ui.set_tab_icon(1, IconResourceRemaps)
_tabs_ui.set_tab_icon(2, IconResourceLocales)
_tabs_ui.set_tab_icon(3, IconResourcePlaceholders)
_tabs_ui.set_tab_icon(4, IconResourcePseudolocalization)
_tabs_ui.set_tab_icon(5, IconResourceTranslation)
_tabs_ui.connect("tab_changed", _on_tab_changed)
func _on_tab_changed(idx: int) -> void:
if idx == 3:
_data.init_data_placeholders()
_data.emit_signal_data_changed()
func set_editor(editor: EditorPlugin) -> void:
_editor = editor
_init_connections()
_load_data()
_data.set_editor(editor)
_data_to_childs()
_update_view()
func _init_connections() -> void:
if not _data.is_connected("settings_changed", _update_view):
assert(_data.connect("settings_changed", _update_view) == OK)
if not _save_ui.is_connected("pressed", _on_save_data):
assert(_save_ui.connect("pressed", _on_save_data) == OK)
if not _open_ui.is_connected("pressed", _open_file):
assert(_open_ui.connect("pressed", _open_file) == OK)
func get_data() -> LocalizationData:
return _data
func _load_data() -> void:
_data.init_data_translations()
_data.init_data_remaps()
_data.init_data_placeholders()
func _data_to_childs() -> void:
_translations_ui.set_data(_data)
_remaps_ui.set_data(_data)
_locales_ui.set_data(_data)
_placeholders_ui.set_data(_data)
_auto_translate_ui.set_data(_data)
func _update_view() -> void:
_file_ui.text = _data.setting_path_to_file()
func _on_save_data() -> void:
save_data(true)
func save_data(update_script_classes = false) -> void:
_data.save_data_translations(update_script_classes)
_data.save_data_remaps()
func _open_file() -> void:
var file_dialog: FileDialog = LocalizationEditorDialogFile.instantiate()
var root = get_tree().get_root()
root.add_child(file_dialog)
assert(file_dialog.file_selected.connect(_path_to_file_changed) == OK)
file_dialog.popup_centered()
func _path_to_file_changed(new_path) -> void:
_data.setting_path_to_file_put(new_path)
if FileAccess.file_exists(new_path):
_load_data()
_data_to_childs()
_update_view()