58 lines
1.4 KiB
C++
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++;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|