wip: refactor pt.27: 13 errors

This commit is contained in:
🪞👃🪞 2024-11-14 15:42:13 +01:00
parent 7384950302
commit 4522ebaa4b
4 changed files with 81 additions and 84 deletions

View file

@ -128,47 +128,3 @@ pub enum AppViewFocus<F: std::fmt::Debug + Copy + Clone + PartialEq> {
Menu,
Content(F),
}
impl<A, C> FocusGrid for AppView<Tui, A, C>
where
A: Widget<Engine = Tui> + Handle<Tui> + Audio + FocusGrid,
C: Command<A>
{
type Item = AppViewFocus<<A as FocusGrid>::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<Self::Item> {
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
}
}

View file

@ -14,57 +14,56 @@ pub enum ArrangerViewFocus {
}
/// Focus layout of arranger app
impl<E: Engine> FocusGrid for ArrangerView<E> {
type Item = ArrangerViewFocus;
impl FocusGrid for AppView<Tui, ArrangerView<Tui>, ArrangerViewCommand> {
type Item = AppViewFocus<ArrangerViewFocus>;
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<ArrangerViewFocus> {
fn entered (&self) -> Option<Self::Item> {
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);
}
}

View file

@ -25,7 +25,7 @@ pub enum PhrasePoolMode {
}
impl<E: Engine> PhrasePoolView<E> {
pub fn new (model: Vec<Arc<RwLock<Phrase>>>) -> Self {
pub fn new (model: PhrasePoolModel) -> Self {
Self {
_engine: Default::default(),
scroll: 0,

View file

@ -11,32 +11,74 @@ pub enum SequencerFocus {
PhraseEditor,
}
/// Focus layout of sequencer app
impl<E: Engine> FocusGrid for SequencerView<E> {
type Item = SequencerFocus;
impl FocusGrid for AppView<Tui, SequencerView<Tui>, SequencerViewCommand> {
type Item = AppViewFocus<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
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<Self::Item> {
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<E: Engine> FocusGrid for SequencerView<E> {
//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<Self::Item> {
//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;
//}
//}