use crate::core::*; use crate::view::*; use crate::model::*; pub struct ChainView<'a> { pub focused: bool, pub track: Option<&'a Track>, pub vertical: bool, } impl<'a> Render for ChainView<'a> { fn render (&self, buf: &mut Buffer, area: Rect) -> Usually { let style = Some(if self.focused { Style::default().green().dim() } else { Style::default().dim() }); let Rect { x, y, width, height } = area; if self.track.is_none() { let label = "No track selected"; label.blit( buf, x + (width - label.len() as u16) / 2, y + height / 2, Some(Style::default().dim().bold()) ); } fill_bg(buf, area, if self.focused { Color::Rgb(20, 45, 5) } else { Color::Reset }); lozenge_left(buf, x, y, height, style); let (area, _plugins) = if self.track.is_some() { if self.vertical { self.draw_as_column(buf, area, style)? } else { self.draw_as_row(buf, area, style)? } } else { (area, vec![]) }; lozenge_right(buf, x + width - 1, y, height, style); Ok(area) } } impl<'a> ChainView<'a> { pub fn draw_as_row ( &self, buf: &mut Buffer, area: Rect, style: Option