CORE/src/logui.gd
JeremyStarTM acc305d3db
Update module logging and update many log calls
This commit firstly removes the 'logger' variable in CoreBaseModule, secondly renames 'loggeri' to 'logger' in CoreBaseModule, effectively replacing it, and thirdly it forces using 'stringify_variables' onto all log calls.
2024-04-25 20:20:34 +02:00

100 lines
3.6 KiB
GDScript

# CORE FRAMEWORK SOURCE FILE
# Copyright (c) 2024 The StarOpenSource Project & Contributors
# Licensed under the GNU Affero General Public License v3
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
## Displays the log graphically.
##
## Displays the log output graphically in the background of the application.
extends CoreBaseModule
# Objects
var background: ColorRect
var logrtl: RichTextLabel
# Resources
var font_normal: Font
var font_bold: Font
# +++ module +++
func _pull_config() -> void:
background.visible = !core.config.headless and core.config.logui_enabled
background.color = core.config.logui_background_color
logrtl.add_theme_font_size_override("normal_font_size", core.config.logui_font_size)
logrtl.add_theme_font_size_override("bold_font_size", core.config.logui_font_size)
func _cleanup() -> void:
background.remove_child(logrtl)
core.sms.remove_child(background)
logrtl.queue_free()
background.queue_free()
# +++ initialization +++
func _initialize() -> void:
# Load fonts into memory
font_normal = load(core.basepath + "dist/FiraCode/Regular.ttf")
font_bold = load(core.basepath + "dist/FiraCode/Bold.ttf")
# Create LogUI
background = ColorRect.new()
background.name = "LOGUI"
# Create LogRTL
logrtl = RichTextLabel.new()
logrtl.name = "LogRTL"
logrtl.bbcode_enabled = true
## Interaction
logrtl.selection_enabled = false
logrtl.deselect_on_focus_loss_enabled = true
logrtl.drag_and_drop_selection_enabled = false
logrtl.mouse_filter = Control.MOUSE_FILTER_IGNORE
## Scrolling
logrtl.scroll_active = true
logrtl.scroll_following = true
## Disable localization
logrtl.auto_translate = false
logrtl.localize_numeral_system = false
## Override fonts
logrtl.add_theme_font_override("normal_font", font_normal)
logrtl.add_theme_font_override("bold_font", font_bold)
logrtl.add_theme_font_size_override("normal_font_size", 14)
logrtl.add_theme_font_size_override("bold_font_size", 14)
# Mark as initialized
initialized = true
func _ready() -> void:
# Add to SceneTree
core.sms.add_child(background)
core.sms.move_child(background, 0)
background.add_child(logrtl)
# Hide VScrollBar
var vsbar: VScrollBar = logrtl.get_child(0, true)
vsbar.set_deferred("size", Vector2i(1, 1))
vsbar.mouse_filter = Control.MOUSE_FILTER_IGNORE
vsbar.add_theme_stylebox_override("scroll", StyleBoxEmpty.new())
vsbar.add_theme_stylebox_override("scroll_focus", StyleBoxEmpty.new())
vsbar.add_theme_stylebox_override("grabber", StyleBoxEmpty.new())
vsbar.add_theme_stylebox_override("grabber_highlight", StyleBoxEmpty.new())
vsbar.add_theme_stylebox_override("grabber_pressed", StyleBoxEmpty.new())
# Connect log_event
core.logger.connect("log_event", func(allowed: bool, _level: CoreTypes.LoggerLevel, _origin: String, _message: String, format: String) -> void: if allowed: logrtl.text = logrtl.text + format + "\n")
# +++ process +++
func _process(_delta: float) -> void:
if !core.config.headless:
var window_size: Vector2i = DisplayServer.window_get_size()
background.size = window_size
logrtl.size = window_size