Added LogFinish() to stop logging at an arbitrary point.
diff --git a/imgui.cpp b/imgui.cpp
index c086968..6bc176d 100644
--- a/imgui.cpp
+++ b/imgui.cpp
@@ -635,7 +635,7 @@
static bool ImLoadFileToMemory(const char* filename, const char* file_open_mode, void** out_file_data, size_t* out_file_size, size_t padding_bytes)
{
IM_ASSERT(filename && file_open_mode && out_file_data && out_file_size);
- IM_ASSERT(padding_bytes >= 0);
+ IM_ASSERT(padding_bytes >= 0);
*out_file_data = NULL;
*out_file_size = 0;
@@ -663,8 +663,8 @@
ImGui::MemFree(file_data);
return false;
}
- if (padding_bytes > 0)
- memset((void *)(((char*)file_data) + file_size), 0, padding_bytes);
+ if (padding_bytes > 0)
+ memset((void *)(((char*)file_data) + file_size), 0, padding_bytes);
fclose(f);
*out_file_data = file_data;
@@ -2660,25 +2660,7 @@
// Stop logging
if (!(window->Flags & ImGuiWindowFlags_ChildWindow)) // FIXME: add more options for scope of logging
- {
- g.LogEnabled = false;
- if (g.LogFile != NULL)
- {
- fprintf(g.LogFile, "\n");
- if (g.LogFile == stdout)
- fflush(g.LogFile);
- else
- fclose(g.LogFile);
- g.LogFile = NULL;
- }
- if (g.LogClipboard->size() > 1)
- {
- g.LogClipboard->append("\n");
- if (g.IO.SetClipboardTextFn)
- g.IO.SetClipboardTextFn(g.LogClipboard->begin());
- g.LogClipboard->clear();
- }
- }
+ ImGui::LogFinish();
// Pop
window->RootWindow = NULL;
@@ -3487,6 +3469,30 @@
g.LogAutoExpandMaxDepth = max_depth;
}
+void ImGui::LogFinish()
+{
+ ImGuiState& g = GImGui;
+ if (!g.LogEnabled)
+ return;
+ g.LogEnabled = false;
+ if (g.LogFile != NULL)
+ {
+ fprintf(g.LogFile, "\n");
+ if (g.LogFile == stdout)
+ fflush(g.LogFile);
+ else
+ fclose(g.LogFile);
+ g.LogFile = NULL;
+ }
+ if (g.LogClipboard->size() > 1)
+ {
+ g.LogClipboard->append("\n");
+ if (g.IO.SetClipboardTextFn)
+ g.IO.SetClipboardTextFn(g.LogClipboard->begin());
+ g.LogClipboard->clear();
+ }
+}
+
// Helper to display logging buttons
void ImGui::LogButtons()
{
diff --git a/imgui.h b/imgui.h
index 1272704..6082baf 100644
--- a/imgui.h
+++ b/imgui.h
@@ -212,6 +212,7 @@
// ID scopes
// If you are creating repeated widgets in a loop you most likely want to push a unique identifier so ImGui can differentiate them.
+ // You can also use ## within your widget name to distinguish them from each others (see 'Programmer Guide')
IMGUI_API void PushID(const char* str_id); // push identifier into the ID stack. IDs are hash of the *entire* stack!
IMGUI_API void PushID(const void* ptr_id);
IMGUI_API void PushID(const int int_id);
@@ -271,7 +272,7 @@
IMGUI_API void TreePop();
IMGUI_API void OpenNextNode(bool open); // force open/close the next TreeNode or CollapsingHeader
- // Value helper output "name: value". tip: freely declare your own within the ImGui namespace!
+ // Value() Helpers: output single value in "name: value" format. Tip: freely declare your own within the ImGui namespace!
IMGUI_API void Value(const char* prefix, bool b);
IMGUI_API void Value(const char* prefix, int v);
IMGUI_API void Value(const char* prefix, unsigned int v);
@@ -279,11 +280,12 @@
IMGUI_API void Color(const char* prefix, const ImVec4& v);
IMGUI_API void Color(const char* prefix, unsigned int v);
- // Logging
- IMGUI_API void LogButtons();
- IMGUI_API void LogToTTY(int max_depth = -1);
- IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL);
- IMGUI_API void LogToClipboard(int max_depth = -1);
+ // Logging: All text output can be redirected to tty/file/clipboard. Tree nodes are automatically opened.
+ IMGUI_API void LogToTTY(int max_depth = -1); // start logging to tty
+ IMGUI_API void LogToFile(int max_depth = -1, const char* filename = NULL); // start logging to file
+ IMGUI_API void LogToClipboard(int max_depth = -1); // start logging to OS clipboard
+ IMGUI_API void LogFinish(); // stop logging (close file, etc.)
+ IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
// Utilities
IMGUI_API bool IsItemHovered(); // was the last item active area hovered by mouse?