fix warnings

This commit is contained in:
🪞👃🪞 2024-10-18 22:53:53 +03:00
parent eccb355815
commit 4994e218f7
6 changed files with 57 additions and 49 deletions

View file

@ -17,7 +17,16 @@ pub struct Arranger<E: Engine> {
}
/// Sections in the arranger app that may be focused
#[derive(Copy, Clone, PartialEq, Eq)]
pub enum ArrangerFocus { Transport, Arrangement, PhrasePool, PhraseEditor }
pub enum ArrangerFocus {
/// The transport (toolbar) is focused
Transport,
/// The arrangement (grid) is focused
Arrangement,
/// The phrase list (pool) is focused
PhrasePool,
/// The phrase editor (sequencer) is focused
PhraseEditor,
}
/// Represents the tracks and scenes of the composition.
pub struct Arrangement<E: Engine> {
/// Name of arranger
@ -76,7 +85,9 @@ pub enum ArrangementFocus {
/// Display mode of arranger
#[derive(PartialEq)]
pub enum ArrangementViewMode {
/// Tracks are rows
Horizontal,
/// Tracks are columns
Vertical(usize),
}
/// Arrangement, rendered vertically (session/grid mode).
@ -88,10 +99,7 @@ pub struct HorizontalArranger<'a, E: Engine>(
pub &'a Arrangement<E>
);
impl<E: Engine> Arranger<E> {
pub fn edit_phrase (&mut self) {
self.editor.phrase = self.arrangement.phrase().clone();
self.focus(ArrangerFocus::PhraseEditor);
}
/// Toggle global play/pause
pub fn toggle_play (&mut self) -> Perhaps<bool> {
match self.transport {
Some(ref mut transport) => { transport.write().unwrap().toggle_play()?; },
@ -99,22 +107,26 @@ impl<E: Engine> Arranger<E> {
}
Ok(Some(true))
}
/// Focus the editor with the current phrase
pub fn edit_phrase (&mut self) {
self.editor.phrase = self.arrangement.phrase().clone();
self.focus(ArrangerFocus::PhraseEditor);
}
/// Rename the selected track, scene, or clip
pub fn rename_selected (&mut self) {
let Self { phrases, arrangement, .. } = self;
let Arrangement { selected, ref name, ref tracks, ref scenes, .. } = arrangement;
let Arrangement { selected, ref scenes, .. } = self.arrangement;
match selected {
ArrangementFocus::Track(t) => { todo!("rename track"); },
ArrangementFocus::Scene(s) => { todo!("rename scene"); },
ArrangementFocus::Clip(t, s) =>
if let Some(ref phrase) = scenes[*s].clips[*t] {
let index = self.phrases.read().unwrap().index_of(&*phrase.read().unwrap());
if let Some(index) = index {
self.focus(ArrangerFocus::PhrasePool);
self.phrases.write().unwrap().phrase = index;
self.phrases.write().unwrap().begin_rename();
}
},
_ => {}
ArrangementFocus::Mix => {},
ArrangementFocus::Track(_) => { todo!("rename track"); },
ArrangementFocus::Scene(_) => { todo!("rename scene"); },
ArrangementFocus::Clip(t, s) => if let Some(ref phrase) = scenes[s].clips[t] {
let index = self.phrases.read().unwrap().index_of(&*phrase.read().unwrap());
if let Some(index) = index {
self.focus(ArrangerFocus::PhrasePool);
self.phrases.write().unwrap().phrase = index;
self.phrases.write().unwrap().begin_rename();
}
},
}
}
}
@ -172,27 +184,27 @@ impl<E: Engine> Arrangement<E> {
}
pub fn delete (&mut self) {
match self.selected {
ArrangementFocus::Track(t) => self.track_del(),
ArrangementFocus::Scene(s) => self.scene_del(),
ArrangementFocus::Clip(t, s) => self.phrase_del(),
ArrangementFocus::Track(_) => self.track_del(),
ArrangementFocus::Scene(_) => self.scene_del(),
ArrangementFocus::Clip(_, _) => self.phrase_del(),
_ => {}
}
self.show_phrase()
}
pub fn increment (&mut self) {
match self.selected {
ArrangementFocus::Track(t) => self.track_width_inc(),
ArrangementFocus::Scene(s) => self.scene_next(),
ArrangementFocus::Clip(t, s) => self.phrase_next(),
ArrangementFocus::Track(_) => self.track_width_inc(),
ArrangementFocus::Scene(_) => self.scene_next(),
ArrangementFocus::Clip(_, _) => self.phrase_next(),
_ => {}
}
self.show_phrase()
}
pub fn decrement (&mut self) {
match self.selected {
ArrangementFocus::Track(t) => self.track_width_dec(),
ArrangementFocus::Scene(s) => self.scene_prev(),
ArrangementFocus::Clip(t, s) => self.phrase_prev(),
ArrangementFocus::Track(_) => self.track_width_dec(),
ArrangementFocus::Scene(_) => self.scene_prev(),
ArrangementFocus::Clip(_, _) => self.phrase_prev(),
_ => {}
}
self.show_phrase()
@ -492,7 +504,7 @@ impl ArrangementFocus {
} else {
format!("S??")
},
Self::Clip(t, s) => if let (Some(track), Some(scene)) = (
Self::Clip(t, s) => if let (Some(_), Some(scene)) = (
tracks.get(*t),
scenes.get(*s),
) {
@ -607,7 +619,7 @@ impl Scene {
}
}
/// Returns the pulse length of the longest phrase in the scene
pub fn pulses <E: Engine> (&self, tracks: &[ArrangementTrack<E>]) -> usize {
pub fn pulses (&self) -> usize {
self.clips.iter().fold(0, |a, p|a.max(p.as_ref().map(|q|q.read().unwrap().length).unwrap_or(0)))
}
/// Returns true if all phrases in the scene are currently playing
@ -624,10 +636,10 @@ impl Scene {
None => true
})
}
pub fn ppqs <E: Engine> (tracks: &[ArrangementTrack<E>], scenes: &[Self]) -> Vec<(usize, usize)> {
pub fn ppqs (scenes: &[Self]) -> Vec<(usize, usize)> {
let mut total = 0;
let mut scenes: Vec<(usize, usize)> = scenes.iter().map(|scene|{
let pulses = scene.pulses(tracks).max(PPQ);
let pulses = scene.pulses().max(PPQ);
total = total + pulses;
(pulses, total - pulses)
}).collect();