Update documentation around EditorDock

This commit is contained in:
Logan Detrick
2025-12-11 15:58:52 -08:00
parent 094f10f0f3
commit f8f118f12d

View File

@@ -331,15 +331,13 @@ a new scene in the editor then edit it.
For an editor dock, the root node **must** be a :ref:`Control <class_Control>` For an editor dock, the root node **must** be a :ref:`Control <class_Control>`
or one of its child classes. For this tutorial, you can create a single button. or one of its child classes. For this tutorial, you can create a single button.
The name of the root node will also be the name that appears on the dock tab, Don't forget to add some text to your button.
so be sure to give it a short and descriptive name.
Also, don't forget to add some text to your button.
.. image:: img/making_plugins-my_custom_dock_scene.webp .. image:: img/making_plugins-my_custom_dock_scene.webp
Save this scene as ``my_dock.tscn``. Now, we need to grab the scene we created Save this scene as ``my_dock.tscn``. Now, we need to grab the scene we created
then add it as a dock in the editor. For this, you can rely on the function then add it as a dock in the editor. For this, you can rely on the function
:ref:`add_control_to_dock() <class_EditorPlugin_method_add_control_to_dock>` from the :ref:`add_dock() <class_EditorPlugin_method_add_dock>` from the
:ref:`EditorPlugin <class_EditorPlugin>` class. :ref:`EditorPlugin <class_EditorPlugin>` class.
You need to select a dock position and define the control to add You need to select a dock position and define the control to add
@@ -361,19 +359,29 @@ The script could look like this:
func _enter_tree(): func _enter_tree():
# Initialization of the plugin goes here. # Initialization of the plugin goes here.
# Load the dock scene and instantiate it. # Load the dock scene and instantiate it.
dock = preload("res://addons/my_custom_dock/my_dock.tscn").instantiate() var dock_scene = preload("res://addons/my_custom_dock/my_dock.tscn").instantiate()
# Create the dock and add the loaded scene to it.
dock = EditorDock.new()
dock.add_child(dock_scene)
dock.title = "My Dock"
# Add the loaded scene to the docks.
add_control_to_dock(DOCK_SLOT_LEFT_UL, dock)
# Note that LEFT_UL means the left of the editor, upper-left dock. # Note that LEFT_UL means the left of the editor, upper-left dock.
dock.default_slot = DOCK_SLOT_LEFT_UL
# Allow the dock to be on the left or right of the editor, and to be made floating.
dock.available_layouts = EditorDock.DOCK_LAYOUT_VERTICAL | EditorDock.DOCK_LAYOUT_FLOATING
add_dock(dock)
func _exit_tree(): func _exit_tree():
# Clean-up of the plugin goes here. # Clean-up of the plugin goes here.
# Remove the dock. # Remove the dock.
remove_control_from_docks(dock) remove_dock(dock)
# Erase the control from the memory. # Erase the control from the memory.
dock.free() dock.queue_free()
.. code-tab:: csharp .. code-tab:: csharp
@@ -383,21 +391,35 @@ The script could look like this:
[Tool] [Tool]
public partial class CustomDock : EditorPlugin public partial class CustomDock : EditorPlugin
{ {
private Control _dock; private EditorDock _dock;
public override void _EnterTree() public override void _EnterTree()
{ {
_dock = GD.Load<PackedScene>("res://addons/MyCustomDock/MyDock.tscn").Instantiate<Control>(); var _dock_scene = GD.Load<PackedScene>("res://addons/MyCustomDock/MyDock.tscn").Instantiate<Control>();
AddControlToDock(DockSlot.LeftUl, _dock); AddControlToDock(DockSlot.LeftUl, _dock);
// Create the dock and add the loaded scene to it.
_dock = new EditorDock();
_dock.AddChild(dock_scene);
_dock.Title = "My Dock";
// Note that LeftUl means the left of the editor, upper-left dock.
_dock.DefaultSlot = DockSlot.LeftUl;
// Allow the dock to be on the left or right of the editor, and to be made floating.
_dock.AvailableLayouts = DockLayout.Horizontal | DockLayout.Floating;
AddDock(_dock);
} }
public override void _ExitTree() public override void _ExitTree()
{ {
// Clean-up of the plugin goes here. // Clean-up of the plugin goes here.
// Remove the dock. // Remove the dock.
RemoveControlFromDocks(_dock); RemoveDock(_dock);
// Erase the control from the memory. // Erase the control from the memory.
_dock.Free(); _dock.QueueFree();
} }
} }
#endif #endif