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
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)

11
gig.py
View File

@@ -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()

View File

@@ -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

View File

@@ -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):