show sequencer with arranger

This commit is contained in:
🪞👃🪞 2024-08-18 18:43:58 +03:00
parent 964e8382d3
commit a533951fc6
10 changed files with 185 additions and 137 deletions

View file

@ -1,6 +1,7 @@
//! Clip launcher and arrangement editor.
use crate::*;
use tek_core::Direction;
/// Represents the tracks and scenes of the composition.
pub struct Arranger {
@ -16,22 +17,52 @@ pub struct Arranger {
pub scenes: Vec<Scene>,
pub focused: bool,
pub entered: bool,
pub fixed_height: bool,
pub transport: Option<Arc<RwLock<TransportToolbar>>>,
pub show_sequencer: Option<Direction>
}
render!(Arranger |self, buf, area| {
let arrangement = |buf, area| match self.mode {
ArrangerViewMode::Horizontal =>
super::arranger_view_h::draw(self, buf, area),
ArrangerViewMode::VerticalCompact1 =>
super::arranger_view_v::draw_compact_1(self, buf, area),
ArrangerViewMode::VerticalCompact2 =>
super::arranger_view_v::draw_compact_2(self, buf, area),
ArrangerViewMode::VerticalExpanded =>
super::arranger_view_v::draw_expanded(self, buf, area),
};
if let Some(direction) = self.show_sequencer {
let used = arrangement(buf, area)?;
match direction {
Direction::Down => {
let area = Rect {
y: area.y + used.height,
height: area.height - used.height,
..area
};
self.sequencer().map(|sequencer|sequencer.render(buf, area));
},
_ => unimplemented!()
}
Ok(area)
} else {
arrangement(buf, area)
}
});
impl Arranger {
pub fn new (name: &str) -> Self {
Self {
name: name.into(),
mode: ArrangerViewMode::Vertical,
selected: ArrangerFocus::Clip(0, 0),
scenes: vec![],
tracks: vec![],
entered: true,
focused: true,
fixed_height: false,
transport: None
name: name.into(),
mode: ArrangerViewMode::VerticalCompact2,
selected: ArrangerFocus::Clip(0, 0),
scenes: vec![],
tracks: vec![],
entered: true,
focused: true,
transport: None,
show_sequencer: Some(Direction::Down),
}
}
pub fn activate (&mut self) {
@ -60,9 +91,10 @@ impl Arranger {
.flatten()
}
pub fn show_phrase (&mut self) -> Usually<()> {
unimplemented!()
//unimplemented!()
//let phrase = self.phrase();
//self.sequencer.show(phrase)
Ok(())
}
pub fn phrase (&self) -> Option<&Arc<RwLock<Phrase>>> {
let track_id = self.selected.track()?;
@ -142,12 +174,3 @@ impl Arranger {
format!("Scene {}", self.scenes.len() + 1)
}
}
render!(Arranger |self, buf, area| match self.mode {
ArrangerViewMode::Horizontal =>
super::arranger_view_h::draw(self, buf, area),
ArrangerViewMode::Vertical =>
super::arranger_view_v::draw_expanded(self, buf, area),
ArrangerViewMode::VerticalCompact =>
super::arranger_view_v::draw_compact(self, buf, area),
});