From 45f4aebe240ba161db2081e2804e603243dc45dc Mon Sep 17 00:00:00 2001 From: Logan Detrick Date: Mon, 24 Nov 2025 15:59:05 -0800 Subject: [PATCH] Use new dock system for Debugger --- editor/debugger/debugger_editor_plugin.cpp | 3 +- editor/debugger/editor_debugger_node.cpp | 50 +++++++++++----------- editor/debugger/editor_debugger_node.h | 6 +-- editor/debugger/editor_debugger_tree.cpp | 2 +- editor/debugger/script_editor_debugger.cpp | 12 +++--- editor/editor_node.cpp | 2 +- 6 files changed, 37 insertions(+), 38 deletions(-) diff --git a/editor/debugger/debugger_editor_plugin.cpp b/editor/debugger/debugger_editor_plugin.cpp index 240b4195122..99a482db3c9 100644 --- a/editor/debugger/debugger_editor_plugin.cpp +++ b/editor/debugger/debugger_editor_plugin.cpp @@ -35,7 +35,6 @@ #include "editor/debugger/editor_debugger_server.h" #include "editor/debugger/editor_file_server.h" #include "editor/editor_node.h" -#include "editor/gui/editor_bottom_panel.h" #include "editor/run/run_instances_dialog.h" #include "editor/script/script_editor_plugin.h" #include "editor/settings/editor_command_palette.h" @@ -56,7 +55,7 @@ DebuggerEditorPlugin::DebuggerEditorPlugin(PopupMenu *p_debug_menu) { file_server = memnew(EditorFileServer); EditorDebuggerNode *debugger = memnew(EditorDebuggerNode); - EditorNode::get_bottom_panel()->add_item(TTRC("Debugger"), debugger, ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_debugger_bottom_panel", TTRC("Toggle Debugger Bottom Panel"), KeyModifierMask::ALT | Key::D)); + EditorDockManager::get_singleton()->add_dock(debugger); // Main editor debug menu. debug_menu = p_debug_menu; diff --git a/editor/debugger/editor_debugger_node.cpp b/editor/debugger/editor_debugger_node.cpp index 8f934c2ffd7..872bb1e5321 100644 --- a/editor/debugger/editor_debugger_node.cpp +++ b/editor/debugger/editor_debugger_node.cpp @@ -40,9 +40,9 @@ #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/run/editor_run_bar.h" #include "editor/script/script_editor_plugin.h" +#include "editor/settings/editor_command_palette.h" #include "editor/settings/editor_settings.h" #include "editor/themes/editor_theme_manager.h" #include "scene/gui/menu_button.h" @@ -61,6 +61,17 @@ void _for_all(TabContainer *p_node, const Func &p_func) { EditorDebuggerNode *EditorDebuggerNode::singleton = nullptr; EditorDebuggerNode::EditorDebuggerNode() { + set_name(TTRC("Debugger")); + set_icon_name("Debug"); + set_dock_shortcut(ED_SHORTCUT_AND_COMMAND("bottom_panels/toggle_debugger_bottom_panel", TTRC("Toggle Debugger Dock"), KeyModifierMask::ALT | Key::D)); + set_default_slot(DockConstants::DOCK_SLOT_BOTTOM); + set_available_layouts(EditorDock::DOCK_LAYOUT_HORIZONTAL); + set_global(false); + set_transient(true); + + set_clip_contents(false); + _update_margins(); + if (!singleton) { singleton = this; } @@ -332,13 +343,6 @@ void EditorDebuggerNode::_notification(int p_what) { } break; case NOTIFICATION_READY: { - // TODO: Replace this hack once EditorDebuggerNode is converted to a dock. It should be in the constructor. - EditorDock *parent = Object::cast_to(get_parent()); - if (parent) { - parent->set_clip_contents(false); - _update_margins(); - } - _update_debug_options(); initializing = false; } break; @@ -440,29 +444,25 @@ void EditorDebuggerNode::_update_errors() { last_error_count = error_count; last_warning_count = warning_count; - // TODO: Replace this hack once EditorDebuggerNode is converted to a dock. - EditorDock *parent = Object::cast_to(get_parent()); - if (!parent) { - return; - } - if (error_count == 0 && warning_count == 0) { - set_name(TTR("Debugger")); - parent->set_dock_icon(Ref()); - parent->set_title_color(Color(0, 0, 0, 0)); + set_title(""); + set_dock_icon(Ref()); + set_title_color(Color(0, 0, 0, 0)); + set_force_show_icon(false); } else { - set_name(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); + set_title(TTR("Debugger") + " (" + itos(error_count + warning_count) + ")"); if (error_count >= 1 && warning_count >= 1) { - parent->set_dock_icon(get_editor_theme_icon(SNAME("ErrorWarning"))); + set_dock_icon(get_editor_theme_icon(SNAME("ErrorWarning"))); // Use error color to represent the highest level of severity reported. - parent->set_title_color(get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + set_title_color(get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } else if (error_count >= 1) { - parent->set_dock_icon(get_editor_theme_icon(SNAME("Error"))); - parent->set_title_color(get_theme_color(SNAME("error_color"), EditorStringName(Editor))); + set_dock_icon(get_editor_theme_icon(SNAME("Error"))); + set_title_color(get_theme_color(SNAME("error_color"), EditorStringName(Editor))); } else { - parent->set_dock_icon(get_editor_theme_icon(SNAME("Warning"))); - parent->set_title_color(get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); + set_dock_icon(get_editor_theme_icon(SNAME("Warning"))); + set_title_color(get_theme_color(SNAME("warning_color"), EditorStringName(Editor))); } + set_force_show_icon(true); } } } @@ -564,7 +564,7 @@ void EditorDebuggerNode::_break_state_changed() { const bool breaked = get_current_debugger()->is_breaked(); const bool can_debug = get_current_debugger()->is_debuggable(); if (breaked) { // Show debugger. - EditorNode::get_bottom_panel()->make_item_visible(this); + EditorDockManager::get_singleton()->focus_dock(this); } // Update script menu. diff --git a/editor/debugger/editor_debugger_node.h b/editor/debugger/editor_debugger_node.h index 6123aa86737..2f21a71bca5 100644 --- a/editor/debugger/editor_debugger_node.h +++ b/editor/debugger/editor_debugger_node.h @@ -32,7 +32,7 @@ #include "core/object/script_language.h" #include "editor/debugger/editor_debugger_server.h" -#include "scene/gui/margin_container.h" +#include "editor/docks/editor_dock.h" class Button; class DebugAdapterParser; @@ -44,8 +44,8 @@ class ScriptEditorDebugger; class TabContainer; class UndoRedo; -class EditorDebuggerNode : public MarginContainer { - GDCLASS(EditorDebuggerNode, MarginContainer); +class EditorDebuggerNode : public EditorDock { + GDCLASS(EditorDebuggerNode, EditorDock); public: enum CameraOverride { diff --git a/editor/debugger/editor_debugger_tree.cpp b/editor/debugger/editor_debugger_tree.cpp index fe16c07abda..10b4ead20b9 100644 --- a/editor/debugger/editor_debugger_tree.cpp +++ b/editor/debugger/editor_debugger_tree.cpp @@ -73,7 +73,7 @@ void EditorDebuggerTree::_notification(int p_what) { connect("item_mouse_selected", callable_mp(this, &EditorDebuggerTree::_scene_tree_rmb_selected)); } break; - case NOTIFICATION_ENTER_TREE: { + case NOTIFICATION_READY: { update_icon_max_width(); } break; } diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 1edcafdc608..fa016fe408c 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -1070,12 +1070,7 @@ void ScriptEditorDebugger::_update_reason_content_height() { void ScriptEditorDebugger::_notification(int p_what) { switch (p_what) { - case NOTIFICATION_ENTER_TREE: { - le_set->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::_live_edit_set)); - le_clear->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::_live_edit_clear)); - error_tree->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditorDebugger::_error_selected)); - error_tree->connect("item_activated", callable_mp(this, &ScriptEditorDebugger::_error_activated)); - breakpoints_tree->connect("item_activated", callable_mp(this, &ScriptEditorDebugger::_breakpoint_tree_clicked)); + case NOTIFICATION_POSTINITIALIZE: { connect("started", callable_mp(expression_evaluator, &EditorExpressionEvaluator::on_start)); } break; @@ -2206,6 +2201,7 @@ ScriptEditorDebugger::ScriptEditorDebugger() { breakpoints_tree->set_hide_root(true); breakpoints_tree->set_theme_type_variation("TreeSecondary"); breakpoints_tree->connect("item_mouse_selected", callable_mp(this, &ScriptEditorDebugger::_breakpoints_item_rmb_selected)); + breakpoints_tree->connect("item_activated", callable_mp(this, &ScriptEditorDebugger::_breakpoint_tree_clicked)); breakpoints_tree->create_item(); parent_sc->add_child(breakpoints_tree); @@ -2262,6 +2258,8 @@ ScriptEditorDebugger::ScriptEditorDebugger() { error_tree->set_allow_rmb_select(true); error_tree->set_allow_reselect(true); error_tree->set_theme_type_variation("TreeSecondary"); + error_tree->connect(SceneStringName(item_selected), callable_mp(this, &ScriptEditorDebugger::_error_selected)); + error_tree->connect("item_activated", callable_mp(this, &ScriptEditorDebugger::_error_activated)); error_tree->connect("item_mouse_selected", callable_mp(this, &ScriptEditorDebugger::_error_tree_item_rmb_selected)); errors_tab->add_child(error_tree); @@ -2412,8 +2410,10 @@ Instead, use the monitors tab to obtain more precise VRAM usage. info_left->add_child(l); lehb->add_child(live_edit_root); le_set = memnew(Button(TTRC("Set From Tree"))); + le_set->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::_live_edit_set)); lehb->add_child(le_set); le_clear = memnew(Button(TTRC("Clear"))); + le_clear->connect(SceneStringName(pressed), callable_mp(this, &ScriptEditorDebugger::_live_edit_clear)); lehb->add_child(le_clear); info_left->add_child(lehb); } diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 2b1c88fe20c..089526ea6df 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -5321,7 +5321,7 @@ void EditorNode::_project_run_started() { if (action_on_play == ACTION_ON_PLAY_OPEN_OUTPUT) { editor_dock_manager->focus_dock(log); } else if (action_on_play == ACTION_ON_PLAY_OPEN_DEBUGGER) { - bottom_panel->make_item_visible(EditorDebuggerNode::get_singleton()); + editor_dock_manager->focus_dock(EditorDebuggerNode::get_singleton()); } }