wip(p61,e38)

This commit is contained in:
🪞👃🪞 2024-11-21 00:25:54 +01:00
parent 9d4fcaa32b
commit 76da19d9c6
12 changed files with 172 additions and 141 deletions

View file

@ -7,7 +7,6 @@ pub trait SequencerControl: TransportControl {}
pub trait ArrangerControl: TransportControl {
fn selected (&self) -> ArrangerSelection;
fn selected_mut (&mut self) -> &mut ArrangerSelection;
fn show_phrase (&mut self, phrase: Option<Arc<RwLock<Phrase>>>);
fn activate (&mut self);
fn selected_phrase (&self) -> Option<Arc<RwLock<Phrase>>>;
fn toggle_loop (&mut self);
@ -51,13 +50,10 @@ pub trait PhrasesControl: HasPhrases {
}
}
pub trait HasPhrasesModel: HasPhrases {
fn phrases_model (&self) -> &PhrasesModel;
fn phrases_model_mut (&mut self) -> &mut PhrasesModel;
}
pub trait PhraseControl {
fn phrase_entered (&self) -> bool;
pub trait PhraseEditorControl {
fn edit_phrase (&self, phrase: &Option<Arc<RwLock<Phrase>>>);
fn editing_phrase (&self) -> &Option<Arc<RwLock<Phrase>>>;
fn phrase_editor_entered (&self) -> bool;
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>>;
fn note_axis (&self) -> &RwLock<FixedAxis<usize>>;
fn note_len (&self) -> usize;
@ -65,7 +61,7 @@ pub trait PhraseControl {
fn put_note (&mut self);
fn time_cursor_advance (&self) {
let point = self.time_axis().read().unwrap().point;
let length = self.phrase.as_ref().map(|p|p.read().unwrap().length).unwrap_or(1);
let length = self.editing_phrase().as_ref().map(|p|p.read().unwrap().length).unwrap_or(1);
let forward = |time|(time + self.note_len()) % length;
self.time_axis().write().unwrap().point = point.map(forward);
}
@ -86,17 +82,11 @@ impl ArrangerControl for ArrangerTui {
fn selected_mut (&mut self) -> &mut ArrangerSelection {
&mut self.selected
}
fn show_phrase (&mut self, phrase: Option<Arc<RwLock<Phrase>>>) {
self.editor.show(self.selected_phrase().as_ref());
//state.editor.phrase = phrase.clone();
//state.focus(ArrangerFocus::PhraseEditor);
//state.focus_enter();
}
fn activate (&mut self) {
if let ArrangerSelection::Scene(s) = self.selected {
for (t, track) in self.tracks_mut().iter_mut().enumerate() {
let clip = self.scenes()[s].clips[t].as_ref();
if track.play_phrase.is_some() || clip.is_some() {
if track.player.play_phrase.is_some() || clip.is_some() {
track.enqueue_next(clip);
}
}
@ -137,41 +127,48 @@ impl ArrangerControl for ArrangerTui {
}
}
impl HasPhrasesModel for ArrangerTui {
fn phrases_model (&self) -> &PhrasesModel {
&self.phrases
}
fn phrases_model_mut (&mut self) -> &mut PhrasesModel {
&mut self.phrases
}
}
impl HasPhrasesModel for SequencerTui {
fn phrases_model (&self) -> &PhrasesModel {
&self.phrases
}
fn phrases_model_mut (&mut self) -> &mut PhrasesModel {
&mut self.phrases
}
}
impl<T: HasPhrasesModel> PhrasesControl for T {
impl PhrasesControl for SequencerTui {
fn phrase_index (&self) -> usize {
self.phrases_model().phrase.load(Ordering::Relaxed)
self.phrases.phrase.load(Ordering::Relaxed)
}
fn set_phrase_index (&self, value: usize) {
self.phrases_model().phrase.store(value, Ordering::Relaxed);
self.phrases.phrase.store(value, Ordering::Relaxed);
}
fn phrases_mode (&self) -> &Option<PhrasesMode> {
&self.phrases_model().mode
&self.phrases.mode
}
fn phrases_mode_mut (&mut self) -> &mut Option<PhrasesMode> {
&mut self.phrases_model_mut().mode
&mut self.phrases.mode
}
}
impl PhraseControl for SequencerTui {
fn phrase_entered (&self) -> bool {
impl PhrasesControl for ArrangerTui {
fn phrase_index (&self) -> usize {
self.phrases.phrase.load(Ordering::Relaxed)
}
fn set_phrase_index (&self, value: usize) {
self.phrases.phrase.store(value, Ordering::Relaxed);
}
fn phrases_mode (&self) -> &Option<PhrasesMode> {
&self.phrases.mode
}
fn phrases_mode_mut (&mut self) -> &mut Option<PhrasesMode> {
&mut self.phrases.mode
}
}
impl PhraseEditorControl for SequencerTui {
fn edit_phrase (&self, phrase: &Option<Arc<RwLock<Phrase>>>) {
//self.editor.show(self.selected_phrase().as_ref());
//state.editor.phrase = phrase.clone();
//state.focus(ArrangerFocus::PhraseEditor);
//state.focus_enter();
todo!()
}
fn editing_phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_editor_entered (&self) -> bool {
self.entered && self.focused() == SequencerFocus::PhraseEditor
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
@ -191,8 +188,14 @@ impl PhraseControl for SequencerTui {
}
}
impl PhraseControl for ArrangerTui {
fn phrase_entered (&self) -> bool {
impl PhraseEditorControl for ArrangerTui {
fn edit_phrase (&self, phrase: &Option<Arc<RwLock<Phrase>>>) {
todo!()
}
fn editing_phrase (&self) -> &Option<Arc<RwLock<Phrase>>> {
todo!()
}
fn phrase_editor_entered (&self) -> bool {
self.entered && self.focused() == ArrangerFocus::PhraseEditor
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {