47 lines
1.4 KiB
GDScript
47 lines
1.4 KiB
GDScript
# Locales UI for LocalizationEditor : MIT License
|
|
# @author Vladimir Petrenko
|
|
@tool
|
|
extends MarginContainer
|
|
|
|
var _data: LocalizationData
|
|
|
|
@onready var _locales_ui = $Panel/Scroll/VBox as VBoxContainer
|
|
|
|
const LocalizationLocale = preload("res://addons/localization_editor/scenes/locales/LocalizationLocale.tscn")
|
|
|
|
func set_data(data: LocalizationData) -> void:
|
|
_data = data
|
|
_init_connections()
|
|
_update_view()
|
|
|
|
func _init_connections() -> void:
|
|
if not _data.is_connected("data_changed", _update_view):
|
|
assert(_data.data_changed.connect(_update_view) == OK)
|
|
|
|
func _update_view() -> void:
|
|
_clear_view()
|
|
_draw_view()
|
|
|
|
func _clear_view() -> void:
|
|
for child in _locales_ui.get_children():
|
|
_locales_ui.remove_child(child)
|
|
child.queue_free()
|
|
|
|
func _draw_view() -> void:
|
|
for locale in LocalizationLocalesList.LOCALES:
|
|
if _is_locale_to_show(locale):
|
|
var locale_ui = LocalizationLocale.instantiate()
|
|
_locales_ui.add_child(locale_ui)
|
|
locale_ui.set_data(locale, _data)
|
|
|
|
func _is_locale_to_show(locale) -> bool:
|
|
if not _is_locale_to_show_by_selection(locale):
|
|
return false
|
|
return _is_locale_to_show_by_filter(locale)
|
|
|
|
func _is_locale_to_show_by_selection(locale) -> bool:
|
|
return !_data.locales_selected() or _data.find_locale(locale) != null
|
|
|
|
func _is_locale_to_show_by_filter(locale) -> bool:
|
|
var filter = _data.locales_filter()
|
|
return filter == "" or filter in locale or filter in LocalizationLocalesList.label_by_code(locale)
|