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_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<str>: |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<str>])
|
||||
([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:
|
||||
|
|
|
|||
|
|
@ -346,8 +346,8 @@ impl<'a> ArrangerView<'a> {
|
|||
pub(crate) fn devices (&'a self) -> impl Content<TuiOut> + '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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue