mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
use expose! macro for MidiPool and MidiEditor
This commit is contained in:
parent
79bf493004
commit
55b6745d4d
2 changed files with 51 additions and 54 deletions
|
|
@ -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 { ($cmd:expr) => {{ $cmd; None }}; }
|
||||||
macro_rules! cmd_todo { ($msg:literal) => {{ println!($msg); 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]
|
expose!([self: Tek]
|
||||||
([bool]
|
([bool]
|
||||||
(":mode-editor" self.is_editing())
|
(":mode-editor" self.is_editing())
|
||||||
|
|
@ -49,58 +59,45 @@ expose!([self: Tek]
|
||||||
(":scene-prev" self.selected.scene_prev())
|
(":scene-prev" self.selected.scene_prev())
|
||||||
(":track-next" self.selected.track_next(self.tracks.len()))
|
(":track-next" self.selected.track_next(self.tracks.len()))
|
||||||
(":track-prev" self.selected.track_prev())));
|
(":track-prev" self.selected.track_prev())));
|
||||||
provide!(bool: |self: MidiPool| {});
|
expose!([self: MidiPool]
|
||||||
provide!(MidiClip: |self: MidiPool| {
|
([bool])
|
||||||
":new-clip" => self.new_clip(),
|
([PathBuf])
|
||||||
":cloned-clip" => self.cloned_clip(),
|
([Arc<str>])
|
||||||
});
|
([MidiClip]
|
||||||
provide!(PathBuf: |self: MidiPool| {});
|
(":new-clip" self.new_clip())
|
||||||
provide!(Arc<str>: |self: MidiPool| {});
|
(":cloned-clip" self.cloned_clip()))
|
||||||
provide!(usize: |self: MidiPool| {
|
([usize]
|
||||||
":current" => 0,
|
(":current" 0)
|
||||||
":after" => 0,
|
(":after" 0)
|
||||||
":previous" => 0,
|
(":previous" 0)
|
||||||
":next" => 0
|
(":next" 0))
|
||||||
});
|
([ItemColor]
|
||||||
provide!(ItemColor: |self: MidiPool| {
|
(":random-color" ItemColor::random())));
|
||||||
":random-color" => ItemColor::random()
|
expose!([self: MidiEditor]
|
||||||
});
|
([bool]
|
||||||
provide!(bool: |self: MidiEditor| {
|
(":true" true)
|
||||||
":true" => true,
|
(":false" false)
|
||||||
":false" => false,
|
(":time-lock" self.time_lock().get())
|
||||||
":time-lock" => self.time_lock().get(),
|
(":time-lock-toggle" !self.time_lock().get()))
|
||||||
":time-lock-toggle" => !self.time_lock().get(),
|
([usize]
|
||||||
});
|
(":note-length" self.note_len())
|
||||||
provide!(usize: |self: MidiEditor| {
|
(":note-pos" self.note_pos())
|
||||||
":note-length" => self.note_len(),
|
(":note-pos-next" self.note_pos() + 1)
|
||||||
":note-pos" => self.note_pos(),
|
(":note-pos-prev" self.note_pos().saturating_sub(1))
|
||||||
":note-pos-next" => self.note_pos() + 1,
|
(":note-pos-next-octave" self.note_pos() + 12)
|
||||||
":note-pos-prev" => self.note_pos().saturating_sub(1),
|
(":note-pos-prev-octave" self.note_pos().saturating_sub(12))
|
||||||
":note-pos-next-octave" => self.note_pos() + 12,
|
(":note-len" self.note_len())
|
||||||
":note-pos-prev-octave" => self.note_pos().saturating_sub(12),
|
(":note-len-next" self.note_len() + 1)
|
||||||
":note-len" => self.note_len(),
|
(":note-len-prev" self.note_len().saturating_sub(1))
|
||||||
":note-len-next" => self.note_len() + 1,
|
(":note-range" self.note_axis().get())
|
||||||
":note-len-prev" => self.note_len().saturating_sub(1),
|
(":note-range-prev" self.note_axis().get() + 1)
|
||||||
":note-range" => self.note_axis().get(),
|
(":note-range-next" self.note_axis().get().saturating_sub(1))
|
||||||
":note-range-prev" => self.note_axis().get() + 1,
|
(":time-pos" self.time_pos())
|
||||||
":note-range-next" => self.note_axis().get().saturating_sub(1),
|
(":time-pos-next" self.time_pos() + self.time_zoom().get())
|
||||||
":time-pos" => self.time_pos(),
|
(":time-pos-prev" self.time_pos().saturating_sub(self.time_zoom().get()))
|
||||||
":time-pos-next" => self.time_pos() + self.time_zoom().get(),
|
(":time-zoom" self.time_zoom().get())
|
||||||
":time-pos-prev" => self.time_pos().saturating_sub(self.time_zoom().get()),
|
(":time-zoom-next" self.time_zoom().get() + 1)
|
||||||
":time-zoom" => self.time_zoom().get(),
|
(":time-zoom-prev" self.time_zoom().get().saturating_sub(1).max(1))));
|
||||||
":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
|
|
||||||
}));
|
|
||||||
|
|
||||||
impose!([app: Tek]
|
impose!([app: Tek]
|
||||||
(TekCommand:
|
(TekCommand:
|
||||||
|
|
|
||||||
|
|
@ -346,8 +346,8 @@ impl<'a> ArrangerView<'a> {
|
||||||
pub(crate) fn devices (&'a self) -> impl Content<TuiOut> + 'a {
|
pub(crate) fn devices (&'a self) -> impl Content<TuiOut> + 'a {
|
||||||
let Self { width_side, width_mid, track_count, track_selected, is_editing, .. } = self;
|
let Self { width_side, width_mid, track_count, track_selected, is_editing, .. } = self;
|
||||||
Tryptich::top(1)
|
Tryptich::top(1)
|
||||||
.left(*width_side, button_3("x", "devices", format!("{}", 0), *is_editing))
|
.left(*width_side, button_3("z", "devices", format!("{}", 0), *is_editing))
|
||||||
.right(*width_side, button_2("X", "add device", *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(),
|
.middle(*width_mid, per_track_top(*width_mid, ||self.tracks_with_sizes_scrolled(),
|
||||||
move|index, track|{
|
move|index, track|{
|
||||||
wrap(if *track_selected == Some(index) {
|
wrap(if *track_selected == Some(index) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue