6#include <imgui_internal.h>
15#if !defined(EVENGINE_ANDROID) && !defined(EVENGINE_IOS) && !defined(EVENGINE_WEBGPU)
20void drawAiWindow(AiPanel& panel) {
24 if (!panel.isVisible() || !GImGui || !GImGui->WithinFrameScope)
return;
25 bool visible = panel.isVisible();
26 if (ImGui::Begin(
"AI / MCP", &
visible, ImGuiWindowFlags_AlwaysAutoResize)) {
27 ImGui::TextUnformatted(panel.statusLine().c_str());
29 const auto log = panel.recentLog(64);
30 if (ImGui::BeginChild(
"ai_log", ImVec2(480, 260),
true)) {
31 for (
const auto& e : log) {
32 ImGui::TextWrapped(
"[%s] %s | %s", e.timestamp.c_str(), e.kind.c_str(),
34 if (!e.detail.empty()) ImGui::TextWrapped(
" %s", e.detail.c_str());
36 if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
37 ImGui::SetScrollHereY(1.0f);
40 if (ImGui::Button(
"Clear")) panel.clearLog();
42 if (ImGui::Button(
"Hide")) panel.setVisible(
false);
45 if (!
visible) panel.setVisible(
false);
49void drawConsoleWindow(ConsolePanel& panel) {
50 if (!panel.isVisible() || !GImGui || !GImGui->WithinFrameScope)
return;
51 bool visible = panel.isVisible();
52 if (ImGui::Begin(
"Console", &
visible,
53 ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoScrollbar)) {
54 if (ImGui::BeginMenuBar()) {
55 if (ImGui::BeginMenu(
"Log")) {
56 if (ImGui::MenuItem(
"Clear")) panel.clear();
57 if (ImGui::MenuItem(
"Copy all"))
58 ImGui::SetClipboardText(panel.format(4096).c_str());
64 ImGui::BeginChild(
"console_log", ImVec2(0, ImGui::GetContentRegionAvail().
y - 30),
66 const auto lines = panel.recent(500);
67 for (
const auto& l :
lines) {
68 ImVec4
color = ImVec4(0.80f, 0.80f, 0.80f, 1.0f);
69 if (l.level ==
"error")
70 color = ImVec4(1.0f, 0.35f, 0.35f, 1.0f);
71 else if (l.level ==
"warn")
72 color = ImVec4(1.0f, 0.85f, 0.35f, 1.0f);
73 else if (l.level ==
"cmd" || l.level ==
"result")
74 color = ImVec4(0.45f, 0.80f, 1.0f, 1.0f);
75 ImGui::PushStyleColor(ImGuiCol_Text,
color);
76 ImGui::TextUnformatted((
"[" + l.timestamp +
"] " + l.level +
" | " + l.text).c_str());
77 ImGui::PopStyleColor();
79 if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) ImGui::SetScrollHereY(1.0f);
82 static char input[512] =
"";
83 ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().
x - 90);
84 const bool enter = ImGui::InputText(
"##repl",
input,
sizeof(
input),
85 ImGuiInputTextFlags_EnterReturnsTrue);
87 if (ImGui::Button(
"Run") || enter) {
88 std::string expr =
input;
90 const std::string result = panel.eval(expr);
91 ImGui::SetClipboardText(result.c_str());
95 if (ImGui::Button(
"Hide")) panel.setVisible(
false);
98 if (!
visible) panel.setVisible(
false);
101void drawFrameStatsWindow(FrameStatsPanel& panel) {
102 if (!panel.isVisible() || !GImGui || !GImGui->WithinFrameScope)
return;
103 bool visible = panel.isVisible();
104 ImGui::SetNextWindowBgAlpha(0.72f);
105 if (ImGui::Begin(
"Frame stats", &
visible,
106 ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoFocusOnAppearing |
107 ImGuiWindowFlags_NoNav)) {
108 ImGui::TextUnformatted(panel.format().c_str());
109 if (ImGui::Button(
"Hide")) panel.setVisible(
false);
112 if (!
visible) panel.setVisible(
false);
126static eve::dev::HostPanels gHostPanels;
std::vector< std::string_view > lines
static void setImGuiDrawer(ImGuiDrawer fn)
static void setImGuiDrawer(ImGuiDrawer fn)
static void setImGuiDrawer(ImGuiDrawer fn)