Joey Eamigh 9989fab018
addons?
2025-10-10 14:07:23 -04:00

111 lines
3.4 KiB
GDScript

@tool
extends EditorPlugin
# Padding from the bottom when popped out
var padding: int = 20
# Padding from the bottom when not popped out
var bottompadding: int = 60
# The file system
var FileDock: Object
# Toggle for when the file system is moved to bottom
var filesBottom: bool = false
var newSize: Vector2
var initialLoad: bool = false
var AssetDrawerShortcut: InputEventKey = InputEventKey.new()
var showing: bool = false
func _enter_tree() -> void:
# Add tool button to move shelf to editor bottom
add_tool_menu_item("Files to Bottom", Callable(self, "FilesToBottom"))
# Get our file system
FileDock = self.get_editor_interface().get_file_system_dock()
await get_tree().create_timer(0.1).timeout
FilesToBottom()
# Prevent file tree from being shrunk on load
await get_tree().create_timer(0.1).timeout
var file_split_container := FileDock.get_child(3) as SplitContainer
file_split_container .split_offset = 175
# Get shortcut
AssetDrawerShortcut = preload("res://addons/Asset_Drawer/AssetDrawerShortcut.tres")
#region show hide filesystem
func _input(event: InputEvent) -> void:
if (AssetDrawerShortcut.is_match(event) &&
event.is_pressed() &&
!event.is_echo()):
if filesBottom == true:
match showing:
false:
make_bottom_panel_item_visible(FileDock)
showing = true
true:
print("hide")
hide_bottom_panel()
showing = false
#endregion
func _exit_tree() -> void:
remove_tool_menu_item("Files to Bottom")
FilesToBottom()
func _process(delta: float) -> void:
newSize = FileDock.get_window().size
# Keeps the file system from being unusable in size
if FileDock.get_window().name == "root" && filesBottom == false:
FileDock.get_child(3).get_child(0).size.y = newSize.y - padding
FileDock.get_child(3).get_child(1).size.y = newSize.y - padding
return
# Adjust the size of the file system based on how far up
# the drawer has been pulled
if FileDock.get_window().name == "root" && filesBottom == true:
newSize = FileDock.get_parent().size
var editor = get_editor_interface()
var editorsettings = editor.get_editor_settings()
var fontsize: int = editorsettings.get_setting("interface/editor/main_font_size")
var editorscale = EditorInterface.get_editor_scale()
FileDock.get_child(3).get_child(0).size.y = newSize.y - (fontsize * 2) - (bottompadding * EditorInterface.get_editor_scale())
FileDock.get_child(3).get_child(1).size.y = newSize.y - (fontsize * 2) - (bottompadding * EditorInterface.get_editor_scale())
return
# Keeps our systems sized when popped out
if (FileDock.get_window().name != "root" && filesBottom == false):
FileDock.get_window().min_size.y = 50
FileDock.get_child(3).get_child(0).size.y = newSize.y - padding
FileDock.get_child(3).get_child(1).size.y = newSize.y - padding
# Centers window on first pop
if initialLoad == false:
initialLoad = true
var screenSize: Vector2 = DisplayServer.screen_get_size()
FileDock.get_window().position = screenSize/2
return
# Moves the files between the bottom panel and the original dock
func FilesToBottom() -> void:
if filesBottom == true:
remove_control_from_bottom_panel(FileDock)
add_control_to_dock(EditorPlugin.DOCK_SLOT_LEFT_BR, FileDock)
filesBottom = false
return
FileDock = self.get_editor_interface().get_file_system_dock()
remove_control_from_docks(FileDock)
add_control_to_bottom_panel(FileDock, "File System")
filesBottom = true