mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-09 05:06:43 +01:00
wip: phrases by reference instead of index
This commit is contained in:
parent
25e54eba4e
commit
5b2b04dcf9
2 changed files with 147 additions and 113 deletions
|
|
@ -58,9 +58,7 @@ impl Handle<Tui> for Arranger<Tui> {
|
|||
} else if focus == 1 && is_last_row {
|
||||
self.focus_next();
|
||||
} else {
|
||||
return
|
||||
return self.focused_mut().handle(from)
|
||||
|
||||
}
|
||||
},
|
||||
key!(KeyCode::Up) => {
|
||||
|
|
@ -93,12 +91,22 @@ impl Focus<3, Tui> for Arranger<Tui> {
|
|||
impl Arranger<Tui> {
|
||||
pub fn rename_selected (&mut self) {
|
||||
let Arrangement { selected, ref name, ref tracks, ref scenes, .. } = self.arrangement;
|
||||
self.modal = Some(Box::new(ArrangerRenameModal::new(selected, &match selected {
|
||||
ArrangementFocus::Mix => name.clone(),
|
||||
ArrangementFocus::Track(t) => tracks[t].name.clone(),
|
||||
ArrangementFocus::Scene(s) => scenes[s].name.clone(),
|
||||
ArrangementFocus::Clip(t, s) => tracks[t].phrases[s].read().unwrap().name.clone(),
|
||||
})));
|
||||
self.modal = match selected {
|
||||
ArrangementFocus::Mix => {
|
||||
Some(Box::new(ArrangerRenameModal::new(selected, &name)))
|
||||
},
|
||||
ArrangementFocus::Track(t) => {
|
||||
Some(Box::new(ArrangerRenameModal::new(selected, &tracks[t].name)))
|
||||
},
|
||||
ArrangementFocus::Scene(s) => {
|
||||
Some(Box::new(ArrangerRenameModal::new(selected, &scenes[s].name)))
|
||||
},
|
||||
ArrangementFocus::Clip(t, s) => if let Some(ref clip) = scenes[s].clips[t] {
|
||||
Some(Box::new(ArrangerRenameModal::new(selected, &clip.read().unwrap().name)))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
impl Focusable<Tui> for Arrangement<Tui> {
|
||||
|
|
@ -212,10 +220,12 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
|
|||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
let Self(state, factor) = self;
|
||||
let (cols, rows) = if *factor == 0 {(
|
||||
ArrangementTrack::clip_name_lengths(state.tracks.as_slice()),
|
||||
state.track_widths(),
|
||||
//ArrangementTrack::clip_name_lengths(state.tracks.as_slice()),
|
||||
Scene::ppqs(state.tracks.as_slice(), state.scenes.as_slice()),
|
||||
)} else {(
|
||||
ArrangementTrack::clip_name_lengths(state.tracks.as_slice()),
|
||||
state.track_widths(),
|
||||
//ArrangementTrack::clip_name_lengths(state.tracks.as_slice()),
|
||||
(0..=state.scenes.len()).map(|i|(factor*PPQ, factor*PPQ*i)).collect::<Vec<_>>(),
|
||||
)};
|
||||
//let height = rows.last().map(|(w,y)|(y+w)/PPQ).unwrap_or(16);
|
||||
|
|
@ -241,8 +251,7 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
|
|||
(Some(track), Some(Some(clip))) => match track.phrases.get(*clip) {
|
||||
Some(phrase) => {
|
||||
let name = &(phrase as &Arc<RwLock<Phrase>>).read().unwrap().name;
|
||||
let name = name.read().unwrap();
|
||||
let name = format!("{clip:02} {}", name);
|
||||
let name = format!("{}", name.read().unwrap());
|
||||
add(&name.as_str().push_x(1).fixed_x(w))?;
|
||||
if (track as &PhrasePlayer<_>).phrase == Some(*clip) {
|
||||
color = COLOR_PLAYING
|
||||
|
|
@ -262,7 +271,7 @@ impl<'a> Content for VerticalArranger<'a, Tui> {
|
|||
let playing = scene.is_playing(tracks);
|
||||
Stack::right(move |add| {
|
||||
add(&scene_name(scene, playing, height))?;
|
||||
for (track, (w, _x)) in cols.iter().enumerate() {
|
||||
for (track, (w, _)) in cols.iter().enumerate() {
|
||||
add(&scene_clip(scene, track, *w as u16, height))?;
|
||||
}
|
||||
Ok(())
|
||||
|
|
@ -572,10 +581,7 @@ impl<'a> Content for HorizontalArranger<'a, Tui> {
|
|||
let active_track = selected.track() == Some(i);
|
||||
if let Some(clip) = clip {
|
||||
let y2 = y + 2 + i as u16 * 2;
|
||||
let label = match tracks[i].phrases.get(*clip) {
|
||||
Some(phrase) => &format!("{}", phrase.read().unwrap().name.read().unwrap()),
|
||||
None => "...."
|
||||
};
|
||||
let label = format!("{}", clip.read().unwrap().name.read().unwrap());
|
||||
to.blit(&label, x + x2, y2, Some(if active_track && active_scene {
|
||||
Style::default().not_dim().yellow().bold()
|
||||
} else {
|
||||
|
|
@ -617,7 +623,7 @@ impl Content for ArrangerRenameModal<Tui> {
|
|||
//to.blit(&"▂", area.x() + 3 + label.len() as u16 + 1 + self.cursor as u16, y, style);
|
||||
//Ok(Some(area))
|
||||
//Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
impl Handle<Tui> for ArrangerRenameModal<Tui> {
|
||||
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue