use crate::*; /// Appears on first run (i.e. if state dir is missing). pub struct ArrangerRenameModal(bool, ArrangerFocus, String); impl ArrangerRenameModal { pub fn new (focus: ArrangerFocus, name: String) -> Self { Self(false, focus, name) } } render!(ArrangerRenameModal |self, buf, area| { let y = area.y + area.height / 2; Lozenge(Style::default().bold().white().dim()).draw(buf, Rect { x: 1, y: y - 1, width: area.width - 2, height: 3 })?; let label = match self.1 { ArrangerFocus::Mix => "Rename project:", ArrangerFocus::Track(_) => "Rename track:", ArrangerFocus::Scene(_) => "Rename scene:", ArrangerFocus::Clip(_, _) => "Rename clip:", }; label.blit( buf, area.x + 3, y, Some(Style::default().not_bold().white().not_dim()) )?; self.2.blit( buf, area.x + 3 + label.len() as u16 + 1, y, Some(Style::default().bold().white().not_dim()) )?; Ok(area) }); handle!(ArrangerRenameModal |self, e| { match e { AppEvent::Input(Event::Key(k)) => { if k.code == KeyCode::Esc { self.exit(); } else { todo!(); }; Ok(true) }, _ => Ok(false), } }); impl Exit for ArrangerRenameModal { fn exited (&self) -> bool { self.0 } fn exit (&mut self) { self.0 = true } }