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)
(@down select 0 :scene-next)
(@right select 1 :scene)
(@up select :track :scene-prev)
(@down select :track :scene-next)
(@right select :track-next :scene)
(@q scene launch)
(@c scene color)

View file

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

View file

@ -160,12 +160,12 @@ has_editor!(|self: Tek|{
is_editing = self.editing.load(Relaxed);
});
edn_provide!(# usize: |self: Tek| {
":scene" => 0,
":scene-next" => 0,
":scene-prev" => 0,
":track" => 0,
":track-next" => 0,
":track-prev" => 0,
":scene" => self.selected.scene().unwrap_or(0),
":scene-next" => self.selected.scene().unwrap_or(0) + 1,
":scene-prev" => self.selected.scene().unwrap_or(0).saturating_sub(1),
":track" => self.selected.track().unwrap_or(0),
":track-next" => self.selected.track().unwrap_or(0) + 1,
":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())); {
bool {};
@ -273,11 +273,6 @@ impl Tek {
// 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);
@ -295,6 +290,20 @@ impl Tek {
..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 is_editing (&self) -> bool { self.editing.load(Relaxed) }
fn editor (&self) -> impl Content<TuiOut> + '_ { &self.editor }
@ -412,16 +421,6 @@ impl Tek {
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 (
&mut self,
name: Option<&str>,
@ -620,9 +619,9 @@ edn_command!(TekCommand: |app: Tek| {
("enqueue" [c: Arc<RwLock<MidiClip>>] Self::Enqueue(c))
("select" [t: usize, s: usize] match (t.expect("no track"), s.expect("no scene")) {
(0, 0) => Self::Select(Selection::Mix),
(t, 0) => Self::Select(Selection::Track(t - 1)),
(0, s) => Self::Select(Selection::Scene(s - 1)),
(t, s) => Self::Select(Selection::Clip(t - 1, s - 1)),
(t, 0) => Self::Select(Selection::Track(t)),
(0, s) => Self::Select(Selection::Scene(s)),
(t, s) => Self::Select(Selection::Clip(t, s)),
})
("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_mut (&mut self) -> &mut Selection { &mut self.selected }
}
pub trait HasSelection {
trait HasSelection {
fn selected (&self) -> &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_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_outs (&self) -> &Vec<JackPort<MidiOut>>;
fn tracks (&self) -> &Vec<Track>;
@ -990,7 +989,7 @@ impl HasScenes for Tek {
fn scenes (&self) -> &Vec<Scene> { &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_mut (&mut self) -> &mut Vec<Scene>;
fn scene_longest (&self) -> usize {