diff --git a/crates/tek/src/api/phrase.rs b/crates/tek/src/api/phrase.rs index 3f8ca6b8..aa1f437a 100644 --- a/crates/tek/src/api/phrase.rs +++ b/crates/tek/src/api/phrase.rs @@ -5,6 +5,15 @@ pub trait HasPhrases { fn phrases_mut (&mut self) -> &mut Vec>>; } +#[macro_export] macro_rules! has_phrases { + (|$self:ident:$Struct:ident$(<$($L:lifetime),*$($T:ident$(:$U:path)?),*>)?|$cb:expr) => { + impl $(<$($L),*$($T $(: $U)?),*>)? HasPhrases for $Struct $(<$($L),*$($T),*>)? { + fn phrases (&$self) -> &Vec>> { &$cb } + fn phrases_mut (&mut $self) -> &mut Vec>> { &mut$cb } + } + } +} + pub trait HasPhrase { fn phrase (&self) -> &Arc>; } diff --git a/crates/tek/src/layout/measure.rs b/crates/tek/src/layout/measure.rs index 27429cb6..987fe8a5 100644 --- a/crates/tek/src/layout/measure.rs +++ b/crates/tek/src/layout/measure.rs @@ -7,7 +7,7 @@ pub trait HasSize { #[macro_export] macro_rules! has_size { (<$E:ty>|$self:ident:$Struct:ident$(<$($L:lifetime),*$($T:ident$(:$U:path)?),*>)?|$cb:expr) => { impl $(<$($L),*$($T $(: $U)?),*>)? HasSize<$E> for $Struct $(<$($L),*$($T),*>)? { - fn size (&$self) -> &Measure<$E> { $cb } // TODO provide trait body + fn size (&$self) -> &Measure<$E> { $cb } } } } diff --git a/crates/tek/src/tui/app_arranger.rs b/crates/tek/src/tui/app_arranger.rs index 13697b3f..91681037 100644 --- a/crates/tek/src/tui/app_arranger.rs +++ b/crates/tek/src/tui/app_arranger.rs @@ -414,15 +414,7 @@ render!(|self: ArrangerTui|{ has_clock!(|self:ArrangerTui|&self.clock); has_clock!(|self:ArrangerTrack|self.player.clock()); - -impl HasPhrases for ArrangerTui { - fn phrases (&self) -> &Vec>> { - &self.phrases.phrases - } - fn phrases_mut (&mut self) -> &mut Vec>> { - &mut self.phrases.phrases - } -} +has_phrases!(|self:ArrangerTui|self.phrases.phrases); impl HasPhraseList for ArrangerTui { fn phrases_focused (&self) -> bool { diff --git a/crates/tek/src/tui/app_sequencer.rs b/crates/tek/src/tui/app_sequencer.rs index b370767e..eb146915 100644 --- a/crates/tek/src/tui/app_sequencer.rs +++ b/crates/tek/src/tui/app_sequencer.rs @@ -282,15 +282,7 @@ impl TransportControl for SequencerTui { } has_clock!(|self:SequencerTui|&self.clock); - -impl HasPhrases for SequencerTui { - fn phrases (&self) -> &Vec>> { - &self.phrases.phrases - } - fn phrases_mut (&mut self) -> &mut Vec>> { - &mut self.phrases.phrases - } -} +has_phrases!(|self:SequencerTui|self.phrases.phrases); impl HasPhraseList for SequencerTui { fn phrases_focused (&self) -> bool { diff --git a/crates/tek/src/tui/phrase_list.rs b/crates/tek/src/tui/phrase_list.rs index 2967a542..972d62d5 100644 --- a/crates/tek/src/tui/phrase_list.rs +++ b/crates/tek/src/tui/phrase_list.rs @@ -180,14 +180,7 @@ impl From<&Arc>> for PhraseListModel { } } -impl HasPhrases for PhraseListModel { - fn phrases (&self) -> &Vec>> { - &self.phrases - } - fn phrases_mut (&mut self) -> &mut Vec>> { - &mut self.phrases - } -} +has_phrases!(|self:PhraseListModel|self.phrases); impl HasPhrase for PhraseListModel { fn phrase (&self) -> &Arc> {