use crate::*; impl Handle for TransportToolbar { fn handle (&mut self, from: &TuiInput) -> Perhaps { match from.event() { key!(KeyCode::Left) => { self.focus.prev(); }, key!(KeyCode::Right) => { self.focus.next(); }, _ => match self.focus { TransportToolbarFocus::PlayPause => return self.handle_play_pause(from), TransportToolbarFocus::Bpm => return self.handle_bpm(from), TransportToolbarFocus::Quant => return self.handle_quant(from), TransportToolbarFocus::Sync => return self.handle_sync(from), TransportToolbarFocus::Clock => {/*todo*/}, } } Ok(Some(true)) } } impl TransportToolbar { fn handle_play_pause (&mut self, from: &TuiInput) -> Perhaps { match from.event() { key!(KeyCode::Enter) => self.toggle_play().map(|_|())?, _ => return Ok(None) } Ok(Some(true)) } fn handle_bpm (&mut self, from: &TuiInput) -> Perhaps { match from.event() { key!(KeyCode::Char(',')) => { self.bpm -= 1.0; }, key!(KeyCode::Char('.')) => { self.bpm += 1.0; }, key!(KeyCode::Char('<')) => { self.bpm -= 0.001; }, key!(KeyCode::Char('>')) => { self.bpm += 0.001; }, _ => return Ok(None) } Ok(Some(true)) } fn handle_quant (&mut self, from: &TuiInput) -> Perhaps { match from.event() { key!(KeyCode::Char(',')) => { self.quant = prev_note_length(self.quant); }, key!(KeyCode::Char('.')) => { self.quant = next_note_length(self.quant); }, _ => return Ok(None) } return Ok(Some(true)) } fn handle_sync (&mut self, from: &TuiInput) -> Perhaps { match from.event() { key!(KeyCode::Char(',')) => { self.sync = prev_note_length(self.sync); }, key!(KeyCode::Char('.')) => { self.sync = next_note_length(self.sync); }, _ => return Ok(None) } return Ok(Some(true)) } }