initial commit
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user