54 lines
1.2 KiB
Rust
54 lines
1.2 KiB
Rust
#[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
|
|
}
|
|
}
|