mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 04:36:45 +01:00
fix warnings
This commit is contained in:
parent
eccb355815
commit
4994e218f7
6 changed files with 57 additions and 49 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue