Files
Kalulu/addons/godot-form-validator/control_validator.gd
T
2025-11-17 15:07:01 +01:00

63 lines
1.3 KiB
GDScript

@tool
extends Node
class_name ControlValidator
@export var validator: Validator:
set(value):
validator = value
_on_validator_added()
func _ready() -> void:
tree_entered.connect(_on_tree_entered)
tree_exiting.connect(_on_tree_exiting)
_configure_validator()
_on_validator_added()
func _configure_validator() -> void:
if validator != null:
return
var parent: Node = get_parent()
if not parent:
return
var found: Validator = Validation.find_validator(parent)
if found:
validator = found.duplicate(true)
else:
validator = Validator.new()
func _get_configuration_warnings() -> PackedStringArray:
if not validator:
return []
var list: PackedStringArray = PackedStringArray()
for rule: ValidatorRule in validator.rules:
if not rule.is_valid():
list.append(rule.get_invalid_message())
return list
func _on_tree_entered() -> void:
_configure_validator()
_on_validator_added()
func _on_tree_exiting() -> void:
_on_validator_removed()
func _on_validator_added() -> void:
var parent: Node = get_parent()
if not parent or not validator:
return
Validation.validator_added.emit(parent, validator)
update_configuration_warnings()
func _on_validator_removed() -> void:
var parent = get_parent()
if not parent:
return
Validation.validator_removed.emit(parent)