| 171 | |
| 172 | |
| 173 | class BackgroundPlayer: |
| 174 | def __init__(self, viz): |
| 175 | self.viz = viz |
| 176 | self.can_run = Event() |
| 177 | self.can_run.clear() |
| 178 | self.running = True |
| 179 | self.paused = True |
| 180 | self.speed = "F" |
| 181 | |
| 182 | def run(self): |
| 183 | while self.running: |
| 184 | self.can_run.wait() |
| 185 | i = self.viz.curr_frame |
| 186 | if "F" in self.speed: |
| 187 | if len(self.speed) == 1: |
| 188 | i += 1 |
| 189 | else: |
| 190 | i += 2 * (len(self.speed) - 1) |
| 191 | elif "R" in self.speed: |
| 192 | if len(self.speed) == 1: |
| 193 | i -= 1 |
| 194 | else: |
| 195 | i -= 2 * (len(self.speed) - 1) |
| 196 | if i >= self.viz.manager.nframes: |
| 197 | i = 0 |
| 198 | elif i < 0: |
| 199 | i = self.viz.manager.nframes - 1 |
| 200 | self.viz.slider.set_val(i) |
| 201 | |
| 202 | def pause(self): |
| 203 | self.can_run.clear() |
| 204 | self.paused = True |
| 205 | |
| 206 | def resume(self): |
| 207 | self.can_run.set() |
| 208 | self.paused = False |
| 209 | |
| 210 | def toggle(self): |
| 211 | if self.paused: |
| 212 | self.resume() |
| 213 | else: |
| 214 | self.pause() |
| 215 | |
| 216 | def forward(self): |
| 217 | speed = self.speed |
| 218 | if "R" in speed: |
| 219 | speed = "F" |
| 220 | elif len(speed) < 5: |
| 221 | speed += "F" |
| 222 | elif len(speed) == 5: |
| 223 | speed = "F" |
| 224 | print(speed) |
| 225 | self.speed = speed |
| 226 | self.resume() |
| 227 | |
| 228 | def rewind(self): |
| 229 | speed = self.speed |
| 230 | if "F" in speed: |