diff options
-rw-r--r-- | helpers/key.py | 35 | ||||
-rw-r--r-- | music_sampler.py | 13 |
2 files changed, 31 insertions, 17 deletions
diff --git a/helpers/key.py b/helpers/key.py index 9099f00..c21f9ae 100644 --- a/helpers/key.py +++ b/helpers/key.py | |||
@@ -78,7 +78,7 @@ class Key(ButtonBehavior, Widget): | |||
78 | 'trigger': 'run', | 78 | 'trigger': 'run', |
79 | 'source': 'loaded', | 79 | 'source': 'loaded', |
80 | 'dest': 'loaded_running', | 80 | 'dest': 'loaded_running', |
81 | 'after': 'finish', | 81 | 'after': ['run_actions', 'finish'], |
82 | # if a child, like loaded_no_actions, has no transitions, then it is | 82 | # if a child, like loaded_no_actions, has no transitions, then it is |
83 | # bubbled to the parent, and we don't want that. | 83 | # bubbled to the parent, and we don't want that. |
84 | 'conditions': ['is_loaded'] | 84 | 'conditions': ['is_loaded'] |
@@ -125,6 +125,8 @@ class Key(ButtonBehavior, Widget): | |||
125 | 125 | ||
126 | def __init__(self, **kwargs): | 126 | def __init__(self, **kwargs): |
127 | self.actions = [] | 127 | self.actions = [] |
128 | self.current_action = None | ||
129 | |||
128 | Machine(model=self, states=self.STATES, | 130 | Machine(model=self, states=self.STATES, |
129 | transitions=self.TRANSITIONS, initial='initial', | 131 | transitions=self.TRANSITIONS, initial='initial', |
130 | ignore_invalid_triggers=True, queued=True) | 132 | ignore_invalid_triggers=True, queued=True) |
@@ -168,18 +170,16 @@ class Key(ButtonBehavior, Widget): | |||
168 | else: | 170 | else: |
169 | self.no_actions() | 171 | self.no_actions() |
170 | 172 | ||
171 | def on_enter_loaded_running(self, modifiers): | 173 | def run_actions(self, modifiers): |
172 | self.parent.parent.ids['KeyList'].append(self.key_sym) | 174 | self.parent.parent.ids['KeyList'].append(self.key_sym) |
173 | debug_print("running actions for {}".format(self.key_sym)) | 175 | debug_print("running actions for {}".format(self.key_sym)) |
174 | start_time = time.time() | 176 | start_time = time.time() |
175 | self.parent.start_running(self, start_time) | 177 | self.parent.start_running(self, start_time) |
176 | action_number = 0 | ||
177 | for self.current_action in self.actions: | 178 | for self.current_action in self.actions: |
178 | if self.parent.keep_running(self, start_time): | 179 | if self.parent.keep_running(self, start_time): |
179 | self.list_actions(action_number=action_number + 0.5) | 180 | self.list_actions() |
180 | self.current_action.run() | 181 | self.current_action.run() |
181 | action_number += 1 | 182 | self.list_actions(last_action_finished=True) |
182 | self.list_actions(action_number=action_number) | ||
183 | 183 | ||
184 | self.parent.finished_running(self, start_time) | 184 | self.parent.finished_running(self, start_time) |
185 | 185 | ||
@@ -217,6 +217,23 @@ class Key(ButtonBehavior, Widget): | |||
217 | def add_action(self, action_name, **arguments): | 217 | def add_action(self, action_name, **arguments): |
218 | self.actions.append(Action(action_name, self, **arguments)) | 218 | self.actions.append(Action(action_name, self, **arguments)) |
219 | 219 | ||
220 | def list_actions(self, action_number=0): | 220 | def list_actions(self, last_action_finished=False): |
221 | self.parent.parent.ids['ActionList'].update_list(self, action_number) | 221 | not_running = (not self.is_loaded_running()) |
222 | 222 | current_action_seen = False | |
223 | action_descriptions = [] | ||
224 | for action in self.actions: | ||
225 | if not_running: | ||
226 | state = "inactive" | ||
227 | elif last_action_finished: | ||
228 | state = "done" | ||
229 | elif current_action_seen: | ||
230 | state = "pending" | ||
231 | elif action == self.current_action: | ||
232 | current_action_seen = True | ||
233 | state = "current" | ||
234 | else: | ||
235 | state = "done" | ||
236 | action_descriptions.append([action.description(), state]) | ||
237 | self.parent.parent.ids['ActionList'].update_list( | ||
238 | self, | ||
239 | action_descriptions) | ||
diff --git a/music_sampler.py b/music_sampler.py index 41b71be..c10b634 100644 --- a/music_sampler.py +++ b/music_sampler.py | |||
@@ -62,21 +62,18 @@ class ActionList(RelativeLayout): | |||
62 | action_title = StringProperty("") | 62 | action_title = StringProperty("") |
63 | action_list = ListProperty([]) | 63 | action_list = ListProperty([]) |
64 | 64 | ||
65 | def update_list(self, key, action_number = 0): | 65 | def update_list(self, key, action_descriptions): |
66 | self.action_title = "actions linked to key {}:".format(key.key_sym) | 66 | self.action_title = "actions linked to key {}:".format(key.key_sym) |
67 | self.action_list = [] | 67 | self.action_list = [] |
68 | 68 | ||
69 | action_descriptions = [action.description() for action in key.actions] | 69 | for [action, status] in action_descriptions: |
70 | 70 | if status == "done": | |
71 | for index, description in enumerate(action_descriptions): | ||
72 | if index < int(action_number): | ||
73 | icon = "✓" | 71 | icon = "✓" |
74 | elif index + 0.5 == action_number: | 72 | elif status == "current": |
75 | icon = "✅" | 73 | icon = "✅" |
76 | else: | 74 | else: |
77 | icon = " " | 75 | icon = " " |
78 | 76 | self.action_list.append([icon, action]) | |
79 | self.action_list.append([icon, description]) | ||
80 | 77 | ||
81 | class Screen(FloatLayout): | 78 | class Screen(FloatLayout): |
82 | pass | 79 | pass |