#include "Actions/ConsoleActionRouter.h" #include "Actions/ActionRouting.h" #include "ConsolePanel.h" #include "Core/EditorConsoleSink.h" #include "UI/UI.h" #include namespace XCEngine { namespace Editor { ConsolePanel::ConsolePanel() : Panel("Console") { } void ConsolePanel::Render() { UI::PanelWindowScope panel(m_name.c_str()); if (!panel.IsOpen()) { return; } Actions::ObserveInactiveActionRoute(*m_context); auto* sink = Debug::EditorConsoleSink::GetInstance(); { UI::PanelToolbarScope toolbar("ConsoleToolbar", UI::StandardPanelToolbarHeight()); if (toolbar.IsOpen()) { Actions::DrawConsoleToolbarActions(*sink, m_filterState); } } UI::PanelContentScope content("LogScroll", UI::DefaultPanelContentPadding(), ImGuiWindowFlags_HorizontalScrollbar); if (!content.IsOpen()) { return; } const auto logs = sink->GetLogs(); size_t logIndex = 0; for (const auto& log : logs) { if (!m_filterState.Allows(log.level)) { continue; } ImGui::PushID(static_cast(logIndex)); const std::string fullMessage = UI::BuildConsoleLogText(log); if (UI::DrawConsoleLogRow(fullMessage.c_str())) { ImGui::SetClipboardText(fullMessage.c_str()); } ImGui::PopID(); logIndex++; } } } }