mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 04:36:45 +01:00
50 lines
1.8 KiB
Rust
50 lines
1.8 KiB
Rust
use tek_api::{JackActivate, ArrangerTracksApi, HasScenes};
|
|
use tek_core::{*, clap::{self, Parser}};
|
|
|
|
pub fn main () -> Usually<()> {
|
|
ArrangerCli::parse().run()
|
|
}
|
|
|
|
/// Parses CLI arguments to the `tek_arranger` invocation.
|
|
#[derive(Debug, Parser)]
|
|
#[command(version, about, long_about = None)]
|
|
pub struct ArrangerCli {
|
|
/// Name of JACK client
|
|
#[arg(short, long)] name: Option<String>,
|
|
/// Whether to include a transport toolbar (default: true)
|
|
#[arg(short, long, default_value_t = true)] transport: bool,
|
|
/// Number of tracks
|
|
#[arg(short = 'x', long, default_value_t = 8)] tracks: usize,
|
|
/// Number of scenes
|
|
#[arg(short, long, default_value_t = 8)] scenes: usize,
|
|
}
|
|
|
|
impl ArrangerCli {
|
|
/// Run the arranger TUI from CLI arguments.
|
|
fn run (&self) -> Usually<()> {
|
|
Tui::run(JackClient::new("tek_arranger")?.activate_with(|jack|{
|
|
let mut app = tek_tui::ArrangerTui::try_from(jack)?;
|
|
if let Some(name) = self.name.as_ref() {
|
|
*app.name.write().unwrap() = name.clone();
|
|
}
|
|
let track_color_1 = ItemColor::random();
|
|
let track_color_2 = ItemColor::random();
|
|
for i in 0..self.tracks {
|
|
let _track = app.track_add(
|
|
None,
|
|
Some(track_color_1.mix(track_color_2, i as f32 / self.tracks as f32))
|
|
)?;
|
|
}
|
|
let scene_color_1 = ItemColor::random();
|
|
let scene_color_2 = ItemColor::random();
|
|
for i in 0..self.scenes {
|
|
let _scene = app.scene_add(
|
|
None,
|
|
Some(scene_color_1.mix(scene_color_2, i as f32 / self.scenes as f32))
|
|
)?;
|
|
}
|
|
Ok(app)
|
|
})?)?;
|
|
Ok(())
|
|
}
|
|
}
|