summaryrefslogtreecommitdiff
path: root/wasp/apps/sports.py
diff options
context:
space:
mode:
Diffstat (limited to 'wasp/apps/sports.py')
-rw-r--r--wasp/apps/sports.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/wasp/apps/sports.py b/wasp/apps/sports.py
new file mode 100644
index 0000000..e966855
--- /dev/null
+++ b/wasp/apps/sports.py
@@ -0,0 +1,91 @@
+# SPDX-License-Identifier: LGPL-3.0-or-later
+# Copyright (C) 2020 Daniel Thompson
+
+"""Sports timer
+~~~~~~~~~~~~~~~
+
+A combined stopwatch and step counter.
+
+.. figure:: res/SportsApp.png
+ :width: 179
+"""
+import wasp
+import icons
+import fonts
+
+class SportsApp():
+ """Sports timer application."""
+ NAME = 'Sports'
+ ICON = icons.app
+
+ def __init__(self):
+ self._timer = wasp.widgets.Stopwatch(120-36)
+ self._reset()
+
+ def foreground(self):
+ """Activate the application."""
+ wasp.system.bar.clock = True
+ self._draw()
+ wasp.system.request_tick(97)
+ wasp.system.request_event(wasp.EventMask.TOUCH | wasp.EventMask.BUTTON)
+
+ def background(self):
+ if not self._timer.started:
+ self._timer.reset()
+
+ def sleep(self):
+ return True
+
+ def wake(self):
+ self._update()
+
+ def press(self, button, state):
+ if not state:
+ return
+
+ steps = wasp.watch.accel.steps
+
+ if self._timer.started:
+ self._timer.stop()
+ else:
+ self._timer.start()
+ self._last_steps = steps
+
+ def touch(self, event):
+ if not self._timer.started:
+ self._reset()
+ self._update()
+
+ def tick(self, ticks):
+ self._update()
+
+ def _reset(self):
+ self._timer.reset()
+ self._steps = 0
+ self._last_steps = 0
+
+ def _draw(self):
+ """Draw the display from scratch."""
+ draw = wasp.watch.drawable
+ draw.fill()
+
+ wasp.system.bar.draw()
+ self._timer.draw()
+
+ def _update(self):
+ wasp.system.bar.update()
+ self._timer.update()
+
+ if self._timer.started:
+ steps = wasp.watch.accel.steps
+ redraw = bool(steps - self._last_steps)
+ self._steps += steps - self._last_steps
+ self._last_steps = steps
+ else:
+ redraw = True
+
+ if redraw:
+ draw = wasp.watch.drawable
+ draw.set_font(fonts.sans36)
+ draw.set_color(draw.lighten(wasp.system.theme('spot1'), wasp.system.theme('contrast')))
+ draw.string(str(self._steps), 0, 170, 228, True)