This commit is contained in:
@@ -31,6 +31,8 @@ pub struct PlaybackState {
|
||||
pub queued_changes: Vec<StagedChange>,
|
||||
pub staged_mute_changes: HashSet<StagedMuteChange>,
|
||||
pub staged_prop_changes: HashMap<(usize, usize), StagedPropChange>,
|
||||
pub muted: HashSet<(usize, usize)>,
|
||||
pub soloed: HashSet<(usize, usize)>,
|
||||
}
|
||||
|
||||
impl Default for PlaybackState {
|
||||
@@ -41,6 +43,8 @@ impl Default for PlaybackState {
|
||||
queued_changes: Vec::new(),
|
||||
staged_mute_changes: HashSet::new(),
|
||||
staged_prop_changes: HashMap::new(),
|
||||
muted: HashSet::new(),
|
||||
soloed: HashSet::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -86,6 +90,16 @@ impl PlaybackState {
|
||||
self.staged_mute_changes.retain(|c| !matches!(c, StagedMuteChange::ToggleSolo { .. }));
|
||||
}
|
||||
|
||||
pub fn clear_mutes(&mut self) {
|
||||
self.clear_staged_mutes();
|
||||
self.muted.clear();
|
||||
}
|
||||
|
||||
pub fn clear_solos(&mut self) {
|
||||
self.clear_staged_solos();
|
||||
self.soloed.clear();
|
||||
}
|
||||
|
||||
pub fn has_staged_mute(&self, bank: usize, pattern: usize) -> bool {
|
||||
self.staged_mute_changes.contains(&StagedMuteChange::ToggleMute { bank, pattern })
|
||||
}
|
||||
@@ -93,4 +107,33 @@ impl PlaybackState {
|
||||
pub fn has_staged_solo(&self, bank: usize, pattern: usize) -> bool {
|
||||
self.staged_mute_changes.contains(&StagedMuteChange::ToggleSolo { bank, pattern })
|
||||
}
|
||||
|
||||
pub fn toggle_mute(&mut self, bank: usize, pattern: usize) {
|
||||
let key = (bank, pattern);
|
||||
if !self.muted.remove(&key) {
|
||||
self.muted.insert(key);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn toggle_solo(&mut self, bank: usize, pattern: usize) {
|
||||
let key = (bank, pattern);
|
||||
if !self.soloed.remove(&key) {
|
||||
self.soloed.insert(key);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_muted(&self, bank: usize, pattern: usize) -> bool {
|
||||
self.muted.contains(&(bank, pattern))
|
||||
}
|
||||
|
||||
pub fn is_soloed(&self, bank: usize, pattern: usize) -> bool {
|
||||
self.soloed.contains(&(bank, pattern))
|
||||
}
|
||||
|
||||
pub fn is_effectively_muted(&self, bank: usize, pattern: usize) -> bool {
|
||||
if self.muted.contains(&(bank, pattern)) {
|
||||
return true;
|
||||
}
|
||||
!self.soloed.is_empty() && !self.soloed.contains(&(bank, pattern))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user