wip: fixing cursor

This commit is contained in:
🪞👃🪞 2025-01-16 14:32:04 +01:00
parent ed90196a60
commit 26562437bd
3 changed files with 32 additions and 33 deletions

View file

@ -1,6 +1,6 @@
(@up select 0 :scene-prev) (@up select :track :scene-prev)
(@down select 0 :scene-next) (@down select :track :scene-next)
(@right select 1 :scene) (@right select :track-next :scene)
(@q scene launch) (@q scene launch)
(@c scene color) (@c scene color)

View file

@ -1,6 +1,6 @@
(@left select :track-prev 0) (@left select :track-prev :scene)
(@right select :track-next 0) (@right select :track-next :scene)
(@down select :track down) (@down select :track :scene-next)
(@q track launch) (@q track launch)
(@c track color) (@c track color)

View file

@ -160,12 +160,12 @@ has_editor!(|self: Tek|{
is_editing = self.editing.load(Relaxed); is_editing = self.editing.load(Relaxed);
}); });
edn_provide!(# usize: |self: Tek| { edn_provide!(# usize: |self: Tek| {
":scene" => 0, ":scene" => self.selected.scene().unwrap_or(0),
":scene-next" => 0, ":scene-next" => self.selected.scene().unwrap_or(0) + 1,
":scene-prev" => 0, ":scene-prev" => self.selected.scene().unwrap_or(0).saturating_sub(1),
":track" => 0, ":track" => self.selected.track().unwrap_or(0),
":track-next" => 0, ":track-next" => self.selected.track().unwrap_or(0) + 1,
":track-prev" => 0, ":track-prev" => self.selected.track().unwrap_or(0).saturating_sub(1),
}); });
edn_view!(TuiOut: |self: Tek| self.size.of(EdnView::from_source(self, self.edn.as_ref())); { edn_view!(TuiOut: |self: Tek| self.size.of(EdnView::from_source(self, self.edn.as_ref())); {
bool {}; bool {};
@ -273,11 +273,6 @@ impl Tek {
// TODO: enable sync master/follow // TODO: enable sync master/follow
//let sync_clock = |jack: &Arc<RwLock<JackConnection>>, app|{ //let sync_clock = |jack: &Arc<RwLock<JackConnection>>, app|{
//if cli.sync_lead { //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 { //} else if cli.sync_follow {
//jack.read().unwrap().client().register_timebase_callback(false, |state|{ //jack.read().unwrap().client().register_timebase_callback(false, |state|{
//app.clock().playhead.update_from_sample(state.position.frame() as f64); //app.clock().playhead.update_from_sample(state.position.frame() as f64);
@ -295,6 +290,20 @@ impl Tek {
..Default::default() ..Default::default()
}) })
} }
fn sync_lead (&self, enable: bool) -> Usually<()> {
if enable {
self.jack.read().unwrap().client().register_timebase_callback(false, |mut state|{
let clock = self.clock();
clock.playhead.update_from_sample(state.position.frame() as f64);
state.position.bbt = Some(clock.bbt());
state.position
})?;
}
Ok(())
}
fn sync_follow (&self) {
// TODO
}
fn compact (&self) -> bool { self.compact } fn compact (&self) -> bool { self.compact }
fn is_editing (&self) -> bool { self.editing.load(Relaxed) } fn is_editing (&self) -> bool { self.editing.load(Relaxed) }
fn editor (&self) -> impl Content<TuiOut> + '_ { &self.editor } fn editor (&self) -> impl Content<TuiOut> + '_ { &self.editor }
@ -412,16 +421,6 @@ impl Tek {
clip.write().unwrap().toggle_loop() clip.write().unwrap().toggle_loop()
} }
} }
//fn randomize_color (&mut self) {
//match self.selected {
//Selection::Mix => { self.color = ItemPalette::random() },
//Selection::Track(t) => { self.tracks[t].color = ItemPalette::random() },
//Selection::Scene(s) => { self.scenes[s].color = ItemPalette::random() },
//Selection::Clip(t, s) => if let Some(clip) = &self.scenes[s].clips[t] {
//clip.write().unwrap().color = ItemPalette::random();
//}
//}
//}
fn track_add ( fn track_add (
&mut self, &mut self,
name: Option<&str>, name: Option<&str>,
@ -620,9 +619,9 @@ edn_command!(TekCommand: |app: Tek| {
("enqueue" [c: Arc<RwLock<MidiClip>>] Self::Enqueue(c)) ("enqueue" [c: Arc<RwLock<MidiClip>>] Self::Enqueue(c))
("select" [t: usize, s: usize] match (t.expect("no track"), s.expect("no scene")) { ("select" [t: usize, s: usize] match (t.expect("no track"), s.expect("no scene")) {
(0, 0) => Self::Select(Selection::Mix), (0, 0) => Self::Select(Selection::Mix),
(t, 0) => Self::Select(Selection::Track(t - 1)), (t, 0) => Self::Select(Selection::Track(t)),
(0, s) => Self::Select(Selection::Scene(s - 1)), (0, s) => Self::Select(Selection::Scene(s)),
(t, s) => Self::Select(Selection::Clip(t - 1, s - 1)), (t, s) => Self::Select(Selection::Clip(t, s)),
}) })
("clip" [a, ..b] Self::Clip(ClipCommand::from_edn(app, &a.to_ref(), b) ("clip" [a, ..b] Self::Clip(ClipCommand::from_edn(app, &a.to_ref(), b)
@ -739,7 +738,7 @@ impl HasSelection for Tek {
fn selected (&self) -> &Selection { &self.selected } fn selected (&self) -> &Selection { &self.selected }
fn selected_mut (&mut self) -> &mut Selection { &mut self.selected } fn selected_mut (&mut self) -> &mut Selection { &mut self.selected }
} }
pub trait HasSelection { trait HasSelection {
fn selected (&self) -> &Selection; fn selected (&self) -> &Selection;
fn selected_mut (&mut self) -> &mut Selection; fn selected_mut (&mut self) -> &mut Selection;
} }
@ -801,7 +800,7 @@ impl HasTracks for Tek {
fn tracks (&self) -> &Vec<Track> { &self.tracks } fn tracks (&self) -> &Vec<Track> { &self.tracks }
fn tracks_mut (&mut self) -> &mut Vec<Track> { &mut self.tracks } fn tracks_mut (&mut self) -> &mut Vec<Track> { &mut self.tracks }
} }
pub trait HasTracks: HasSelection + HasClock + HasJack + HasEditor + Send + Sync { trait HasTracks: HasSelection + HasClock + HasJack + HasEditor + Send + Sync {
fn midi_ins (&self) -> &Vec<JackPort<MidiIn>>; fn midi_ins (&self) -> &Vec<JackPort<MidiIn>>;
fn midi_outs (&self) -> &Vec<JackPort<MidiOut>>; fn midi_outs (&self) -> &Vec<JackPort<MidiOut>>;
fn tracks (&self) -> &Vec<Track>; fn tracks (&self) -> &Vec<Track>;
@ -990,7 +989,7 @@ impl HasScenes for Tek {
fn scenes (&self) -> &Vec<Scene> { &self.scenes } fn scenes (&self) -> &Vec<Scene> { &self.scenes }
fn scenes_mut (&mut self) -> &mut Vec<Scene> { &mut self.scenes } fn scenes_mut (&mut self) -> &mut Vec<Scene> { &mut self.scenes }
} }
pub trait HasScenes: HasSelection + HasEditor + Send + Sync { trait HasScenes: HasSelection + HasEditor + Send + Sync {
fn scenes (&self) -> &Vec<Scene>; fn scenes (&self) -> &Vec<Scene>;
fn scenes_mut (&mut self) -> &mut Vec<Scene>; fn scenes_mut (&mut self) -> &mut Vec<Scene>;
fn scene_longest (&self) -> usize { fn scene_longest (&self) -> usize {