Alarmdialog programmiert
This commit is contained in:
parent
7d8ce221fd
commit
14108b1165
15
TODO
15
TODO
|
@ -1,7 +1,14 @@
|
|||
Aufgaben- und Planungs- und Ideenliste
|
||||
Aufgaben, Planungs- und Ideenliste
|
||||
|
||||
- Tracker
|
||||
Regatta Hero
|
||||
python3-paho-mqtt benötigt
|
||||
|
||||
- Satelliten: SatelliteList verwenden und dieses auch in
|
||||
nmea2000 implementieren
|
||||
- Satellitenübersicht / SkyView
|
||||
Kreis mit Sats
|
||||
Rechtecke mit SNR (Signal/Noise)
|
||||
|
||||
- datareader für mehrere I²C-Sensoren. History muß entsprechend
|
||||
eine Liste sein.
|
||||
|
@ -12,10 +19,6 @@ Aufgaben- und Planungs- und Ideenliste
|
|||
Kreis um Position, Liste letzter Positionen
|
||||
Tasten: Set/Clear, Radius+, Radius-
|
||||
|
||||
- Satellitenübersicht / SkyView
|
||||
Kreis mit Sats
|
||||
Rechtecke mit SNR (Signal/Noise)
|
||||
|
||||
- Sea wave recorder (siehe Steamrock)
|
||||
|
||||
- Datenübertragung über Ethernet
|
||||
|
@ -25,3 +28,5 @@ Aufgaben- und Planungs- und Ideenliste
|
|||
- Yacht Devices ASCII Raw Protokoll
|
||||
https://www.yachtd.com/downloads/ydnr02.pdf
|
||||
- Actisense?
|
||||
|
||||
- AIS
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 203 B |
|
@ -278,16 +278,20 @@ def TXT(boatdata, msg):
|
|||
print(f"TXT: {msg.msg_type} - {txt_msg}")
|
||||
if not boatdata.alarm:
|
||||
# Momentan wird kein bereits anstehender Alarm überschrieben
|
||||
boatdata.setValue("TXT", txt_msg)
|
||||
boatdata.alarm_msg = txt_msg.strip()
|
||||
boatdata.alarm = True
|
||||
boatdata.alarm_id = msg.msg_type
|
||||
boatdata.alarm_src = "NMEA0183"
|
||||
txt_curr = 0
|
||||
txt_max = 0
|
||||
else:
|
||||
print(f"TXT: {msg.msg_type} - {msg.text}", end='')
|
||||
if not boatdata.alarm:
|
||||
# Momentan wird kein bereits anstehender Alarm überschrieben
|
||||
boatdata.setValue("TXT", msg.text)
|
||||
boatdata.alarm_msg = msg.text.strip()
|
||||
boatdata.alarm = True
|
||||
boatdata.alarm_id = msg.msg_type
|
||||
boatdata.alarm_src = "NMEA0183"
|
||||
|
||||
def VBW(boatdata, msg):
|
||||
print("-> VBW")
|
||||
|
|
|
@ -522,6 +522,11 @@ class Frontend(Gtk.Window):
|
|||
if selected == 6 and self.button_clicked == 1:
|
||||
self.keylock = False
|
||||
return True
|
||||
# Alarm! Only botton "1" so dismiss
|
||||
if self.boatdata.alarm:
|
||||
if selected == 1:
|
||||
self.boatdata.alarm = False
|
||||
return True
|
||||
if selected == 1:
|
||||
if self.button_clicked == 2:
|
||||
# Programmende bei Klicken auf 2 und loslassen auf 1
|
||||
|
|
|
@ -313,4 +313,4 @@ class Anchor(Page):
|
|||
else:
|
||||
self.draw_config(ctx)
|
||||
if self._bd.alarm:
|
||||
self.draw_alarm(ctx)
|
||||
self.draw_alarm(ctx, self._bd.alarm_src, self._bd.alarm_id, self._bd.alarm_msg)
|
||||
|
|
|
@ -28,5 +28,6 @@ class OneValue(Page):
|
|||
ctx.show_text(self.ref1.format())
|
||||
else:
|
||||
#print(dir(self.bd))
|
||||
ctx.show_text("---") # self.bd.getPlaceholder())
|
||||
#ctx.show_text("---") # self.bd.getPlaceholder())
|
||||
ctx.show_text(self.placeholder)
|
||||
ctx.stroke()
|
||||
|
|
|
@ -82,6 +82,7 @@ class Page():
|
|||
self.icon['ILUM'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "lighton.png"))
|
||||
self.sym_lock = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "lock.png"))
|
||||
self.sym_swipe = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "swipe3.png"))
|
||||
self.sym_exclamation = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "exclamation.png"))
|
||||
self.buttonlabel = {
|
||||
1: '',
|
||||
2: '',
|
||||
|
@ -208,8 +209,11 @@ class Page():
|
|||
ctx.show_text(self.buttonlabel[i+1])
|
||||
ctx.stroke()
|
||||
|
||||
def draw_alarm(self, ctx):
|
||||
def draw_alarm(self, ctx, source, alarmid, message):
|
||||
x, y, w, h = (50, 100, 300, 150)
|
||||
ctx.select_font_face("AtariST8x16SystemFont")
|
||||
ctx.set_font_size(16)
|
||||
# Dialogbox mit Rahmen
|
||||
ctx.set_line_width(1)
|
||||
ctx.set_source_rgb(*self.fgcolor)
|
||||
ctx.rectangle(x + 0.5, y + 0.5, w, h)
|
||||
|
@ -220,7 +224,28 @@ class Page():
|
|||
ctx.set_source_rgb(*self.fgcolor)
|
||||
ctx.set_line_width(2)
|
||||
ctx.rectangle(x + 3, y + 3, w - 5, h - 5)
|
||||
ctx.clip_preserve()
|
||||
ctx.stroke()
|
||||
# Symbol
|
||||
ctx.save()
|
||||
ctx.set_source_surface(self.sym_exclamation, x + 16, y + 16)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
# Titel
|
||||
ctx.move_to(x + 64, y + 30)
|
||||
ctx.show_text("A L A R M")
|
||||
ctx.move_to(x + 64, y + 48)
|
||||
ctx.show_text(f"#{alarmid} from {source}")
|
||||
# Alarmmeldung, umgebrochen
|
||||
n = 0
|
||||
for l in wordwrap(message, (w - 16 - 8) / 8):
|
||||
ctx.move_to(x + 16, y + 80 + n)
|
||||
ctx.show_text(l)
|
||||
n += 16
|
||||
if n > 64:
|
||||
break
|
||||
# Button-Hinweis
|
||||
self.draw_text_center(ctx, x + w / 2, y + h - 16, "Press button 1 to dismiss alarm")
|
||||
|
||||
def clear(self):
|
||||
ctx.set_source_rgb(1, 1, 1)
|
||||
|
@ -312,3 +337,22 @@ class Page():
|
|||
ctx.move_to(x + 4, y + h - 5 + 0.5)
|
||||
ctx.show_text(content)
|
||||
ctx.stroke()
|
||||
|
||||
def wordwrap(text, wrap):
|
||||
# Wrap long line to multiple lines, monospaced character set
|
||||
# e.g. used for alarm dialog boxes
|
||||
llen = 0
|
||||
l = 0
|
||||
lines = [""]
|
||||
for w in text.split():
|
||||
wordlength = len(w)
|
||||
if llen + 1 + wordlength <= wrap:
|
||||
if llen > 0:
|
||||
lines[l] += ' '
|
||||
lines[l] += w
|
||||
llen += wordlength + 1
|
||||
else:
|
||||
lines.append(w)
|
||||
l += 1
|
||||
llen = wordlength
|
||||
return lines
|
||||
|
|
Loading…
Reference in New Issue