align track/scene selectors

This commit is contained in:
🪞👃🪞 2025-01-16 18:58:23 +01:00
parent 2ad5b27db6
commit 5bf1bad7be

View file

@ -510,10 +510,11 @@ impl Tek {
} else {
("".to_string(), TuiTheme::g(64), TuiTheme::g(32))
};
let selected = selected_scene == Some(s) && selected_track == Some(t);
let active = editing && selected;
let label = move||Tui::fg(fg, Push::x(1, Tui::bold(true, name.to_string())));
let neighbor = selected_track == Some(t) && selected_scene.map(|s|s+1) == Some(s);
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())));
map_south(y1 as u16, h, Push::y(1, Fixed::y(h, Either::new(
active,
Thunk::new(||Bsp::a(
@ -559,13 +560,6 @@ impl Tek {
}
Ok(())
}
fn button (&self, key: String, label: String) -> impl Content<TuiOut> {
let compact = !self.is_editing();
Tui::bold(true, Bsp::e(
Margin::x(1, Tui::fg_bg(TuiTheme::g(0), TuiTheme::orange(), key)),
When::new(compact, Margin::x(1, Tui::fg_bg(TuiTheme::g(255), TuiTheme::g(96), label))),
))
}
fn input_header <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
let fg = TuiTheme::g(224);
let bg = TuiTheme::g(64);
@ -585,11 +579,24 @@ impl Tek {
))).boxed()).into()
}
fn track_header <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
(||Tui::bg(TuiTheme::g(32), Bsp::s(
Fill::x(Align::w(self.button(" C-a ".to_string(), format!(" add scene ({})", self.scenes().len())))),
Fill::x(Align::w(self.button(" C-t ".to_string(), format!(" add track ({})", self.tracks().len())))),
let add_scene = ||self.button(" C-a ".to_string(), format!(" add scene ({}/{})",
self.selected.scene().unwrap_or(0),
self.scenes().len()));
let add_track = ||self.button(" C-t ".to_string(), format!(" add track ({}/{})",
self.selected.track().unwrap_or(0),
self.tracks().len()));
(move||Tui::bg(TuiTheme::g(32), Bsp::s(
Fill::x(Align::w(add_scene())),
Fill::x(Align::w(add_track())),
)).boxed()).into()
}
fn button (&self, key: String, label: String) -> impl Content<TuiOut> {
let compact = !self.is_editing();
Tui::bold(true, Bsp::e(
Margin::x(1, Tui::fg_bg(TuiTheme::g(0), TuiTheme::orange(), key)),
When::new(compact, Margin::x(1, Tui::fg_bg(TuiTheme::g(255), TuiTheme::g(96), label))),
))
}
}
const KEYS_APP: &str = include_str!("keys.edn");
const KEYS_CLIP: &str = include_str!("keys_clip.edn");
@ -901,7 +908,7 @@ trait HasTracks: HasSelection + HasClock + HasJack + HasEditor + Send + Sync {
let color = track.color;
let fg = color.lightest.rgb;
let bg = color.base.rgb;
let active = self.selected().track() == Some(i);
let active = self.selected().track() == Some(i + 1);
let bfg = if active { Color::Rgb(255,255,255) } else { Color::Rgb(0,0,0) };
let border = Style::default().fg(bfg).bg(bg);
Tui::bg(bg, map_east(x1 as u16, (x2 - x1) as u16,
@ -1069,7 +1076,7 @@ trait HasScenes: HasSelection + HasEditor + Send + Sync {
let h = (1 + y2 - y1) as u16;
let name = format!("🭬{}", &scene.name);
let color = scene.color;
let active = selected == Some(i);
let active = selected == Some(i + 1);
let mid = if active { color.light } else { color.base };
let top = Some(last_color.read().unwrap().base.rgb);
let cell = phat_sel_3(