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

68 lines
1.9 KiB
GDScript

# Translations view for LocalizationEditor : MIT License
# @author Vladimir Petrenko
@tool
extends VBoxContainer
var _data: LocalizationData
var _split_viewport_size = 0
var _scroll_position = 0
@onready var _split_ui = $Split
@onready var _keys_ui = $Split/Keys
@onready var _translations_ui = $Split/Translations
@onready var _translations_list_ui = $Split/Translations/Scroll/Translations
func set_data(data: LocalizationData) -> void:
_data = data
_keys_ui.set_data(data)
_translations_ui.set_data(data)
_init_connections()
func _init_connections() -> void:
if not _split_ui.is_connected("dragged", _on_split_dragged):
assert(_split_ui.dragged.connect(_on_split_dragged) == OK)
func _process(delta):
if _split_viewport_size != size.x:
_split_viewport_size = size.x
_init_split_offset()
_update_scrolls()
func _init_split_offset() -> void:
var offset = 350
if _data:
offset = _data.setting_translations_split_offset()
_split_ui.set_split_offset(-size.x / 2 + offset)
func _on_split_dragged(offset: int) -> void:
if _data != null:
var value = -(-size.x / 2 - offset)
_data.setting_translations_split_offset_put(value)
# Workaround for https://github.com/godotengine/godot/issues/22936
func _update_scrolls() -> void:
var sc = _new_scrolls_position()
if _scroll_position != sc:
_scroll_position = sc
_keys_ui.set_v_scroll(_scroll_position)
for child in _translations_list_ui.get_children():
if child.has_method("set_v_scroll"):
child.set_v_scroll(_scroll_position)
func _new_scrolls_position() -> int:
if _keys_ui == null:
return 0
var v_1 = [_keys_ui.get_v_scroll()]
var v_2 = []
for child in _translations_list_ui.get_children():
if child.has_method("get_v_scroll"):
var v_child = child.get_v_scroll()
if v_1[0] == v_child:
v_1.append(v_child)
else:
v_2.append(v_child)
if v_2.size() == 0:
return v_1[0]
if v_1.size() == 1:
return v_1[0]
return v_2[0]