nebulus 0.1.25

Low-latency native OpenIPC FPV ground station built with egui
use eframe::egui;

use crate::{app::NebulusApp, model::LogLevel};

pub(crate) fn show(app: &mut NebulusApp, ui: &mut egui::Ui) {
    ui.horizontal(|ui| {
        ui.heading("Logs");
        ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
            if ui.button("Clear").clicked() {
                app.logs.clear();
            }
        });
    });
    ui.separator();
    for entry in app.logs.iter().rev() {
        ui.horizontal_top(|ui| {
            ui.monospace(format!("{:>8.2}", entry.elapsed_seconds));
            ui.label(
                egui::RichText::new(entry.level.label())
                    .monospace()
                    .color(level_color(ui, entry.level)),
            );
            ui.label(
                egui::RichText::new(entry.target)
                    .monospace()
                    .color(ui.visuals().weak_text_color()),
            );
            ui.label(&entry.message);
        });
        ui.separator();
    }
}

fn level_color(ui: &egui::Ui, level: LogLevel) -> egui::Color32 {
    match level {
        LogLevel::Debug => ui.visuals().weak_text_color(),
        LogLevel::Info => egui::Color32::from_rgb(78, 202, 157),
        LogLevel::Warn => egui::Color32::from_rgb(236, 181, 70),
        LogLevel::Error => egui::Color32::from_rgb(239, 86, 95),
    }
}