From ceaac03adf5c12118bd512625a572e778dd75a6e Mon Sep 17 00:00:00 2001 From: Bruno Herbelin Date: Sat, 8 Jan 2022 10:57:12 +0100 Subject: [PATCH] Log Window - Display last log line in title when collapsed --- Log.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Log.cpp b/Log.cpp index a2dc1f8..ddf6051 100644 --- a/Log.cpp +++ b/Log.cpp @@ -35,6 +35,7 @@ struct AppLog ImGuiTextBuffer Buf; ImGuiTextFilter Filter; ImVector LineOffsets; + bool LogInTitle; AppLog() { @@ -47,6 +48,7 @@ struct AppLog Buf.clear(); LineOffsets.clear(); LineOffsets.push_back(0); + LogInTitle = false; mtx.unlock(); } @@ -70,12 +72,31 @@ struct AppLog ImGui::SetNextWindowPos(ImVec2(430, 660), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSize(ImVec2(1150, 220), ImGuiCond_FirstUseEver); ImGui::SetNextWindowSizeConstraints(ImVec2(600, 180), ImVec2(FLT_MAX, FLT_MAX)); - if ( !ImGui::Begin(title, p_open)) + + // normal title + char window_title[1024]; + sprintf(window_title, "%s ###LOGVIMIX", title); + + if (*p_open) { + // if open but Collapsed, create title of window with last line of logs + if (LogInTitle) { + char lastlogline[128]; + size_t lenght = LineOffsets[LineOffsets.Size-1] - LineOffsets[LineOffsets.Size-2] - 1; + memset(lastlogline, '\0', 128); + memcpy(lastlogline, Buf.begin() + LineOffsets[LineOffsets.Size-2], MIN(127, lenght)); + sprintf(window_title, "%s - %s ###LOGVIMIX", title, lastlogline); + } + } + + if ( !ImGui::Begin(window_title, p_open)) { + LogInTitle = true; ImGui::End(); return; } + LogInTitle = false; + // window ImGui::SameLine(0, 0); static bool numbering = true;