wip(p63,e22)

This commit is contained in:
🪞👃🪞 2024-11-21 15:00:45 +01:00
parent 5673dd7e8a
commit f49823b7a7
5 changed files with 158 additions and 194 deletions

View file

@ -49,16 +49,16 @@ macro_rules! impl_has_phrases {
($Struct:ident $(:: $field:ident)*) => {
impl HasPhrases for $Struct {
fn phrases (&self) -> &Vec<Arc<RwLock<Phrase>>> {
&self$(.$field)*
&self$(.$field)*.phrases
}
fn phrases_mut (&mut self) -> &mut Vec<Arc<RwLock<Phrase>>> {
&mut self$(.$field)*
&mut self$(.$field)*.phrases
}
}
}
}
macro_rules! impl_has_phrase {
macro_rules! impl_midi_player {
($Struct:ident $(:: $field:ident)*) => {
impl HasPhrase for $Struct {
fn reset (&self) -> bool {
@ -80,11 +80,6 @@ macro_rules! impl_has_phrase {
todo!()
}
}
}
}
macro_rules! impl_midi_player {
($Struct:ident $(:: $field:ident)*) => {
impl MidiInputApi for $Struct {
fn midi_ins(&self) -> &Vec<Port<jack::MidiIn>> {
todo!()
@ -132,6 +127,60 @@ macro_rules! impl_midi_player {
}
}
macro_rules! impl_phrases_control {
($Struct:ident $(:: $field:ident)*) => {
impl PhrasesControl for $Struct {
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
}
}
}
}
macro_rules! impl_phrase_editor_control {
($Struct:ident $(:: $field:ident)* [$Focus:expr]) => {
impl PhraseEditorControl for $Struct {
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() == $Focus
}
fn time_axis (&self) -> &RwLock<ScaledAxis<usize>> {
&self.editor.time_axis
}
fn note_axis (&self) -> &RwLock<FixedAxis<usize>> {
&self.editor.note_axis
}
fn note_len (&self) -> usize {
self.editor.note_len
}
fn note_len_mut (&mut self) -> &mut usize {
&mut self.editor.note_len
}
fn put_note (&mut self) {
todo!()
}
}
}
}
impl_jack_api!(TransportTui::jack);
impl_jack_api!(SequencerTui::jack);
impl_jack_api!(ArrangerTui::jack);
@ -148,45 +197,10 @@ impl_playhead_api!(ArrangerTrack);
impl_has_phrases!(PhrasesModel::phrases);
impl_has_phrases!(SequencerTui::phrases);
impl_has_phrases!(ArrangerTui::phrases);
impl_has_phrase!(SequencerTui::player);
impl_has_phrase!(ArrangerTrack::player);
impl_has_phrase!(PhrasePlayerModel);
impl_midi_player!(ArrangerTrack);
impl_midi_player!(SequencerTui::player);
impl_midi_player!(ArrangerTrack::player);
impl_midi_player!(PhrasePlayerModel);
impl HasScenes<ArrangerScene> for ArrangerTui {
fn scenes (&self) -> &Vec<ArrangerScene> {
&self.scenes
}
fn scenes_mut (&mut self) -> &mut Vec<ArrangerScene> {
&mut self.scenes
}
fn scene_add (&mut self, name: Option<&str>, color: Option<ItemColor>)
-> Usually<&mut ArrangerScene>
{
let name = name.map_or_else(||self.scene_default_name(), |x|x.to_string());
let scene = ArrangerScene {
name: Arc::new(name.into()),
clips: vec![None;self.tracks().len()],
color: color.unwrap_or_else(||ItemColor::random()),
};
self.scenes_mut().push(scene);
let index = self.scenes().len() - 1;
Ok(&mut self.scenes_mut()[index])
}
fn selected_scene (&self) -> Option<&ArrangerScene> {
self.selected.scene().map(|s|self.scenes().get(s)).flatten()
}
fn selected_scene_mut (&mut self) -> Option<&mut ArrangerScene> {
self.selected.scene().map(|s|self.scenes_mut().get_mut(s)).flatten()
}
}
impl HasTracks<ArrangerTrack> for ArrangerTui {
fn tracks (&self) -> &Vec<ArrangerTrack> {
&self.tracks
}
fn tracks_mut (&mut self) -> &mut Vec<ArrangerTrack> {
&mut self.tracks
}
}
impl_phrases_control!(SequencerTui);
impl_phrases_control!(ArrangerTui);
impl_phrase_editor_control!(SequencerTui [SequencerFocus::PhraseEditor]);
impl_phrase_editor_control!(ArrangerTui [ArrangerFocus::PhraseEditor]);