From fbcb94cf19e73b7076c1128e07270edbeb73a71b Mon Sep 17 00:00:00 2001 From: kobewi Date: Mon, 1 Dec 2025 13:43:01 +0100 Subject: [PATCH] Change GridMap and Replication to EditorDock --- .../gridmap/editor/grid_map_editor_plugin.cpp | 49 +++++++++---------- .../gridmap/editor/grid_map_editor_plugin.h | 6 +-- modules/gridmap/icons/GridMapDock.svg | 1 + .../editor/multiplayer_editor_plugin.cpp | 25 +++------- .../editor/multiplayer_editor_plugin.h | 1 - .../multiplayer/editor/replication_editor.cpp | 8 +++ .../multiplayer/editor/replication_editor.h | 6 +-- modules/multiplayer/icons/ReplicationDock.svg | 1 + 8 files changed, 47 insertions(+), 50 deletions(-) create mode 100644 modules/gridmap/icons/GridMapDock.svg create mode 100644 modules/multiplayer/icons/ReplicationDock.svg diff --git a/modules/gridmap/editor/grid_map_editor_plugin.cpp b/modules/gridmap/editor/grid_map_editor_plugin.cpp index 3a2c7d22a7..33d3cadcb4 100644 --- a/modules/gridmap/editor/grid_map_editor_plugin.cpp +++ b/modules/gridmap/editor/grid_map_editor_plugin.cpp @@ -32,11 +32,11 @@ #include "core/math/geometry_2d.h" #include "core/os/keyboard.h" +#include "editor/docks/editor_dock_manager.h" #include "editor/editor_main_screen.h" #include "editor/editor_node.h" #include "editor/editor_string_names.h" #include "editor/editor_undo_redo_manager.h" -#include "editor/gui/editor_bottom_panel.h" #include "editor/gui/editor_zoom_widget.h" #include "editor/scene/3d/node_3d_editor_plugin.h" #include "editor/settings/editor_command_palette.h" @@ -799,8 +799,8 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D return EditorPlugin::AFTER_GUI_INPUT_STOP; } for (int i = 0; i < options->get_popup()->get_item_count(); ++i) { - const Ref &shortcut = options->get_popup()->get_item_shortcut(i); - if (shortcut.is_valid() && shortcut->matches_event(p_event)) { + const Ref &option_shortcut = options->get_popup()->get_item_shortcut(i); + if (option_shortcut.is_valid() && option_shortcut->matches_event(p_event)) { // Consume input to avoid conflicts with other plugins. accept_event(); _menu_option(options->get_popup()->get_item_id(i)); @@ -1399,6 +1399,16 @@ void GridMapEditor::_bind_methods() { } GridMapEditor::GridMapEditor() { + set_name(TTRC("GridMap")); + set_icon_name("GridMapDock"); + set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_grid_map_bottom_panel", TTRC("Toggle GridMap Dock"))); + set_default_slot(EditorDock::DOCK_SLOT_BOTTOM); + set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING); + set_global(false); + set_transient(true); + set_custom_minimum_size(Size2(0, 200 * EDSCALE)); + set_theme_type_variation("NoBorderBottomPanel"); + ED_SHORTCUT("grid_map/previous_floor", TTRC("Previous Floor"), Key::KEY_1, true); ED_SHORTCUT("grid_map/next_floor", TTRC("Next Floor"), Key::KEY_3, true); ED_SHORTCUT("grid_map/edit_x_axis", TTRC("Edit X Axis"), KeyModifierMask::SHIFT + Key::Z, true); @@ -1439,9 +1449,12 @@ GridMapEditor::GridMapEditor() { options->get_popup()->connect(SceneStringName(id_pressed), callable_mp(this, &GridMapEditor::_menu_option)); + VBoxContainer *main_vb = memnew(VBoxContainer); + add_child(main_vb); + toolbar = memnew(HBoxContainer); - add_child(toolbar); toolbar->set_h_size_flags(SIZE_EXPAND_FILL); + main_vb->add_child(toolbar); HBoxContainer *mode_buttons = memnew(HBoxContainer); toolbar->add_child(mode_buttons); @@ -1638,15 +1651,11 @@ GridMapEditor::GridMapEditor() { toolbar->add_child(options); - MarginContainer *mc = memnew(MarginContainer); - mc->set_theme_type_variation("NoBorderBottomPanel"); - mc->set_v_size_flags(SIZE_EXPAND_FILL); - add_child(mc); - mesh_library_palette = memnew(ItemList); mesh_library_palette->set_auto_translate_mode(AUTO_TRANSLATE_MODE_DISABLED); mesh_library_palette->set_scroll_hint_mode(ItemList::SCROLL_HINT_MODE_BOTH); - mc->add_child(mesh_library_palette); + mesh_library_palette->set_v_size_flags(SIZE_EXPAND_FILL); + main_vb->add_child(mesh_library_palette); mesh_library_palette->connect(SceneStringName(gui_input), callable_mp(this, &GridMapEditor::_mesh_library_palette_input)); mesh_library_palette->connect(SceneStringName(item_selected), callable_mp(this, &GridMapEditor::_item_selected_cbk)); @@ -1859,19 +1868,13 @@ void GridMapEditorPlugin::_notification(int p_what) { switch (p_what) { case NOTIFICATION_ENTER_TREE: { grid_map_editor = memnew(GridMapEditor); - grid_map_editor->set_h_size_flags(Control::SIZE_EXPAND_FILL); - grid_map_editor->set_v_size_flags(Control::SIZE_EXPAND_FILL); - grid_map_editor->set_custom_minimum_size(Size2(0, 200) * EDSCALE); - grid_map_editor->hide(); - - panel_button = EditorNode::get_bottom_panel()->add_item(TTRC("GridMap"), grid_map_editor, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_grid_map_bottom_panel", TTRC("Toggle GridMap Bottom Panel"))); - panel_button->hide(); + EditorDockManager::get_singleton()->add_dock(grid_map_editor); + grid_map_editor->close(); } break; case NOTIFICATION_EXIT_TREE: { - EditorNode::get_bottom_panel()->remove_item(grid_map_editor); + EditorDockManager::get_singleton()->remove_dock(grid_map_editor); memdelete_notnull(grid_map_editor); grid_map_editor = nullptr; - panel_button = nullptr; } break; } } @@ -1904,16 +1907,12 @@ void GridMapEditorPlugin::make_visible(bool p_visible) { grid_map_editor->select_mode_button->set_pressed(true); } grid_map_editor->_on_tool_mode_changed(); - panel_button->show(); - EditorNode::get_bottom_panel()->make_item_visible(grid_map_editor); + grid_map_editor->make_visible(); grid_map_editor->set_process(true); } else { grid_map_editor->_cancel_pending_move(); grid_map_editor->_show_viewports_transform_gizmo(true); - panel_button->hide(); - if (grid_map_editor->is_visible_in_tree()) { - EditorNode::get_bottom_panel()->hide_bottom_panel(); - } + grid_map_editor->close(); grid_map_editor->set_process(false); } } diff --git a/modules/gridmap/editor/grid_map_editor_plugin.h b/modules/gridmap/editor/grid_map_editor_plugin.h index 8dd8c8e6cc..4eb142a33d 100644 --- a/modules/gridmap/editor/grid_map_editor_plugin.h +++ b/modules/gridmap/editor/grid_map_editor_plugin.h @@ -32,6 +32,7 @@ #include "../grid_map.h" +#include "editor/docks/editor_dock.h" #include "editor/plugins/editor_plugin.h" #include "scene/gui/box_container.h" #include "scene/gui/item_list.h" @@ -45,8 +46,8 @@ class ButtonGroup; class EditorZoomWidget; class BaseButton; -class GridMapEditor : public VBoxContainer { - GDCLASS(GridMapEditor, VBoxContainer); +class GridMapEditor : public EditorDock { + GDCLASS(GridMapEditor, EditorDock); static constexpr int32_t GRID_CURSOR_SIZE = 50; @@ -274,7 +275,6 @@ class GridMapEditorPlugin : public EditorPlugin { GDCLASS(GridMapEditorPlugin, EditorPlugin); GridMapEditor *grid_map_editor = nullptr; - Button *panel_button = nullptr; protected: void _notification(int p_what); diff --git a/modules/gridmap/icons/GridMapDock.svg b/modules/gridmap/icons/GridMapDock.svg new file mode 100644 index 0000000000..7aeea66c4f --- /dev/null +++ b/modules/gridmap/icons/GridMapDock.svg @@ -0,0 +1 @@ + diff --git a/modules/multiplayer/editor/multiplayer_editor_plugin.cpp b/modules/multiplayer/editor/multiplayer_editor_plugin.cpp index eb7e25af38..c8f61c1de4 100644 --- a/modules/multiplayer/editor/multiplayer_editor_plugin.cpp +++ b/modules/multiplayer/editor/multiplayer_editor_plugin.cpp @@ -34,10 +34,9 @@ #include "editor_network_profiler.h" #include "replication_editor.h" +#include "editor/docks/editor_dock_manager.h" #include "editor/editor_interface.h" #include "editor/editor_node.h" -#include "editor/gui/editor_bottom_panel.h" -#include "editor/settings/editor_command_palette.h" void MultiplayerEditorDebugger::_bind_methods() { ADD_SIGNAL(MethodInfo("open_request", PropertyInfo(Variant::STRING, "path"))); @@ -116,8 +115,8 @@ void MultiplayerEditorDebugger::setup_session(int p_session_id) { MultiplayerEditorPlugin::MultiplayerEditorPlugin() { repl_editor = memnew(ReplicationEditor); - button = EditorNode::get_bottom_panel()->add_item(TTRC("Replication"), repl_editor, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_replication_bottom_panel", TTRC("Toggle Replication Bottom Panel"))); - button->hide(); + EditorDockManager::get_singleton()->add_dock(repl_editor); + repl_editor->close(); repl_editor->get_pin()->connect(SceneStringName(pressed), callable_mp(this, &MultiplayerEditorPlugin::_pinned)); debugger.instantiate(); debugger->connect("open_request", callable_mp(this, &MultiplayerEditorPlugin::_open_request)); @@ -142,20 +141,14 @@ void MultiplayerEditorPlugin::_notification(int p_what) { void MultiplayerEditorPlugin::_node_removed(Node *p_node) { if (p_node && p_node == repl_editor->get_current()) { repl_editor->edit(nullptr); - if (repl_editor->is_visible_in_tree()) { - EditorNode::get_bottom_panel()->hide_bottom_panel(); - } - button->hide(); + repl_editor->close(); repl_editor->get_pin()->set_pressed(false); } } void MultiplayerEditorPlugin::_pinned() { if (!repl_editor->get_pin()->is_pressed() && repl_editor->get_current() == nullptr) { - if (repl_editor->is_visible_in_tree()) { - EditorNode::get_bottom_panel()->hide_bottom_panel(); - } - button->hide(); + repl_editor->close(); } } @@ -169,12 +162,8 @@ bool MultiplayerEditorPlugin::handles(Object *p_object) const { void MultiplayerEditorPlugin::make_visible(bool p_visible) { if (p_visible) { - button->show(); - EditorNode::get_bottom_panel()->make_item_visible(repl_editor); + repl_editor->make_visible(); } else if (!repl_editor->get_pin()->is_pressed()) { - if (repl_editor->is_visible_in_tree()) { - EditorNode::get_bottom_panel()->hide_bottom_panel(); - } - button->hide(); + repl_editor->close(); } } diff --git a/modules/multiplayer/editor/multiplayer_editor_plugin.h b/modules/multiplayer/editor/multiplayer_editor_plugin.h index 3832a6d3a6..53534f523f 100644 --- a/modules/multiplayer/editor/multiplayer_editor_plugin.h +++ b/modules/multiplayer/editor/multiplayer_editor_plugin.h @@ -58,7 +58,6 @@ class MultiplayerEditorPlugin : public EditorPlugin { GDCLASS(MultiplayerEditorPlugin, EditorPlugin); private: - Button *button = nullptr; ReplicationEditor *repl_editor = nullptr; Ref debugger; diff --git a/modules/multiplayer/editor/replication_editor.cpp b/modules/multiplayer/editor/replication_editor.cpp index bb9799e914..fc8b30ee31 100644 --- a/modules/multiplayer/editor/replication_editor.cpp +++ b/modules/multiplayer/editor/replication_editor.cpp @@ -37,6 +37,7 @@ #include "editor/editor_undo_redo_manager.h" #include "editor/inspector/property_selector.h" #include "editor/scene/scene_tree_editor.h" +#include "editor/settings/editor_command_palette.h" #include "editor/settings/editor_settings.h" #include "editor/themes/editor_scale.h" #include "editor/themes/editor_theme_manager.h" @@ -152,6 +153,13 @@ void ReplicationEditor::_pick_node_property_selected(String p_name) { /// ReplicationEditor ReplicationEditor::ReplicationEditor() { + set_name(TTRC("Replication")); + set_icon_name("ReplicationDock"); + set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_replication_bottom_panel", TTRC("Toggle Replication Dock"))); + set_default_slot(EditorDock::DOCK_SLOT_BOTTOM); + set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL | EditorDock::DOCK_LAYOUT_FLOATING); + set_global(false); + set_transient(true); set_v_size_flags(SIZE_EXPAND_FILL); set_custom_minimum_size(Size2(0, 200) * EDSCALE); diff --git a/modules/multiplayer/editor/replication_editor.h b/modules/multiplayer/editor/replication_editor.h index 7e78f27542..046fca4386 100644 --- a/modules/multiplayer/editor/replication_editor.h +++ b/modules/multiplayer/editor/replication_editor.h @@ -32,8 +32,8 @@ #include "../scene_replication_config.h" +#include "editor/docks/editor_dock.h" #include "editor/plugins/editor_plugin.h" -#include "scene/gui/box_container.h" class ConfirmationDialog; class MultiplayerSynchronizer; @@ -44,8 +44,8 @@ class TreeItem; class PropertySelector; class SceneTreeDialog; -class ReplicationEditor : public VBoxContainer { - GDCLASS(ReplicationEditor, VBoxContainer); +class ReplicationEditor : public EditorDock { + GDCLASS(ReplicationEditor, EditorDock); private: MultiplayerSynchronizer *current = nullptr; diff --git a/modules/multiplayer/icons/ReplicationDock.svg b/modules/multiplayer/icons/ReplicationDock.svg new file mode 100644 index 0000000000..6ede3a2f99 --- /dev/null +++ b/modules/multiplayer/icons/ReplicationDock.svg @@ -0,0 +1 @@ +