use crate::ui::{
Model, ask, bar, chat, composer, dock, enroll, keys, overlay, slash, status, tabs, theme,
};
pub fn render(ctx: &egui::Context, model: &mut Model) {
theme::install(ctx);
keys::handle(ctx, model);
bar::render(ctx, model);
let rule = (!model.covered()).then(|| {
let rule = egui::TopBottomPanel::bottom("rule")
.show(ctx, |ui| status::render(ui, model))
.response
.rect;
let running = dock::running(model);
if !running.is_empty() {
egui::TopBottomPanel::bottom("dock")
.frame(
egui::Frame::none()
.inner_margin(egui::Margin::symmetric(theme::space::L, theme::space::XXS)),
)
.show(ctx, |ui| dock::render(ui, model, &running));
}
egui::TopBottomPanel::bottom("composer").show(ctx, |ui| composer::render(ui, model));
if let Some(id) = model.deleting.clone() {
egui::TopBottomPanel::bottom("confirm")
.frame(
egui::Frame::none()
.inner_margin(egui::Margin::symmetric(theme::space::L, theme::space::XS)),
)
.show(ctx, |ui| bar::confirm::render(ui, model, &id));
}
if let Some(row) = ask::row(model) {
egui::TopBottomPanel::bottom("ask")
.frame(
egui::Frame::none()
.inner_margin(egui::Margin::symmetric(theme::space::L, theme::space::XS)),
)
.show(ctx, |ui| ask::render(ui, model, &row));
}
rule
});
egui::CentralPanel::default().show(ctx, |ui| {
if enroll::render(ui, model) {
return;
}
tabs::render(ui, model);
if chat::render(ui, model) {
slash::fire(model, crate::ui::queue::WORD, "");
}
slash::menu(ui, model);
let foot = rule.map_or(ui.max_rect().bottom(), |rule| rule.top());
status::dropup::render(ui, model, foot);
overlay::stand(ui, model);
});
}
#[cfg(test)]
mod tests;