summaryrefslogtreecommitdiff
path: root/wasp/apps
diff options
context:
space:
mode:
authorDaniel Thompson <daniel@redfelineninja.org.uk>2021-06-20 16:24:10 (GMT)
committerDaniel Thompson <daniel@redfelineninja.org.uk>2021-06-20 16:24:10 (GMT)
commitb0bab534ff6308a9d87a61ea88e5fd72c252b75e (patch)
treebda0cfee6b95995f59caf43da3adadc2473a390a /wasp/apps
parentae0d59dbe3880abdea536ced5ff3cacfc0fc059d (diff)
apps: SportsApp: Initial sports app implementation
This app is functional... although it lacking in almost every costmetic way, from the icon to the main screen. Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
Diffstat (limited to 'wasp/apps')
-rw-r--r--wasp/apps/software.py1
-rw-r--r--wasp/apps/sports.py91
2 files changed, 92 insertions, 0 deletions
diff --git a/wasp/apps/software.py b/wasp/apps/software.py
index cac4595..9e764bc 100644
--- a/wasp/apps/software.py
+++ b/wasp/apps/software.py
@@ -44,6 +44,7 @@ class SoftwareApp():
db.append(('musicplayer', factory('Music Player')))
db.append(('play2048', factory('Play 2048')))
db.append(('snake', factory('Snake Game')))
+ db.append(('sports', factory('Sports')))
db.append(('flashlight', factory('Torch')))
db.append(('testapp', factory('Test')))
db.append(('timer', factory('Timer')))
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)