MagicNStuff/source/addons/panku_console/modules/native_logger/module.gd
2025-02-25 22:07:11 +01:00

99 lines
3.3 KiB
GDScript

class_name PankuModuleNativeLogger extends PankuModule
var output_overlay:RichTextLabel
var native_logs_monitor:Node
var window:PankuLynxWindow
var logger_ui:Node
var output_overlay_display_mode:ScreenOverlayDisplayMode
var show_timestamp:bool
enum ScreenOverlayDisplayMode {
AlwaysShow,
ShowIfShellVisible,
NeverShow
}
func init_module():
# add godot log monitor
native_logs_monitor = preload("./godot_log_monitor.gd").new()
core.add_child(native_logs_monitor)
# add output overlay
output_overlay = preload("./log_overlay.tscn").instantiate()
output_overlay.clear()
core.add_child(output_overlay)
# add logger window
logger_ui = preload("./logger_view.tscn").instantiate()
logger_ui._module = self
logger_ui.console = core
window = core.windows_manager.create_window(logger_ui)
add_auto_save_hook(window)
window.queue_free_on_close = false
window.set_window_title_text("Native Logger")
native_logs_monitor.error_msg_received.connect(
func(msg:String):
logger_ui.add_log(msg, 3)
)
native_logs_monitor.warning_msg_received.connect(
func(msg:String):
logger_ui.add_log(msg, 2)
)
native_logs_monitor.info_msg_received.connect(
func(msg:String):
logger_ui.add_log(msg, 1)
)
logger_ui.content_updated.connect(
func(bbcode:String):
output_overlay.text = bbcode
)
core.interactive_shell_visibility_changed.connect(
func(v:bool):
if output_overlay_display_mode == ScreenOverlayDisplayMode.ShowIfShellVisible:
output_overlay.visible = v
)
# load data
load_window_data(window)
get_module_opt().screen_overlay = load_module_data("screen_overlay", ScreenOverlayDisplayMode.AlwaysShow)
get_module_opt().screen_overlay_alpha = load_module_data("screen_overlay_alpha", 0.3)
get_module_opt().screen_overlay_font_shadow = load_module_data("screen_overlay_font_shadow", false)
get_module_opt().screen_overlay_override_font_size = load_module_data("screen_overlay_override_font_size", 0)
get_module_opt().show_timestamp = load_module_data("show_timestamp", true)
logger_ui.load_data(load_module_data("logger_tags", ["[error]", "[warning]"]))
func quit_module():
super.quit_module()
# properties defined in opt.gd will be automatically saved as soon as the value is changed
# we only need to manually save properties outside opt.gd
save_window_data(window)
save_module_data("logger_tags", logger_ui.get_data())
func open_window():
window.show_window()
func toggle_overlay():
var next = {
ScreenOverlayDisplayMode.AlwaysShow: ScreenOverlayDisplayMode.NeverShow,
ScreenOverlayDisplayMode.ShowIfShellVisible: ScreenOverlayDisplayMode.NeverShow,
ScreenOverlayDisplayMode.NeverShow: ScreenOverlayDisplayMode.AlwaysShow
}
output_overlay_display_mode = next[output_overlay_display_mode]
set_overlay_display_mode(output_overlay_display_mode)
func set_overlay_display_mode(mode:ScreenOverlayDisplayMode):
output_overlay_display_mode = mode
if output_overlay_display_mode == ScreenOverlayDisplayMode.AlwaysShow:
output_overlay.visible = true
elif output_overlay_display_mode == ScreenOverlayDisplayMode.ShowIfShellVisible:
output_overlay.visible = core.get_shell_visibility()
elif output_overlay_display_mode == ScreenOverlayDisplayMode.NeverShow:
output_overlay.visible = false
func set_show_timestamp(v:bool):
show_timestamp = v
logger_ui.update_view()