Change GridMap and Replication to EditorDock

This commit is contained in:
kobewi 2025-12-01 13:43:01 +01:00
parent d5edd4a592
commit fbcb94cf19
8 changed files with 47 additions and 50 deletions

View file

@ -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> &shortcut = options->get_popup()->get_item_shortcut(i);
if (shortcut.is_valid() && shortcut->matches_event(p_event)) {
const Ref<Shortcut> &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);
}
}