diff --git a/tek/src/lib.rs b/tek/src/lib.rs index 89857ac4..b8d43861 100644 --- a/tek/src/lib.rs +++ b/tek/src/lib.rs @@ -534,18 +534,22 @@ impl Tek { map_east(x1 as u16, w, border(Map::new(scenes, move|(_, scene, y1, y2), s| { let last_color = last_color.clone(); let h = (1 + y2 - y1) as u16; - let color = scene.color; - let (name, fg, bg) = if let Some(c) = &scene.clips[t] { - let c = c.read().unwrap(); - (c.name.to_string(), c.color.lightest.rgb, c.color) - } else { - ("⏹ ".to_string(), Tui::g(64), ItemPalette::G[32]) + let color = scene.color; + let mut name = String::from("⏹ "); + let mut fg = Tui::g(64); + let mut bg = ItemPalette::G[32]; + if let Some(clip) = &scene.clips[t] { + let clip = clip.read().unwrap(); + name.clear(); + write!(&mut name, "{}", clip.name); + fg = clip.color.lightest.rgb; + bg = clip.color }; let same_track = selected_track == Some(t+1); let selected = same_track && Some(s+1) == selected_scene; let neighbor = same_track && Some(s) == selected_scene; let active = editing && selected; - let label = move||Tui::fg(fg, Push::x(1, Tui::bold(true, name.to_string()))); + let label = move||Tui::fg(fg, Push::x(1, Tui::bold(true, name.clone()))); let mid = if active { bg.light } else { bg.base }; let top = if neighbor { None } else { Some(last_color.read().unwrap().base.rgb) }; let mid = mid.rgb; @@ -553,10 +557,10 @@ impl Tek { *last_color.write().unwrap() = bg; map_south(y1 as u16, h, Push::y(1, Fixed::y(h, Either::new(active, Thunk::new(||Bsp::a( - Fill::xy(Align::nw(button(" Tab ".into(), "".into()))), + Fill::xy(Align::nw(button(" Tab ", ""))), &self.editor)), Thunk::new(move||Bsp::a( - When::new(selected, Fill::y(Align::n(button(" Tab ".into(), "edit".into())))), + When::new(selected, Fill::y(Align::n(button(" Tab ", "edit")))), phat_sel_3(selected, label(), label(), top, mid, low) )), )))) @@ -592,7 +596,7 @@ impl Tek { fn input_header <'a> (&'a self) -> ThunkBox<'a, TuiOut> { let fg = Tui::g(224); let bg = Tui::g(64); - (move||Bsp::s(Fill::x(Align::w(self.button(" I ".to_string(), format!(" midi ins ({})", self.midi_ins().len())))), self.midi_ins().get(0).map(|inp|Bsp::s( + (move||Bsp::s(Fill::x(Align::w(self.button(" I ", format!(" midi ins ({})", self.midi_ins().len())))), self.midi_ins().get(0).map(|inp|Bsp::s( Fill::x(Tui::bold(true, Tui::fg_bg(fg, bg, Align::w(inp.name.clone())))), inp.connect.get(0).map(|connect|Fill::x(Align::w(Tui::bold(false, Tui::fg_bg(fg, bg, connect.info()))))), @@ -601,17 +605,17 @@ impl Tek { fn output_header <'a> (&'a self) -> ThunkBox<'a, TuiOut> { let fg = Tui::g(224); let bg = Tui::g(64); - (move||Bsp::s(Fill::x(Align::w(self.button(" O ".to_string(), format!(" midi outs ({}) ", self.midi_outs().len())))), self.midi_outs().get(0).map(|out|Bsp::s( + (move||Bsp::s(Fill::x(Align::w(self.button(" O ", format!(" midi outs ({}) ", self.midi_outs().len())))), self.midi_outs().get(0).map(|out|Bsp::s( Fill::x(Tui::bold(true, Tui::fg_bg(fg, bg, Align::w(out.name.clone())))), out.connect.get(0).map(|connect|Fill::x(Align::w(Tui::bold(false, Tui::fg_bg(fg, bg, connect.info()))))), ))).boxed()).into() } fn track_header <'a> (&'a self) -> ThunkBox<'a, TuiOut> { - let add_scene = ||self.button(" C-a ".to_string(), format!(" add scene ({}/{})", + let add_scene = ||self.button(" C-a ", format!(" add scene ({}/{})", self.selected.scene().unwrap_or(0), self.scenes().len())); - let add_track = ||self.button(" C-t ".to_string(), format!(" add track ({}/{})", + let add_track = ||self.button(" C-t ", format!(" add track ({}/{})", self.selected.track().unwrap_or(0), self.tracks().len())); (move||Tui::bg(Tui::g(32), Bsp::s( @@ -619,7 +623,9 @@ impl Tek { Fill::x(Align::w(add_track())), )).boxed()).into() } - fn button (&self, key: String, label: String) -> impl Content { + fn button <'a> ( + &'a self, key: impl Content + 'a, label: impl Content + 'a + ) -> impl Content + 'a { let compact = !self.is_editing(); Tui::bold(true, Bsp::e( Margin::x(1, Tui::fg_bg(Tui::g(0), Tui::orange(), key)), @@ -1269,7 +1275,7 @@ audio!(|self: Tek, client, scope|{ self.perf.update(t0, scope); Control::Continue }); -fn button (key: String, label: String) -> impl Content { +fn button (key: &'static str, label: &'static str) -> impl Content + 'static { Tui::bold(true, Bsp::e( Margin::x(1, Tui::fg_bg(Tui::g(0), Tui::orange(), key)), Margin::x(1, Tui::fg_bg(Tui::g(255), Tui::g(96), label)),