OBP60v/pages/navtex.py

113 lines
3.0 KiB
Python

"""
NAVTEX
- Meldungen anzeigen
"""
import cairo
from .page import Page
class Navtex(Page):
def __init__(self, pageno, cfg, appdata, boatdata):
super().__init__(pageno, cfg, appdata, boatdata)
self.disabled = self.app.navtex is None
self.ids = self.app.navtex.get_ids()
if len(self.ids) > 0:
self.current = 1
self.msgid = self.ids[self.current - 1]
else:
self.current = 0
self.msgid = None
self.buttonlabel[1] = 'PREV'
self.buttonlabel[2] = 'NEXT'
self.buttonlabel[5] = 'MORE'
self.skip = 0
def handle_key(self, buttonid):
if buttonid == 1:
if self.current > 1:
self.current -= 1
else:
self.current = len(self.ids)
self.msgid = self.ids[self.current - 1]
self.skip = 0
return True
if buttonid == 2:
if self.current < len(self.ids):
self.current += 1
else:
self.current = 1
self.msgid = self.ids[self.current - 1]
self.skip = 0
return True
if buttonid == 5:
self.skip += 1
return True
return False
def draw(self, ctx):
# Title
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
ctx.set_font_size(24)
ctx.move_to(8, 40)
ctx.show_text("NAVTEX")
ctx.set_line_width(1)
ctx.move_to(4.5, 42.5)
ctx.line_to(395.5, 42.5)
ctx.move_to(4.5, 272.5)
ctx.line_to(395.5, 272.5)
ctx.move_to(4.5, 32.5)
ctx.line_to(4.5, 272.5)
ctx.move_to(396.5, 32.5)
ctx.line_to(396.5, 272.5)
#ctx.rectangle(4.5, 20.5, 392, 250)
ctx.stroke()
ctx.set_font_size(16)
if self.disabled:
ctx.move_to(8, 75)
ctx.show_text("Feature ist disabled by configuration")
return
ctx.move_to(150, 40)
self.draw_text_ralign(ctx, 392, 38, "Message {} of {}".format(self.current, len(self.ids)))
ctx.select_font_face("AtariST8x16SystemFont")
ctx.move_to(8, 59)
if self.current == 0:
ctx.show_text("NIL")
return
# 48 Zeichen je Zeile möglich
# Max. 14 Zeilen auf dem Bildschirm
rawmsg = self.app.navtex.get_message(self.msgid).splitlines()
output = []
for line in rawmsg:
if len(line) <= 48:
output.append(line)
else:
i = 0
j = 48
while i < len(line):
output.append(line[i:j])
i += 48
j += 48
x = 8
y = 59
n = 0
for line in output:
if n >= self.skip:
ctx.move_to(x, y)
ctx.show_text(line)
y += 16
n += 1
if n >= 14 + self.skip:
break