mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
wip: refactor pt.27: 13 errors
This commit is contained in:
parent
7384950302
commit
4522ebaa4b
4 changed files with 81 additions and 84 deletions
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
//}
|
||||||
|
//}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue