wip: refactor pt.18: 25 errors

This commit is contained in:
🪞👃🪞 2024-11-11 03:13:05 +01:00
parent c2b290b3c5
commit 2be2c8aca2
4 changed files with 38 additions and 42 deletions

View file

@ -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) {

View file

@ -98,6 +98,7 @@ impl Content for ArrangerView<Tui> {
/// General methods for arranger
impl<E: Engine> ArrangerView<E> {
pub fn new (
sequencer: SequencerView<E>,
arrangement: ArrangementEditor<E>,
@ -111,6 +112,7 @@ impl<E: Engine> ArrangerView<E> {
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<E: Engine> ArrangerView<E> {
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<E: Engine> ArrangerView<E> {
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<E: Engine> ArrangerView<E> {
_ => {}
}
}
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<E: Engine> ArrangerView<E> {
}
}
}
}
/// Arranger display mode can be cycled
@ -308,7 +301,7 @@ impl<E: Engine> ArrangementEditor<E> {
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<E: Engine> ArrangementEditor<E> {
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<E: Engine> ArrangementEditor<E> {
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();
}
}
}

View file

@ -16,27 +16,29 @@ pub enum ArrangerViewFocus {
/// Focus layout of arranger app
impl<E: Engine> FocusGrid for ArrangerView<E> {
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<ArrangerViewFocus> {

View file

@ -54,13 +54,13 @@ impl<E: Engine> Command<PhrasePoolView<E>> 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<E: Engine> Command<PhrasePoolView<E>> 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
))
},