@tool # @singleton IconsFonts extends EditorPlugin const plugin_dir := "res://addons/icons-fonts/" const icons_db := plugin_dir + "icons_fonts/IconsFonts.gd" const inspector_plugin_path := plugin_dir + "inspector/font_icon_inspector.gd" const sub_dir := "icon_finder/" const icon_finder_dir := plugin_dir + sub_dir const icon_finder_window_scene := icon_finder_dir + "IconFinderWindow.tscn" const icon_finder_scene := icon_finder_dir + "IconFinder.tscn" var command_palette := get_editor_interface().get_command_palette() var editor_interface := get_editor_interface().get_base_control() var icon_finder_window: Window var icon_finder: Control var popup_size := Vector2i(775, 400) var inspector_plugin : EditorInspectorPlugin var commands := [ [ "Icon Finder Window", sub_dir + "icon_finder_window", show_icon_finder_window ], [ "Icon Finder Dock", sub_dir + "icon_finder_dock", add_to_dock ], # todo uncomment when docs are ready! # [ # "IconsFonts Help", # sub_dir + "icon_help", # help # ], ] var is_docked: bool var icon_finder_loaded: PackedScene var icon_finder_window_loaded: PackedScene func _enter_tree(): add_autoload_singleton("IconsFonts", icons_db) # await IconsFonts.ready icon_finder_loaded = load(icon_finder_scene) icon_finder_window_loaded = load(icon_finder_window_scene) is_docked = ProjectSettings.get_setting( "application/addons/icon_finder/is_docked", true) if is_docked: await add_to_dock() for command: Array in commands: add_tool_menu_item(command[0], command[2]) command_palette.add_command(command[0], command[1], command[2]) inspector_plugin = preload(inspector_plugin_path).new() add_inspector_plugin(inspector_plugin) func help(): # todo update when docs are ready! # OS.shell_open("https://rakugoteam.github.io/material-icons-docs/") pass func add_to_dock(): if icon_finder_window: editor_interface.remove_child.call_deferred(icon_finder_window) await get_tree().create_timer(0.5).timeout icon_finder = icon_finder_loaded.instantiate() add_control_to_bottom_panel(icon_finder, "Icons Finder") if !icon_finder.is_node_ready(): await ready await icon_finder.setup() func show_icon_finder_window(): if icon_finder: remove_control_from_bottom_panel(icon_finder) if !icon_finder_window: icon_finder_window = icon_finder_window_loaded.instantiate() editor_interface.add_child.call_deferred(icon_finder_window) if !icon_finder_window.is_node_ready(): await ready icon_finder_window.theme = editor_interface.theme icon_finder_window.popup_centered(popup_size) func _exit_tree(): if inspector_plugin: remove_inspector_plugin(inspector_plugin) for command: Array in commands: remove_tool_menu_item(command[0]) command_palette.remove_command(command[0]) remove_autoload_singleton("IconsFonts") if icon_finder: remove_control_from_bottom_panel(icon_finder) icon_finder.queue_free() if icon_finder_window: editor_interface.remove_child.call_deferred(icon_finder_window) icon_finder_window.queue_free()