From d4217fda2ff3991eb1ee9a9bec6acff751798507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 12 Aug 2016 18:21:22 +0200 Subject: wait actions are now pausable and resettable This fixes https://git.immae.eu/mantisbt/view.php?id=6 --- music_sampler/mapping.py | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'music_sampler/mapping.py') diff --git a/music_sampler/mapping.py b/music_sampler/mapping.py index 99c9977..9e40d40 100644 --- a/music_sampler/mapping.py +++ b/music_sampler/mapping.py @@ -206,15 +206,17 @@ class Mapping(RelativeLayout): self.wait_ids[None] = [] self.wait_ids[None].append(action_or_wait) - def interrupt_wait(self, wait_id=None): + def matching_wait_ids(self, wait_id=None): if wait_id is None: - ids_to_interrupt = list(self.wait_ids.keys()) + matching_ids = list(self.wait_ids.keys()) elif wait_id in self.wait_ids: - ids_to_interrupt = [wait_id] + matching_ids = [wait_id] else: - ids_to_interrupt = [] + matching_ids = [] + return matching_ids - for _wait_id in ids_to_interrupt: + def interrupt_wait(self, wait_id=None): + for _wait_id in self.matching_wait_ids(wait_id=wait_id): action_or_waits = self.wait_ids[_wait_id] del(self.wait_ids[_wait_id]) for action_or_wait in action_or_waits: @@ -223,6 +225,27 @@ class Mapping(RelativeLayout): else: action_or_wait.set() + def pause_wait(self, wait_id=None): + for _wait_id in self.matching_wait_ids(wait_id=wait_id): + action_or_waits = self.wait_ids[_wait_id] + for action_or_wait in action_or_waits: + if isinstance(action_or_wait, Action): + action_or_wait.pause() + + def unpause_wait(self, wait_id=None): + for _wait_id in self.matching_wait_ids(wait_id=wait_id): + action_or_waits = self.wait_ids[_wait_id] + for action_or_wait in action_or_waits: + if isinstance(action_or_wait, Action): + action_or_wait.unpause() + + def reset_wait(self, wait_id=None): + for _wait_id in self.matching_wait_ids(wait_id=wait_id): + action_or_waits = self.wait_ids[_wait_id] + for action_or_wait in action_or_waits: + if isinstance(action_or_wait, Action): + action_or_wait.reset() + # Methods to control running keys def start_running(self, key, start_time): self.running.append((key, start_time)) -- cgit v1.2.3