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

92 lines
2.8 KiB
GDScript

# Locale UI for LocalizationEditor : MIT License
# @author Vladimir Petrenko
@tool
extends MarginContainer
var _locale
var _data: LocalizationData
@onready var _selection_ui = $HBox/Selection as CheckBox
@onready var _locale_ui = $HBox/Locale as Label
@onready var _eye_ui = $HBox/Eye as TextureButton
const IconOpen = preload("res://addons/localization_editor/icons/Open.svg")
const IconClose = preload("res://addons/localization_editor/icons/Close.svg")
func locale():
return _locale
func set_data(locale, data: LocalizationData) -> void:
_locale = locale
_data = data
_draw_view()
_init_connections()
func _draw_view() -> void:
_selection_ui.text = _locale
_locale_ui.text = LocalizationLocalesList.label_by_code(_locale)
_selection_ui_state()
_eye_ui_state()
func _selection_ui_state() -> void:
_selection_ui.set_pressed(_data.find_locale(_locale) != null)
func _eye_ui_state() -> void:
_eye_ui.set_pressed(not _data.is_locale_visible(_locale))
_update_view_eye(_selection_ui.is_pressed())
func _init_connections() -> void:
if not _selection_ui.is_connected("toggled", _on_selection_changed):
assert(_selection_ui.toggled.connect(_on_selection_changed) == OK)
if not _eye_ui.is_connected("toggled", _on_eye_changed):
assert(_eye_ui.toggled.connect(_on_eye_changed) == OK)
func _on_selection_changed(value) -> void:
if value == true:
_data.add_locale(_locale)
_update_view_eye(value)
else:
_show_confirm_dialog()
func _show_confirm_dialog() -> void:
var root = get_tree().get_root()
var confirm_dialog = ConfirmationDialog.new()
confirm_dialog.title = "Confirm"
confirm_dialog.dialog_text = "Are you sure to delete locale with all translations and remaps?"
confirm_dialog.confirmed.connect(_on_confirm_dialog_ok.bind(root, confirm_dialog))
confirm_dialog.cancelled.connect(_on_confirm_dialog_cancelled.bind(root, confirm_dialog))
root.add_child(confirm_dialog)
confirm_dialog.popup_centered()
func _on_confirm_dialog_ok(root, confirm_dialog) -> void:
_data.del_locale(_locale)
_update_view_eye(false)
_confirm_dialog_remove(root, confirm_dialog)
func _on_confirm_dialog_cancelled(root, confirm_dialog) -> void:
_selection_ui.set_pressed(true)
_confirm_dialog_remove(root, confirm_dialog)
func _confirm_dialog_remove(root, confirm_dialog) -> void:
root.remove_child(confirm_dialog)
confirm_dialog.queue_free()
func _update_view_eye(value: bool) -> void:
if value:
_eye_ui.show()
_update_visible_icon_from_data()
else:
_eye_ui.hide()
func _update_visible_icon_from_data() -> void:
_update_visible_icon(_data.is_locale_visible(_locale))
func _on_eye_changed(value) -> void:
if value:
_data.setting_locales_visibility_put(_locale)
else:
_data.setting_locales_visibility_del(_locale)
_update_visible_icon(!value)
func _update_visible_icon(value: bool) -> void:
_eye_ui.texture_normal = IconOpen if value else IconClose