summaryrefslogtreecommitdiff
path: root/wasp/apps/launcher.py
diff options
context:
space:
mode:
Diffstat (limited to 'wasp/apps/launcher.py')
-rw-r--r--wasp/apps/launcher.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/wasp/apps/launcher.py b/wasp/apps/launcher.py
new file mode 100644
index 0000000..274ea9c
--- /dev/null
+++ b/wasp/apps/launcher.py
@@ -0,0 +1,80 @@
+# SPDX-License-Identifier: LGPL-3.0-or-later
+# Copyright (C) 2020 Daniel Thompson
+
+import wasp
+import icons
+
+class LauncherApp():
+ """An application launcher application.
+ """
+ NAME = 'Launcher'
+ ICON = icons.app
+
+ def foreground(self):
+ """Activate the application."""
+ self._page = 0
+ self._draw()
+ wasp.system.request_event(wasp.EventMask.TOUCH |
+ wasp.EventMask.SWIPE_UPDOWN)
+
+ def swipe(self, event):
+ i = self._page
+ n = self._num_pages
+ if event[0] == wasp.EventType.UP:
+ i += 1
+ if i >= n:
+ i -= 1
+ wasp.watch.vibrator.pulse()
+ return
+ else:
+ i -= 1
+ if i < 0:
+ wasp.system.switch(wasp.system.applications[0])
+ return
+
+ self._page = i
+ wasp.watch.display.mute(True)
+ self._draw()
+ wasp.watch.display.mute(False)
+
+ def touch(self, event):
+ page = self._get_page(self._page)
+ x = event[1]
+ y = event[2]
+ app = page[2 * (y // 120) + (x // 120)]
+ if app:
+ wasp.system.switch(app)
+ else:
+ wasp.watch.vibrator.pulse()
+
+ @property
+ def _num_pages(self):
+ """Work out what the highest possible pages it."""
+ num_apps = len(wasp.system.applications)
+ return (num_apps + 3) // 4
+
+ def _get_page(self, i):
+ apps = wasp.system.applications
+ page = apps[4*i: 4*(i+1)]
+ while len(page) < 4:
+ page.append(None)
+ return page
+
+ def _draw(self):
+ """Redraw the display from scratch."""
+ def draw_app(app, x, y):
+ if not app:
+ return
+ draw.set_color(0xffff)
+ draw.rleblit(app.ICON, (x+13, y+12))
+ draw.set_color(0xbdb6)
+ draw.string(app.NAME, x, y+120-30, 120)
+
+ draw = wasp.watch.drawable
+ page = self._get_page(self._page)
+
+ draw.fill()
+ draw_app(page[0], 0, 0)
+ draw_app(page[1], 120, 0)
+ draw_app(page[2], 0, 120)
+ draw_app(page[3], 120, 120)