big border around selected scene

This commit is contained in:
🪞👃🪞 2025-01-09 23:31:51 +01:00
parent 2e81549747
commit 69832723b3
4 changed files with 117 additions and 80 deletions

View file

@ -66,6 +66,7 @@ pub enum TekMode {
pub fn main () -> Usually<()> {
let cli = TekCli::parse();
let name = cli.name.as_ref().map_or("tek", |x|x.as_str());
let color = ItemPalette::random();
let jack = JackConnection::new(name)?;
let engine = Tui::new()?;
let empty = &[] as &[&str];
@ -77,109 +78,113 @@ pub fn main () -> Usually<()> {
let right_tos = PortConnection::collect(&cli.right_to, empty, empty);
let perf = PerfModel::default();
let size = Measure::new();
let default_clip = ||{
let len = 384usize;
let color = ItemColor::random().into();
Arc::new(RwLock::new(MidiClip::new("Clip", true, len, None, Some(color))))
let default_clip = ||Arc::new(RwLock::new(MidiClip::new(
"Clip", true, 384usize, None, Some(ItemColor::random().into()))));
let default_player = |jack: &Arc<RwLock<JackConnection>>, clip: Option<&Arc<RwLock<MidiClip>>>|
MidiPlayer::new(&jack, name, clip, &midi_froms, &midi_tos);
let default_sampler = |jack: &Arc<RwLock<JackConnection>>|
Sampler::new(jack, &"sampler", &midi_froms,
&[&left_froms, &right_froms], &[&left_tos, &right_tos]);
let default_bpm = |clock: Clock|{
if let Some(bpm) = cli.bpm {
clock.timebase.bpm.set(bpm);
}
clock
};
let default_clock = |jack: &Arc<RwLock<JackConnection>>|{
let clock = Clock::from(jack);
default_bpm(clock)
};
// TODO: enable sync master/follow
//let sync_clock = |jack: &Arc<RwLock<JackConnection>>, app|{
//if cli.sync_lead {
//jack.read().unwrap().client().register_timebase_callback(false, |mut state|{
//app.clock().playhead.update_from_sample(state.position.frame() as f64);
//state.position.bbt = Some(app.clock().bbt());
//state.position
//})
//} else if cli.sync_follow {
//jack.read().unwrap().client().register_timebase_callback(false, |state|{
//app.clock().playhead.update_from_sample(state.position.frame() as f64);
//state.position
//})
//} else {
//Ok(())
//}
//};
Ok(match cli.mode {
TekMode::Clock => engine.run(&jack.activate_with(|jack|Ok(TransportTui {
jack: jack.clone(),
clock: Clock::from(jack),
jack: jack.clone(), clock: default_clock(jack),
}))?)?,
TekMode::Sequencer => engine.run(&jack.activate_with(|jack|Ok({
let clip = default_clip();
let player = MidiPlayer::new(&jack, name, Some(&clip), &midi_froms, &midi_tos)?;
let clip = default_clip();
let mut player = default_player(jack, Some(&clip))?;
player.clock = default_bpm(player.clock);
Sequencer {
_jack: jack.clone(),
clock: player.clock.clone(),
_jack: jack.clone(),
player,
editor: MidiEditor::from(&clip),
pool: PoolModel::from(&clip),
compact: true,
transport: true,
selectors: true,
midi_buf: vec![vec![];65536],
note_buf: vec![],
status: true,
pool: (&clip).into(),
editor: (&clip).into(),
midi_buf: vec![vec![];65536],
note_buf: vec![],
status: true,
perf,
size,
compact: true,
transport: true,
selectors: true,
}
}))?)?,
TekMode::Sampler => engine.run(&jack.activate_with(|jack|Ok(
SamplerTui {
cursor: (0, 0),
cursor: (0, 0),
editing: None,
mode: None,
mode: None,
note_lo: 36.into(),
note_pt: 36.into(),
color: ItemPalette::from(Color::Rgb(64, 128, 32)),
state: Sampler::new(jack, &"sampler", &midi_froms,
&[&left_froms, &right_froms], &[&left_tos, &right_tos])?,
state: default_sampler(jack)?,
color,
size,
}
))?)?,
TekMode::Groovebox => engine.run(&jack.activate_with(|jack|Ok({
let clip = default_clip();
let player = MidiPlayer::new(jack, &"sequencer", Some(&clip), &midi_froms, &midi_tos)?;
let sampler = Sampler::new(jack, &"sampler", &midi_froms,
&[&left_froms, &right_froms], &[&left_tos, &right_tos])?;
jack.read().unwrap().client().connect_ports(&player.midi_outs[0].port, &sampler.midi_in.port)?;
let clip = default_clip();
let mut player = default_player(jack, Some(&clip))?;
player.clock = default_bpm(player.clock);
let sampler = default_sampler(jack)?;
jack.connect_ports(&player.midi_outs[0].port, &sampler.midi_in.port)?;
let app = Groovebox {
_jack: jack.clone(),
_jack: jack.clone(),
player,
sampler,
pool: PoolModel::from(&clip),
editor: MidiEditor::from(&clip),
compact: true,
status: true,
pool: (&clip).into(),
editor: (&clip).into(),
midi_buf: vec![vec![];65536],
note_buf: vec![],
perf,
size,
compact: true,
status: true,
};
if let Some(bpm) = cli.bpm {
app.clock().timebase.bpm.set(bpm);
}
if cli.sync_lead {
jack.read().unwrap().client().register_timebase_callback(false, |mut state|{
app.clock().playhead.update_from_sample(state.position.frame() as f64);
state.position.bbt = Some(app.clock().bbt());
state.position
})?
} else if cli.sync_follow {
jack.read().unwrap().client().register_timebase_callback(false, |state|{
app.clock().playhead.update_from_sample(state.position.frame() as f64);
state.position
})?
}
app
}))?)?,
TekMode::Arranger { scenes, tracks, track_width, .. } =>
engine.run(&jack.activate_with(|jack|Ok({
let clock = Clock::from(jack);
let clip = default_clip();
let clock = default_clock(jack);
let mut app = Arranger {
jack: jack.clone(),
clock,
pool: (&clip).into(),
editor: (&clip).into(),
selected: ArrangerSelection::Clip(0, 0),
selected: ArrangerSelection::Scene(4),
scenes: vec![],
tracks: vec![],
color: ItemPalette::random(),
splits: [12, 20],
midi_buf: vec![vec![];65536],
note_buf: vec![],
compact: true,
color,
perf,
size,
};