use crate::ui::{Model, theme};
pub const REFRESH: &str = "refresh";
fn entry(ui: &mut egui::Ui, word: &str, ink: egui::Color32) -> egui::Response {
ui.button(egui::RichText::new(word).color(ink))
}
pub fn render(ui: &mut egui::Ui, model: &mut Model) {
ui.horizontal_wrapped(|ui| strip(ui, model));
ui.add_space(theme::space::XS);
}
fn strip(ui: &mut egui::Ui, model: &mut Model) {
let again = entry(ui, REFRESH, theme::INK_WEAK);
crate::ui::act::tag(&again, &[crate::verbs::WORKSPACES.word]);
if again.clicked() {
model.refresh_roster();
}
let asking = model.waiting.iter().any(|section| !section.rows.is_empty())
|| model
.roster
.iter()
.any(|chunk| chunk.walls.iter().any(|wall| wall.attention > 0));
let ink = if asking {
theme::accent(theme::State::Attention)
} else {
theme::INK_WEAK
};
let waiting = entry(ui, crate::ui::queue::OPEN, ink);
crate::ui::act::tag(&waiting, &[crate::verbs::ATTENTION.word]);
if waiting.clicked() {
model.begin_queue();
}
let answers = entry(ui, crate::ui::commands::OPEN, theme::INK_WEAK);
crate::ui::act::tag(&answers, &[crate::verbs::HELP.word]);
if answers.clicked() {
model.begin_commands();
}
let doctor = entry(ui, crate::ui::doctor::OPEN, theme::INK_WEAK);
crate::ui::act::tag(&doctor, &[crate::verbs::DOCTOR]);
if doctor.clicked() {
model.begin_doctor();
}
let trail = entry(ui, crate::ui::trail::OPEN, theme::INK_WEAK);
crate::ui::act::tag(&trail, &[crate::verbs::OPS]);
if trail.clicked() {
model.begin_trail();
}
let board = entry(ui, crate::ui::board::OPEN, theme::INK_WEAK);
crate::ui::act::tag(
&board,
&[
crate::verbs::BALLS.word,
crate::verbs::BOARD.word,
crate::verbs::WORKSPACE_BALLS.word,
crate::verbs::MARKS.word,
],
);
if board.clicked() {
model.begin_board();
}
let prices = entry(ui, crate::ui::prices::OPEN, theme::INK_WEAK);
crate::ui::act::tag(
&prices,
&[crate::verbs::PRICES.word, crate::verbs::PROVIDERS.word],
);
if prices.clicked() {
model.begin_prices();
}
if entry(ui, crate::ui::find::OPEN, theme::INK_WEAK).clicked() {
model.begin_finding();
}
}
#[cfg(test)]
mod tests;