summaryrefslogtreecommitdiff
path: root/wasp/apps/software.py
diff options
context:
space:
mode:
Diffstat (limited to 'wasp/apps/software.py')
-rw-r--r--wasp/apps/software.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/wasp/apps/software.py b/wasp/apps/software.py
new file mode 100644
index 0000000..2c7869c
--- /dev/null
+++ b/wasp/apps/software.py
@@ -0,0 +1,80 @@
+# SPDX-License-Identifier: LGPL-3.0-or-later
+# Copyright (C) 2020 Daniel Thompson
+"""Wizard to generate main.py."""
+
+import wasp
+import icons
+
+class SoftwareApp():
+ """Enable and disable applications."""
+ NAME = 'Software'
+ ICON = icons.software
+
+ def foreground(self):
+ """Activate the application."""
+ self.db = (
+ ('alarm', wasp.widgets.Checkbox(0, 0, 'Alarm')),
+ ('calc', wasp.widgets.Checkbox(0, 40, 'Calculator')),
+ ('chrono', wasp.widgets.Checkbox(0, 80, 'Chrono')),
+ ('fibonacci_clock', wasp.widgets.Checkbox(0, 120, 'Fibonacci Clock')),
+ ('gameoflife', wasp.widgets.Checkbox(0, 160, 'Game Of Life')),
+ ('musicplayer', wasp.widgets.Checkbox(0, 0, 'Music Player')),
+ ('snake', wasp.widgets.Checkbox(0, 40, 'Snake Game')),
+ ('flashlight', wasp.widgets.Checkbox(0, 80, 'Torch')),
+ ('testapp', wasp.widgets.Checkbox(0, 120, 'Test')),
+ )
+ self.si = wasp.widgets.ScrollIndicator()
+ self.page = 0
+
+ # Get the initial state for the checkboxes
+ for _, checkbox in self.db:
+ label = checkbox.label.replace(' ', '')
+ for app in wasp.system.launcher_ring:
+ if type(app).__name__.startswith(label):
+ checkbox.state = True
+ break
+
+ self._draw()
+ wasp.system.request_event(wasp.EventMask.TOUCH |
+ wasp.EventMask.SWIPE_UPDOWN)
+
+ def get_page(self):
+ i = self.page * 5
+ return self.db[i:i+5]
+
+ def swipe(self, event):
+ """Notify the application of a touchscreen swipe event."""
+ page = self.page
+ pages = 1
+ if event[0] == wasp.EventType.UP:
+ page = page - 1 if page > 0 else pages
+ if event[0] == wasp.EventType.DOWN:
+ page = page + 1 if page < pages else 0
+ self.page = page
+
+ mute = wasp.watch.display.mute
+ mute(True)
+ self._draw()
+ mute(False)
+
+ def touch(self, event):
+ """Notify the application of a touchscreen touch event."""
+ for module, checkbox in self.get_page():
+ if checkbox.touch(event):
+ label = checkbox.label.replace(' ', '')
+ if checkbox.state:
+ exec('import apps.{}'.format(module))
+ exec('wasp.system.register(apps.{}.{}App())'.format(module, label))
+ else:
+ for app in wasp.system.launcher_ring:
+ if type(app).__name__.startswith(label):
+ wasp.system.launcher_ring.remove(app)
+ break
+ break
+
+ def _draw(self):
+ """Draw the display from scratch."""
+ wasp.watch.drawable.fill()
+ self.si.draw()
+ for _, checkbox in self.get_page():
+ checkbox.draw()