use crate::ui::{Model, chat, composer, convs, keys, roster, theme};
pub fn render(ctx: &egui::Context, model: &mut Model) {
ctx.set_visuals(theme::visuals());
keys::handle(ctx, model);
notice(ctx, model);
egui::SidePanel::left("roster")
.default_width(280.0)
.show(ctx, |ui| roster::render(ui, model));
egui::SidePanel::left("conversations")
.default_width(320.0)
.show(ctx, |ui| convs::render(ui, model));
egui::TopBottomPanel::bottom("composer").show(ctx, |ui| composer::render(ui, model));
egui::CentralPanel::default().show(ctx, |ui| chat::render(ui, model));
}
fn notice(ctx: &egui::Context, model: &mut Model) {
let Some(notice) = model.notice.clone() else {
return;
};
egui::TopBottomPanel::top("notice").show(ctx, |ui| {
ui.horizontal(|ui| {
if ui.button(DISMISS).clicked() {
model.dismiss();
}
ui.colored_label(theme::NOTICE, notice.line());
});
});
}
pub const DISMISS: &str = "×";
#[cfg(test)]
mod tests;