Files
Cagire/src/state/patterns_nav.rs
2026-01-26 02:24:04 +01:00

56 lines
1.3 KiB
Rust

use crate::model::{MAX_BANKS, MAX_PATTERNS};
#[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 + MAX_BANKS - 1) % MAX_BANKS;
}
PatternsColumn::Patterns => {
self.pattern_cursor = (self.pattern_cursor + MAX_PATTERNS - 1) % MAX_PATTERNS;
}
}
}
pub fn move_down(&mut self) {
match self.column {
PatternsColumn::Banks => {
self.bank_cursor = (self.bank_cursor + 1) % MAX_BANKS;
}
PatternsColumn::Patterns => {
self.pattern_cursor = (self.pattern_cursor + 1) % MAX_PATTERNS;
}
}
}
pub fn selected_bank(&self) -> usize {
self.bank_cursor
}
pub fn selected_pattern(&self) -> usize {
self.pattern_cursor
}
}