#[derive(Clone, Copy, PartialEq, Eq, Default)] pub enum PatternsColumn { #[default] Banks, Patterns, } #[derive(Clone, Copy, Default)] pub struct PatternsNav { pub column: PatternsColumn, pub bank_cursor: usize, pub pattern_cursor: usize, } impl PatternsNav { pub fn move_left(&mut self) { self.column = PatternsColumn::Banks; } pub fn move_right(&mut self) { self.column = PatternsColumn::Patterns; } pub fn move_up(&mut self) { match self.column { PatternsColumn::Banks => { self.bank_cursor = (self.bank_cursor + 15) % 16; } PatternsColumn::Patterns => { self.pattern_cursor = (self.pattern_cursor + 15) % 16; } } } pub fn move_down(&mut self) { match self.column { PatternsColumn::Banks => { self.bank_cursor = (self.bank_cursor + 1) % 16; } PatternsColumn::Patterns => { self.pattern_cursor = (self.pattern_cursor + 1) % 16; } } } pub fn selected_bank(&self) -> usize { self.bank_cursor } pub fn selected_pattern(&self) -> usize { self.pattern_cursor } }