remove VerticalArrangerGrid/Cursor

This commit is contained in:
🪞👃🪞 2024-10-18 15:55:45 +03:00
parent a4269337bc
commit 0b71a57ead
4 changed files with 196 additions and 205 deletions

View file

@ -62,7 +62,7 @@ pub struct Scene {
#[derive(PartialEq, Clone, Copy)]
/// Represents the current user selection in the arranger
pub enum ArrangementFocus {
/** The whole mix is selected */
/// The whole mix is selected
Mix,
/// A track is selected.
Track(usize),
@ -77,19 +77,27 @@ pub enum ArrangementViewMode {
Horizontal,
Vertical(usize),
}
/// A collection of phrases to play on each track.
/// Arrangement, rendered vertically (session/grid mode).
pub struct VerticalArranger<'a, E: Engine>(
pub &'a Arrangement<E>, pub usize
);
pub struct VerticalArrangerGrid<'a>(
pub u16, pub &'a [(usize, usize)], pub &'a [(usize, usize)]
);
pub struct VerticalArrangerCursor<'a>(
pub bool, pub ArrangementFocus, pub u16, pub &'a [(usize, usize)], pub &'a [(usize, usize)],
);
/// Arrangement, rendered horizontally (arrangement/track mode).
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);
}
pub fn toggle_play (&mut self) -> Perhaps<bool> {
match self.transport {
Some(ref mut transport) => { transport.write().unwrap().toggle_play()?; },
None => { return Ok(None) }
}
Ok(Some(true))
}
}
/// Focus layout of arranger app
impl<E: Engine> FocusGrid<ArrangerFocus> for Arranger<E> {
fn cursor (&self) -> (usize, usize) { self.focus_cursor }
@ -175,13 +183,53 @@ impl<E: Engine> Arrangement<E> {
pub fn is_last_row (&self) -> bool {
let selected = self.selected;
(self.scenes.len() == 0 && (selected.is_mix() || selected.is_track())) || match selected {
ArrangementFocus::Scene(s) =>
s == self.scenes.len() - 1,
ArrangementFocus::Clip(_, s) =>
s == self.scenes.len() - 1,
ArrangementFocus::Scene(s) => s == self.scenes.len() - 1,
ArrangementFocus::Clip(_, s) => s == self.scenes.len() - 1,
_ => false
}
}
pub fn toggle_loop (&mut self) {
if let Some(phrase) = self.phrase() {
phrase.write().unwrap().toggle_loop()
}
}
pub fn go_up (&mut self) {
match self.mode {
ArrangementViewMode::Horizontal => self.track_prev(),
_ => self.scene_prev(),
};
self.show_phrase();
}
pub fn go_down (&mut self) {
match self.mode {
ArrangementViewMode::Horizontal => self.track_next(),
_ => self.scene_next(),
};
self.show_phrase();
}
pub fn go_left (&mut self) {
match self.mode {
ArrangementViewMode::Horizontal => self.scene_prev(),
_ => self.track_prev(),
};
self.show_phrase();
}
pub fn go_right (&mut self) {
match self.mode {
ArrangementViewMode::Horizontal => self.scene_next(),
_ => self.track_next(),
};
self.show_phrase();
}
pub fn move_back (&mut self) {
todo!("arrangement: move back")
}
pub fn move_forward (&mut self) {
todo!("arrangement: move forward")
}
pub fn rename_selected (&mut self) {
todo!("arrangement: rename selected")
}
}
/// Methods for tracks in arrangement
impl<E: Engine> Arrangement<E> {