diff --git a/src/control.rs b/src/control.rs index 23276add..4f476839 100644 --- a/src/control.rs +++ b/src/control.rs @@ -1,4 +1,3 @@ -pub mod chain; pub mod focus; pub mod mixer; pub mod plugin; @@ -334,3 +333,75 @@ fn rename (_: &mut App) -> Usually { Ok(true) } //s.sequencer_mut().map(|s|s.monitoring = !s.monitoring); //Ok(true) //} +//use crate::{core::*, model::*}; +//use super::focus::*; + +//pub fn handle (state: &mut Chain, event: &AppEvent) -> Usually { + //Ok(handle_focus(state, event, keymap!(Chain { + //[Up, NONE, "focus_up", "focus row above", + //|s: &mut Chain|s.handle_focus(&FocusEvent::Backward)], + //[Down, NONE, "focus_down", "focus row below", + //|s: &mut Chain|s.handle_focus(&FocusEvent::Forward)], + //[Enter, NONE, "focus_down", "focus row below", + //|s: &mut Chain|s.handle_focus(&FocusEvent::Inward)], + //[Esc, NONE, "focus_down", "focus row below", + //|s: &mut Chain|s.handle_focus(&FocusEvent::Outward)], + //}))? || handle_keymap(state, event, keymap!(Chain { + //[Char('a'), NONE, "add_device", "add a device", add_device] + //}))?) +//} + +//fn add_device (state: &mut Chain) -> Usually { + //state.adding = true; + //Ok(true) +//} + +//impl Focus for Chain { + //fn unfocus (&mut self) { + //self.focused = false + //} + //fn focused (&self) -> Option<&Box> { + //match self.focused { + //true => self.items.get(self.focus), + //false => None + //} + //} + //fn focused_mut (&mut self) -> Option<&mut Box> { + //match self.focused { + //true => self.items.get_mut(self.focus), + //false => None + //} + //} + //fn handle_focus (&mut self, event: &FocusEvent) -> Usually { + //Ok(match event { + //FocusEvent::Backward => { + //if self.focus == 0 { + //self.focus = self.items.len(); + //} + //self.focus = self.focus - 1; + //true + //}, + //FocusEvent::Forward => { + //self.focus = self.focus + 1; + //if self.focus >= self.items.len() { + //self.focus = 0; + //} + //true + //}, + //FocusEvent::Inward => { + //self.focused = true; + //self.items[self.focus].handle(&AppEvent::Focus)?; + //true + //}, + //FocusEvent::Outward => { + //if self.focused { + //self.focused = false; + //self.items[self.focus].handle(&AppEvent::Blur)?; + //true + //} else { + //false + //} + //}, + //}) + //} +//} diff --git a/src/control/chain.rs b/src/control/chain.rs deleted file mode 100644 index 4087fa61..00000000 --- a/src/control/chain.rs +++ /dev/null @@ -1,72 +0,0 @@ -use crate::{core::*, model::*}; -use super::focus::*; - -pub fn handle (state: &mut Chain, event: &AppEvent) -> Usually { - Ok(handle_focus(state, event, keymap!(Chain { - [Up, NONE, "focus_up", "focus row above", - |s: &mut Chain|s.handle_focus(&FocusEvent::Backward)], - [Down, NONE, "focus_down", "focus row below", - |s: &mut Chain|s.handle_focus(&FocusEvent::Forward)], - [Enter, NONE, "focus_down", "focus row below", - |s: &mut Chain|s.handle_focus(&FocusEvent::Inward)], - [Esc, NONE, "focus_down", "focus row below", - |s: &mut Chain|s.handle_focus(&FocusEvent::Outward)], - }))? || handle_keymap(state, event, keymap!(Chain { - [Char('a'), NONE, "add_device", "add a device", add_device] - }))?) -} - -fn add_device (state: &mut Chain) -> Usually { - state.adding = true; - Ok(true) -} - -impl Focus for Chain { - fn unfocus (&mut self) { - self.focused = false - } - fn focused (&self) -> Option<&Box> { - match self.focused { - true => self.items.get(self.focus), - false => None - } - } - fn focused_mut (&mut self) -> Option<&mut Box> { - match self.focused { - true => self.items.get_mut(self.focus), - false => None - } - } - fn handle_focus (&mut self, event: &FocusEvent) -> Usually { - Ok(match event { - FocusEvent::Backward => { - if self.focus == 0 { - self.focus = self.items.len(); - } - self.focus = self.focus - 1; - true - }, - FocusEvent::Forward => { - self.focus = self.focus + 1; - if self.focus >= self.items.len() { - self.focus = 0; - } - true - }, - FocusEvent::Inward => { - self.focused = true; - self.items[self.focus].handle(&AppEvent::Focus)?; - true - }, - FocusEvent::Outward => { - if self.focused { - self.focused = false; - self.items[self.focus].handle(&AppEvent::Blur)?; - true - } else { - false - } - }, - }) - } -} diff --git a/src/main.rs b/src/main.rs index 52c135cc..1a91138c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -112,7 +112,7 @@ pub struct App { pub time_cursor: usize, } -process!(App |self, client, scope| { +process!(App |self, _client, scope| { let transport = self.transport.as_ref().unwrap().query().unwrap(); self.playing = Some(transport.state); self.playhead = transport.pos.frame() as usize; @@ -208,9 +208,6 @@ impl App { self.scenes.get_mut(id).map(|t|(id, t)) } } } - pub fn chain (&self) -> Option<&Chain> { - Some(&self.track()?.1.chain) - } pub fn phrase_id (&self) -> Option { let (track_id, _) = self.track()?; let (_, scene) = self.scene()?; diff --git a/src/model.rs b/src/model.rs index 32f2ea39..0cb54422 100644 --- a/src/model.rs +++ b/src/model.rs @@ -1,4 +1,3 @@ -pub mod chain; pub mod looper; pub mod mixer; pub mod phrase; @@ -10,7 +9,6 @@ pub mod track; pub use self::phrase::Phrase; pub use self::scene::Scene; pub use self::track::Track; -pub use self::chain::Chain; pub use self::sampler::{Sampler, Sample}; pub use self::mixer::Mixer; pub use self::plugin::{Plugin, PluginKind, lv2::LV2Plugin}; diff --git a/src/model/chain.rs b/src/model/chain.rs deleted file mode 100644 index ac091b14..00000000 --- a/src/model/chain.rs +++ /dev/null @@ -1,46 +0,0 @@ -use crate::{core::*, view::*}; - -pub struct Chain { - pub name: String, - pub focused: bool, - pub focus: usize, - pub items: Vec>, - pub view: ChainViewMode, - pub adding: bool, -} -render!(Chain = crate::view::chain::render); -handle!(Chain = crate::control::chain::handle); -process!(Chain); -impl Chain { - pub fn new (name: &str, items: Option>>) -> Usually { - Ok(Self { - name: name.into(), - focused: false, - focus: 0, - items: items.unwrap_or_else(||vec![]), - view: ChainViewMode::Column, - adding: false - }) - } -} - -impl PortList for Chain { - fn midi_ins (&self) -> Usually> { - if let Some(device) = self.items.get(0) { - device.midi_ins() - } else { - Ok(vec![]) - } - } - fn audio_outs (&self) -> Usually> { - if let Some(device) = self.items.get(self.items.len().saturating_sub(1)) { - device.audio_outs() - } else { - Ok(vec![]) - } - } -} - -pub fn process (_: &mut Chain, _: &Client, _: &ProcessScope) -> Control { - Control::Continue -} diff --git a/src/model/track.rs b/src/model/track.rs index 181f2e8b..9d352af9 100644 --- a/src/model/track.rs +++ b/src/model/track.rs @@ -18,7 +18,9 @@ pub struct Track { /// Red keys on piano roll. pub notes_on: Vec, /// Device chain - pub chain: Chain, + pub devices: Vec>, + /// Device selector + pub device: usize, } impl Track { @@ -30,14 +32,15 @@ impl Track { ) -> Usually { Ok(Self { name: name.to_string(), - chain: Chain::new(&name, devices)?, midi_out: jack.register_port(name, MidiOut)?, notes_on: vec![], monitoring: false, recording: false, overdub: true, sequence: None, - phrases: phrases.unwrap_or_else(||vec![]) + phrases: phrases.unwrap_or_else(||vec![]), + devices: devices.unwrap_or_else(||vec![]), + device: 0, }) } } diff --git a/src/view.rs b/src/view.rs index 533c7f74..4a31679c 100644 --- a/src/view.rs +++ b/src/view.rs @@ -42,7 +42,7 @@ render!(App |self, buf, area| { let track = self.tracks.get(self.track_cursor - 1); y = y + ChainView { focused: self.section == 1, - chain: track.map(|t|&t.chain), + chain: track, }.render(buf, Rect { x, y, width, height: height / 3 })?.height; y = y + SequencerView { diff --git a/src/view/chain.rs b/src/view/chain.rs index b0420518..77afee1e 100644 --- a/src/view/chain.rs +++ b/src/view/chain.rs @@ -11,7 +11,7 @@ pub enum ChainViewMode { pub struct ChainView<'a> { pub focused: bool, - pub chain: Option<&'a Chain>, + pub chain: Option<&'a Track>, } impl<'a> Render for ChainView<'a> { @@ -34,12 +34,12 @@ impl<'a> Render for ChainView<'a> { } pub fn draw_as_row ( - state: &Chain, buf: &mut Buffer, area: Rect, style: Option