2025-09-05 16:22:56 +03:00
|
|
|
class_name NetworkRequestItem
|
|
|
|
|
extends PanelContainer
|
|
|
|
|
|
|
|
|
|
@onready var icon: TextureRect = $HBoxContainer/IconContainer/Icon
|
|
|
|
|
@onready var name_label: Label = $HBoxContainer/NameLabel
|
|
|
|
|
@onready var status_label: Label = $HBoxContainer/StatusLabel
|
|
|
|
|
@onready var type_label: Label = $HBoxContainer/TypeLabel
|
|
|
|
|
@onready var size_label: Label = $HBoxContainer/SizeLabel
|
|
|
|
|
@onready var time_label: Label = $HBoxContainer/TimeLabel
|
|
|
|
|
|
|
|
|
|
var request: NetworkRequest
|
|
|
|
|
var network_tab: NetworkTab
|
|
|
|
|
|
2025-09-05 19:07:21 +03:00
|
|
|
@onready var normal_style: StyleBox = get_meta("normal_style")
|
|
|
|
|
@onready var selected_style: StyleBox = get_meta("selected_style")
|
|
|
|
|
|
|
|
|
|
@onready var success_color: Color = status_label.get_meta("success_color")
|
|
|
|
|
@onready var error_color: Color = status_label.get_meta("error_color")
|
|
|
|
|
@onready var pending_color: Color = status_label.get_meta("pending_color")
|
|
|
|
|
|
2025-09-05 16:22:56 +03:00
|
|
|
signal item_clicked(request: NetworkRequest)
|
|
|
|
|
|
|
|
|
|
func _ready():
|
|
|
|
|
mouse_filter = Control.MOUSE_FILTER_PASS
|
|
|
|
|
gui_input.connect(_on_gui_input)
|
|
|
|
|
|
|
|
|
|
func init(network_request: NetworkRequest, parent_tab: NetworkTab):
|
|
|
|
|
request = network_request
|
|
|
|
|
network_tab = parent_tab
|
|
|
|
|
update_display()
|
|
|
|
|
|
|
|
|
|
func update_display():
|
|
|
|
|
if not request:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
# Update icon
|
|
|
|
|
icon.texture = request.get_icon_texture()
|
|
|
|
|
|
|
|
|
|
# Update labels
|
|
|
|
|
name_label.text = request.name
|
|
|
|
|
status_label.text = request.get_status_display()
|
|
|
|
|
type_label.text = request.get_type_display()
|
2025-09-05 19:07:21 +03:00
|
|
|
size_label.text = NetworkRequest.format_bytes(request.size)
|
2025-09-05 16:22:56 +03:00
|
|
|
time_label.text = request.get_time_display()
|
|
|
|
|
|
|
|
|
|
# Color code status
|
|
|
|
|
match request.status:
|
|
|
|
|
NetworkRequest.RequestStatus.SUCCESS:
|
|
|
|
|
status_label.add_theme_color_override("font_color", Color.GREEN)
|
|
|
|
|
NetworkRequest.RequestStatus.ERROR:
|
|
|
|
|
status_label.add_theme_color_override("font_color", Color.RED)
|
|
|
|
|
NetworkRequest.RequestStatus.PENDING:
|
|
|
|
|
status_label.add_theme_color_override("font_color", Color.YELLOW)
|
|
|
|
|
|
|
|
|
|
func _on_gui_input(event: InputEvent):
|
|
|
|
|
if event is InputEventMouseButton:
|
|
|
|
|
if event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
|
|
|
|
|
item_clicked.emit(request)
|
|
|
|
|
|
|
|
|
|
func set_selected(selected: bool):
|
|
|
|
|
if selected:
|
2025-09-05 19:07:21 +03:00
|
|
|
add_theme_stylebox_override("panel", selected_style)
|
2025-09-05 16:22:56 +03:00
|
|
|
else:
|
2025-09-05 19:07:21 +03:00
|
|
|
add_theme_stylebox_override("panel", normal_style)
|
2025-09-05 16:22:56 +03:00
|
|
|
|
|
|
|
|
func hide_columns(should_hide: bool):
|
|
|
|
|
status_label.visible = !should_hide
|
|
|
|
|
type_label.visible = !should_hide
|
|
|
|
|
size_label.visible = !should_hide
|
2025-09-05 19:07:21 +03:00
|
|
|
time_label.visible = !should_hide
|