Add Recipemanager that loads recipes from YAML
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
@tool
|
||||
class_name YAMLEditorValidator extends Node
|
||||
|
||||
signal validation_completed(document)
|
||||
|
||||
var _thread: Thread
|
||||
var _is_validating: bool = false
|
||||
var _pending_validation: bool = false
|
||||
var _validation_queue: Array = []
|
||||
|
||||
var code_editor: YAMLCodeEditor
|
||||
var validation_timer: Timer
|
||||
var file_system: YAMLFileSystem
|
||||
var file_manager: YAMLEditorDocumentManager
|
||||
|
||||
func _ready() -> void:
|
||||
file_system = YAMLFileSystem.get_singleton()
|
||||
|
||||
# Create validation timer
|
||||
validation_timer = Timer.new()
|
||||
add_child(validation_timer)
|
||||
validation_timer.one_shot = true
|
||||
validation_timer.wait_time = 0.5 # 500ms delay
|
||||
validation_timer.timeout.connect(_on_validation_timer_timeout)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if _thread and _thread.is_started():
|
||||
_thread.wait_to_finish()
|
||||
|
||||
func setup(p_code_editor: YAMLCodeEditor, p_file_manager: YAMLEditorDocumentManager) -> void:
|
||||
code_editor = p_code_editor
|
||||
file_manager = p_file_manager
|
||||
|
||||
# Connect to code editor changes
|
||||
code_editor.validation_requested.connect(_on_validation_requested)
|
||||
|
||||
# Connect to document changes
|
||||
file_manager.document_changed.connect(_on_document_changed)
|
||||
file_manager.document_created.connect(_on_document_created)
|
||||
|
||||
func _on_validation_requested() -> void:
|
||||
# Reset and start the validation timer
|
||||
validation_timer.stop()
|
||||
validation_timer.start()
|
||||
|
||||
func _on_validation_timer_timeout() -> void:
|
||||
var document = file_manager.get_current_document()
|
||||
if document:
|
||||
validate_document(document)
|
||||
|
||||
func _on_document_changed(document: YAMLEditorDocument) -> void:
|
||||
# Show any existing validation results
|
||||
if document.validation_result:
|
||||
validation_completed.emit(document)
|
||||
|
||||
# Run validation if no results exist or document has errors
|
||||
if document.validation_result == null or document.has_error():
|
||||
validate_document(document)
|
||||
|
||||
func _on_document_created(document: YAMLEditorDocument) -> void:
|
||||
# Validate new document
|
||||
validate_document(document)
|
||||
|
||||
func validate_document(document: YAMLEditorDocument) -> void:
|
||||
if document == null:
|
||||
return
|
||||
|
||||
if _is_validating:
|
||||
# Add to validation queue
|
||||
if not _validation_queue.has(document):
|
||||
_validation_queue.append(document)
|
||||
return
|
||||
|
||||
_is_validating = true
|
||||
|
||||
if _thread and _thread.is_started():
|
||||
_thread.wait_to_finish()
|
||||
|
||||
_thread = Thread.new()
|
||||
_thread.start(_validation_thread_function.bind(document))
|
||||
|
||||
func _validation_thread_function(document: YAMLEditorDocument) -> void:
|
||||
# YAML validation is thread-safe
|
||||
var result = YAML.validate_syntax(document.content)
|
||||
|
||||
# Update document on main thread
|
||||
call_deferred("_finish_validation", document, result)
|
||||
|
||||
func _finish_validation(document: YAMLEditorDocument, result: YAMLResult) -> void:
|
||||
# Update document with validation result
|
||||
document.set_validation_result(result)
|
||||
|
||||
# Emit signal
|
||||
validation_completed.emit(document)
|
||||
|
||||
# Process any pending validations
|
||||
_is_validating = false
|
||||
|
||||
if not _validation_queue.is_empty():
|
||||
var next_document = _validation_queue.pop_front()
|
||||
validate_document(next_document)
|
||||
|
||||
func mark_error_in_editor(line: int, message: String) -> void:
|
||||
if is_instance_valid(code_editor):
|
||||
code_editor.mark_error_line(line, message)
|
||||
|
||||
func clear_errors_in_editor() -> void:
|
||||
if is_instance_valid(code_editor):
|
||||
code_editor.clear_error_indicators()
|
||||
Reference in New Issue
Block a user