From 55b6745d4d87541f2a0e268fc2a3a7ab4c0476c3 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sun, 4 May 2025 15:43:51 +0300 Subject: [PATCH] use expose! macro for MidiPool and MidiEditor --- crates/app/src/api.rs | 101 ++++++++++++++++++++--------------------- crates/app/src/view.rs | 4 +- 2 files changed, 51 insertions(+), 54 deletions(-) diff --git a/crates/app/src/api.rs b/crates/app/src/api.rs index a5e414da..c1c8b143 100644 --- a/crates/app/src/api.rs +++ b/crates/app/src/api.rs @@ -7,6 +7,16 @@ macro_rules! ns { ($C:ty, $s:expr, $a:expr, $W:expr) => { <$C>::try_from_expr($s macro_rules! cmd { ($cmd:expr) => {{ $cmd; None }}; } macro_rules! cmd_todo { ($msg:literal) => {{ println!($msg); None }}; } +handle!(TuiIn: |self: Tek, input|Ok(if let Some(command) = self.config.keys.command(self, input) { + let undo = command.execute(self)?; + if let Some(undo) = undo { + self.history.push(undo); + } + Some(true) +} else { + None +})); + expose!([self: Tek] ([bool] (":mode-editor" self.is_editing()) @@ -49,58 +59,45 @@ expose!([self: Tek] (":scene-prev" self.selected.scene_prev()) (":track-next" self.selected.track_next(self.tracks.len())) (":track-prev" self.selected.track_prev()))); -provide!(bool: |self: MidiPool| {}); -provide!(MidiClip: |self: MidiPool| { - ":new-clip" => self.new_clip(), - ":cloned-clip" => self.cloned_clip(), -}); -provide!(PathBuf: |self: MidiPool| {}); -provide!(Arc: |self: MidiPool| {}); -provide!(usize: |self: MidiPool| { - ":current" => 0, - ":after" => 0, - ":previous" => 0, - ":next" => 0 -}); -provide!(ItemColor: |self: MidiPool| { - ":random-color" => ItemColor::random() -}); -provide!(bool: |self: MidiEditor| { - ":true" => true, - ":false" => false, - ":time-lock" => self.time_lock().get(), - ":time-lock-toggle" => !self.time_lock().get(), -}); -provide!(usize: |self: MidiEditor| { - ":note-length" => self.note_len(), - ":note-pos" => self.note_pos(), - ":note-pos-next" => self.note_pos() + 1, - ":note-pos-prev" => self.note_pos().saturating_sub(1), - ":note-pos-next-octave" => self.note_pos() + 12, - ":note-pos-prev-octave" => self.note_pos().saturating_sub(12), - ":note-len" => self.note_len(), - ":note-len-next" => self.note_len() + 1, - ":note-len-prev" => self.note_len().saturating_sub(1), - ":note-range" => self.note_axis().get(), - ":note-range-prev" => self.note_axis().get() + 1, - ":note-range-next" => self.note_axis().get().saturating_sub(1), - ":time-pos" => self.time_pos(), - ":time-pos-next" => self.time_pos() + self.time_zoom().get(), - ":time-pos-prev" => self.time_pos().saturating_sub(self.time_zoom().get()), - ":time-zoom" => self.time_zoom().get(), - ":time-zoom-next" => self.time_zoom().get() + 1, - ":time-zoom-prev" => self.time_zoom().get().saturating_sub(1).max(1), -}); - -handle!(TuiIn: |self: Tek, input|Ok(if let Some(command) = self.config.keys.command(self, input) { - let undo = command.execute(self)?; - if let Some(undo) = undo { - self.history.push(undo); - } - Some(true) -} else { - None -})); +expose!([self: MidiPool] + ([bool]) + ([PathBuf]) + ([Arc]) + ([MidiClip] + (":new-clip" self.new_clip()) + (":cloned-clip" self.cloned_clip())) + ([usize] + (":current" 0) + (":after" 0) + (":previous" 0) + (":next" 0)) + ([ItemColor] + (":random-color" ItemColor::random()))); +expose!([self: MidiEditor] + ([bool] + (":true" true) + (":false" false) + (":time-lock" self.time_lock().get()) + (":time-lock-toggle" !self.time_lock().get())) + ([usize] + (":note-length" self.note_len()) + (":note-pos" self.note_pos()) + (":note-pos-next" self.note_pos() + 1) + (":note-pos-prev" self.note_pos().saturating_sub(1)) + (":note-pos-next-octave" self.note_pos() + 12) + (":note-pos-prev-octave" self.note_pos().saturating_sub(12)) + (":note-len" self.note_len()) + (":note-len-next" self.note_len() + 1) + (":note-len-prev" self.note_len().saturating_sub(1)) + (":note-range" self.note_axis().get()) + (":note-range-prev" self.note_axis().get() + 1) + (":note-range-next" self.note_axis().get().saturating_sub(1)) + (":time-pos" self.time_pos()) + (":time-pos-next" self.time_pos() + self.time_zoom().get()) + (":time-pos-prev" self.time_pos().saturating_sub(self.time_zoom().get())) + (":time-zoom" self.time_zoom().get()) + (":time-zoom-next" self.time_zoom().get() + 1) + (":time-zoom-prev" self.time_zoom().get().saturating_sub(1).max(1)))); impose!([app: Tek] (TekCommand: diff --git a/crates/app/src/view.rs b/crates/app/src/view.rs index 2c5559ac..b4da2772 100644 --- a/crates/app/src/view.rs +++ b/crates/app/src/view.rs @@ -346,8 +346,8 @@ impl<'a> ArrangerView<'a> { pub(crate) fn devices (&'a self) -> impl Content + 'a { let Self { width_side, width_mid, track_count, track_selected, is_editing, .. } = self; Tryptich::top(1) - .left(*width_side, button_3("x", "devices", format!("{}", 0), *is_editing)) - .right(*width_side, button_2("X", "add device", *is_editing)) + .left(*width_side, button_3("z", "devices", format!("{}", 0), *is_editing)) + .right(*width_side, button_2("Z", "add device", *is_editing)) .middle(*width_mid, per_track_top(*width_mid, ||self.tracks_with_sizes_scrolled(), move|index, track|{ wrap(if *track_selected == Some(index) {