diff --git a/light8/Fader.py b/light8/Fader.py --- a/light8/Fader.py +++ b/light8/Fader.py @@ -1,13 +1,4 @@ from Tix import * -from time import time # time is on my side -from util import subsetdict -from FlyingFader import FlyingFader -from uihelpers import get_selection - -# statuses are: -# stopped - no cue is loaded or cue is stopped -# running - cue is running, not complete -# finished - cue is finished, next is loaded stdfont = ('Arial', 10) @@ -17,178 +8,47 @@ class Fader(Frame): self.master = master self.cues = cues self.scalelevels = scalelevels - self.time_start = 0 self.init_layout() - self.stop() def init_layout(self): Frame.__init__(self, self.master) - # info variables self.cuename = StringVar() self.cuelength = DoubleVar() - self.cuetarget = StringVar() - - # info about a running cue - self.cuestatus = StringVar() # text description - self.cuestatus.set("stopped") - - self.cuepercent = DoubleVar() # percent complete - self.cuepercent.set(0) - self.cuepercent.trace('w', self.update_percent) - self.cuetimeelapse = StringVar() # time elapsed - self.cuetimeelapse.set('0s') - self.cuetimeleft = StringVar() # time left - self.cuetimeleft.set('0s') + self.cueend = StringVar() buttonframe = Frame(self) - topframe = Frame(self) # to contain cue list and infoframe - infoframe = Frame(topframe) - topframe.pack() - self.listbox = ScrolledListBox(topframe, - command=self.update_selection) - self.listbox.listbox.configure({'exportselection' : 0, - 'selectmode' : EXTENDED}) + self.listbox = ScrolledListBox(buttonframe) + self.listbox.listbox.configure({'exportselection' : 0}) for c in self.cues: self.listbox.listbox.insert(END, c.name) - self.listbox.pack(side=LEFT) - self.listbox.listbox.bind("<>", self.update_selection, - add=1) - Button(buttonframe, text="Go", command=self.go, font=stdfont, - bg='green').pack(side=LEFT) - Button(buttonframe, text="Stop", command=self.stop, font=stdfont, - bg='red').pack(side=LEFT) - Button(buttonframe, text="Prev", command=self.prev, - font=stdfont).pack(side=LEFT) - nextbutton = Button(buttonframe, text="Next", command=self.next, - font=stdfont) - # Button(buttonframe, text="Load", command=self.mark_start, bg='grey80', - # font=stdfont).pack(side=LEFT) + self.listbox.pack(side=TOP) + Button(buttonframe, text="Go", command=self.go).pack(side=LEFT) + Button(buttonframe, text="Halt").pack(side=LEFT) + Button(buttonframe, text="Clear").pack(side=LEFT) + infoframe = Frame(self) Label(infoframe, textvariable=self.cuename, - font=('Arial', 12), bg='lightBlue').grid(columnspan=4, sticky=NE+SW) - + font=('Arial', 12), bg='lightBlue').grid(columnspan=2, sticky=NE+SW) Label(infoframe, text="Length", font=stdfont, bg='lightPink').grid(row=1, sticky=NE+SW) Label(infoframe, textvariable=self.cuelength, - font=stdfont).grid(row=1, column=1, columnspan=3, sticky=NE+SW) - + font=stdfont).grid(row=1, column=1, sticky=NE+SW) Label(infoframe, text="Target", font=stdfont, bg='lightPink').grid(row=2, sticky=NE+SW) - Label(infoframe, textvariable=self.cuetarget, - font=stdfont, wraplength=250).grid(row=2, column=1, columnspan=3, - sticky=NE+SW) - - Label(infoframe, text="Status", font=stdfont, - bg='lightPink').grid(row=3, sticky=NE+SW) - Label(infoframe, textvariable=self.cuestatus, - font=stdfont).grid(row=3, column=1, columnspan=3, sticky=NE+SW) - - Label(infoframe, text="Time Elapsed", font=stdfont, - bg='lightPink').grid(row=4, sticky=NE+SW) - Label(infoframe, textvariable=self.cuetimeelapse, - font=stdfont).grid(row=4, column=1, sticky=NE+SW) - - Label(infoframe, text="Time Remain", font=stdfont, - bg='lightPink').grid(row=4, column=2, sticky=NE+SW) - Label(infoframe, textvariable=self.cuetimeleft, - font=stdfont).grid(row=4, column=3, sticky=NE+SW) - - Label(infoframe, text="Percent Complete", font=stdfont, - bg='lightPink').grid(row=5, column=0, sticky=NE+SW) - self.percentlabel = Label(infoframe, - font=stdfont) - self.percentlabel.grid(row=5, column=1, columnspan=3, sticky=NE+SW) - - # s = Scale(infoframe, variable=self.cuepercent, - s = Scale(buttonframe, variable=self.cuepercent, - showvalue=0, length=220, - width=18, sliderlength=30, - to=100,res=.1,from_=0,bd=1, font=stdfont, - orient='horiz') - # s.grid(row=6, columnspan=4, sticky='ew') - nextbutton.pack(side=RIGHT) - s.pack(side=RIGHT, expand=1, fill=X) - + Label(infoframe, textvariable=self.cueend, + font=stdfont).grid(row=2, column=1, sticky=NE+SW) infoframe.pack(side=RIGHT, fill=BOTH, expand=1) - buttonframe.pack(side=BOTTOM, expand=1, fill=X) + buttonframe.pack(side=BOTTOM) self.listbox.listbox.select_set(0) self.update_selection() - def mark_start(self): - self.time_start = time() - startlevels = dict([(k, v.get()) for k, v in self.scalelevels.items()]) - # print "going to mark with", startlevels - self.current.start(startlevels, self.time_start) - def update_percent(self, *args): - if self.cuestatus.get() != 'running': - self.cuestatus.set("running") - self.mark_start() - - percent = self.cuepercent.get() - self.percentlabel.config(text='%.1f%%' % percent) - percent /= 100 - - elapsed = percent * self.current.dur - self.cuetimeelapse.set('%.1fs' % elapsed) - self.cuetimeleft.set('%.1fs' % (self.current.dur - elapsed)) - - newlevels = self.current.get_levels(self.time_start + elapsed) - # print "newlevels", newlevels - for ch, lev in newlevels.items(): - try: - self.scalelevels[ch].set(lev) - except KeyError: - pass - - def update_selection(self, *args): - self.cuestatus.set('stopped') - selection = get_selection(self.listbox.listbox) + def update_selection(self): + print self.listbox.listbox.curselection() + selection = int(self.listbox.listbox.curselection()[0]) # blech self.current = self.cues[selection] self.cuename.set(self.current.name) self.cuelength.set(self.current.dur) - target = ', '.join(['%s -> %.2f' % (n, lev) - for n, lev in self.current.get_end_levels().items()]) - self.cuetarget.set(target) - self.cuetimeelapse.set('0s') - self.cuetimeleft.set('%.1fs' % self.current.dur) - self.cuepercent.set(0) + self.cueend.set(str(self.current.get_end_levels())) def go(self): - self.update_selection() - self.cuestatus.set("running") - self.mark_start() - self.running_loop() - def stop(self): - self.cuestatus.set('stopped') - def prev(self): - self.stop() - selection = get_selection(self.listbox.listbox) - if selection != 0: - self.listbox.listbox.select_clear(selection) - self.listbox.listbox.select_set(selection - 1) - self.update_selection() - self.mark_start() - def next(self): - self.stop() - selection = get_selection(self.listbox.listbox) - if selection != self.listbox.listbox.size() - 1: - self.listbox.listbox.select_clear(selection) - self.listbox.listbox.select_set(selection + 1) - self.update_selection() - self.mark_start() - def running_loop(self): - if self.cuestatus.get() == 'stopped': - return - curtime = time() - elapsed = (curtime - self.time_start) - - if elapsed > self.current.dur: - self.cuestatus.set('stopped') - self.cuepercent.set(100) - - # advance cues if okay - self.next() - return - - self.cuepercent.set(100 * elapsed / self.current.dur) - self.after(30, self.running_loop) + print 'Fade to', self.current.name