implement sequencer focus; auto update_focus

This commit is contained in:
🪞👃🪞 2024-10-09 22:50:23 +03:00
parent 9f15f8fff9
commit 3bf475d15e
8 changed files with 119 additions and 160 deletions

View file

@ -7,30 +7,22 @@ pub fn main () -> Usually<()> { ArrangerCli::parse().run() }
#[command(version, about, long_about = None)]
pub struct ArrangerCli {
/// Name of JACK client
#[arg(short, long)]
name: Option<String>,
#[arg(short, long)] name: Option<String>,
/// Whether to include a transport toolbar (default: true)
#[arg(short, long, default_value_t = true)]
transport: bool,
#[arg(short, long, default_value_t = true)] transport: bool,
/// Number of tracks
#[arg(short = 'x', long, default_value_t = 8)]
tracks: usize,
#[arg(short = 'x', long, default_value_t = 8)] tracks: usize,
/// Number of scenes
#[arg(short, long, default_value_t = 8)]
scenes: usize,
#[arg(short, long, default_value_t = 8)] scenes: usize,
}
impl ArrangerCli {
/// Run the arranger TUI from CLI arguments.
fn run (&self) -> Usually<()> {
let jack = JackClient::Inactive(
Client::new("tek_arranger", ClientOptions::NO_START_SERVER)?.0
);
let jack_transport = jack.transport();
let mut transport = TransportToolbar::new(Some(jack_transport));
transport.set_focused(true);
let transport = Arc::new(RwLock::new(transport));
let phrases = Arc::new(RwLock::new(PhrasePool::new()));
let jack = Client::new("tek_arranger", ClientOptions::NO_START_SERVER)?.0;
let jack = JackClient::Inactive(jack);
let transport = Arc::new(RwLock::new(TransportToolbar::new(Some(jack.transport()))));
let phrases = Arc::new(RwLock::new(PhrasePool::new()));
let mut arrangement = Arrangement::new("", &phrases);
if let Some(name) = self.name.as_ref() {
*arrangement.name.write().unwrap() = name.clone();
@ -57,7 +49,7 @@ impl ArrangerCli {
}
)?
);
Tui::run(Arc::new(RwLock::new(Arranger {
let mut app = Arranger {
focus_cursor: (0, 1),
transport: self.transport.then_some(transport),
show_sequencer: Some(tek_core::Direction::Down),
@ -65,7 +57,9 @@ impl ArrangerCli {
editor: PhraseEditor::new(),
arrangement,
phrases,
})))?;
};
app.update_focus();
Tui::run(Arc::new(RwLock::new(app)))?;
Ok(())
}
}