Define prestart attribute on ButtonMark to place buttons before start

This commit is contained in:
2025-08-23 00:33:54 +01:00
parent b8d8cb8fb7
commit 5a25e325f3
4 changed files with 25 additions and 5 deletions

View File

@@ -178,12 +178,13 @@ class SetMark(Event):
pass pass
class ButtonMark(Event): class ButtonMark(Event):
def __init__(self, name, *args, **kwargs): def __init__(self, name, prestart=False, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self._name = name self._name = name
self._prestart = prestart
def prepare(self): def prepare(self):
self._at._timings.register_mark(self._name, None) self._at._timings.register_mark(self._name, None, self._prestart)
def start(self): def start(self):
self._eventrunner.finished(self) self._eventrunner.finished(self)

7
gig.py
View File

@@ -52,6 +52,8 @@ class EventRunner:
if self._playing is not None: if self._playing is not None:
return self.activate() return self.activate()
elif self._selected is not None: elif self._selected is not None:
if self._next_button_is_prestart:
return self.activate()
self.play() self.play()
return True return True
return False return False
@@ -77,6 +79,7 @@ class EventRunner:
print("Scheduled event {} at {} ({} from now)".format(event, event.at, event.at - now)) print("Scheduled event {} at {} ({} from now)".format(event, event.at, event.at - now))
event.scheduled = True event.scheduled = True
self._next_button = self._currentitem.get_next_button() self._next_button = self._currentitem.get_next_button()
self._next_button_is_prestart = self._currentitem.is_button_prestart(self._next_button)
return True return True
def stop(self): def stop(self):
@@ -127,6 +130,9 @@ class EventRunner:
button = "Select next" button = "Select next"
elif self._selected is not None: elif self._selected is not None:
status = 'Selected {}'.format(self.get_item().get_title()) status = 'Selected {}'.format(self.get_item().get_title())
if (self._next_button is not None) and self._next_button_is_prestart:
button = "Marker {}".format(self._next_button)
else:
button = "Play" button = "Play"
else: else:
status = 'Waiting' status = 'Waiting'
@@ -249,6 +255,7 @@ class MainWindow(pyglet.window.Window):
self.update_cursor(self._cursorpos + 1) self.update_cursor(self._cursorpos + 1)
self._eventrunner.select(self._cursorpos) self._eventrunner.select(self._cursorpos)
elif self._selectpos == self._cursorpos: elif self._selectpos == self._cursorpos:
if not self._eventrunner.advance():
self._eventrunner.play() self._eventrunner.play()
else: else:
self._eventrunner.select(self._cursorpos) self._eventrunner.select(self._cursorpos)

View File

@@ -42,6 +42,9 @@ class Item:
def get_next_button(self): def get_next_button(self):
return self._timings.get_button() return self._timings.get_button()
def is_button_prestart(self, name):
return self._timings.is_button_prestart(name)
def get_title(self): def get_title(self):
return self._title return self._title

View File

@@ -17,6 +17,7 @@ class Timings:
self._markers = {} self._markers = {}
self._marker_objects = {} self._marker_objects = {}
self._marker_buttons = [] self._marker_buttons = []
self._marker_buttons_prestart = {}
self._tempo_objects = [] self._tempo_objects = []
self._tempo = [] self._tempo = []
self._resolved = False self._resolved = False
@@ -36,6 +37,12 @@ class Timings:
return button return button
return None return None
def is_button_prestart(self, name):
if name in self._marker_buttons_prestart:
return True
return False
def add_timing(self, timing): def add_timing(self, timing):
self._timings.append(timing) self._timings.append(timing)
self._resolved = False self._resolved = False
@@ -73,10 +80,12 @@ class Timings:
#print("beat_at({}) = {}".format(at, 60 / tempo)) #print("beat_at({}) = {}".format(at, 60 / tempo))
return 60 / tempo return 60 / tempo
def register_mark(self, name, at): def register_mark(self, name, at, prestart=False):
self._marker_objects[name] = at self._marker_objects[name] = at
if at is None: if at is None:
self._marker_buttons.append(name) self._marker_buttons.append(name)
if prestart:
self._marker_buttons_prestart[name] = True
self._resolved = False self._resolved = False
def register_tempo(self, tempo, beats, at): def register_tempo(self, tempo, beats, at):