mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
wip(p60,e90): impl macros
This commit is contained in:
parent
f4a4b08c8a
commit
9d4fcaa32b
17 changed files with 748 additions and 1083 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue