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, Menu,
Content(F), 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 /// Focus layout of arranger app
impl<E: Engine> FocusGrid for ArrangerView<E> { impl FocusGrid for AppView<Tui, ArrangerView<Tui>, ArrangerViewCommand> {
type Item = ArrangerViewFocus; type Item = AppViewFocus<ArrangerViewFocus>;
fn cursor (&self) -> (usize, usize) { fn cursor (&self) -> (usize, usize) {
self.focus_cursor self.cursor
} }
fn cursor_mut (&mut self) -> &mut (usize, usize) { fn cursor_mut (&mut self) -> &mut (usize, usize) {
&mut self.focus_cursor &mut self.cursor
} }
fn focus_enter (&mut self) { fn focus_enter (&mut self) {
use AppViewFocus::*;
use ArrangerViewFocus::*;
let focused = self.focused(); let focused = self.focused();
if !self.entered { if !self.entered {
self.entered = self.entered = focused == Content(Arranger);
focused == ArrangerViewFocus::Arranger; self.app.sequencer.editor.entered = focused == Content(PhraseEditor);
self.sequencer.editor.entered = self.app.sequencer.phrases.entered = focused == Content(PhrasePool);
focused == ArrangerViewFocus::PhraseEditor;
self.sequencer.phrases.entered =
focused == ArrangerViewFocus::PhrasePool;
} }
} }
fn focus_exit (&mut self) { fn focus_exit (&mut self) {
if self.entered { if self.entered {
self.entered = false; self.entered = false;
self.sequencer.editor.entered = false; self.app.sequencer.editor.entered = false;
self.sequencer.phrases.entered = false; self.app.sequencer.phrases.entered = false;
} }
} }
fn entered (&self) -> Option<ArrangerViewFocus> { fn entered (&self) -> Option<Self::Item> {
if self.entered { if self.entered {
Some(self.focused()) Some(self.focused())
} else { } else {
None None
} }
} }
fn layout (&self) -> &[&[ArrangerViewFocus]] { fn layout (&self) -> &[&[Self::Item]] {
use AppViewFocus::*;
use ArrangerViewFocus::*; use ArrangerViewFocus::*;
&[ &[
&[Transport, Transport], &[Menu, Menu ],
&[Arranger, Arranger], &[Content(Transport), Content(Transport) ],
&[PhrasePool, PhraseEditor], &[Content(Arranger), Content(Arranger) ],
&[Content(PhrasePool), Content(PhraseEditor)],
] ]
} }
fn update_focus (&mut self) { fn update_focus (&mut self) {
use AppViewFocus::*;
use ArrangerViewFocus::*;
let focused = self.focused(); let focused = self.focused();
self.focused = self.app.focused = focused == Content(Arranger);
focused == ArrangerViewFocus::Arranger; self.app.sequencer.transport.focused = focused == Content(Transport);
self.sequencer.transport.focused = self.app.sequencer.phrases.focused = focused == Content(PhrasePool);
focused == ArrangerViewFocus::Transport; self.app.sequencer.editor.focused = focused == Content(PhraseEditor);
self.sequencer.phrases.focused =
focused == ArrangerViewFocus::PhrasePool;
self.sequencer.editor.focused =
focused == ArrangerViewFocus::PhraseEditor;
} }
} }

View file

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

View file

@ -11,32 +11,74 @@ pub enum SequencerFocus {
PhraseEditor, PhraseEditor,
} }
/// Focus layout of sequencer app impl FocusGrid for AppView<Tui, SequencerView<Tui>, SequencerViewCommand> {
impl<E: Engine> FocusGrid for SequencerView<E> { type Item = AppViewFocus<SequencerFocus>;
type Item = SequencerFocus;
fn cursor (&self) -> (usize, usize) { fn cursor (&self) -> (usize, usize) {
self.cursor self.cursor
} }
fn cursor_mut (&mut self) -> &mut (usize, usize) { fn cursor_mut (&mut self) -> &mut (usize, usize) {
&mut self.cursor &mut self.cursor
} }
fn layout (&self) -> &[&[SequencerFocus]] { &[
&[SequencerFocus::Transport],
&[SequencerFocus::PhrasePool, SequencerFocus::PhraseEditor],
] }
fn focus_enter (&mut self) { fn focus_enter (&mut self) {
self.entered = true let focused = self.focused();
if !self.entered {
self.entered = true;
// TODO
}
} }
fn focus_exit (&mut self) { fn focus_exit (&mut self) {
self.entered = false if self.entered {
self.entered = false;
// TODO
}
} }
fn entered (&self) -> Option<Self::Item> { 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) { fn update_focus (&mut self) {
let focused = self.focused(); // TODO
self.transport.focused = focused == SequencerFocus::Transport;
self.phrases.focused = focused == SequencerFocus::PhrasePool;
self.editor.focused = focused == SequencerFocus::PhraseEditor;
} }
} }
///// 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;
//}
//}