Files
XCEngine/editor/src/panels/ConsolePanel.cpp

58 lines
1.4 KiB
C++

#include "Actions/ConsoleActionRouter.h"
#include "Actions/ActionRouting.h"
#include "ConsolePanel.h"
#include "Core/EditorConsoleSink.h"
#include "UI/UI.h"
#include <imgui.h>
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<int>(logIndex));
const std::string fullMessage = UI::BuildConsoleLogText(log);
if (UI::DrawConsoleLogRow(fullMessage.c_str())) {
ImGui::SetClipboardText(fullMessage.c_str());
}
ImGui::PopID();
logIndex++;
}
}
}
}