diff --git a/editor/debugger/limbo_debugger_plugin.cpp b/editor/debugger/limbo_debugger_plugin.cpp index 4d6a679..9e33e08 100644 --- a/editor/debugger/limbo_debugger_plugin.cpp +++ b/editor/debugger/limbo_debugger_plugin.cpp @@ -133,15 +133,38 @@ void LimboDebuggerTab::_filter_changed(String p_text) { _update_bt_player_list(active_bt_players, p_text); } -LimboDebuggerTab::LimboDebuggerTab(Ref p_session) { +void LimboDebuggerTab::_window_visibility_changed(bool p_visible) { + make_floating->set_visible(!p_visible); +} + +LimboDebuggerTab::LimboDebuggerTab(Ref p_session, WindowWrapper *p_wrapper) { session = p_session; + window_wrapper = p_wrapper; + + root_vb = memnew(VBoxContainer); + add_child(root_vb); + + toolbar = memnew(HBoxContainer); + root_vb->add_child(toolbar); hsc = memnew(HSplitContainer); - add_child(hsc); + hsc->set_h_size_flags(Control::SIZE_EXPAND_FILL); + hsc->set_v_size_flags(Control::SIZE_EXPAND_FILL); + root_vb->add_child(hsc); VBoxContainer *list_box = memnew(VBoxContainer); hsc->add_child(list_box); + if (p_wrapper->is_window_available()) { + make_floating = memnew(ScreenSelect); + make_floating->set_flat(true); + make_floating->set_h_size_flags(Control::SIZE_EXPAND | Control::SIZE_SHRINK_END); + make_floating->set_tooltip_text(TTR("Make the LimboAI Debugger floating.")); + make_floating->connect(SNAME("request_open_in_screen"), callable_mp(window_wrapper, &WindowWrapper::enable_window_on_screen).bind(true)); + toolbar->add_child(make_floating); + p_wrapper->connect(SNAME("window_visibility_changed"), callable_mp(this, &LimboDebuggerTab::_window_visibility_changed)); + } + filter_players = memnew(LineEdit); filter_players->set_placeholder(TTR("Filter Players")); filter_players->connect(SNAME("text_changed"), callable_mp(this, &LimboDebuggerTab::_filter_changed)); @@ -188,13 +211,32 @@ LimboDebuggerTab::LimboDebuggerTab(Ref p_session) { //////////////////////// LimboDebuggerPlugin +void LimboDebuggerPlugin::_window_visibility_changed(bool p_visible) { +} + void LimboDebuggerPlugin::setup_session(int p_idx) { Ref session = get_session(p_idx); - tab = memnew(LimboDebuggerTab(session)); + + if (tab != nullptr) { + tab->queue_free(); + window_wrapper->queue_free(); + } + + window_wrapper = memnew(WindowWrapper); + window_wrapper->set_window_title(vformat(TTR("%s - Godot Engine"), TTR("LimboAI Debugger"))); + window_wrapper->set_margins_enabled(true); + window_wrapper->set_name("LimboAI"); + + tab = memnew(LimboDebuggerTab(session, window_wrapper)); tab->set_name("LimboAI"); + window_wrapper->set_wrapped_control(tab); + + window_wrapper->set_v_size_flags(Control::SIZE_EXPAND_FILL); + window_wrapper->connect(SNAME("window_visibility_changed"), callable_mp(this, &LimboDebuggerPlugin::_window_visibility_changed)); + session->connect(SNAME("started"), callable_mp(tab, &LimboDebuggerTab::start_session)); session->connect(SNAME("stopped"), callable_mp(tab, &LimboDebuggerTab::stop_session)); - session->add_session_tab(tab); + session->add_session_tab(window_wrapper); } bool LimboDebuggerPlugin::capture(const String &p_message, const Array &p_data, int p_session) { @@ -221,4 +263,4 @@ LimboDebuggerPlugin::LimboDebuggerPlugin() { tab = nullptr; } -#endif // TOOLS_ENABLED \ No newline at end of file +#endif // TOOLS_ENABLED diff --git a/editor/debugger/limbo_debugger_plugin.h b/editor/debugger/limbo_debugger_plugin.h index f1288e5..ea5895e 100644 --- a/editor/debugger/limbo_debugger_plugin.h +++ b/editor/debugger/limbo_debugger_plugin.h @@ -21,6 +21,7 @@ #include "core/object/object.h" #include "core/typedefs.h" #include "editor/plugins/editor_debugger_plugin.h" +#include "editor/window_wrapper.h" #include "scene/gui/box_container.h" #include "scene/gui/item_list.h" #include "scene/gui/panel_container.h" @@ -33,20 +34,26 @@ class LimboDebuggerTab : public PanelContainer { private: List active_bt_players; Ref session; - HSplitContainer *hsc; - Label *info_message; - ItemList *bt_player_list; - BehaviorTreeView *bt_view; - VBoxContainer *view_box; - HBoxContainer *alert_box; - TextureRect *alert_icon; - Label *alert_message; - LineEdit *filter_players; + VBoxContainer *root_vb = nullptr; + HBoxContainer *toolbar = nullptr; + HSplitContainer *hsc = nullptr; + Label *info_message = nullptr; + ItemList *bt_player_list = nullptr; + BehaviorTreeView *bt_view = nullptr; + VBoxContainer *view_box = nullptr; + HBoxContainer *alert_box = nullptr; + TextureRect *alert_icon = nullptr; + Label *alert_message = nullptr; + LineEdit *filter_players = nullptr; + + Button *make_floating = nullptr; + WindowWrapper *window_wrapper = nullptr; void _show_alert(const String &p_message); void _update_bt_player_list(const List &p_node_paths, const String &p_filter); void _bt_selected(int p_idx); void _filter_changed(String p_text); + void _window_visibility_changed(bool p_visible); public: void start_session(); @@ -56,14 +63,17 @@ public: String get_selected_bt_player(); void update_behavior_tree(const BehaviorTreeData &p_data); - LimboDebuggerTab(Ref p_session); + LimboDebuggerTab(Ref p_session, WindowWrapper *p_wrapper); }; class LimboDebuggerPlugin : public EditorDebuggerPlugin { GDCLASS(LimboDebuggerPlugin, EditorDebuggerPlugin); private: - LimboDebuggerTab *tab; + LimboDebuggerTab *tab = nullptr; + WindowWrapper *window_wrapper = nullptr; + + void _window_visibility_changed(bool p_visible); public: void setup_session(int p_idx) override;