1
0
forked from joey/godottest
Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

102 lines
2.5 KiB
GDScript

@tool
class_name ToggleButton
extends BaseButton
signal value_changed(value)
var _theme := load("res://addons/net.yarvis.pixel_pen/resources/default_theme.tres")
enum ToggleButtonMode{ TWO, THREE}
@export var label_left : String:
set(v):
if label_left != v:
label_left = v
left_button.text = label_left
@export var label_mid : String:
set(v):
if label_mid != v:
label_mid = v
mid_button.text = label_mid
@export var label_right : String:
set(v):
if label_right != v:
label_right = v
right_button.text = label_right
@export var mode : ToggleButtonMode:
set(v):
if mode != v:
mode = v
_build()
@export var value : int:
set(v):
if v != value:
value = v
_build()
var left_button := Button.new()
var mid_button := Button.new()
var right_button := Button.new()
func _init():
left_button.toggled.connect(func(toggle_on : bool):
if toggle_on:
value_changed.emit(0)
)
mid_button.toggled.connect(func(toggle_on : bool):
if toggle_on:
value_changed.emit(1)
)
right_button.toggled.connect(func(toggle_on : bool):
if toggle_on:
value_changed.emit(1 if mode == ToggleButtonMode.TWO else 2)
)
var grub := ButtonGroup.new()
left_button.button_group = grub
right_button.button_group = grub
mid_button.button_group = grub
_build()
add_child(mid_button)
add_child(left_button)
add_child(right_button)
func _build():
left_button.theme_type_variation = "ToggleLeft"
left_button.text = label_left
left_button.toggle_mode = true
left_button.set_pressed_no_signal(value == 0)
left_button.anchor_left= 0.0
left_button.anchor_top = 0.0
left_button.anchor_bottom = 1.0
mid_button.visible = mode == ToggleButtonMode.THREE
right_button.theme_type_variation = "ToggleRight"
right_button.text = label_right
right_button.toggle_mode = true
right_button.set_pressed_no_signal((mode == ToggleButtonMode.TWO and value == 1) or (mode == ToggleButtonMode.THREE and value == 2))
right_button.anchor_top = 0.0
right_button.anchor_right = 1.0
right_button.anchor_bottom = 1.0
if mode == ToggleButtonMode.TWO:
left_button.anchor_right = 0.5
right_button.anchor_left = 0.5
else:
left_button.anchor_right = 0.33
right_button.anchor_left = 0.66
mid_button.theme_type_variation = "ToggleMid"
mid_button.text = label_mid
mid_button.toggle_mode = true
mid_button.set_pressed_no_signal(value == 1)
mid_button.anchor_left = 0.33
mid_button.anchor_top = 0.0
mid_button.anchor_right = 0.66
mid_button.anchor_bottom = 1.0