mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
wip: refactor pt.8, 512 errors lol
This commit is contained in:
parent
a1818a8504
commit
a784f7a6f2
19 changed files with 238 additions and 183 deletions
|
|
@ -1,7 +1,7 @@
|
|||
use crate::*;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum ArrangerAppCommand {
|
||||
pub enum ArrangerViewCommand {
|
||||
Focus(FocusCommand),
|
||||
Transport(TransportCommand),
|
||||
Phrases(PhrasePoolCommand),
|
||||
|
|
@ -11,10 +11,10 @@ pub enum ArrangerAppCommand {
|
|||
}
|
||||
|
||||
/// Handle top-level events in standalone arranger.
|
||||
impl Handle<Tui> for ArrangerApp<Tui> {
|
||||
impl Handle<Tui> for ArrangerView<Tui> {
|
||||
fn handle (&mut self, i: &TuiInput) -> Perhaps<bool> {
|
||||
if let Some(entered) = self.entered() {
|
||||
use ArrangerAppFocus::*;
|
||||
use ArrangerViewFocus::*;
|
||||
if let Some(true) = match entered {
|
||||
Transport => self.transport.as_mut().map(|t|t.handle(i)).transpose()?.flatten(),
|
||||
Arrangement => self.arrangement.handle(i)?,
|
||||
|
|
@ -24,14 +24,14 @@ impl Handle<Tui> for ArrangerApp<Tui> {
|
|||
return Ok(Some(true))
|
||||
}
|
||||
}
|
||||
ArrangerAppCommand::execute_with_state(self, i)
|
||||
ArrangerViewCommand::execute_with_state(self, i)
|
||||
}
|
||||
}
|
||||
|
||||
impl InputToCommand<Tui, ArrangerApp<Tui>> for ArrangerAppCommand {
|
||||
fn input_to_command (state: &ArrangerApp<Tui>, input: &TuiInput) -> Option<Self> {
|
||||
impl InputToCommand<Tui, ArrangerView<Tui>> for ArrangerViewCommand {
|
||||
fn input_to_command (state: &ArrangerView<Tui>, input: &TuiInput) -> Option<Self> {
|
||||
use FocusCommand::*;
|
||||
use ArrangerAppCommand::*;
|
||||
use ArrangerViewCommand::*;
|
||||
match input.event() {
|
||||
key!(KeyCode::Tab) => Some(Focus(Next)),
|
||||
key!(Shift-KeyCode::Tab) => Some(Focus(Prev)),
|
||||
|
|
@ -45,11 +45,11 @@ impl InputToCommand<Tui, ArrangerApp<Tui>> for ArrangerAppCommand {
|
|||
key!(KeyCode::Esc) => Some(Focus(Exit)),
|
||||
key!(KeyCode::Char(' ')) => Some(Transport(TransportCommand::PlayToggle)),
|
||||
_ => match state.focused() {
|
||||
ArrangerAppFocus::Transport => state.transport.as_ref()
|
||||
ArrangerViewFocus::Transport => state.transport.as_ref()
|
||||
.map(|t|TransportCommand::input_to_command(&*t.read().unwrap(), input)
|
||||
.map(Transport))
|
||||
.flatten(),
|
||||
ArrangerAppFocus::PhrasePool => {
|
||||
ArrangerViewFocus::PhrasePool => {
|
||||
let phrases = state.phrases.read().unwrap();
|
||||
match input.event() {
|
||||
key!(KeyCode::Char('e')) => Some(EditPhrase(Some(phrases.phrase().clone()))),
|
||||
|
|
@ -57,10 +57,10 @@ impl InputToCommand<Tui, ArrangerApp<Tui>> for ArrangerAppCommand {
|
|||
.map(Phrases)
|
||||
}
|
||||
},
|
||||
ArrangerAppFocus::PhraseEditor =>
|
||||
ArrangerViewFocus::PhraseEditor =>
|
||||
PhraseEditorCommand::input_to_command(&state.editor, input)
|
||||
.map(Editor),
|
||||
ArrangerAppFocus::Arrangement => match input.event() {
|
||||
ArrangerViewFocus::Arrangement => match input.event() {
|
||||
key!(KeyCode::Char('e')) => Some(EditPhrase(state.arrangement.phrase())),
|
||||
_ => ArrangementCommand::input_to_command(&state.arrangement, &input)
|
||||
.map(Arrangement)
|
||||
|
|
@ -108,14 +108,14 @@ impl InputToCommand<Tui, Arrangement<Tui>> for ArrangementCommand {
|
|||
}
|
||||
}
|
||||
|
||||
//impl ArrangerApp<Tui> {
|
||||
//impl ArrangerView<Tui> {
|
||||
///// Helper for event passthru to focused component
|
||||
//fn handle_focused (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
//match self.focused() {
|
||||
//ArrangerAppFocus::Transport => self.transport.handle(from),
|
||||
//ArrangerAppFocus::PhrasePool => self.handle_pool(from),
|
||||
//ArrangerAppFocus::PhraseEditor => self.editor.handle(from),
|
||||
//ArrangerAppFocus::Arrangement => self.handle_arrangement(from)
|
||||
//ArrangerViewFocus::Transport => self.transport.handle(from),
|
||||
//ArrangerViewFocus::PhrasePool => self.handle_pool(from),
|
||||
//ArrangerViewFocus::PhraseEditor => self.editor.handle(from),
|
||||
//ArrangerViewFocus::Arrangement => self.handle_arrangement(from)
|
||||
//.and_then(|result|{self.show_phrase();Ok(result)}),
|
||||
//}
|
||||
//}
|
||||
|
|
@ -187,8 +187,8 @@ pub enum ArrangementCommand {
|
|||
Edit(Option<Arc<RwLock<Phrase>>>),
|
||||
}
|
||||
|
||||
impl<E: Engine> Command<ArrangerApp<E>> for ArrangerAppCommand {
|
||||
fn execute (self, state: &mut ArrangerApp<E>) -> Perhaps<Self> {
|
||||
impl<E: Engine> Command<ArrangerView<E>> for ArrangerViewCommand {
|
||||
fn execute (self, state: &mut ArrangerView<E>) -> Perhaps<Self> {
|
||||
let undo = match self {
|
||||
Self::Focus(cmd) => {
|
||||
delegate(cmd, Self::Focus, state)
|
||||
|
|
@ -209,7 +209,7 @@ impl<E: Engine> Command<ArrangerApp<E>> for ArrangerAppCommand {
|
|||
},
|
||||
Self::EditPhrase(phrase) => {
|
||||
state.editor.phrase = phrase.clone();
|
||||
state.focus(ArrangerAppFocus::PhraseEditor);
|
||||
state.focus(ArrangerViewFocus::PhraseEditor);
|
||||
state.focus_enter();
|
||||
Ok(None)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue