42 lines
1013 B
Rust
42 lines
1013 B
Rust
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<PathBuf>,
|
|
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)
|
|
}
|
|
}
|