From 84a99a747e2aadde6c6f35c00ef0435d5aee9a2b Mon Sep 17 00:00:00 2001 From: Thomas Hooge Date: Fri, 19 Sep 2025 21:29:06 +0200 Subject: [PATCH] =?UTF-8?q?Abfragedialog=20J/N=20eingebaut.=20F=C3=BCr=20R?= =?UTF-8?q?ennabbruch=20Tracker.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/question.png | Bin 0 -> 233 bytes pages/page.py | 56 +++++++++++++++++++++++++++++++++++++++++++ pages/racetracker.py | 25 ++++++++++++++++++- tracker.py | 7 ++++++ 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 images/question.png diff --git a/images/question.png b/images/question.png new file mode 100644 index 0000000000000000000000000000000000000000..bc3c04be099f94d747dddec8c0d64a4fe4374712 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@&H$efS0D`p|NsAQzI*->ki}RM zVL3yw)pau9|RwVM~`{N#2X!ZH9Rh bGX683TA}iy 64: + break + # Auswahlmöglichkeiten + self.draw_button(ctx, x + 16, y + h - 32, "YES") + self.draw_button(ctx, x + w - 96, y + h - 32, "NO") + ctx.restore() + def draw_alarm(self, ctx, source, alarmid, message): x, y, w, h = (50, 100, 300, 150) ctx.select_font_face("AtariST8x16SystemFont") @@ -360,6 +401,21 @@ class Page(): ctx.stroke() ctx.restore() + def draw_button(self, ctx, x, y, label): + ctx.save() + ctx.select_font_face("AtariST8x16SystemFont") + ctx.set_font_size(16) + ctx.set_line_width(3) + ctx.set_source_rgb(*self.fgcolor) + ext = ctx.text_extents(label) + w = max(ext.width, 80) + h = 24 + ctx.rectangle(x + 0.5, y + 0.5, w, h) + ctx.stroke() + ctx.move_to(x + (w - ext.width) / 2.0, y + h - 5) + ctx.show_text(label) + ctx.restore() + def wordwrap(text, wrap): # Wrap long line to multiple lines, monospaced character set # e.g. used for alarm dialog boxes diff --git a/pages/racetracker.py b/pages/racetracker.py index 82cd50c..432da7f 100644 --- a/pages/racetracker.py +++ b/pages/racetracker.py @@ -39,6 +39,8 @@ class RaceTracker(Page): self.buttonlabel[2] = 'INFO' self.buttonlabel[5] = 'ABORT' self.mode = 'N' # (N)ormal, (C)onfiguration, (M)itteilung + self.query_active = False + self.savebuttons = None # Flaggengröße: 96 x 64 Pixel self.flagpos = ((208, 140), (308, 140), (208, 210), (308, 210)) @@ -74,6 +76,15 @@ class RaceTracker(Page): self.sym_flag[f] = cairo.ImageSurface.create_from_png(flagfile) def handle_key(self, buttonid): + if self.query_active: + if buttonid == 2: + self.query_active = False + self.app.track.hero_giveup() + self.buttonlabel = self.savebuttons.copy() + elif buttonid == 5: + self.query_active = False + self.buttonlabel = self.savebuttons.copy() + return True if buttonid == 1: # Modus umschalten if self.mode == 'N': @@ -122,7 +133,17 @@ class RaceTracker(Page): print(f"Selected race '{self.raceid}'") return True elif buttonid == 5: - if self.mode == 'C': + if self.mode == 'N': + self.query_active = True; + self.savebuttons = self.buttonlabel.copy() + self.buttonlabel[1] = "" + self.buttonlabel[2] = "YES" + self.buttonlabel[3] = "" + self.buttonlabel[4] = "" + self.buttonlabel[5] = "NO" + self.buttonlabel[6] = "" + # Taste 2 = JA, Taste 5 = NEIN + elif self.mode == 'C': # Tracking ein/-ausschalten if self.app.track.is_active(): self.app.track.set_active(False) @@ -220,6 +241,8 @@ class RaceTracker(Page): ctx.paint() ctx.restore() pos += 1 + if self.query_active: + self.draw_query(ctx, "A B O R T R A C E", "Are you sure to abort the current race? This cannot be undone. Are you sure?") def draw_config(self, ctx): diff --git a/tracker.py b/tracker.py index 0d39647..257f19d 100644 --- a/tracker.py +++ b/tracker.py @@ -93,6 +93,7 @@ class Tracker(): self.hero_orgstatus = None self.hero_racestatus = None self.hero_timedelta = 0 # Zeitdifferenz zum Server in sec + self.hero_givenup = False # Hole erste Daten vom Server self.hero_query_org() @@ -166,6 +167,12 @@ class Tracker(): """ + def hero_giveup(self): + # TODO nach Aufgabe noch ein paar Pakete senden bis dier + # Tracker dann abgestellt wird. + self.hero_givenup = True + + def hero_play_audio(self, event, lang='de'): """ Ein Event ist mit einer Audiodatei gekoppelt. Das Event trägt