first Prototype

This commit is contained in:
Exobyt 2025-08-28 01:55:38 +02:00
parent e11825c698
commit 35ce267482
481 changed files with 17315 additions and 1 deletions

View file

@ -0,0 +1,136 @@
# Remap UI LineEdit for LocalizationEditor : MIT License
# @author Vladimir Petrenko
# Drag and drop not work just now, see Workaround -> LocalizationRemapPut
# https://github.com/godotengine/godot/issues/30480
@tool
extends LineEdit
var _key
var _remap
var _data: LocalizationData
var _remap_ui_style_empty: StyleBoxFlat
var _remap_ui_style_resource: StyleBoxFlat
var _remap_ui_style_resource_diff: StyleBoxFlat
var _remap_ui_style_resource_double: StyleBoxFlat
const LocalizationRemapDialogFile = preload("res://addons/localization_editor/scenes/remaps/LocalizationRemapDialogFile.tscn")
func set_data(key, remap, data: LocalizationData) -> void:
_key = key
_remap = remap
_data = data
_init_styles()
_init_connections()
_draw_view()
func _init_styles() -> void:
var style_box = get_theme_stylebox("normal", "LineEdit")
_remap_ui_style_empty = style_box.duplicate()
_remap_ui_style_empty.set_bg_color(Color("#661c1c"))
_remap_ui_style_resource = style_box.duplicate()
_remap_ui_style_resource.set_bg_color(Color("#192e59"))
_remap_ui_style_resource_diff = style_box.duplicate()
_remap_ui_style_resource_diff.set_bg_color(Color("#514200"))
_remap_ui_style_resource_double = style_box.duplicate()
_remap_ui_style_resource_double.set_bg_color(Color("#174044"))
func _init_connections() -> void:
if not _data.is_connected("data_remapkey_value_changed", _draw_view):
assert(_data.data_remapkey_value_changed.connect(_draw_view) == OK)
if not is_connected("focus_entered", _on_focus_entered):
assert(focus_entered.connect(_on_focus_entered) == OK)
if not is_connected("focus_exited", _on_focus_exited):
assert(focus_exited.connect(_on_focus_exited) == OK)
if not is_connected("text_changed", _remap_value_changed):
assert(text_changed.connect(_remap_value_changed) == OK)
if not is_connected("gui_input", _on_gui_input):
assert(gui_input.connect(_on_gui_input) == OK)
func _draw_view() -> void:
if has_focus():
text = _remap.value
else:
text = _data.filename(_remap.value)
_check_remap_ui()
func _input(event) -> void:
if (event is InputEventMouseButton) and event.pressed:
if not get_global_rect().has_point(event.position):
release_focus()
func _on_focus_entered() -> void:
text = _remap.value
func _on_focus_exited() -> void:
text = _data.filename(_remap.value)
func _remap_value_changed(remap_value) -> void:
_data.remapkey_value_change(_remap, remap_value)
func _on_gui_input(event: InputEvent) -> void:
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_MIDDLE:
if event.pressed:
grab_focus()
var file_dialog = LocalizationRemapDialogFile.instantiate()
if _resource_exists():
file_dialog.current_dir = _data.file_path(_remap.value)
file_dialog.current_file = _data.filename(_remap.value)
for extension in _data.supported_file_extensions():
file_dialog.add_filter("*." + extension)
var root = get_tree().get_root()
root.add_child(file_dialog)
file_dialog.connect("file_selected", _remap_value_changed)
file_dialog.popup_centered()
func _can_drop_data(position, data) -> bool:
var remap_value = data["files"][0]
var remap_extension = _data.file_extension(remap_value)
for extension in _data.supported_file_extensions():
if remap_extension == extension:
return true
return false
func _drop_data(position, data) -> void:
var remap_value = data["files"][0]
_remap_value_changed(remap_value)
func _check_remap_ui() -> void:
if text.length() <= 0:
set("custom_styles/normal", _remap_ui_style_empty)
tooltip_text = "Please set remap resource"
elif not _resource_exists():
set("custom_styles/normal", _remap_ui_style_resource)
tooltip_text = "Your resource path: \"" + _remap.value + "\" does not exists"
elif _resource_different_type():
set("custom_styles/normal", _remap_ui_style_resource_diff)
tooltip_text = "Your remaps have different types"
elif _resource_double():
set("custom_styles/normal", _remap_ui_style_resource_double)
tooltip_text = "Your have double resources in your remaps"
else:
set("custom_styles/normal", null)
tooltip_text = ""
func _resource_exists() -> bool:
if _data.remap_type(_remap) == "undefined":
return false
return FileAccess.file_exists(_remap.value)
func _resource_different_type() -> bool:
var type = _data.remap_type(_remap)
for remap in _key.remaps:
if remap.value.length() > 0 and type != _data.remap_type(remap):
return true
return false
func _resource_double() -> bool:
var first
for remap in _key.remaps:
if first == null:
first = remap
continue
if remap.value.length() > 0 and first.value == remap.value:
return true
return false