From 5a25e325f387ade5914a082721a10d2f707c08a6 Mon Sep 17 00:00:00 2001 From: Gavan Fantom Date: Sat, 23 Aug 2025 00:33:54 +0100 Subject: [PATCH] Define prestart attribute on ButtonMark to place buttons before start --- events.py | 5 +++-- gig.py | 11 +++++++++-- item.py | 3 +++ timings.py | 11 ++++++++++- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/events.py b/events.py index 4c7f818..836339f 100644 --- a/events.py +++ b/events.py @@ -178,12 +178,13 @@ class SetMark(Event): pass class ButtonMark(Event): - def __init__(self, name, *args, **kwargs): + def __init__(self, name, prestart=False, *args, **kwargs): super().__init__(*args, **kwargs) self._name = name + self._prestart = prestart def prepare(self): - self._at._timings.register_mark(self._name, None) + self._at._timings.register_mark(self._name, None, self._prestart) def start(self): self._eventrunner.finished(self) diff --git a/gig.py b/gig.py index d124539..aedd1e7 100755 --- a/gig.py +++ b/gig.py @@ -52,6 +52,8 @@ class EventRunner: if self._playing is not None: return self.activate() elif self._selected is not None: + if self._next_button_is_prestart: + return self.activate() self.play() return True return False @@ -77,6 +79,7 @@ class EventRunner: print("Scheduled event {} at {} ({} from now)".format(event, event.at, event.at - now)) event.scheduled = True self._next_button = self._currentitem.get_next_button() + self._next_button_is_prestart = self._currentitem.is_button_prestart(self._next_button) return True def stop(self): @@ -127,7 +130,10 @@ class EventRunner: button = "Select next" elif self._selected is not None: status = 'Selected {}'.format(self.get_item().get_title()) - button = "Play" + if (self._next_button is not None) and self._next_button_is_prestart: + button = "Marker {}".format(self._next_button) + else: + button = "Play" else: status = 'Waiting' button = "Select" @@ -249,7 +255,8 @@ class MainWindow(pyglet.window.Window): self.update_cursor(self._cursorpos + 1) self._eventrunner.select(self._cursorpos) elif self._selectpos == self._cursorpos: - self._eventrunner.play() + if not self._eventrunner.advance(): + self._eventrunner.play() else: self._eventrunner.select(self._cursorpos) self.update_objects() diff --git a/item.py b/item.py index a7609a4..6e2e94e 100644 --- a/item.py +++ b/item.py @@ -42,6 +42,9 @@ class Item: def get_next_button(self): return self._timings.get_button() + def is_button_prestart(self, name): + return self._timings.is_button_prestart(name) + def get_title(self): return self._title diff --git a/timings.py b/timings.py index 5a06ca3..b9caa17 100644 --- a/timings.py +++ b/timings.py @@ -17,6 +17,7 @@ class Timings: self._markers = {} self._marker_objects = {} self._marker_buttons = [] + self._marker_buttons_prestart = {} self._tempo_objects = [] self._tempo = [] self._resolved = False @@ -36,6 +37,12 @@ class Timings: return button return None + def is_button_prestart(self, name): + if name in self._marker_buttons_prestart: + return True + + return False + def add_timing(self, timing): self._timings.append(timing) self._resolved = False @@ -73,10 +80,12 @@ class Timings: #print("beat_at({}) = {}".format(at, 60 / tempo)) return 60 / tempo - def register_mark(self, name, at): + def register_mark(self, name, at, prestart=False): self._marker_objects[name] = at if at is None: self._marker_buttons.append(name) + if prestart: + self._marker_buttons_prestart[name] = True self._resolved = False def register_tempo(self, tempo, beats, at):