use crate::reply::doctor::Check;
use crate::ui::{Model, theme};
pub const OPEN: &str = "doctor…";
pub const CLOSE: &str = "done";
pub const HEADING: &str = "is this box wired";
pub const NOT_ANSWERED: &str = "waiting to hear whether this box is wired";
pub const NO_CHECKS: &str = "this engine ran no check";
pub fn render(ui: &mut egui::Ui, model: &mut Model) -> bool {
if !model.doctoring() {
return false;
}
ui.heading(HEADING);
ui.horizontal_wrapped(|ui| {
if ui.button(CLOSE).clicked() {
model.close_lookup();
}
});
ui.separator();
let diagnoses = model.diagnoses.clone();
if diagnoses.is_empty() {
ui.label(NOT_ANSWERED);
return true;
}
egui::ScrollArea::vertical()
.id_salt(HEADING)
.auto_shrink(false)
.show(ui, |ui| {
for section in &diagnoses {
ui.separator();
ui.label(crate::ui::roster::header(§ion.channel));
if section.rows.is_empty() {
ui.label(NO_CHECKS);
continue;
}
for row in §ion.rows {
check(ui, row);
}
}
});
true
}
fn check(ui: &mut egui::Ui, row: &Check) {
let state = if row.ok {
theme::State::Rest
} else {
theme::State::Error
};
ui.add(
egui::Label::new(egui::RichText::new(row.headline()).color(theme::accent(state))).wrap(),
);
if let Some(remedy) = &row.remedy {
ui.add(egui::Label::new(remedy.clone()).wrap());
}
}
#[cfg(test)]
mod tests;