68 lines
1.8 KiB
GDScript3
68 lines
1.8 KiB
GDScript3
|
@tool
|
||
|
@icon("res://addons/icons-fonts/nodes/FontIconButton.svg")
|
||
|
|
||
|
# todo add description and docs links when ready
|
||
|
class_name FontIconCheckButton
|
||
|
extends FontIconButton
|
||
|
|
||
|
@export var on_icon_settings := FontIconSettings.new():
|
||
|
set(value):
|
||
|
on_icon_settings = value
|
||
|
if !is_node_ready(): await ready
|
||
|
_toggle_icon_on.icon_settings = value
|
||
|
|
||
|
@export var off_icon_settings := FontIconSettings.new():
|
||
|
set(value):
|
||
|
off_icon_settings = value
|
||
|
if !is_node_ready(): await ready
|
||
|
_toggle_icon_off.icon_settings = value
|
||
|
|
||
|
var _toggle_icon_on: FontIcon
|
||
|
var _toggle_icon_off: FontIcon
|
||
|
var _toggle_icon_box: BoxContainer
|
||
|
|
||
|
func _ready():
|
||
|
toggle_mode = true
|
||
|
if "Toggle" not in layout_order:
|
||
|
layout_order = "Label-Icon-Toggle"
|
||
|
|
||
|
super._ready()
|
||
|
_toggle_icon_box = BoxContainer.new()
|
||
|
|
||
|
_toggle_icon_on = _add_icon(on_icon_settings)
|
||
|
_toggle_icon_on.visible = button_pressed
|
||
|
_toggle_icon_box.add_child(_toggle_icon_on)
|
||
|
|
||
|
_toggle_icon_off = _add_icon(off_icon_settings)
|
||
|
_toggle_icon_off.visible = !button_pressed
|
||
|
_toggle_icon_box.add_child(_toggle_icon_off)
|
||
|
|
||
|
func _on_on_icon_changed():
|
||
|
update_icon(on_icon_settings, _toggle_icon_on)
|
||
|
|
||
|
func _on_off_icon_changed():
|
||
|
update_icon(off_icon_settings, _toggle_icon_on)
|
||
|
|
||
|
func _togglef(main_button: ButtonContainer, value: bool):
|
||
|
if disabled: return
|
||
|
if main_button == self: return
|
||
|
_toggle_icon_on.visible = value
|
||
|
_toggle_icon_off.visible = !value
|
||
|
super._togglef(main_button, value)
|
||
|
|
||
|
func _get_lay_dict() -> Dictionary:
|
||
|
return {
|
||
|
"Label": _label,
|
||
|
"Icon": _font_icon,
|
||
|
"Toggle": _toggle_icon_box
|
||
|
}
|
||
|
|
||
|
func _validate_property(property : Dictionary) -> void:
|
||
|
if property.name == &"layout_order":
|
||
|
property.hint_string = ",".join([
|
||
|
"Label-Icon-Toggle", "Label-Toggle-Icon",
|
||
|
"Toggle-Label-Icon", "Toggle-Icon-Label",
|
||
|
"Icon-Label-Toggle", "Icon-Toggle-Label",
|
||
|
"Label-Toggle", "Toggle-Label", "Toggle"
|
||
|
])
|