From 2be2c8aca2f356783d1113451ea62d208593c492 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 11 Nov 2024 03:13:05 +0100 Subject: [PATCH] wip: refactor pt.18: 25 errors --- crates/tek_tui/src/tui_app_foc.rs | 3 +- crates/tek_tui/src/tui_arranger.rs | 51 +++++++++++--------------- crates/tek_tui/src/tui_arranger_foc.rs | 20 +++++----- crates/tek_tui/src/tui_pool_cmd.rs | 6 +-- 4 files changed, 38 insertions(+), 42 deletions(-) diff --git a/crates/tek_tui/src/tui_app_foc.rs b/crates/tek_tui/src/tui_app_foc.rs index 915afd52..34721905 100644 --- a/crates/tek_tui/src/tui_app_foc.rs +++ b/crates/tek_tui/src/tui_app_foc.rs @@ -50,7 +50,8 @@ where fn layout (&self) -> &[&[Self::Item]] { &[ &[AppContainerFocus::Menu], - &[AppContainerFocus::Content(())], + FocusGrid::layout(&self.ui) + //&[AppContainerFocus::Content(())], ] } fn update_focus (&mut self) { diff --git a/crates/tek_tui/src/tui_arranger.rs b/crates/tek_tui/src/tui_arranger.rs index d6a8db74..588f08c1 100644 --- a/crates/tek_tui/src/tui_arranger.rs +++ b/crates/tek_tui/src/tui_arranger.rs @@ -98,6 +98,7 @@ impl Content for ArrangerView { /// General methods for arranger impl ArrangerView { + pub fn new ( sequencer: SequencerView, arrangement: ArrangementEditor, @@ -111,6 +112,7 @@ impl ArrangerView { pub fn toggle_play (&mut self) -> Usually<()> { self.sequencer.transport.model.toggle_play() } + pub fn next_color (&self) -> ItemColor { if let ArrangementEditorFocus::Clip(track, scene) = self.arrangement.selected { let track_color = self.arrangement.model.tracks[track].color; @@ -120,10 +122,12 @@ impl ArrangerView { panic!("could not compute next color") } } + /// Focus the editor with the current phrase pub fn show_phrase (&mut self) { self.sequencer.editor.show(self.arrangement.phrase().as_ref()); } + /// Focus the editor with the current phrase pub fn edit_phrase (&mut self) { if self.arrangement.selected.is_clip() && self.arrangement.phrase().is_none() { @@ -134,24 +138,7 @@ impl ArrangerView { self.focus(ArrangerViewFocus::PhraseEditor); self.sequencer.editor.entered = true; } - /// Rename the selected track, scene, or clip - pub fn rename_selected (&mut self) { - match self.arrangement.selected { - ArrangementEditorFocus::Mix => {}, - ArrangementEditorFocus::Track(_) => { todo!("rename track"); }, - ArrangementEditorFocus::Scene(_) => { todo!("rename scene"); }, - ArrangementEditorFocus::Clip(t, s) => { - if let Some(ref phrase) = self.arrangement.model.scenes[s].clips[t] { - let index = self.sequencer.phrases.index_of(&*phrase.read().unwrap()); - if let Some(index) = index { - self.focus(ArrangerViewFocus::PhrasePool); - self.sequencer.phrases.phrase = index; - self.sequencer.phrases.begin_rename(); - } - } - }, - } - } + pub fn activate (&mut self) { match self.arrangement.selected { ArrangementEditorFocus::Scene(s) => { @@ -175,31 +162,36 @@ impl ArrangerView { _ => {} } } + pub fn delete (&mut self) { match self.arrangement.selected { - ArrangementEditorFocus::Track(_) => self.track_del(), - ArrangementEditorFocus::Scene(_) => self.scene_del(), - ArrangementEditorFocus::Clip(_, _) => self.phrase_del(), + ArrangementEditorFocus::Track(_) => self.arrangement.track_del(), + ArrangementEditorFocus::Scene(_) => self.arrangement.scene_del(), + ArrangementEditorFocus::Clip(_, _) => self.arrangement.phrase_del(), _ => {} } } + pub fn is_first_row (&self) -> bool { - let selected = self.selected; + let selected = self.arrangement.selected; selected.is_mix() || selected.is_track() } + pub fn is_last_row (&self) -> bool { - let selected = self.selected; - (self.scenes.len() == 0 && (selected.is_mix() || selected.is_track())) || match selected { + let selected = self.arrangement.selected; + (self.arrangement.model.scenes.len() == 0 && (selected.is_mix() || selected.is_track())) || match selected { ArrangementEditorFocus::Scene(s) => s == self.arrangement.model.scenes.len() - 1, ArrangementEditorFocus::Clip(_, s) => s == self.arrangement.model.scenes.len() - 1, _ => false } } + pub fn toggle_loop (&mut self) { - if let Some(phrase) = self.phrase() { + if let Some(phrase) = self.arrangement.phrase() { phrase.write().unwrap().toggle_loop() } } + pub fn randomize_color (&mut self) { match self.arrangement.selected { ArrangementEditorFocus::Mix => { @@ -218,6 +210,7 @@ impl ArrangerView { } } } + } /// Arranger display mode can be cycled @@ -308,7 +301,7 @@ impl ArrangementEditor { pub fn phrase_put (&mut self) { if let ArrangementEditorFocus::Clip(track, scene) = self.selected { self.model.scenes[scene].clips[track] = Some( - self.model.phrases.phrase().clone() + self.model.phrase().clone() ); } } @@ -328,8 +321,8 @@ impl ArrangementEditor { let phrases = self.model.phrases.read().unwrap(); let index = phrases.index_of(&*phrase.read().unwrap()); if let Some(index) = index { - if index < phrases.phrases.len().saturating_sub(1) { - *phrase = phrases.phrases[index + 1].clone(); + if index < phrases.len().saturating_sub(1) { + *phrase = phrases[index + 1].clone(); } } } @@ -342,7 +335,7 @@ impl ArrangementEditor { let index = phrases.index_of(&*phrase.read().unwrap()); if let Some(index) = index { if index > 0 { - *phrase = phrases.phrases[index - 1].clone(); + *phrase = phrases[index - 1].clone(); } } } diff --git a/crates/tek_tui/src/tui_arranger_foc.rs b/crates/tek_tui/src/tui_arranger_foc.rs index 283c36f5..cc3a71d3 100644 --- a/crates/tek_tui/src/tui_arranger_foc.rs +++ b/crates/tek_tui/src/tui_arranger_foc.rs @@ -16,27 +16,29 @@ pub enum ArrangerViewFocus { /// Focus layout of arranger app impl FocusGrid for ArrangerView { type Item = ArrangerViewFocus; - fn cursor (&self) -> (usize, usize) { self.focus_cursor } - fn cursor_mut (&mut self) -> &mut (usize, usize) { &mut self.focus_cursor } + fn cursor (&self) -> (usize, usize) { + self.focus_cursor + } + fn cursor_mut (&mut self) -> &mut (usize, usize) { + &mut self.focus_cursor + } fn focus_enter (&mut self) { let focused = self.focused(); if !self.entered { self.entered = true; use ArrangerViewFocus::*; - if let Some(transport) = self.transport.as_ref() { - //transport.write().unwrap().entered = focused == Transport - } self.arrangement.entered = focused == Arrangement; - self.phrases.write().unwrap().entered = focused == PhrasePool; - self.editor.entered = focused == PhraseEditor; + //self.sequencer.transport.entered = focused == Transport; + self.sequencer.editor.entered = focused == PhraseEditor; + self.sequencer.phrases.entered = focused == PhrasePool; } } fn focus_exit (&mut self) { if self.entered { self.entered = false; self.arrangement.entered = false; - self.editor.entered = false; - self.phrases.write().unwrap().entered = false; + self.sequencer.editor.entered = false; + self.sequencer.phrases.entered = false; } } fn entered (&self) -> Option { diff --git a/crates/tek_tui/src/tui_pool_cmd.rs b/crates/tek_tui/src/tui_pool_cmd.rs index 2861dd19..014779a7 100644 --- a/crates/tek_tui/src/tui_pool_cmd.rs +++ b/crates/tek_tui/src/tui_pool_cmd.rs @@ -54,13 +54,13 @@ impl Command> for PhrasePoolViewCommand { view.phrase = phrase }, Self::Edit(command) => { - return Ok(command.execute(&mut view.state)?.map(Self::Edit)) + return Ok(command.execute(&mut view.model)?.map(Self::Edit)) } Self::Rename(command) => match command { Rename::Begin => { view.mode = Some(PhrasePoolMode::Rename( view.phrase, - view.state.phrases[view.phrase].read().unwrap().name.clone() + view.model.phrases[view.phrase].read().unwrap().name.clone() )) }, _ => { @@ -71,7 +71,7 @@ impl Command> for PhrasePoolViewCommand { Length::Begin => { view.mode = Some(PhrasePoolMode::Length( view.phrase, - view.state.phrases[view.phrase].read().unwrap().length, + view.model.phrases[view.phrase].read().unwrap().length, PhraseLengthFocus::Bar )) },