wip: reenabling sequencer pane

This commit is contained in:
🪞👃🪞 2024-09-19 01:08:13 +03:00
parent 6e81082c17
commit 4c640301c6
2 changed files with 501 additions and 512 deletions

View file

@ -3,19 +3,7 @@ include!("lib.rs");
use tek_core::clap::{self, Parser};
pub fn main () -> Usually<()> {
Tui::run(Arc::new(RwLock::new(crate::ArrangerStandalone::from_args()?)))?;
Ok(())
}
struct ArrangerStandalone<E: Engine> {
/// Contains all the sequencers.
arranger: Arranger<E>,
/// Controls the JACK transport.
transport: Option<TransportToolbar<E>>,
/// This allows the sequencer view to be moved or hidden.
show_sequencer: Option<tek_core::Direction>,
///
focus: usize,
ArrangerCli::parse().run()
}
#[derive(Debug, Parser)]
@ -38,51 +26,69 @@ pub struct ArrangerCli {
scenes: usize,
}
impl ArrangerStandalone<Tui> {
pub fn from_args () -> Usually<Self> {
let args = ArrangerCli::parse();
impl ArrangerCli {
fn run (&self) -> Usually<()> {
let mut arranger = Arranger::new("");
let mut transport = match args.transport {
let mut transport = match self.transport {
Some(true) => Some(TransportToolbar::new(None)),
_ => None
};
if let Some(name) = args.name {
if let Some(name) = self.name.as_ref() {
*arranger.name.write().unwrap() = name.clone();
}
for _ in 0..args.tracks {
for _ in 0..self.tracks {
let track = arranger.track_add(None)?;
for _ in 0..args.scenes {
for _ in 0..self.scenes {
track.phrases.push(
Arc::new(RwLock::new(Phrase::new("", 96 * 4, None)))
);
}
}
for _ in 0..args.scenes {
for _ in 0..self.scenes {
let _scene = arranger.scene_add(None)?;
//for i in 0..args.tracks {
//for i in 0..self.tracks {
//scene.clips[i] = Some(i);
//}
}
transport.set_focused(true);
Ok(ArrangerStandalone {
let state = Arc::new(RwLock::new(ArrangerStandalone {
transport,
show_sequencer: Some(tek_core::Direction::Down),
arranger,
focus: 0
})
}));
Tui::run(state)?;
Ok(())
}
}
struct ArrangerStandalone<E: Engine> {
/// Controls the JACK transport.
transport: Option<TransportToolbar<E>>,
/// Contains all the sequencers.
arranger: Arranger<E>,
/// This allows the sequencer view to be moved or hidden.
show_sequencer: Option<tek_core::Direction>,
///
focus: usize,
}
impl Content for ArrangerStandalone<Tui> {
type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> {
Split::down(|add|{
add(&self.transport)?;
add(&self.arranger)?;
if let Some(sequencer) = self.arranger.sequencer() {
add(sequencer)?;
if let Some(direction) = self.show_sequencer {
add(&Split::new(direction, |add|{
add(&self.arranger)?;
add(&Min::Y(10, self.arranger.sequencer().map(
|x|x as &dyn Widget<Engine = Tui>
)))?;
Ok(())
}))
} else {
add(&self.arranger)
}
Ok(())
})
//if let Some(ref modal) = self.arranger.modal {
//to.fill_bg(area, Nord::bg_lo(false, false));