2023-03-05 11:03:08 +00:00
|
|
|
extends VBoxContainer
|
2023-03-05 12:08:54 +00:00
|
|
|
class_name GroupMenu
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
@onready var collapse_button: Button = %CollapseButton
|
|
|
|
@onready var header_icon: TextureRect = %HeaderIcon
|
|
|
|
@onready var header_text_label: Label = %HeaderTextLabel
|
|
|
|
@onready var header_custom_control_container: HBoxContainer = %HeaderCustomControlContainer
|
|
|
|
@onready var child_container: VBoxContainer = %ChildContainer
|
|
|
|
@onready var add_install_button_container: CenterContainer = %AddInstallButtonContainer
|
|
|
|
@onready var add_install_button: Button = %AddInstallButton
|
2023-03-05 12:08:54 +00:00
|
|
|
@onready var description_label: Label = %DescriptionLabel
|
2023-03-06 13:33:46 +00:00
|
|
|
@onready var inner_separator: HSeparator = %InnerSeparator
|
2023-03-05 11:03:08 +00:00
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
@onready var edit_group_button: Button = %EditGroupButton
|
2023-03-05 11:03:08 +00:00
|
|
|
@onready var delete_group_button: Button = %DeleteGroupButton
|
|
|
|
|
|
|
|
@onready var header_container: HBoxContainer = %HeaderContainer
|
|
|
|
|
2023-03-06 13:33:46 +00:00
|
|
|
var group_metadata: GroupMetadata
|
|
|
|
|
2023-03-05 11:03:08 +00:00
|
|
|
signal add_install_button_pressed
|
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
signal edit_group_button_pressed
|
2023-03-05 11:03:08 +00:00
|
|
|
signal delete_button_pressed
|
2023-03-06 13:33:46 +00:00
|
|
|
signal header_text_changed(new_text: String, old_text: String)
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
collapse_button.pressed.connect(
|
|
|
|
func():
|
|
|
|
var b := collapse_button
|
|
|
|
set_children_visible(b.button_pressed)
|
|
|
|
)
|
|
|
|
|
|
|
|
add_install_button.pressed.connect(func(): add_install_button_pressed.emit())
|
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
# edit_group_button.pressed.connect(setup_rename)
|
|
|
|
edit_group_button.pressed.connect(func(): edit_group_button_pressed.emit())
|
2023-03-05 11:03:08 +00:00
|
|
|
delete_group_button.pressed.connect(func(): delete_button_pressed.emit())
|
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
header_text_label.gui_input.connect(_on_header_text_label_gui_input)
|
2023-03-05 11:03:08 +00:00
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
|
2023-03-06 08:03:01 +00:00
|
|
|
func add(item: InstallItem) -> int:
|
2023-03-05 12:44:53 +00:00
|
|
|
child_container.add_child(item)
|
2023-03-06 08:03:01 +00:00
|
|
|
return child_container.get_child_count()
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
func free_item(at_idx: int) -> void:
|
|
|
|
child_container.get_child(at_idx).queue_free()
|
|
|
|
|
|
|
|
|
|
|
|
func clear() -> void:
|
|
|
|
child_container.get_children().map(
|
|
|
|
func(child: Node):
|
|
|
|
child.queue_free()
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func set_text(text: String) -> void:
|
|
|
|
header_text_label.text = text
|
|
|
|
|
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
func set_description(text: String) -> void:
|
|
|
|
if text == "":
|
|
|
|
description_label.visible = false
|
|
|
|
return
|
|
|
|
|
|
|
|
description_label.visible = true
|
|
|
|
description_label.text = text
|
|
|
|
|
|
|
|
|
2023-03-05 11:03:08 +00:00
|
|
|
func set_icon(icon: Texture2D) -> void:
|
|
|
|
header_icon.texture = icon
|
|
|
|
|
|
|
|
|
|
|
|
func set_icon_visible(p_visible: bool) -> void:
|
|
|
|
header_icon.visible = p_visible
|
|
|
|
|
|
|
|
|
|
|
|
func set_children_visible(p_visible: bool) -> void:
|
|
|
|
collapse_button.text = "v" if p_visible else ">"
|
|
|
|
child_container.visible = p_visible
|
|
|
|
add_install_button_container.visible = p_visible
|
2023-03-06 13:33:46 +00:00
|
|
|
inner_separator.visible = p_visible
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
func add_custom(control: Control) -> void:
|
|
|
|
header_custom_control_container.add_child(control)
|
|
|
|
|
|
|
|
|
|
|
|
func setup_rename() -> void:
|
|
|
|
header_text_label.visible = false
|
|
|
|
var l := RenameLineEdit.new(header_text_label.text)
|
|
|
|
l.size_flags_horizontal = header_text_label.size_flags_horizontal
|
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
# edit_group_button.disabled = true
|
2023-03-05 12:44:53 +00:00
|
|
|
var label_index := header_text_label.get_index()
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
header_container.add_child(l)
|
2023-03-05 12:44:53 +00:00
|
|
|
header_container.move_child(l, label_index)
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
var reenable = func():
|
|
|
|
header_text_label.visible = true
|
2023-03-05 12:08:54 +00:00
|
|
|
# edit_group_button.disabled = false
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
l.canceled.connect(reenable)
|
|
|
|
|
|
|
|
l.text_submitted.connect(
|
|
|
|
func(new_text: String):
|
2023-03-06 13:33:46 +00:00
|
|
|
var old_text: = header_text_label.text
|
2023-03-05 11:03:08 +00:00
|
|
|
header_text_label.text = new_text
|
2023-03-06 13:33:46 +00:00
|
|
|
header_text_changed.emit(new_text, old_text)
|
2023-03-05 11:03:08 +00:00
|
|
|
|
|
|
|
reenable.call()
|
|
|
|
)
|
|
|
|
|
|
|
|
l.grab_focus()
|
2023-03-05 12:08:54 +00:00
|
|
|
|
|
|
|
|
2023-03-06 13:33:46 +00:00
|
|
|
func setup_from_metadata(header_text: String, p_group_metadata: GroupMetadata) -> void:
|
|
|
|
group_metadata = p_group_metadata
|
|
|
|
set_text(header_text)
|
|
|
|
set_description(group_metadata.description)
|
|
|
|
# TODO: add installs
|
|
|
|
# TODO: add icon
|
|
|
|
|
|
|
|
|
2023-03-05 12:08:54 +00:00
|
|
|
func _on_header_text_label_gui_input(event: InputEvent) -> void:
|
|
|
|
if event is InputEventMouseButton && \
|
|
|
|
(event as InputEventMouseButton).double_click && \
|
|
|
|
(event as InputEventMouseButton).button_index == MOUSE_BUTTON_LEFT:
|
|
|
|
get_viewport().set_input_as_handled()
|
|
|
|
setup_rename()
|
|
|
|
|