wip(p60,e90): impl macros

This commit is contained in:
🪞👃🪞 2024-11-20 20:46:20 +01:00
parent f4a4b08c8a
commit 9d4fcaa32b
17 changed files with 748 additions and 1083 deletions

View file

@ -2,6 +2,10 @@ use crate::*;
pub struct TransportView<'a, T: TransportViewState>(pub &'a T);
pub struct PhrasesView<'a, T: PhrasesViewState>(pub &'a T);
pub struct PhraseView<'a, T: PhraseViewState>(pub &'a T);
pub trait TransportViewState: ClockApi + PlayheadApi + Send + Sync {
fn transport_selected (&self) -> TransportFocus;
fn transport_focused (&self) -> bool;
@ -20,9 +24,35 @@ pub trait TransportViewState: ClockApi + PlayheadApi + Send + Sync {
}
}
pub trait ArrangerViewState {
fn arranger_focused (&self) -> bool;
}
pub trait PhrasesViewState: Send + Sync {
fn phrases_focused (&self) -> bool;
fn entered (&self) -> bool;
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>>;
fn phrase (&self) -> usize;
fn mode (&self) -> &Option<PhrasesMode>;
}
pub trait PhraseViewState: Send + Sync {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>>;
fn phrase_focused (&self) -> bool;
fn phrase_editor_size (&self) -> &Measure<Tui>;
fn entered (&self) -> bool;
fn keys (&self) -> &Buffer;
fn buffer (&self) -> &BigBuffer;
fn note_len (&self) -> usize;
fn note_axis (&self) -> &RwLock<FixedAxis<usize>>;
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>>;
fn now (&self) -> &Arc<Pulse>;
fn size (&self) -> &Measure<Tui>;
}
impl TransportViewState for TransportTui {
fn transport_selected (&self) -> TransportFocus {
self.focus
self.state.focus
}
fn transport_focused (&self) -> bool {
true
@ -34,7 +64,7 @@ impl TransportViewState for TransportTui {
impl TransportViewState for SequencerTui {
fn transport_selected (&self) -> TransportFocus {
self.focus
self.transport.focus
}
fn transport_focused (&self) -> bool {
self.focused() == SequencerFocus::Transport
@ -46,7 +76,7 @@ impl TransportViewState for SequencerTui {
impl TransportViewState for ArrangerTui {
fn transport_selected (&self) -> TransportFocus {
self.focus
self.transport.focus
}
fn transport_focused (&self) -> bool {
self.focused() == ArrangerFocus::Transport
@ -56,27 +86,13 @@ impl TransportViewState for ArrangerTui {
}
}
pub trait ArrangerViewState {
fn arranger_focused (&self) -> bool;
}
impl ArrangerViewState for ArrangerTui {
fn arranger_focused (&self) -> bool {
self.focused() == ArrangerFocus::Arranger
}
}
pub struct PhrasesView<'a, T: PhrasesViewState>(pub &'a T);
pub trait PhrasesViewState: Send + Sync {
fn phrases_focused (&self) -> bool;
fn entered (&self) -> bool;
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>>;
fn phrase (&self) -> usize;
fn mode (&self) -> &Option<PhrasesMode>;
}
impl PhrasesViewState for PhrasesTui {
impl PhrasesViewState for PhrasesModel {
fn phrases_focused (&self) -> bool {
todo!()
}
@ -130,22 +146,7 @@ impl PhrasesViewState for ArrangerTui {
}
}
pub struct PhraseView<'a, T: PhraseViewState>(pub &'a T);
pub trait PhraseViewState: Send + Sync {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>>;
fn phrase_focused (&self) -> bool;
fn phrase_editor_size (&self) -> &Measure<Tui>;
fn entered (&self) -> bool;
fn keys (&self) -> &Buffer;
fn buffer (&self) -> &BigBuffer;
fn note_len (&self) -> usize;
fn note_axis (&self) -> &RwLock<FixedAxis<usize>>;
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>>;
fn now (&self) -> &Arc<Pulse>;
}
impl PhraseViewState for PhraseTui {
impl PhraseViewState for PhraseEditorModel {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
&self.phrase
}
@ -176,6 +177,9 @@ impl PhraseViewState for PhraseTui {
fn now (&self) -> &Arc<Pulse> {
&self.now
}
fn size (&self) -> &Measure<Tui> {
&self.size
}
}
impl PhraseViewState for SequencerTui {
@ -209,6 +213,9 @@ impl PhraseViewState for SequencerTui {
fn now (&self) -> &Arc<Pulse> {
todo!()
}
fn size (&self) -> &Measure<Tui> {
&self.size
}
}
impl PhraseViewState for ArrangerTui {
@ -242,6 +249,9 @@ impl PhraseViewState for ArrangerTui {
fn now (&self) -> &Arc<Pulse> {
todo!()
}
fn size (&self) -> &Measure<Tui> {
&self.size
}
}
fn track_widths (tracks: &[ArrangerTrack]) -> Vec<(usize, usize)> {
@ -681,7 +691,7 @@ const NTH_OCTAVE: [&'static str; 11] = [
"-2", "-1", "0", "1", "2", "3", "4", "5", "6", "7", "8",
];
impl PhraseTui {
impl PhraseEditorModel {
pub fn put (&mut self) {
if let (Some(phrase), Some(time), Some(note)) = (
&self.phrase,