113 lines
3.0 KiB
Python
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
|