diff --git a/crates/tek_tui/src/lib.rs b/crates/tek_tui/src/lib.rs index 3f4e31b1..dfe01c68 100644 --- a/crates/tek_tui/src/lib.rs +++ b/crates/tek_tui/src/lib.rs @@ -128,47 +128,3 @@ pub enum AppViewFocus { Menu, Content(F), } - -impl FocusGrid for AppView -where - A: Widget + Handle + Audio + FocusGrid, - C: Command -{ - type Item = AppViewFocus<::Item>; - fn cursor (&self) -> (usize, usize) { - self.cursor - } - fn cursor_mut (&mut self) -> &mut (usize, usize) { - &mut self.cursor - } - fn focus_enter (&mut self) { - let focused = self.focused(); - if !self.entered { - self.entered = true; - // TODO - } - } - fn focus_exit (&mut self) { - if self.entered { - self.entered = false; - // TODO - } - } - fn entered (&self) -> Option { - if self.entered { - Some(self.focused()) - } else { - None - } - } - fn layout (&self) -> &[&[Self::Item]] { - &[ - &[AppViewFocus::Menu], - FocusGrid::layout(&self.ui) - //&[AppViewFocus::Content(())], - ] - } - fn update_focus (&mut self) { - // TODO - } -} diff --git a/crates/tek_tui/src/tui_arranger_foc.rs b/crates/tek_tui/src/tui_arranger_foc.rs index 3d34a4ce..36c10501 100644 --- a/crates/tek_tui/src/tui_arranger_foc.rs +++ b/crates/tek_tui/src/tui_arranger_foc.rs @@ -14,57 +14,56 @@ pub enum ArrangerViewFocus { } /// Focus layout of arranger app -impl FocusGrid for ArrangerView { - type Item = ArrangerViewFocus; +impl FocusGrid for AppView, ArrangerViewCommand> { + type Item = AppViewFocus; fn cursor (&self) -> (usize, usize) { - self.focus_cursor + self.cursor } fn cursor_mut (&mut self) -> &mut (usize, usize) { - &mut self.focus_cursor + &mut self.cursor } fn focus_enter (&mut self) { + use AppViewFocus::*; + use ArrangerViewFocus::*; let focused = self.focused(); if !self.entered { - self.entered = - focused == ArrangerViewFocus::Arranger; - self.sequencer.editor.entered = - focused == ArrangerViewFocus::PhraseEditor; - self.sequencer.phrases.entered = - focused == ArrangerViewFocus::PhrasePool; + self.entered = focused == Content(Arranger); + self.app.sequencer.editor.entered = focused == Content(PhraseEditor); + self.app.sequencer.phrases.entered = focused == Content(PhrasePool); } } fn focus_exit (&mut self) { if self.entered { self.entered = false; - self.sequencer.editor.entered = false; - self.sequencer.phrases.entered = false; + self.app.sequencer.editor.entered = false; + self.app.sequencer.phrases.entered = false; } } - fn entered (&self) -> Option { + fn entered (&self) -> Option { if self.entered { Some(self.focused()) } else { None } } - fn layout (&self) -> &[&[ArrangerViewFocus]] { + fn layout (&self) -> &[&[Self::Item]] { + use AppViewFocus::*; use ArrangerViewFocus::*; &[ - &[Transport, Transport], - &[Arranger, Arranger], - &[PhrasePool, PhraseEditor], + &[Menu, Menu ], + &[Content(Transport), Content(Transport) ], + &[Content(Arranger), Content(Arranger) ], + &[Content(PhrasePool), Content(PhraseEditor)], ] } fn update_focus (&mut self) { + use AppViewFocus::*; + use ArrangerViewFocus::*; let focused = self.focused(); - self.focused = - focused == ArrangerViewFocus::Arranger; - self.sequencer.transport.focused = - focused == ArrangerViewFocus::Transport; - self.sequencer.phrases.focused = - focused == ArrangerViewFocus::PhrasePool; - self.sequencer.editor.focused = - focused == ArrangerViewFocus::PhraseEditor; + self.app.focused = focused == Content(Arranger); + self.app.sequencer.transport.focused = focused == Content(Transport); + self.app.sequencer.phrases.focused = focused == Content(PhrasePool); + self.app.sequencer.editor.focused = focused == Content(PhraseEditor); } } diff --git a/crates/tek_tui/src/tui_pool.rs b/crates/tek_tui/src/tui_pool.rs index ac152b61..3b3295d0 100644 --- a/crates/tek_tui/src/tui_pool.rs +++ b/crates/tek_tui/src/tui_pool.rs @@ -25,7 +25,7 @@ pub enum PhrasePoolMode { } impl PhrasePoolView { - pub fn new (model: Vec>>) -> Self { + pub fn new (model: PhrasePoolModel) -> Self { Self { _engine: Default::default(), scroll: 0, diff --git a/crates/tek_tui/src/tui_sequencer_foc.rs b/crates/tek_tui/src/tui_sequencer_foc.rs index 56d8f72c..934891b0 100644 --- a/crates/tek_tui/src/tui_sequencer_foc.rs +++ b/crates/tek_tui/src/tui_sequencer_foc.rs @@ -11,32 +11,74 @@ pub enum SequencerFocus { PhraseEditor, } -/// Focus layout of sequencer app -impl FocusGrid for SequencerView { - type Item = SequencerFocus; +impl FocusGrid for AppView, SequencerViewCommand> { + type Item = AppViewFocus; fn cursor (&self) -> (usize, usize) { self.cursor } fn cursor_mut (&mut self) -> &mut (usize, usize) { &mut self.cursor } - fn layout (&self) -> &[&[SequencerFocus]] { &[ - &[SequencerFocus::Transport], - &[SequencerFocus::PhrasePool, SequencerFocus::PhraseEditor], - ] } fn focus_enter (&mut self) { - self.entered = true + let focused = self.focused(); + if !self.entered { + self.entered = true; + // TODO + } } fn focus_exit (&mut self) { - self.entered = false + if self.entered { + self.entered = false; + // TODO + } } fn entered (&self) -> Option { - if self.entered { Some(self.focused()) } else { None } + if self.entered { + Some(self.focused()) + } else { + None + } + } + fn layout (&self) -> &[&[Self::Item]] { + use AppViewFocus::*; + use SequencerFocus::*; + &[ + &[Menu, Menu ], + &[Content(Transport), Content(Transport) ], + &[Content(PhrasePool), Content(PhraseEditor)], + ] } fn update_focus (&mut self) { - let focused = self.focused(); - self.transport.focused = focused == SequencerFocus::Transport; - self.phrases.focused = focused == SequencerFocus::PhrasePool; - self.editor.focused = focused == SequencerFocus::PhraseEditor; + // TODO } } + +///// Focus layout of sequencer app +//impl FocusGrid for SequencerView { + //type Item = SequencerFocus; + //fn cursor (&self) -> (usize, usize) { + //self.cursor + //} + //fn cursor_mut (&mut self) -> &mut (usize, usize) { + //&mut self.cursor + //} + //fn layout (&self) -> &[&[SequencerFocus]] { &[ + //&[SequencerFocus::Transport], + //&[SequencerFocus::PhrasePool, SequencerFocus::PhraseEditor], + //] } + //fn focus_enter (&mut self) { + //self.entered = true + //} + //fn focus_exit (&mut self) { + //self.entered = false + //} + //fn entered (&self) -> Option { + //if self.entered { Some(self.focused()) } else { None } + //} + //fn update_focus (&mut self) { + //let focused = self.focused(); + //self.transport.focused = focused == SequencerFocus::Transport; + //self.phrases.focused = focused == SequencerFocus::PhrasePool; + //self.editor.focused = focused == SequencerFocus::PhraseEditor; + //} +//}