summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--res/app_icon.pngbin6996 -> 7442 bytes
-rw-r--r--res/software_icon.pngbin0 -> 6996 bytes
-rw-r--r--wasp/apps/flashlight.py2
-rw-r--r--wasp/apps/software.py80
-rw-r--r--wasp/apps/testapp.py2
-rw-r--r--wasp/icons.py71
6 files changed, 128 insertions, 27 deletions
diff --git a/res/app_icon.png b/res/app_icon.png
index 438cded..48a31db 100644
--- a/res/app_icon.png
+++ b/res/app_icon.png
Binary files differ
diff --git a/res/software_icon.png b/res/software_icon.png
new file mode 100644
index 0000000..438cded
--- /dev/null
+++ b/res/software_icon.png
Binary files differ
diff --git a/wasp/apps/flashlight.py b/wasp/apps/flashlight.py
index 95c44b2..f5b8684 100644
--- a/wasp/apps/flashlight.py
+++ b/wasp/apps/flashlight.py
@@ -11,7 +11,7 @@ import wasp
import icons
-class FlashlightApp(object):
+class TorchApp(object):
"""Trivial flashlight application.
.. figure:: res/TorchApp.png
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()
diff --git a/wasp/apps/testapp.py b/wasp/apps/testapp.py
index 8b8ff67..acd1735 100644
--- a/wasp/apps/testapp.py
+++ b/wasp/apps/testapp.py
@@ -133,7 +133,7 @@ class TestApp():
t = machine.Timer(id=1, period=8000000)
t.start()
for i in range(0, 128, 16):
- draw.blit(self.ICON, i+16, i+32)
+ draw.blit(icons.software, i+16, i+32)
elapsed = t.time()
t.stop()
del t
diff --git a/wasp/icons.py b/wasp/icons.py
index 7eb2e22..2ccd140 100644
--- a/wasp/icons.py
+++ b/wasp/icons.py
@@ -27,12 +27,56 @@ bomb = (
b'\x0e'
)
-# 2-bit RLE, generated from res/app_icon.png, 460 bytes
+# 2-bit RLE, generated from res/app_icon.png, 224 bytes
app = (
b'\x02'
b'`@'
b'\x1e@\x81d<d<d;f?X\xec2\xf0/'
b'\xf2-\xf4,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3+\xc4.\xc3*'
+ b'\xc5.\xc3*\xc5.\xc3*\xc5.\xc3*\xc5.\xc3*'
+ b'\xc5.\xc3*\xc5.\xc3*\xc5.\xc3+\xc4.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
+ b'\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,\xf4-\xf2/'
+ b'\xf02\xec?Xf;d<d<d\x1e'
+)
+
+# 2-bit RLE, generated from res/clock_icon.png, 288 bytes
+clock = (
+ b'\x02'
+ b'`@'
+ b'?\xff\xff\xff\xff\xff\xff\x8e@\xacF\r\xc6!E\x0b'
+ b'\xc8\x0cH\x0b\xca\x1dI\x07\xcc\nH\n\xcc\x1bK\x06'
+ b'\xce\x08C\x02C\n\xc4\x05\xc4\x1aD\x03D\x06\xc2\x08'
+ b'\xc4\rC\t\xc4\x07\xc3\x19D\x05D\x10\xc4\x0cC\t'
+ b'\xc3\t\xc2\x19C\x07C\x11\xc3\x0cC\t\xc3\t\xc3\n'
+ b'D\tD\x07D\x10\xc3\x0cC\t\xc3\t\xc3\nD\t'
+ b'C\tC\x10\xc3\x0cC\t\xc3\t\xc3\nD\tC\t'
+ b'C\x10\xc3\x0cC\t\xc4\x07\xc4\nD\tC\tC\x0f'
+ b'\xc4\x0cC\n\xc4\x05\xc5\nD\tC\tC\x0e\xc4\r'
+ b'C\n\xca\x01\xc3\x17C\tC\r\xc5\rC\x0b\xc9\x01'
+ b'\xc3\x17C\tC\x0c\xc5\x0eC\r\xc5\x03\xc3\x17C\t'
+ b'C\x0b\xc5\x0fC\x15\xc3\x17C\tC\n\xc5\x10C\x14'
+ b'\xc4\x17C\tC\t\xc5\x11C\x14\xc3\x18D\x07D\x08'
+ b'\xc4\x13C\x14\xc3\x19C\x07C\x08\xc4\x14C\x13\xc4\x0b'
+ b'D\nC\x06D\x07\xc4\x15C\x0b\xc1\x05\xc5\x0cD\x0b'
+ b'D\x03D\x07\xc3\x12M\x06\xca\rD\x0bK\x06\xcf\x07'
+ b'M\x06\xc9\x0eD\x0cI\x07\xcf\x07M\x07\xc6\x10D\x0e'
+ b'E\t\xcf?\xff\xff\xff\xff\xff\xff\xff\xffk'
+)
+
+# 2-bit RLE, generated from res/software_icon.png, 460 bytes
+software = (
+ b'\x02'
+ b'`@'
+ b'\x1e@\x81d<d<d;f?X\xec2\xf0/'
+ b'\xf2-\xf4,\xc3.\xc3,\xc3.\xc3,\xc3.\xc3,'
b'\xc3.\xc3,\xc3.\xc3,\xc3\x0c\x80\xd2\x83\x10\xc0C'
b'\xc3\x0c@\xd7C,C\n\x87\x0c\xc7\nC,C\t'
b'\x83\x02\x84\n\xc4\x02\xc3\tC,C\x08\x82\x07\x82\x08'
@@ -62,30 +106,6 @@ app = (
b'\x81f;d<d<d\x1e'
)
-# 2-bit RLE, generated from res/clock_icon.png, 288 bytes
-clock = (
- b'\x02'
- b'`@'
- b'?\xff\xff\xff\xff\xff\xff\x8e@\xacF\r\xc6!E\x0b'
- b'\xc8\x0cH\x0b\xca\x1dI\x07\xcc\nH\n\xcc\x1bK\x06'
- b'\xce\x08C\x02C\n\xc4\x05\xc4\x1aD\x03D\x06\xc2\x08'
- b'\xc4\rC\t\xc4\x07\xc3\x19D\x05D\x10\xc4\x0cC\t'
- b'\xc3\t\xc2\x19C\x07C\x11\xc3\x0cC\t\xc3\t\xc3\n'
- b'D\tD\x07D\x10\xc3\x0cC\t\xc3\t\xc3\nD\t'
- b'C\tC\x10\xc3\x0cC\t\xc3\t\xc3\nD\tC\t'
- b'C\x10\xc3\x0cC\t\xc4\x07\xc4\nD\tC\tC\x0f'
- b'\xc4\x0cC\n\xc4\x05\xc5\nD\tC\tC\x0e\xc4\r'
- b'C\n\xca\x01\xc3\x17C\tC\r\xc5\rC\x0b\xc9\x01'
- b'\xc3\x17C\tC\x0c\xc5\x0eC\r\xc5\x03\xc3\x17C\t'
- b'C\x0b\xc5\x0fC\x15\xc3\x17C\tC\n\xc5\x10C\x14'
- b'\xc4\x17C\tC\t\xc5\x11C\x14\xc3\x18D\x07D\x08'
- b'\xc4\x13C\x14\xc3\x19C\x07C\x08\xc4\x14C\x13\xc4\x0b'
- b'D\nC\x06D\x07\xc4\x15C\x0b\xc1\x05\xc5\x0cD\x0b'
- b'D\x03D\x07\xc3\x12M\x06\xca\rD\x0bK\x06\xcf\x07'
- b'M\x06\xc9\x0eD\x0cI\x07\xcf\x07M\x07\xc6\x10D\x0e'
- b'E\t\xcf?\xff\xff\xff\xff\xff\xff\xff\xffk'
-)
-
# 2-bit RLE, generated from res/settings_icon.png, 468 bytes
settings = (
b'\x02'
@@ -345,3 +365,4 @@ checkbox = (
b'F\x85O\xc6G\x83P\xc6H\x81Q\xc6Z\xc6Z\xc6'
b'Z\xc7X\xe4\x01\xde\x03\xdc\x02'
)
+