From ceead4131ce51dd4900bd61290f4a5a8f8ebbb98 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Thu, 14 Nov 2024 16:08:59 +0100 Subject: [PATCH] wip: refactor pt.28: 16 errors --- crates/tek_api/src/status.rs | 12 +++++-- crates/tek_tui/src/lib.rs | 4 +-- crates/tek_tui/src/tui_arranger_bar.rs | 38 ++++++++++---------- crates/tek_tui/src/tui_arranger_foc.rs | 3 ++ crates/tek_tui/src/tui_sequencer_cmd.rs | 12 +++---- crates/tek_tui/src/tui_sequencer_foc.rs | 30 ---------------- crates/tek_tui/src/tui_transport_foc.rs | 47 +++++++++++++++++++++++++ 7 files changed, 84 insertions(+), 62 deletions(-) diff --git a/crates/tek_api/src/status.rs b/crates/tek_api/src/status.rs index ea4cbfff..b7df3005 100644 --- a/crates/tek_api/src/status.rs +++ b/crates/tek_api/src/status.rs @@ -1,9 +1,15 @@ use crate::*; -pub trait StatusBar: Widget { - fn hotkey_fg () -> Color; +pub trait StatusBar: Widget { + fn hotkey_fg () -> Color where Self: Sized; - fn command (commands: &[[impl Widget;3]]) -> impl Widget + '_ { + fn update (&mut self, state: &S); + + fn command (commands: &[[impl Widget;3]]) + -> impl Widget + '_ + where + Self: Sized + { let hotkey_fg = Self::hotkey_fg(); Stack::right(move |add|{ Ok(for [a, b, c] in commands.iter() { diff --git a/crates/tek_tui/src/lib.rs b/crates/tek_tui/src/lib.rs index dfe01c68..49df6db4 100644 --- a/crates/tek_tui/src/lib.rs +++ b/crates/tek_tui/src/lib.rs @@ -62,7 +62,7 @@ where pub cursor: (usize, usize), pub entered: bool, pub menu_bar: Option>, - pub status_bar: Option>>, + pub status_bar: Option>>, pub history: Vec, pub size: Measure, } @@ -76,7 +76,7 @@ where pub fn new ( app: A, menu_bar: Option>, - status_bar: Option>>, + status_bar: Option>>, ) -> Self { Self { app, diff --git a/crates/tek_tui/src/tui_arranger_bar.rs b/crates/tek_tui/src/tui_arranger_bar.rs index 721d58c2..15642be7 100644 --- a/crates/tek_tui/src/tui_arranger_bar.rs +++ b/crates/tek_tui/src/tui_arranger_bar.rs @@ -12,27 +12,27 @@ pub enum ArrangerStatusBar { PhraseEdit, } -impl StatusBar for ArrangerStatusBar { - fn hotkey_fg () -> Color { +impl StatusBar> for ArrangerStatusBar { + fn hotkey_fg () -> Color where Self: Sized { TuiTheme::hotkey_fg() } -} - -impl ArrangerStatusBar { - fn update (&mut self, state: &ArrangerView) { - *self = match state.focused() { - ArrangerViewFocus::Transport => ArrangerStatusBar::Transport, - ArrangerViewFocus::Arranger => match state.selected { - ArrangerFocus::Mix => ArrangerStatusBar::ArrangerMix, - ArrangerFocus::Track(_) => ArrangerStatusBar::ArrangerTrack, - ArrangerFocus::Scene(_) => ArrangerStatusBar::ArrangerScene, - ArrangerFocus::Clip(_, _) => ArrangerStatusBar::ArrangerClip, - }, - ArrangerViewFocus::PhrasePool => ArrangerStatusBar::PhrasePool, - ArrangerViewFocus::PhraseEditor => match state.sequencer.editor.entered { - true => ArrangerStatusBar::PhraseEdit, - false => ArrangerStatusBar::PhraseView, - }, + fn update (&mut self, state: &ArrangerApp) { + use AppViewFocus::*; + if let Content(focused) = state.focused() { + *self = match focused { + ArrangerViewFocus::Transport => ArrangerStatusBar::Transport, + ArrangerViewFocus::Arranger => match state.app.selected { + ArrangerFocus::Mix => ArrangerStatusBar::ArrangerMix, + ArrangerFocus::Track(_) => ArrangerStatusBar::ArrangerTrack, + ArrangerFocus::Scene(_) => ArrangerStatusBar::ArrangerScene, + ArrangerFocus::Clip(_, _) => ArrangerStatusBar::ArrangerClip, + }, + ArrangerViewFocus::PhrasePool => ArrangerStatusBar::PhrasePool, + ArrangerViewFocus::PhraseEditor => match state.app.sequencer.editor.entered { + true => ArrangerStatusBar::PhraseEdit, + false => ArrangerStatusBar::PhraseView, + }, + } } } } diff --git a/crates/tek_tui/src/tui_arranger_foc.rs b/crates/tek_tui/src/tui_arranger_foc.rs index 36c10501..9a9762a2 100644 --- a/crates/tek_tui/src/tui_arranger_foc.rs +++ b/crates/tek_tui/src/tui_arranger_foc.rs @@ -64,6 +64,9 @@ impl FocusGrid for AppView, ArrangerViewCommand> { self.app.sequencer.transport.focused = focused == Content(Transport); self.app.sequencer.phrases.focused = focused == Content(PhrasePool); self.app.sequencer.editor.focused = focused == Content(PhraseEditor); + if let Some(status_bar) = self.status_bar { + status_bar.update(&self.app) + } } } diff --git a/crates/tek_tui/src/tui_sequencer_cmd.rs b/crates/tek_tui/src/tui_sequencer_cmd.rs index 973d5230..ae05dab4 100644 --- a/crates/tek_tui/src/tui_sequencer_cmd.rs +++ b/crates/tek_tui/src/tui_sequencer_cmd.rs @@ -17,14 +17,10 @@ impl Handle for SequencerView { impl Command> for SequencerViewCommand { fn execute (self, state: &mut SequencerView) -> Perhaps { match self { - Self::Focus(cmd) => - delegate(cmd, Self::Focus, state), - Self::Phrases(cmd) => - delegate(cmd, Self::Phrases, &mut state.phrases), - Self::Editor(cmd) => - delegate(cmd, Self::Editor, &mut state.editor), - Self::Transport(cmd) => - delegate(cmd, Self::Transport, &mut state.transport) + Self::Focus(cmd) => delegate(cmd, Self::Focus, state), + Self::Phrases(cmd) => delegate(cmd, Self::Phrases, &mut state.phrases), + Self::Editor(cmd) => delegate(cmd, Self::Editor, &mut state.editor), + Self::Transport(cmd) => delegate(cmd, Self::Transport, &mut state.transport) } } } diff --git a/crates/tek_tui/src/tui_sequencer_foc.rs b/crates/tek_tui/src/tui_sequencer_foc.rs index 934891b0..9611358e 100644 --- a/crates/tek_tui/src/tui_sequencer_foc.rs +++ b/crates/tek_tui/src/tui_sequencer_foc.rs @@ -52,33 +52,3 @@ impl FocusGrid for AppView, SequencerViewCommand> { // 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; - //} -//} diff --git a/crates/tek_tui/src/tui_transport_foc.rs b/crates/tek_tui/src/tui_transport_foc.rs index 31e6d6ff..fd5d6b04 100644 --- a/crates/tek_tui/src/tui_transport_foc.rs +++ b/crates/tek_tui/src/tui_transport_foc.rs @@ -38,3 +38,50 @@ pub enum TransportViewFocus { Clock, Quant, } + +impl FocusGrid for AppView, TransportViewCommand> { + type Item = AppViewFocus; + 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]] { + use AppViewFocus::*; + use TransportViewFocus::*; + &[ + &[Menu], + &[ + Content(Bpm), + Content(Sync), + Content(PlayPause), + Content(Clock), + Content(Quant), + ], + ] + } + fn update_focus (&mut self) { + // TODO + } +}