mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 04:06:45 +01:00
wip: refactor pt.9, 403 errors
This commit is contained in:
parent
a784f7a6f2
commit
8aa1ba8d0f
29 changed files with 1008 additions and 902 deletions
|
|
@ -4,10 +4,10 @@ use crate::*;
|
|||
pub enum ArrangerViewCommand {
|
||||
Focus(FocusCommand),
|
||||
Transport(TransportCommand),
|
||||
Arrangement(ArrangementEditorCommand),
|
||||
EditPhrase(Option<Arc<RwLock<Phrase>>>),
|
||||
Phrases(PhrasePoolCommand),
|
||||
Editor(PhraseEditorCommand),
|
||||
Arrangement(ArrangementCommand),
|
||||
EditPhrase(Option<Arc<RwLock<Phrase>>>),
|
||||
}
|
||||
|
||||
/// Handle top-level events in standalone arranger.
|
||||
|
|
@ -16,10 +16,10 @@ impl Handle<Tui> for ArrangerView<Tui> {
|
|||
if let Some(entered) = self.entered() {
|
||||
use ArrangerViewFocus::*;
|
||||
if let Some(true) = match entered {
|
||||
Transport => self.transport.as_mut().map(|t|t.handle(i)).transpose()?.flatten(),
|
||||
Transport => self.sequencer.transport.map(|t|t.handle(i)).transpose()?.flatten(),
|
||||
Arrangement => self.arrangement.handle(i)?,
|
||||
PhrasePool => self.phrases.write().unwrap().handle(i)?,
|
||||
PhraseEditor => self.editor.handle(i)?,
|
||||
PhrasePool => self.sequencer.phrases.handle(i)?,
|
||||
PhraseEditor => self.sequencer.editor.handle(i)?,
|
||||
} {
|
||||
return Ok(Some(true))
|
||||
}
|
||||
|
|
@ -70,44 +70,6 @@ impl InputToCommand<Tui, ArrangerView<Tui>> for ArrangerViewCommand {
|
|||
}
|
||||
}
|
||||
|
||||
/// Handle events for arrangement.
|
||||
impl Handle<Tui> for Arrangement<Tui> {
|
||||
fn handle (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
ArrangementCommand::execute_with_state(self, from)
|
||||
}
|
||||
}
|
||||
|
||||
impl InputToCommand<Tui, Arrangement<Tui>> for ArrangementCommand {
|
||||
fn input_to_command (state: &Arrangement<Tui>, input: &TuiInput) -> Option<Self> {
|
||||
use ArrangementCommand::*;
|
||||
match input.event() {
|
||||
key!(KeyCode::Char('`')) => Some(ToggleViewMode),
|
||||
key!(KeyCode::Delete) => Some(Delete),
|
||||
key!(KeyCode::Enter) => Some(Activate),
|
||||
key!(KeyCode::Char('.')) => Some(Increment),
|
||||
key!(KeyCode::Char(',')) => Some(Decrement),
|
||||
key!(KeyCode::Char('+')) => Some(ZoomIn),
|
||||
key!(KeyCode::Char('=')) => Some(ZoomOut),
|
||||
key!(KeyCode::Char('_')) => Some(ZoomOut),
|
||||
key!(KeyCode::Char('-')) => Some(ZoomOut),
|
||||
key!(KeyCode::Char('<')) => Some(MoveBack),
|
||||
key!(KeyCode::Char('>')) => Some(MoveForward),
|
||||
key!(KeyCode::Char('c')) => Some(RandomColor),
|
||||
key!(KeyCode::Char('s')) => Some(Put),
|
||||
key!(KeyCode::Char('g')) => Some(Get),
|
||||
key!(KeyCode::Char('e')) => Some(Edit(state.phrase())),
|
||||
key!(Ctrl-KeyCode::Char('a')) => Some(AddScene),
|
||||
key!(Ctrl-KeyCode::Char('t')) => Some(AddTrack),
|
||||
key!(KeyCode::Char('l')) => Some(ToggleLoop),
|
||||
key!(KeyCode::Up) => Some(GoUp),
|
||||
key!(KeyCode::Down) => Some(GoDown),
|
||||
key!(KeyCode::Left) => Some(GoLeft),
|
||||
key!(KeyCode::Right) => Some(GoRight),
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//impl ArrangerView<Tui> {
|
||||
///// Helper for event passthru to focused component
|
||||
//fn handle_focused (&mut self, from: &TuiInput) -> Perhaps<bool> {
|
||||
|
|
@ -160,33 +122,6 @@ impl InputToCommand<Tui, Arrangement<Tui>> for ArrangementCommand {
|
|||
//}
|
||||
//}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub enum ArrangementCommand {
|
||||
New,
|
||||
Load,
|
||||
Save,
|
||||
ToggleViewMode,
|
||||
Delete,
|
||||
Activate,
|
||||
Increment,
|
||||
Decrement,
|
||||
ZoomIn,
|
||||
ZoomOut,
|
||||
MoveBack,
|
||||
MoveForward,
|
||||
RandomColor,
|
||||
Put,
|
||||
Get,
|
||||
AddScene,
|
||||
AddTrack,
|
||||
ToggleLoop,
|
||||
GoUp,
|
||||
GoDown,
|
||||
GoLeft,
|
||||
GoRight,
|
||||
Edit(Option<Arc<RwLock<Phrase>>>),
|
||||
}
|
||||
|
||||
impl<E: Engine> Command<ArrangerView<E>> for ArrangerViewCommand {
|
||||
fn execute (self, state: &mut ArrangerView<E>) -> Perhaps<Self> {
|
||||
let undo = match self {
|
||||
|
|
@ -194,59 +129,28 @@ impl<E: Engine> Command<ArrangerView<E>> for ArrangerViewCommand {
|
|||
delegate(cmd, Self::Focus, state)
|
||||
},
|
||||
Self::Phrases(cmd) => {
|
||||
delegate(cmd, Self::Phrases, &mut*state.phrases.write().unwrap())
|
||||
delegate(cmd, Self::Phrases, &mut*state.sequencer.phrases.write().unwrap())
|
||||
},
|
||||
Self::Editor(cmd) => {
|
||||
delegate(cmd, Self::Editor, &mut state.editor)
|
||||
delegate(cmd, Self::Editor, &mut state.sequencer.editor)
|
||||
},
|
||||
Self::Arrangement(cmd) => {
|
||||
delegate(cmd, Self::Arrangement, &mut state.arrangement)
|
||||
},
|
||||
Self::Transport(cmd) => if let Some(ref transport) = state.transport {
|
||||
Self::Transport(cmd) => if let Some(ref transport) = state.sequencer.transport {
|
||||
delegate(cmd, Self::Transport, &mut*transport.write().unwrap())
|
||||
} else {
|
||||
Ok(None)
|
||||
},
|
||||
Self::EditPhrase(phrase) => {
|
||||
state.editor.phrase = phrase.clone();
|
||||
state.sequencer.editor.phrase = phrase.clone();
|
||||
state.focus(ArrangerViewFocus::PhraseEditor);
|
||||
state.focus_enter();
|
||||
Ok(None)
|
||||
}
|
||||
}?;
|
||||
state.show_phrase();
|
||||
state.update_status();
|
||||
state.sequencer.show_phrase();
|
||||
state.sequencer.update_status();
|
||||
return Ok(undo);
|
||||
}
|
||||
}
|
||||
impl<E: Engine> Command<Arrangement<E>> for ArrangementCommand {
|
||||
fn execute (self, state: &mut Arrangement<E>) -> Perhaps<Self> {
|
||||
use ArrangementCommand::*;
|
||||
match self {
|
||||
New => todo!(),
|
||||
Load => todo!(),
|
||||
Save => todo!(),
|
||||
Edit(phrase) => { state.phrase = phrase.clone() },
|
||||
ToggleViewMode => { state.mode.to_next(); },
|
||||
Delete => { state.delete(); },
|
||||
Activate => { state.activate(); },
|
||||
Increment => { state.increment(); },
|
||||
Decrement => { state.decrement(); },
|
||||
ZoomIn => { state.zoom_in(); },
|
||||
ZoomOut => { state.zoom_out(); },
|
||||
MoveBack => { state.move_back(); },
|
||||
MoveForward => { state.move_forward(); },
|
||||
RandomColor => { state.randomize_color(); },
|
||||
Put => { state.phrase_put(); },
|
||||
Get => { state.phrase_get(); },
|
||||
AddScene => { state.scene_add(None, None)?; },
|
||||
AddTrack => { state.track_add(None, None)?; },
|
||||
ToggleLoop => { state.toggle_loop() },
|
||||
GoUp => { state.go_up() },
|
||||
GoDown => { state.go_down() },
|
||||
GoLeft => { state.go_left() },
|
||||
GoRight => { state.go_right() },
|
||||
};
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue