initial commit

This commit is contained in:
2026-07-04 18:22:23 -06:00
commit 55522fc6fc
272 changed files with 12391 additions and 0 deletions
@@ -0,0 +1,123 @@
class_name RestoreButton extends CanvasLayer
## Floating restore button component for minimized LoggieConsole
##
## Self-contained overlay button that appears when the console is minimized.
## Handles its own positioning, styling, and lifecycle management with proper
## cleanup when the console is restored. Designed to be added to the root viewport
## for maximum visibility across all scenes.
const LoggieConsoleConstants = preload("res://addons/loggie-console/scripts/loggie_console_constants.gd")
# Alignment constants
enum Alignment {
TOP_LEFT = 0,
TOP_RIGHT = 1,
BOTTOM_LEFT = 2,
BOTTOM_RIGHT = 3
}
# Signals
signal restore_requested() ## Emitted when user clicks the restore button
@export var restore_button: Button
## Initializes the restore button component and sets up styling
##
## Configures the canvas layer for maximum rendering priority, sets up the
## container to fill the viewport, and applies professional styling to the
## restore button. All UI components must be properly assigned via @export.
func _ready() -> void:
Loggie.msg("RestoreButton _ready() called").domain(LoggieConsoleConstants.DOMAIN).debug()
# Connect button signal
restore_button.pressed.connect(_on_restore_button_pressed)
Loggie.msg("RestoreButton initialization complete").domain(LoggieConsoleConstants.DOMAIN).debug()
## Shows the restore button by adding it to the provided scene tree root
##
## This method expects to be called from a parent that has access to the scene tree.
## The parent should pass the root viewport so this component can add itself properly.
##
## @param root_viewport: The root viewport where the button should be added
func show_restore_button(root_viewport: Window = null) -> void:
Loggie.msg("RestoreButton show_restore_button() method called").domain(LoggieConsoleConstants.DOMAIN).debug()
if not root_viewport:
Loggie.msg("No root viewport available for restore button").domain(LoggieConsoleConstants.DOMAIN).error()
return
root_viewport.add_child(self)
Loggie.msg("Restore button added to root viewport: %s" % root_viewport.name).domain(LoggieConsoleConstants.DOMAIN).debug()
await get_tree().process_frame
# Ensure visibility
visible = true
Loggie.msg("Restore button visibility set to true").domain(LoggieConsoleConstants.DOMAIN).debug()
# Force positioning update and debug info
await get_tree().process_frame
## Hides and removes the restore button from the scene tree
##
## Safely removes the button from its parent and hides it. Handles cleanup
## and ensures proper resource management when the console is restored.
func hide_restore_button() -> void:
Loggie.msg("Hiding restore button").domain(LoggieConsoleConstants.DOMAIN).debug()
visible = false
# Remove from parent if attached
if get_parent():
get_parent().remove_child(self)
Loggie.msg("Restore button removed from parent").domain(LoggieConsoleConstants.DOMAIN).debug()
## Sets the alignment position of the restore button
##
## Updates the button's position flags to align it to the specified corner of the screen.
## @param alignment: The alignment enum value (TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT)
func set_alignment(alignment: Alignment) -> void:
if not restore_button:
Loggie.msg("RestoreButton not found, cannot set alignment").domain(LoggieConsoleConstants.DOMAIN).warn()
return
match alignment:
Alignment.TOP_LEFT:
restore_button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN # 0 = left align
restore_button.size_flags_vertical = Control.SIZE_SHRINK_BEGIN # 0 = top align
Alignment.TOP_RIGHT:
restore_button.size_flags_horizontal = Control.SIZE_SHRINK_END # 8 = right align
restore_button.size_flags_vertical = Control.SIZE_SHRINK_BEGIN # 0 = top align
Alignment.BOTTOM_LEFT:
restore_button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN # 0 = left align
restore_button.size_flags_vertical = Control.SIZE_SHRINK_END # 8 = bottom align
Alignment.BOTTOM_RIGHT:
restore_button.size_flags_horizontal = Control.SIZE_SHRINK_END # 8 = right align
restore_button.size_flags_vertical = Control.SIZE_SHRINK_END # 8 = bottom align
Loggie.msg("Restore button alignment set to: %s" % _get_alignment_name(alignment)).domain(LoggieConsoleConstants.DOMAIN).debug()
## Gets a human-readable name for the alignment enum
##
## @param alignment: The alignment enum value
## @return: String name of the alignment
func _get_alignment_name(alignment: Alignment) -> String:
match alignment:
Alignment.TOP_LEFT:
return "Top Left"
Alignment.TOP_RIGHT:
return "Top Right"
Alignment.BOTTOM_LEFT:
return "Bottom Left"
Alignment.BOTTOM_RIGHT:
return "Bottom Right"
_:
return "Unknown"
## Handles restore button click events
##
## Emits the restore_requested signal when the button is pressed, allowing
## the parent console to handle the actual restore logic while keeping
## this component focused solely on UI concerns.
func _on_restore_button_pressed() -> void:
Loggie.msg("Restore button pressed").domain(LoggieConsoleConstants.DOMAIN).debug()
restore_requested.emit()