mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 11:46:41 +01:00
add has_player, has_editor
This commit is contained in:
parent
9497f530cd
commit
a5bcf3798e
4 changed files with 20 additions and 35 deletions
|
|
@ -5,6 +5,15 @@ pub trait HasPlayer {
|
|||
fn player_mut (&mut self) -> &mut impl MidiPlayerApi;
|
||||
}
|
||||
|
||||
#[macro_export] macro_rules! has_player {
|
||||
(|$self:ident:$Struct:ident$(<$($L:lifetime),*$($T:ident$(:$U:path)?),*>)?|$cb:expr) => {
|
||||
impl $(<$($L),*$($T $(: $U)?),*>)? HasPlayer for $Struct $(<$($L),*$($T),*>)? {
|
||||
fn player (&$self) -> &impl MidiPlayerApi { &$cb }
|
||||
fn player_mut (&mut $self) -> &mut impl MidiPlayerApi { &mut$cb }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Contains state for playing a phrase
|
||||
pub struct PhrasePlayerModel {
|
||||
/// State of clock and playhead
|
||||
|
|
|
|||
|
|
@ -415,6 +415,8 @@ render!(|self: ArrangerTui|{
|
|||
has_clock!(|self:ArrangerTui|&self.clock);
|
||||
has_clock!(|self:ArrangerTrack|self.player.clock());
|
||||
has_phrases!(|self:ArrangerTui|self.phrases.phrases);
|
||||
has_editor!(|self:ArrangerTui|self.editor);
|
||||
has_player!(|self:ArrangerTrack|self.player);
|
||||
|
||||
impl HasPhraseList for ArrangerTui {
|
||||
fn phrases_focused (&self) -> bool {
|
||||
|
|
@ -431,18 +433,6 @@ impl HasPhraseList for ArrangerTui {
|
|||
}
|
||||
}
|
||||
|
||||
impl HasEditor for ArrangerTui {
|
||||
fn editor (&self) -> &PhraseEditorModel {
|
||||
&self.editor
|
||||
}
|
||||
fn editor_focused (&self) -> bool {
|
||||
self.focused() == ArrangerFocus::PhraseEditor
|
||||
}
|
||||
fn editor_entered (&self) -> bool {
|
||||
self.entered() && self.editor_focused()
|
||||
}
|
||||
}
|
||||
|
||||
/// Sections in the arranger app that may be focused
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
|
||||
pub enum ArrangerFocus {
|
||||
|
|
@ -1236,15 +1226,6 @@ pub struct ArrangerTrack {
|
|||
pub(crate) player: PhrasePlayerModel,
|
||||
}
|
||||
|
||||
impl HasPlayer for ArrangerTrack {
|
||||
fn player (&self) -> &impl MidiPlayerApi {
|
||||
&self.player
|
||||
}
|
||||
fn player_mut (&mut self) -> &mut impl MidiPlayerApi {
|
||||
&mut self.player
|
||||
}
|
||||
}
|
||||
|
||||
impl ArrangerTrackApi for ArrangerTrack {
|
||||
/// Name of track
|
||||
fn name (&self) -> &Arc<RwLock<String>> {
|
||||
|
|
|
|||
|
|
@ -283,6 +283,7 @@ impl TransportControl<SequencerFocus> for SequencerTui {
|
|||
|
||||
has_clock!(|self:SequencerTui|&self.clock);
|
||||
has_phrases!(|self:SequencerTui|self.phrases.phrases);
|
||||
has_editor!(|self:SequencerTui|self.editor);
|
||||
|
||||
impl HasPhraseList for SequencerTui {
|
||||
fn phrases_focused (&self) -> bool {
|
||||
|
|
@ -299,18 +300,6 @@ impl HasPhraseList for SequencerTui {
|
|||
}
|
||||
}
|
||||
|
||||
impl HasEditor for SequencerTui {
|
||||
fn editor (&self) -> &PhraseEditorModel {
|
||||
&self.editor
|
||||
}
|
||||
fn editor_focused (&self) -> bool {
|
||||
false
|
||||
}
|
||||
fn editor_entered (&self) -> bool {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
impl HasFocus for SequencerTui {
|
||||
type Item = SequencerFocus;
|
||||
/// Get the currently focused item.
|
||||
|
|
|
|||
|
|
@ -5,8 +5,14 @@ use PhraseCommand::*;
|
|||
|
||||
pub trait HasEditor {
|
||||
fn editor (&self) -> &PhraseEditorModel;
|
||||
fn editor_focused (&self) -> bool;
|
||||
fn editor_entered (&self) -> bool;
|
||||
}
|
||||
|
||||
#[macro_export] macro_rules! has_editor {
|
||||
(|$self:ident:$Struct:ident$(<$($L:lifetime),*$($T:ident$(:$U:path)?),*>)?|$cb:expr) => {
|
||||
impl $(<$($L),*$($T $(: $U)?),*>)? HasEditor for $Struct $(<$($L),*$($T),*>)? {
|
||||
fn editor (&$self) -> &PhraseEditorModel { &$cb }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue