102 lines
2.5 KiB
GDScript
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
|