logmeow/windows/main.cpp

101 lines
4.2 KiB
C++
Raw Normal View History

2023-01-23 08:44:16 +00:00
#include <imgui.h>
#include <ctime>
#include <string>
#include <vector>
2023-01-29 10:08:27 +00:00
#include "../misc.h"
2023-01-23 08:44:16 +00:00
#include "../logcat_entry.h"
#include "main.h"
2023-01-29 07:56:05 +00:00
static inline void render_table(ImFont* monospace_font, std::vector<LogcatEntry>& logcat_entries, std::vector<size_t>& filtered_logcat_entry_offsets) {
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
ImGui::TableSetupScrollFreeze(0, 1);
ImGui::TableSetupColumn("Time", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("User", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("PID", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("TID", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("Buffer", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("Priority", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("Tag", ImGuiTableColumnFlags_None);
ImGui::TableSetupColumn("Message", ImGuiTableColumnFlags_None);
ImGui::TableHeadersRow();
2023-01-23 08:44:16 +00:00
ImGui::PushFont(monospace_font);
ImGuiListClipper clipper;
2023-01-28 14:11:46 +00:00
clipper.Begin(static_cast<int>(filtered_logcat_entry_offsets.size()));
2023-01-23 08:44:16 +00:00
while (clipper.Step()) {
for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) {
2023-01-29 07:56:05 +00:00
const LogcatEntry* logcat_entry = &logcat_entries[filtered_logcat_entry_offsets[static_cast<size_t>(i)]];
2023-01-23 08:44:16 +00:00
char time_as_str[128] = {0};
strftime(time_as_str, 127 * sizeof(char), "%c", localtime(&logcat_entry->time));
2023-01-29 07:56:05 +00:00
ImGui::TableNextRow();
2023-01-29 11:59:33 +00:00
if (ImGui::TableSetColumnIndex(0)) ImGui::TextUnformatted(time_as_str);
if (logcat_entry->user && ImGui::TableSetColumnIndex(1)) {
2023-01-29 10:08:27 +00:00
ImGui::TextUnformatted(*logcat_entry->user);
2023-01-29 07:56:05 +00:00
}
2023-01-29 11:59:33 +00:00
if (ImGui::TableSetColumnIndex(2)) ImGui::Text("%zu", logcat_entry->pid);
if (ImGui::TableSetColumnIndex(3)) ImGui::Text("%zu", logcat_entry->tid);
if (ImGui::TableSetColumnIndex(4)) ImGui::TextUnformatted(buffer_to(logcat_entry->buffer));
if (ImGui::TableSetColumnIndex(5)) ImGui::TextUnformatted(priority_to(logcat_entry->priority));
if (ImGui::TableSetColumnIndex(6)) ImGui::TextUnformatted(logcat_entry->tag);
if (ImGui::TableSetColumnIndex(7)) ImGui::TextUnformatted(logcat_entry->message);
2023-01-23 08:44:16 +00:00
}
}
clipper.End();
ImGui::PopFont();
2023-01-29 07:56:05 +00:00
ImGui::PopStyleVar();
2023-01-23 08:44:16 +00:00
if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) {
ImGui::SetScrollHereY(1.0f);
}
2023-01-29 07:56:05 +00:00
ImGui::EndTable();
2023-01-23 08:44:16 +00:00
}
2023-01-28 14:11:46 +00:00
void main_window(bool latest_log_entries_read, ImFont* monospace_font,
std::vector<LogcatEntry>& logcat_entries, std::vector<size_t>& filtered_logcat_entry_offsets,
const Config& active_config, Config& inactive_config,
const Filters& active_filters, Filters& inactive_filters,
bool* show_settings_window, bool* show_filters_window, bool* show_logs_window, bool* run_event_loop) {
2023-01-23 08:44:16 +00:00
if (!ImGui::Begin("LogMeow", run_event_loop)) {
ImGui::End();
return;
}
2023-01-24 05:17:05 +00:00
if (ImGui::Button("Settings") && !*show_settings_window) {
inactive_config = active_config;
2023-01-23 08:44:16 +00:00
*show_settings_window = true;
}
2023-01-28 14:11:46 +00:00
ImGui::SameLine();
if (ImGui::Button("Filters") && !*show_filters_window) {
copy_filters(inactive_filters, active_filters);
*show_filters_window = true;
}
2023-01-23 08:44:16 +00:00
ImGui::SameLine();
2023-01-29 10:08:27 +00:00
bool open_logs;
2023-01-23 08:44:16 +00:00
if (!latest_log_entries_read) {
2023-01-29 10:08:27 +00:00
open_logs = ImGui::RedButton("Logs");
} else {
open_logs = ImGui::Button("Logs");
2023-01-23 08:44:16 +00:00
}
2023-01-29 10:08:27 +00:00
if (open_logs) {
2023-01-23 08:44:16 +00:00
*show_logs_window = true;
}
ImGui::Separator();
// copied from imgui/imgui_demo.cpp: [SECTION] Example App: Debug Console / ShowExampleAppConsole()
// and [SECTION] Example App: Long Text / ShowExampleAppLongText()
// and [SECTION] Example App: Debug Log / ShowExampleAppLog()
2023-01-29 07:56:05 +00:00
// and Tables/Vertical scrolling, with clipping
const constexpr ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollX | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
if (ImGui::BeginTable("logcat", 8, flags)) {
render_table(monospace_font, logcat_entries, filtered_logcat_entry_offsets);
2023-01-23 08:44:16 +00:00
}
ImGui::End();
}