diff --git a/editor/icons/TileMapDock.svg b/editor/icons/TileMapDock.svg
new file mode 100644
index 00000000000..d1fdc3ff354
--- /dev/null
+++ b/editor/icons/TileMapDock.svg
@@ -0,0 +1 @@
+
diff --git a/editor/scene/2d/tiles/tile_map_layer_editor.cpp b/editor/scene/2d/tiles/tile_map_layer_editor.cpp
index 8d33d4986e0..5f606c3dc16 100644
--- a/editor/scene/2d/tiles/tile_map_layer_editor.cpp
+++ b/editor/scene/2d/tiles/tile_map_layer_editor.cpp
@@ -37,6 +37,7 @@
#include "editor/inspector/editor_resource_preview.h"
#include "editor/inspector/multi_node_edit.h"
#include "editor/scene/canvas_item_editor_plugin.h"
+#include "editor/settings/editor_command_palette.h"
#include "editor/settings/editor_settings.h"
#include "editor/themes/editor_scale.h"
#include "scene/2d/tile_map.h"
@@ -4397,6 +4398,16 @@ void TileMapLayerEditor::set_show_layer_selector(bool p_show_layer_selector) {
TileMapLayerEditor::TileMapLayerEditor() {
set_process_internal(true);
+ set_name(TTRC("TileMap"));
+ set_icon_name("TileMapDock");
+ set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_map_bottom_panel", TTRC("Open TileMap Dock")));
+ set_default_slot(DockConstants::DOCK_SLOT_BOTTOM);
+ set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING);
+ set_global(false);
+ set_transient(true);
+
+ VBoxContainer *main_box_container = memnew(VBoxContainer);
+ add_child(main_box_container);
// Shortcuts.
ED_SHORTCUT("tiles_editor/select_next_layer", TTRC("Select Next Tile Map Layer"), Key::PAGEDOWN);
@@ -4422,7 +4433,7 @@ TileMapLayerEditor::TileMapLayerEditor() {
// --- TileMap toolbar ---
tile_map_toolbar = memnew(HFlowContainer);
tile_map_toolbar->set_h_size_flags(SIZE_EXPAND_FILL);
- add_child(tile_map_toolbar);
+ main_box_container->add_child(tile_map_toolbar);
// Tabs.
tile_map_toolbar->add_child(tabs_bar);
@@ -4509,10 +4520,10 @@ TileMapLayerEditor::TileMapLayerEditor() {
cant_edit_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER);
cant_edit_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER);
cant_edit_label->hide();
- add_child(cant_edit_label);
+ main_box_container->add_child(cant_edit_label);
for (unsigned int tab_index = 0; tab_index < tabs_data.size(); tab_index++) {
- add_child(tabs_data[tab_index].panel);
+ main_box_container->add_child(tabs_data[tab_index].panel);
tabs_data[tab_index].panel->set_v_size_flags(SIZE_EXPAND_FILL);
tabs_data[tab_index].panel->set_visible(tab_index == 0);
tabs_data[tab_index].panel->set_h_size_flags(SIZE_EXPAND_FILL);
diff --git a/editor/scene/2d/tiles/tile_map_layer_editor.h b/editor/scene/2d/tiles/tile_map_layer_editor.h
index fb7aac64bca..092f0eb9e83 100644
--- a/editor/scene/2d/tiles/tile_map_layer_editor.h
+++ b/editor/scene/2d/tiles/tile_map_layer_editor.h
@@ -33,6 +33,7 @@
#include "tile_atlas_view.h"
#include "core/os/thread.h"
+#include "editor/docks/editor_dock.h"
#include "scene/gui/box_container.h"
#include "scene/gui/check_box.h"
#include "scene/gui/flow_container.h"
@@ -337,8 +338,8 @@ public:
TileMapLayerEditorTerrainsPlugin();
};
-class TileMapLayerEditor : public VBoxContainer {
- GDCLASS(TileMapLayerEditor, VBoxContainer);
+class TileMapLayerEditor : public EditorDock {
+ GDCLASS(TileMapLayerEditor, EditorDock);
private:
bool tile_map_layer_changed_needs_update = false;
diff --git a/editor/scene/2d/tiles/tile_set_editor.cpp b/editor/scene/2d/tiles/tile_set_editor.cpp
index 165fab26d79..0b2cc649929 100644
--- a/editor/scene/2d/tiles/tile_set_editor.cpp
+++ b/editor/scene/2d/tiles/tile_set_editor.cpp
@@ -38,6 +38,7 @@
#include "editor/file_system/editor_file_system.h"
#include "editor/gui/editor_file_dialog.h"
#include "editor/inspector/editor_inspector.h"
+#include "editor/settings/editor_command_palette.h"
#include "editor/settings/editor_settings.h"
#include "editor/themes/editor_scale.h"
@@ -807,6 +808,13 @@ void TileSetEditor::register_split(SplitContainer *p_split) {
TileSetEditor::TileSetEditor() {
singleton = this;
+ set_name(TTRC("TileSet"));
+ set_icon_name("TileSet");
+ set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_set_bottom_panel", TTRC("Open TileSet Dock")));
+ set_default_slot(DockConstants::DOCK_SLOT_BOTTOM);
+ set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING);
+ set_global(false);
+ set_transient(true);
set_process_internal(true);
diff --git a/editor/scene/2d/tiles/tile_set_editor.h b/editor/scene/2d/tiles/tile_set_editor.h
index ec5284f6c32..94fe1a2e85d 100644
--- a/editor/scene/2d/tiles/tile_set_editor.h
+++ b/editor/scene/2d/tiles/tile_set_editor.h
@@ -31,6 +31,7 @@
#pragma once
#include "atlas_merging_dialog.h"
+#include "editor/docks/editor_dock.h"
#include "scene/gui/tab_bar.h"
#include "scene/resources/2d/tile_set.h"
#include "tile_proxies_manager_dialog.h"
@@ -45,8 +46,8 @@ class EditorFileDialog;
class EditorInspectorPlugin;
class TileSetSourceItemList;
-class TileSetEditor : public MarginContainer {
- GDCLASS(TileSetEditor, MarginContainer);
+class TileSetEditor : public EditorDock {
+ GDCLASS(TileSetEditor, EditorDock);
static TileSetEditor *singleton;
diff --git a/editor/scene/2d/tiles/tiles_editor_plugin.cpp b/editor/scene/2d/tiles/tiles_editor_plugin.cpp
index ffa61889ee4..d7ea5a19d80 100644
--- a/editor/scene/2d/tiles/tiles_editor_plugin.cpp
+++ b/editor/scene/2d/tiles/tiles_editor_plugin.cpp
@@ -280,7 +280,6 @@ bool TilesEditorUtils::SourceNameComparator::operator()(const int &p_a, const in
}
void TilesEditorUtils::display_tile_set_editor_panel() {
- tile_map_plugin_singleton->hide_editor();
tile_set_plugin_singleton->make_visible(true);
}
@@ -481,13 +480,9 @@ bool TileMapEditorPlugin::handles(Object *p_object) const {
void TileMapEditorPlugin::make_visible(bool p_visible) {
if (p_visible) {
- button->show();
- EditorNode::get_bottom_panel()->make_item_visible(editor);
+ editor->open();
} else {
- button->hide();
- if (editor->is_visible_in_tree()) {
- EditorNode::get_bottom_panel()->hide_bottom_panel();
- }
+ editor->close();
}
}
@@ -499,12 +494,6 @@ void TileMapEditorPlugin::forward_canvas_draw_over_viewport(Control *p_overlay)
editor->forward_canvas_draw_over_viewport(p_overlay);
}
-void TileMapEditorPlugin::hide_editor() {
- if (editor->is_visible_in_tree()) {
- EditorNode::get_bottom_panel()->hide_bottom_panel();
- }
-}
-
bool TileMapEditorPlugin::is_editor_visible() const {
return editor->is_visible_in_tree();
}
@@ -521,8 +510,8 @@ TileMapEditorPlugin::TileMapEditorPlugin() {
editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE);
editor->hide();
- button = EditorNode::get_bottom_panel()->add_item(TTRC("TileMap"), editor, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_map_bottom_panel", TTRC("Toggle TileMap Bottom Panel")));
- button->hide();
+ EditorDockManager::get_singleton()->add_dock(editor);
+ editor->close();
}
TileMapEditorPlugin::~TileMapEditorPlugin() {
@@ -544,15 +533,9 @@ bool TileSetEditorPlugin::handles(Object *p_object) const {
void TileSetEditorPlugin::make_visible(bool p_visible) {
if (p_visible) {
- button->show();
- if (!tile_map_plugin_singleton->is_editor_visible()) {
- EditorNode::get_bottom_panel()->make_item_visible(editor);
- }
+ editor->open();
} else {
- button->hide();
- if (editor->is_visible_in_tree()) {
- EditorNode::get_bottom_panel()->hide_bottom_panel();
- }
+ editor->close();
}
}
@@ -572,8 +555,8 @@ TileSetEditorPlugin::TileSetEditorPlugin() {
editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE);
editor->hide();
- button = EditorNode::get_bottom_panel()->add_item(TTRC("TileSet"), editor, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_tile_set_bottom_panel", TTRC("Toggle TileSet Bottom Panel")));
- button->hide();
+ EditorDockManager::get_singleton()->add_dock(editor);
+ editor->close();
}
TileSetEditorPlugin::~TileSetEditorPlugin() {
diff --git a/editor/scene/2d/tiles/tiles_editor_plugin.h b/editor/scene/2d/tiles/tiles_editor_plugin.h
index d70714fa1a2..b5c33253e88 100644
--- a/editor/scene/2d/tiles/tiles_editor_plugin.h
+++ b/editor/scene/2d/tiles/tiles_editor_plugin.h
@@ -122,7 +122,6 @@ class TileMapEditorPlugin : public EditorPlugin {
GDCLASS(TileMapEditorPlugin, EditorPlugin);
TileMapLayerEditor *editor = nullptr;
- Button *button = nullptr;
ObjectID tile_map_layer_id;
ObjectID tile_map_group_id; // Allow keeping the layer selector up to date.
@@ -148,7 +147,6 @@ public:
virtual bool forward_canvas_gui_input(const Ref &p_event) override;
virtual void forward_canvas_draw_over_viewport(Control *p_overlay) override;
- void hide_editor();
bool is_editor_visible() const;
TileMapEditorPlugin();
@@ -159,7 +157,6 @@ class TileSetEditorPlugin : public EditorPlugin {
GDCLASS(TileSetEditorPlugin, EditorPlugin);
TileSetEditor *editor = nullptr;
- Button *button = nullptr;
ObjectID edited_tileset;