diff --git a/src/layout.rs b/src/layout.rs index 36c7f105..17fb506e 100644 --- a/src/layout.rs +++ b/src/layout.rs @@ -57,7 +57,7 @@ impl Device for Rows { width: area.width, height: area.height - h })?; - if self.focused && i == self.focus { + if !self.focused && i == self.focus { draw_box_styled(buf, result, Some(Style::default().green().dim().bold())); } w = w.max(result.width); @@ -85,8 +85,24 @@ impl Columns { } impl Device for Columns { + fn handle (&mut self, event: &AppEvent) -> Usually { - Ok(self.items[self.focus].handle(event)? || match event { + let focused = match self.focused { + true => Some(self.items.get_mut(self.focus).unwrap()), + false => None + }; + + let handled = if let Some(item) = focused { + item.handle(event)? + } else { + false + }; + + if handled { + return Ok(true); + } + + Ok(match event { AppEvent::Input(event) => match event { Event::Key(KeyEvent { code: KeyCode::Left, .. }) => { if self.focus == 0 { @@ -103,12 +119,12 @@ impl Device for Columns { true }, Event::Key(KeyEvent { code: KeyCode::Enter, .. }) => { - self.focused = false; + self.focused = true; self.items[self.focus].handle(&AppEvent::Focus)?; true }, Event::Key(KeyEvent { code: KeyCode::Esc, .. }) => { - self.focused = true; + self.focused = false; self.items[self.focus].handle(&AppEvent::Blur)?; true }, @@ -117,6 +133,7 @@ impl Device for Columns { _ => false }) } + fn render (&self, buf: &mut Buffer, area: Rect) -> Usually { let mut w = 0u16; let mut h = 0u16; @@ -127,7 +144,7 @@ impl Device for Columns { width: area.width - w, height: area.height })?; - if self.focused && i == self.focus { + if !self.focused && i == self.focus { draw_box_styled(buf, result, Some(Style::default().green())); } w = w + result.width; diff --git a/src/main.rs b/src/main.rs index 8be516ff..5fe2cc3f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -23,9 +23,9 @@ fn main () -> Result<(), Box> { //crate::device::run(Sequencer::new("Rhythm#000")?) let transport = Transport::new("Transport")?; let timebase = transport.state.lock().unwrap().timebase(); - crate::device::run(Rows::new(true, vec![ + crate::device::run(Rows::new(false, vec![ Box::new(transport), - Box::new(Columns::new(true, vec![ + Box::new(Columns::new(false, vec![ Box::new(Sequencer::new("Melody#000", &timebase)?), Box::new(Sequencer::new("Melody#001", &timebase)?), Box::new(Sequencer::new("Rhythm#000", &timebase)?),