apps: haiku: Add a simple Haiku viewer

This app serves as an example of using the filesystem to make an
application more flexible. Both the verses and the icon will be
loaded from the filesystem rather than being burned into the
wasp-os binaries.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
This commit is contained in:
Daniel Thompson 2020-10-10 12:12:59 +01:00
parent 0b5d1e23f8
commit 11640d8362
3 changed files with 65 additions and 0 deletions

View File

@ -150,5 +150,8 @@ wasp-os also contains a library of additional applications for you to choose.
These are disabled by default but can be easily enabled by adding them
using one of the techniques is the Application Writer's guide.
.. image:: res/HaikuApp.png
:alt: Haiku application running in the wasp-os simulator
.. image:: res/LifeApp.png
:alt: Game of Life runnin in the wasp-os simulator

BIN
res/HaikuApp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

62
wasp/apps/haiku.py Normal file
View File

@ -0,0 +1,62 @@
# SPDX-License-Identifier: LGPL-3.0-or-later
# Copyright (C) 2020 Daniel Thompson
"""Haiku viewer
~~~~~~~~~~~~~~~
These three lines poems are fun to write and fit nicely on a tiny screen.
If there is a file called haiku.txt in the flash filesystem then this app
allows it to be displayed three lines at a time using the pager.
This application also (optionally) loads an icon from the filesystem allowing
to be customized to match whether theme your verses are based around.
"""
import wasp
import icons
import io
import sys
from apps.pager import PagerApp
class HaikuApp(PagerApp):
NAME = 'Haiku'
def __init__(self):
# Throw an exception if there is no poetry for us to read...
open('haiku.txt').close()
try:
with open('haiku.rle', 'rb') as f:
self.ICON = f.read()
except:
# Leave the default app icon if none is present
pass
super().__init__('')
self._counter = -4
def foreground(self):
lines = []
self._counter += 4
with open('haiku.txt') as f:
for i in range(self._counter):
_ = f.readline()
lines = [ '', ]
for i in range(3):
lines.append(f.readline())
if len(lines[2]) == 0:
self._counter = 0
f.seek(0)
lines = [ '', ]
for i in range(3):
lines.append(f.readline())
self._msg = '\n'.join(lines)
super().foreground()