Logging und Tracker GUI weiterprogrammiert
This commit is contained in:
@@ -32,10 +32,10 @@ from .dst810 import DST810
|
||||
from .epropulsion import EPropulsion
|
||||
from .keel import Keel
|
||||
from .mob import MOB
|
||||
from .racetracker import RaceTracker
|
||||
from .rollpitch import RollPitch
|
||||
from .skyview import SkyView
|
||||
from .solar import Solar
|
||||
from .tracker import Tracker
|
||||
from .rudder import Rudder
|
||||
from .voltage import Voltage
|
||||
from .wind import Wind
|
||||
|
||||
@@ -68,7 +68,7 @@ class Page():
|
||||
self.pageno = pageno
|
||||
self.cfg = cfg
|
||||
self.fullscreen = cfg['guistyle'] == 'fullscreen'
|
||||
self.appdata = appdata
|
||||
self.app = appdata
|
||||
self.bd = boatdata
|
||||
self.header = True
|
||||
self.footer = True
|
||||
@@ -142,7 +142,7 @@ class Page():
|
||||
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
|
||||
ctx.set_font_size(16)
|
||||
ctx.move_to(0.5, 14.5)
|
||||
ctx.show_text(' '.join([s for s in self.appdata.status if self.appdata.status[s]]))
|
||||
ctx.show_text(' '.join([s for s in self.app.status if self.app.status[s]]))
|
||||
ctx.stroke()
|
||||
|
||||
# Tastenstatus
|
||||
|
||||
@@ -25,7 +25,7 @@ import os
|
||||
import cairo
|
||||
from .page import Page
|
||||
|
||||
class Tracker(Page):
|
||||
class RaceTracker(Page):
|
||||
|
||||
def __init__(self, pageno, cfg, appdata, boatdata):
|
||||
super().__init__(pageno, cfg, appdata, boatdata)
|
||||
@@ -33,7 +33,7 @@ class Tracker(Page):
|
||||
self.bv_lon = boatdata.getRef("LON")
|
||||
self.bv_sog = boatdata.getRef("SOG")
|
||||
self.races = None
|
||||
self.raceid = None # Ausgewählte Regatta
|
||||
self.raceid = self.app.track.hero_raceid # Ausgewählte Regatta
|
||||
self.menupos = 0
|
||||
self.buttonlabel[1] = 'MODE'
|
||||
self.buttonlabel[2] = 'INFO'
|
||||
@@ -45,9 +45,9 @@ class Tracker(Page):
|
||||
|
||||
# Flaggen laden
|
||||
flag = ('alpha', 'answer', 'black', 'blue', 'charlie', 'class',
|
||||
'finish', 'hotel', 'india', 'november', 'orange',
|
||||
'papa', 'repeat_one', 'sierra', 'start', 'uniform',
|
||||
'xray', 'yankee', 'zulu')
|
||||
'finish', 'foxtrot', 'hotel', 'india', 'november',
|
||||
'orange', 'papa', 'repeat_one', 'sierra', 'start',
|
||||
'uniform', 'xray', 'yankee', 'zulu')
|
||||
# Mapping
|
||||
self.flagmap = {
|
||||
3: 'blue', # Zielflagge
|
||||
@@ -81,7 +81,7 @@ class Tracker(Page):
|
||||
self.buttonlabel[2] = '#UP'
|
||||
self.buttonlabel[3] = '#DOWN'
|
||||
self.buttonlabel[4] = 'SET'
|
||||
if self.appdata.track.is_active():
|
||||
if self.app.track.is_active():
|
||||
self.buttonlabel[5] = 'OFF'
|
||||
else:
|
||||
self.buttonlabel[5] = 'ON'
|
||||
@@ -118,38 +118,33 @@ class Tracker(Page):
|
||||
# Set / Select regatta
|
||||
if self.menupos > 0:
|
||||
self.raceid = self.races[self.menupos - 1] # Nullbasiert
|
||||
self.appdata.track.hero_raceid = self.raceid
|
||||
self.app.track.hero_raceid = self.raceid
|
||||
print(f"Selected race '{self.raceid}'")
|
||||
return True
|
||||
elif buttonid == 5:
|
||||
if self.mode == 'C':
|
||||
# Tracking ein/-ausschalten
|
||||
if self.appdata.track.is_active():
|
||||
self.appdata.track.set_active(False)
|
||||
if self.app.track.is_active():
|
||||
self.app.track.set_active(False)
|
||||
self.buttonlabel[5] = 'ON'
|
||||
else:
|
||||
self.appdata.track.set_active(True)
|
||||
self.app.track.set_active(True)
|
||||
self.buttonlabel[5] = 'OFF'
|
||||
elif self.mode == 'M':
|
||||
self.appdata.frontend.flashled.setColor('yellow')
|
||||
#self.appdata.frontend.flashled.switchOn(4)
|
||||
self.appdata.frontend.flashled.doFlash(2)
|
||||
self.app.frontend.flashled.setColor('yellow')
|
||||
#self.app.frontend.flashled.switchOn(4)
|
||||
self.app.frontend.flashled.doFlash(2)
|
||||
return True
|
||||
return False
|
||||
|
||||
def draw_normal(self, ctx):
|
||||
# Name
|
||||
#ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
|
||||
#ctx.set_font_size(32)
|
||||
#ctx.move_to(20, 80)
|
||||
#ctx.show_text("Tracker")
|
||||
|
||||
ctx.select_font_face("DSEG7 Classic")
|
||||
ctx.set_font_size(80)
|
||||
|
||||
if self.appdata.track.is_active():
|
||||
if self.appdata.track.hero_racestatus:
|
||||
counter = self.appdata.track.hero_racestatus['time']
|
||||
if self.app.track.is_active():
|
||||
if self.app.track.hero_racestatus:
|
||||
counter = self.app.track.hero_racestatus['time']
|
||||
minutes, seconds = divmod(abs(counter), 60)
|
||||
if counter < 0:
|
||||
ctx.move_to(16, 120)
|
||||
@@ -164,11 +159,11 @@ class Tracker(Page):
|
||||
ctx.move_to(100, 120)
|
||||
ctx.show_text("off")
|
||||
|
||||
if self.appdata.track.hero_timedelta > 5:
|
||||
if self.app.track.hero_timedelta > 5:
|
||||
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
|
||||
ctx.set_font_size(16)
|
||||
ctx.move_to(8, 260)
|
||||
ctx.show_text(f"!!! Time drift of {self.appdata.track.hero_timedelta} seconds")
|
||||
ctx.show_text(f"!!! Time drift of {self.app.track.hero_timedelta} seconds")
|
||||
|
||||
x0 = 8
|
||||
x1 = 96
|
||||
@@ -179,20 +174,20 @@ class Tracker(Page):
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Type")
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.appdata.track.ttype)
|
||||
ctx.show_text(self.app.track.ttype)
|
||||
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Regatta")
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.appdata.track.hero_raceid or '[not selected]')
|
||||
ctx.show_text(self.app.track.hero_raceid or '[not selected]')
|
||||
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Course")
|
||||
ctx.move_to(x1, y0)
|
||||
if self.appdata.track.hero_orgstatus and self.appdata.track.hero_raceid:
|
||||
ctx.show_text(self.appdata.track.hero_orgstatus['races'][self.appdata.track.hero_raceid]['courseid'])
|
||||
if self.app.track.hero_orgstatus and self.app.track.hero_raceid:
|
||||
ctx.show_text(self.app.track.hero_orgstatus['races'][self.app.track.hero_raceid]['courseid'])
|
||||
else:
|
||||
ctx.show_text('[not selected]')
|
||||
|
||||
@@ -215,9 +210,9 @@ class Tracker(Page):
|
||||
ctx.show_text(self.bv_sog.format())
|
||||
|
||||
# Flaggen
|
||||
if self.appdata.track.hero_racestatus:
|
||||
if self.app.track.hero_racestatus:
|
||||
pos = 0
|
||||
for f in self.appdata.track.hero_racestatus['flags']:
|
||||
for f in self.app.track.hero_racestatus['flags']:
|
||||
if f in self.flagmap:
|
||||
# TODO Context save/restore erforderlich?
|
||||
ctx.save()
|
||||
@@ -234,14 +229,19 @@ class Tracker(Page):
|
||||
ctx.move_to(4, 42)
|
||||
ctx.show_text("Tracker configuration")
|
||||
|
||||
x0 = 8
|
||||
x1 = 88
|
||||
y0 = 96
|
||||
# Linke Spalte mit Daten
|
||||
|
||||
x0 = 8 # Labelspalte
|
||||
x1 = 88 # Datenspalte
|
||||
y0 = 75
|
||||
yoffset = 16
|
||||
|
||||
# Bootsdaten
|
||||
ctx.set_font_size(20)
|
||||
ctx.move_to(x0, 75)
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Boat data")
|
||||
|
||||
y0 += yoffset + 5
|
||||
ctx.set_font_size(16)
|
||||
|
||||
ctx.move_to(x0, y0)
|
||||
@@ -249,48 +249,50 @@ class Tracker(Page):
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.cfg['boat']['name'])
|
||||
|
||||
ctx.move_to(x0, y0 + 16)
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Class")
|
||||
ctx.move_to(x1, y0 + 16)
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.cfg['boat']['class'])
|
||||
|
||||
ctx.move_to(x0, y0 + 32)
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Handicap")
|
||||
ctx.move_to(x1, y0 + 32)
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(str(self.cfg['boat']['handicap']))
|
||||
|
||||
ctx.move_to(x0, y0 + 48)
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Club")
|
||||
ctx.move_to(x1, y0 + 48)
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.cfg['boat']['club'])
|
||||
|
||||
ctx.move_to(x0, y0 + 64)
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Sailno.")
|
||||
ctx.move_to(x1, y0 + 64)
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.cfg['boat']['sailno'])
|
||||
|
||||
x0 = 208
|
||||
x1 = 272
|
||||
y0 = 96
|
||||
yoffset = 16
|
||||
|
||||
# Trackerdaten
|
||||
y0 += yoffset + 10
|
||||
ctx.set_font_size(20)
|
||||
ctx.move_to(x0, 75)
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Tracker info")
|
||||
|
||||
y0 += yoffset + 5
|
||||
ctx.set_font_size(16)
|
||||
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Type")
|
||||
ctx.move_to(x1, y0)
|
||||
ctx.show_text(self.appdata.track.ttype)
|
||||
ctx.show_text(self.app.track.ttype)
|
||||
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Org.")
|
||||
ctx.move_to(x1, y0)
|
||||
if self.appdata.track.hero_orgstatus:
|
||||
ctx.show_text(self.appdata.track.hero_orgstatus['orgname'])
|
||||
if self.app.track.hero_orgstatus:
|
||||
ctx.show_text(self.app.track.hero_orgstatus['orgname'])
|
||||
else:
|
||||
ctx.show_text("n/a")
|
||||
|
||||
@@ -298,7 +300,7 @@ class Tracker(Page):
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Status")
|
||||
ctx.move_to(x1, y0)
|
||||
if not self.appdata.track.hero_racestatus:
|
||||
if not self.app.track.hero_racestatus:
|
||||
ctx.show_text("inactive")
|
||||
else:
|
||||
#TODO Mehr Details
|
||||
@@ -308,18 +310,29 @@ class Tracker(Page):
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Team")
|
||||
ctx.move_to(x1, y0)
|
||||
if self.appdata.track.hero_racestatus:
|
||||
ctx.show_text(self.appdata.track.hero_racestatus['team'])
|
||||
ctx.show_text(self.app.track.team)
|
||||
|
||||
y0 += yoffset
|
||||
ctx.move_to(x0, y0)
|
||||
ctx.show_text("Server")
|
||||
ctx.move_to(x1, y0)
|
||||
if self.app.track.mqtt_connected:
|
||||
ctx.show_text("MQTT")
|
||||
else:
|
||||
ctx.show_text("n/a")
|
||||
ctx.show_text("offline")
|
||||
|
||||
# Rechte Spalte mit Regattaauswahl
|
||||
|
||||
x = 208
|
||||
y = 75
|
||||
yoffset = 16
|
||||
|
||||
# Mögliche Regatten
|
||||
self.races = self.appdata.track.hero_get_races()
|
||||
self.races = self.app.track.hero_get_races()
|
||||
if len(self.races) == 1:
|
||||
self.raceid = self.races[0]
|
||||
self.hero_raceid = self.races[0]
|
||||
self.menupos = 1
|
||||
x = 208
|
||||
y = 180
|
||||
|
||||
ctx.set_font_size(20)
|
||||
ctx.move_to(x, y)
|
||||
ctx.show_text("Select Regatta")
|
||||
@@ -333,7 +346,7 @@ class Tracker(Page):
|
||||
for r in self.races:
|
||||
i += 1
|
||||
if r == self.raceid:
|
||||
r += '*'
|
||||
r = f"\xbb {r} \xab"
|
||||
self.draw_text_boxed(ctx, x, y, 180, 20, r, (self.menupos == i))
|
||||
y += 20
|
||||
if i == 0:
|
||||
@@ -350,11 +363,11 @@ class Tracker(Page):
|
||||
ctx.show_text("Message from race officers")
|
||||
|
||||
ctx.set_font_size(16)
|
||||
if not self.appdata.track.hero_orgstatus:
|
||||
if not self.app.track.hero_orgstatus or self.app.track.hero_orgstatus['message'] == '':
|
||||
ctx.move_to(8, 72)
|
||||
ctx.show_text("[ empty ]")
|
||||
else:
|
||||
lines = self.appdata.track.hero_orgstatus['message'].splitlines()
|
||||
lines = self.app.track.hero_orgstatus['message'].splitlines()
|
||||
y = 72
|
||||
for l in lines:
|
||||
ctx.move_to(8, y)
|
||||
Reference in New Issue
Block a user