clockwork-city/addons/tube/inspector/messages_container.gd

72 lines
1.8 KiB
GDScript3
Raw Permalink Normal View History

2026-04-13 11:34:00 -05:00
class_name EditorTubeMessagesContainer extends Control
## @experimental: This class is used as part of the TubeClientDebugPanel scene and is part of a scene. Should not be used as itself.
@export var message_control: EditorTubeMessageControl
@export var max_messages_amount := 100:
set(x):
max_messages_amount = x
if is_instance_valid(messages_amount_label):
messages_amount_label.text = "(last {value})".format({
"value": max_messages_amount
})
var _display_from: Object
@onready var messages_amount_label: Label = %MessagesAmountLabel
@onready var scroll_container: ScrollContainer = %ScrollContainer
@onready var list_container: Container = %ListContainer
func is_displaying_from(p_from) -> bool:
return _display_from == p_from
func display_messages(p_controls: Array[EditorTubeMessagesItemControl], p_from: Object = null):
_display_from = p_from
for child in list_container.get_children():
list_container.remove_child(child)
var last_control
var pressed_control
for control in p_controls:
if not is_instance_valid(control):
continue
if control.is_queued_for_deletion():
continue
control.message_control = message_control
list_container.add_child(control)
last_control = control
if control.is_pressed():
pressed_control = control
if pressed_control:
last_control = pressed_control
message_control.message_item_control = last_control
else:
message_control.message_item_control = null
if not last_control:
return
await get_tree().process_frame
if not is_instance_valid(last_control) or last_control.is_queued_for_deletion():
return
scroll_container.ensure_control_visible(last_control)
func _on_clipboard_button_pressed() -> void:
var clipboard := ""
for child in list_container.get_children():
clipboard += str(child) + "\n"
DisplayServer.clipboard_set(clipboard)