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  | - Satelliten: SatelliteList verwenden und dieses auch in  | ||||||
|   nmea2000 implementieren |   nmea2000 implementieren | ||||||
|  | - Satellitenübersicht / SkyView | ||||||
|  |   Kreis mit Sats | ||||||
|  |   Rechtecke mit SNR (Signal/Noise) | ||||||
| 
 | 
 | ||||||
| - datareader für mehrere I²C-Sensoren. History muß entsprechend | - datareader für mehrere I²C-Sensoren. History muß entsprechend | ||||||
|   eine Liste sein. |   eine Liste sein. | ||||||
|  | @ -12,10 +19,6 @@ Aufgaben- und Planungs- und Ideenliste | ||||||
|   Kreis um Position, Liste letzter Positionen |   Kreis um Position, Liste letzter Positionen | ||||||
|   Tasten: Set/Clear, Radius+, Radius- |   Tasten: Set/Clear, Radius+, Radius- | ||||||
| 
 | 
 | ||||||
| - Satellitenübersicht / SkyView |  | ||||||
|   Kreis mit Sats |  | ||||||
|   Rechtecke mit SNR (Signal/Noise) |  | ||||||
| 
 |  | ||||||
| - Sea wave recorder (siehe Steamrock) | - Sea wave recorder (siehe Steamrock) | ||||||
| 
 | 
 | ||||||
| - Datenübertragung über Ethernet | - Datenübertragung über Ethernet | ||||||
|  | @ -25,3 +28,5 @@ Aufgaben- und Planungs- und Ideenliste | ||||||
|   - Yacht Devices ASCII Raw Protokoll |   - Yacht Devices ASCII Raw Protokoll | ||||||
|     https://www.yachtd.com/downloads/ydnr02.pdf |     https://www.yachtd.com/downloads/ydnr02.pdf | ||||||
|   - Actisense? |   - 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}") |                 print(f"TXT: {msg.msg_type} - {txt_msg}") | ||||||
|                 if not boatdata.alarm: |                 if not boatdata.alarm: | ||||||
|                     # Momentan wird kein bereits anstehender Alarm überschrieben |                     # Momentan wird kein bereits anstehender Alarm überschrieben | ||||||
|                     boatdata.setValue("TXT", txt_msg) |                     boatdata.alarm_msg = txt_msg.strip() | ||||||
|                     boatdata.alarm = True |                     boatdata.alarm = True | ||||||
|  |                     boatdata.alarm_id = msg.msg_type | ||||||
|  |                     boatdata.alarm_src = "NMEA0183" | ||||||
|                 txt_curr = 0 |                 txt_curr = 0 | ||||||
|                 txt_max = 0 |                 txt_max = 0 | ||||||
|     else: |     else: | ||||||
|         print(f"TXT: {msg.msg_type} - {msg.text}", end='') |         print(f"TXT: {msg.msg_type} - {msg.text}", end='') | ||||||
|         if not boatdata.alarm: |         if not boatdata.alarm: | ||||||
|             # Momentan wird kein bereits anstehender Alarm überschrieben |             # Momentan wird kein bereits anstehender Alarm überschrieben | ||||||
|             boatdata.setValue("TXT", msg.text) |             boatdata.alarm_msg = msg.text.strip() | ||||||
|             boatdata.alarm = True |             boatdata.alarm = True | ||||||
|  |             boatdata.alarm_id = msg.msg_type | ||||||
|  |             boatdata.alarm_src = "NMEA0183" | ||||||
| 
 | 
 | ||||||
| def VBW(boatdata, msg): | def VBW(boatdata, msg): | ||||||
|     print("-> VBW") |     print("-> VBW") | ||||||
|  |  | ||||||
|  | @ -522,6 +522,11 @@ class Frontend(Gtk.Window): | ||||||
|             if selected == 6 and self.button_clicked == 1: |             if selected == 6 and self.button_clicked == 1: | ||||||
|                 self.keylock = False |                 self.keylock = False | ||||||
|             return True |             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 selected == 1: | ||||||
|             if self.button_clicked == 2: |             if self.button_clicked == 2: | ||||||
|                 # Programmende bei Klicken auf 2 und loslassen auf 1 |                 # Programmende bei Klicken auf 2 und loslassen auf 1 | ||||||
|  |  | ||||||
|  | @ -313,4 +313,4 @@ class Anchor(Page): | ||||||
|         else: |         else: | ||||||
|             self.draw_config(ctx) |             self.draw_config(ctx) | ||||||
|         if self._bd.alarm: |         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()) |             ctx.show_text(self.ref1.format()) | ||||||
|         else: |         else: | ||||||
|             #print(dir(self.bd)) |             #print(dir(self.bd)) | ||||||
|             ctx.show_text("---") # self.bd.getPlaceholder()) |             #ctx.show_text("---") # self.bd.getPlaceholder()) | ||||||
|  |             ctx.show_text(self.placeholder) | ||||||
|         ctx.stroke() |         ctx.stroke() | ||||||
|  |  | ||||||
|  | @ -82,6 +82,7 @@ class Page(): | ||||||
|         self.icon['ILUM'] = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "lighton.png")) |         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_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_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 = { |         self.buttonlabel = { | ||||||
|             1: '', |             1: '', | ||||||
|             2: '', |             2: '', | ||||||
|  | @ -208,8 +209,11 @@ class Page(): | ||||||
|                         ctx.show_text(self.buttonlabel[i+1]) |                         ctx.show_text(self.buttonlabel[i+1]) | ||||||
|         ctx.stroke() |         ctx.stroke() | ||||||
| 
 | 
 | ||||||
|     def draw_alarm(self, ctx): |     def draw_alarm(self, ctx, source, alarmid, message): | ||||||
|         x, y, w, h = (50, 100, 300, 150) |         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_line_width(1) | ||||||
|         ctx.set_source_rgb(*self.fgcolor) |         ctx.set_source_rgb(*self.fgcolor) | ||||||
|         ctx.rectangle(x + 0.5, y + 0.5, w, h) |         ctx.rectangle(x + 0.5, y + 0.5, w, h) | ||||||
|  | @ -220,7 +224,28 @@ class Page(): | ||||||
|         ctx.set_source_rgb(*self.fgcolor) |         ctx.set_source_rgb(*self.fgcolor) | ||||||
|         ctx.set_line_width(2) |         ctx.set_line_width(2) | ||||||
|         ctx.rectangle(x + 3, y + 3, w - 5, h - 5) |         ctx.rectangle(x + 3, y + 3, w - 5, h - 5) | ||||||
|  |         ctx.clip_preserve() | ||||||
|         ctx.stroke() |         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): |     def clear(self): | ||||||
|         ctx.set_source_rgb(1, 1, 1) |         ctx.set_source_rgb(1, 1, 1) | ||||||
|  | @ -312,3 +337,22 @@ class Page(): | ||||||
|         ctx.move_to(x + 4, y + h - 5 + 0.5) |         ctx.move_to(x + 4, y + h - 5 + 0.5) | ||||||
|         ctx.show_text(content) |         ctx.show_text(content) | ||||||
|         ctx.stroke() |         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