wip(p65,e2)

This commit is contained in:
🪞👃🪞 2024-11-21 16:34:44 +01:00
parent fffd830e15
commit e768790658
9 changed files with 226 additions and 299 deletions

View file

@ -22,10 +22,30 @@ pub trait TransportViewState: ClockApi + Send + Sync {
self.current().usec.format_msu()
}
}
macro_rules! impl_transport_view_state {
($Struct:ident :: $field:ident) => {
impl TransportViewState for $Struct {
fn transport_selected (&self) -> TransportFocus {
self.$field.focus.inner()
}
fn transport_focused (&self) -> bool {
true
}
}
}
}
impl_transport_view_state!(TransportTui::state);
impl_transport_view_state!(SequencerTui::transport);
impl_transport_view_state!(ArrangerTui::transport);
pub trait ArrangerViewState {
fn arranger_focused (&self) -> bool;
}
impl ArrangerViewState for ArrangerTui {
fn arranger_focused (&self) -> bool {
self.focused() == ArrangerFocus::Arranger
}
}
pub trait PhrasesViewState: Send + Sync {
fn phrases_focused (&self) -> bool;
@ -34,10 +54,34 @@ pub trait PhrasesViewState: Send + Sync {
fn phrase_index (&self) -> usize;
fn phrase_mode (&self) -> &Option<PhrasesMode>;
}
macro_rules! impl_phrases_view_state {
($Struct:ident $(:: $field:ident)*) => {
impl PhrasesViewState for $Struct {
fn phrases_focused (&self) -> bool {
todo!()
}
fn phrases_entered (&self) -> bool {
todo!()
}
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_index (&self) -> usize {
todo!()
}
fn phrase_mode (&self) -> &Option<PhrasesMode> {
&self$(.$field)*.mode
}
}
}
}
impl_phrases_view_state!(PhrasesModel);
impl_phrases_view_state!(SequencerTui::phrases);
impl_phrases_view_state!(ArrangerTui::phrases);
pub trait PhraseViewState: Send + Sync {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>>;
fn phrase_focused (&self) -> bool;
fn phrase_editing (&self) -> &Option<Arc<RwLock<Phrase>>>;
fn phrase_editor_focused (&self) -> bool;
fn phrase_editor_size (&self) -> &Measure<Tui>;
fn phrase_editor_entered (&self) -> bool;
fn keys (&self) -> &Buffer;
@ -48,201 +92,48 @@ pub trait PhraseViewState: Send + Sync {
fn now (&self) -> &Arc<Pulse>;
fn size (&self) -> &Measure<Tui>;
}
impl TransportViewState for TransportTui {
fn transport_selected (&self) -> TransportFocus {
self.state.focus
}
fn transport_focused (&self) -> bool {
true
}
}
impl TransportViewState for SequencerTui {
fn transport_selected (&self) -> TransportFocus {
self.transport.focus
}
fn transport_focused (&self) -> bool {
self.focused() == SequencerFocus::Transport
}
}
impl TransportViewState for ArrangerTui {
fn transport_selected (&self) -> TransportFocus {
self.transport.focus
}
fn transport_focused (&self) -> bool {
self.focused() == ArrangerFocus::Transport
}
}
impl ArrangerViewState for ArrangerTui {
fn arranger_focused (&self) -> bool {
self.focused() == ArrangerFocus::Arranger
}
}
impl PhrasesViewState for PhrasesModel {
fn phrases_focused (&self) -> bool {
todo!()
}
fn phrases_entered (&self) -> bool {
todo!()
}
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_index (&self) -> usize {
todo!()
}
fn phrase_mode (&self) -> &Option<PhrasesMode> {
&self.mode
}
}
impl PhrasesViewState for SequencerTui {
fn phrases_focused (&self) -> bool {
todo!()
}
fn phrases_entered (&self) -> bool {
todo!()
}
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_index (&self) -> usize {
todo!()
}
fn phrase_mode (&self) -> &Option<PhrasesMode> {
&self.phrases.mode
}
}
impl PhrasesViewState for ArrangerTui {
fn phrases_focused (&self) -> bool {
todo!()
}
fn phrases_entered (&self) -> bool {
todo!()
}
fn phrases (&self) -> Vec<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_index (&self) -> usize {
todo!()
}
fn phrase_mode (&self) -> &Option<PhrasesMode> {
&self.phrases.mode
}
}
impl PhraseViewState for PhraseEditorModel {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
&self.phrase
}
fn phrase_focused (&self) -> bool {
self.focused
}
fn phrase_editor_size (&self) -> &Measure<Tui> {
todo!()
}
fn phrase_editor_entered (&self) -> bool {
self.entered
}
fn keys (&self) -> &Buffer {
&self.keys
}
fn buffer (&self) -> &BigBuffer {
&self.buffer
}
fn note_len (&self) -> usize {
self.note_len
}
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
&self.note_axis
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
&self.time_axis
}
fn now (&self) -> &Arc<Pulse> {
&self.now
}
fn size (&self) -> &Measure<Tui> {
&self.size
}
}
impl PhraseViewState for SequencerTui {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_focused (&self) -> bool {
todo!()
}
fn phrase_editor_size (&self) -> &Measure<Tui> {
todo!()
}
fn phrase_editor_entered (&self) -> bool {
todo!()
}
fn keys (&self) -> &Buffer {
todo!()
}
fn buffer (&self) -> &BigBuffer {
todo!()
}
fn note_len (&self) -> usize {
todo!()
}
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
todo!()
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
todo!()
}
fn now (&self) -> &Arc<Pulse> {
todo!()
}
fn size (&self) -> &Measure<Tui> {
&self.size
}
}
impl PhraseViewState for ArrangerTui {
fn phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_focused (&self) -> bool {
todo!()
}
fn phrase_editor_size (&self) -> &Measure<Tui> {
todo!()
}
fn phrase_editor_entered (&self) -> bool {
todo!()
}
fn keys (&self) -> &Buffer {
todo!()
}
fn buffer (&self) -> &BigBuffer {
todo!()
}
fn note_len (&self) -> usize {
todo!()
}
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
todo!()
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
todo!()
}
fn now (&self) -> &Arc<Pulse> {
todo!()
}
fn size (&self) -> &Measure<Tui> {
&self.size
macro_rules! impl_phrase_view_state {
($Struct:ident $(:: $field:ident)*) => {
impl PhraseViewState for $Struct {
fn phrase_editing (&self) -> &Option<Arc<RwLock<Phrase>>> {
&self$(.$field)*.phrase
}
fn phrase_editor_focused (&self) -> bool {
self$(.$field)*.focus.is_focused()
}
fn phrase_editor_size (&self) -> &Measure<Tui> {
todo!()
}
fn phrase_editor_entered (&self) -> bool {
self$(.$field)*.focus.is_entered()
}
fn keys (&self) -> &Buffer {
&self$(.$field)*.keys
}
fn buffer (&self) -> &BigBuffer {
&self$(.$field)*.buffer
}
fn note_len (&self) -> usize {
self$(.$field)*.note_len
}
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
&self$(.$field)*.note_axis
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
&self$(.$field)*.time_axis
}
fn now (&self) -> &Arc<Pulse> {
&self$(.$field)*.now
}
fn size (&self) -> &Measure<Tui> {
&self$(.$field)*.size
}
}
}
}
impl_phrase_view_state!(PhraseEditorModel);
impl_phrase_view_state!(SequencerTui::editor);
impl_phrase_view_state!(ArrangerTui::editor);
fn track_widths (tracks: &[ArrangerTrack]) -> Vec<(usize, usize)> {
let mut widths = vec![];