use std::collections::HashSet; use std::path::PathBuf; use crate::model::{MAX_BANKS, MAX_PATTERNS}; use crate::model::Project; pub struct ProjectState { pub project: Project, pub file_path: Option, pub dirty_patterns: HashSet<(usize, usize)>, } impl Default for ProjectState { fn default() -> Self { let mut state = Self { project: Project::default(), file_path: None, dirty_patterns: HashSet::new(), }; state.mark_all_dirty(); state } } impl ProjectState { pub fn mark_dirty(&mut self, bank: usize, pattern: usize) { self.dirty_patterns.insert((bank, pattern)); } pub fn mark_all_dirty(&mut self) { for bank in 0..MAX_BANKS { for pattern in 0..MAX_PATTERNS { self.dirty_patterns.insert((bank, pattern)); } } } pub fn take_dirty(&mut self) -> HashSet<(usize, usize)> { std::mem::take(&mut self.dirty_patterns) } }