Created LineEditWithButtons
Created LineEditWithButtons class, to have Icons in the LineEdit that respond as buttons.
This commit is contained in:
parent
785a3922a7
commit
e9859e3842
2 changed files with 79 additions and 0 deletions
78
lib/UI/line_edit_with_buttons.gd
Normal file
78
lib/UI/line_edit_with_buttons.gd
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
@tool
|
||||
extends LineEdit
|
||||
class_name LineEditWithButtons
|
||||
|
||||
signal left_button_pressed()
|
||||
signal left_button_toggled()
|
||||
signal right_button_pressed()
|
||||
signal right_button_toggled()
|
||||
|
||||
@export_subgroup("Left Icon")
|
||||
@export var left: Texture2D:
|
||||
set(value):
|
||||
left = value
|
||||
if not is_node_ready(): return
|
||||
|
||||
if _left_btn and value == null:
|
||||
_left_btn.queue_free()
|
||||
return
|
||||
if not _left_btn and value:
|
||||
_left_btn = _create_button_icon(value)
|
||||
_left_btn.pressed.connect(left_button_pressed.emit)
|
||||
_left_btn.toggled.connect(left_button_toggled.emit)
|
||||
return
|
||||
_left_btn.icon = value
|
||||
@export var left_is_toggle: bool = false
|
||||
@export_subgroup("Right Icon")
|
||||
@export var right: Texture2D:
|
||||
set(value):
|
||||
right = value
|
||||
if not is_node_ready(): return
|
||||
if _right_btn and value == null:
|
||||
_right_btn.queue_free()
|
||||
return
|
||||
if not _right_btn and value:
|
||||
_right_btn = _create_button_icon(value)
|
||||
_right_btn.pressed.connect(right_button_pressed.emit)
|
||||
_right_btn.toggled.connect(right_button_toggled.emit)
|
||||
return
|
||||
_left_btn.icon = value
|
||||
@export var right_is_toggle: bool = false
|
||||
|
||||
var _left_btn: Button
|
||||
var _right_btn: Button
|
||||
var _container: HBoxContainer
|
||||
var _spacer: Control
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
_container = HBoxContainer.new()
|
||||
_spacer = Control.new()
|
||||
_spacer.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
_container.add_child(_spacer)
|
||||
add_child(_container)
|
||||
if left != null:
|
||||
_left_btn = _create_button_icon(left)
|
||||
_left_btn.pressed.connect(left_button_pressed.emit)
|
||||
_left_btn.toggled.connect(left_button_toggled.emit)
|
||||
if right != null:
|
||||
_right_btn = _create_button_icon(right, -1)
|
||||
_right_btn.pressed.connect(right_button_pressed.emit)
|
||||
_right_btn.toggled.connect(right_button_toggled.emit)
|
||||
|
||||
item_rect_changed.connect(_handle_resize)
|
||||
|
||||
func _create_button_icon(icon: Texture2D, pos: int = 0) -> Button:
|
||||
var btn = Button.new()
|
||||
btn.icon = left
|
||||
btn.flat = true
|
||||
btn.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
btn.vertical_icon_alignment = VERTICAL_ALIGNMENT_CENTER
|
||||
btn.expand_icon = true
|
||||
btn.toggle_mode = left_is_toggle
|
||||
_container.add_child(btn)
|
||||
_container.move_child(btn, pos)
|
||||
return btn
|
||||
|
||||
func _handle_resize() -> void:
|
||||
_container.size = size
|
||||
1
lib/UI/line_edit_with_buttons.gd.uid
Normal file
1
lib/UI/line_edit_with_buttons.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://ch7qf8iy31pfy
|
||||
Loading…
Add table
Add a link
Reference in a new issue