mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
wip: reenabling sequencer pane
This commit is contained in:
parent
6e81082c17
commit
4c640301c6
2 changed files with 501 additions and 512 deletions
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue