annotate light8/Fader.py @ 2330:e28a9b41ad87

rm fpsmeter- this import was double-registering a component (!)
author drewp@bigasterisk.com
date Thu, 01 Jun 2023 22:06:34 -0700
parents e04f7b552bcd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from Tix import *
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
2 from time import time # time is on my side
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
3 from util import subsetdict
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
4 from FlyingFader import FlyingFader
102
e04f7b552bcd - scroll wheel works everywhere
dmcc
parents: 54
diff changeset
5 from uihelpers import get_selection
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
6
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
7 # statuses are:
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
8 # stopped - no cue is loaded or cue is stopped
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
9 # running - cue is running, not complete
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
10 # finished - cue is finished, next is loaded
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
11
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 stdfont = ('Arial', 10)
45b12307c695 Initial revision
drewp
parents:
diff changeset
13
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 class Fader(Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 'User interface for cue fader'
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 def __init__(self, master, cues, scalelevels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 self.master = master
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 self.cues = cues
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 self.scalelevels = scalelevels
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
20 self.time_start = 0
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.init_layout()
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
22 self.stop()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 def init_layout(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 Frame.__init__(self, self.master)
45b12307c695 Initial revision
drewp
parents:
diff changeset
25
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
26 # info variables
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.cuename = StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 self.cuelength = DoubleVar()
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
29 self.cuetarget = StringVar()
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
30
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
31 # info about a running cue
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
32 self.cuestatus = StringVar() # text description
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
33 self.cuestatus.set("stopped")
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
34
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
35 self.cuepercent = DoubleVar() # percent complete
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
36 self.cuepercent.set(0)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
37 self.cuepercent.trace('w', self.update_percent)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
38 self.cuetimeelapse = StringVar() # time elapsed
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
39 self.cuetimeelapse.set('0s')
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
40 self.cuetimeleft = StringVar() # time left
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
41 self.cuetimeleft.set('0s')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
42
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 buttonframe = Frame(self)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
44 topframe = Frame(self) # to contain cue list and infoframe
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
45 infoframe = Frame(topframe)
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
46 topframe.pack()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
48 self.listbox = ScrolledListBox(topframe,
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
49 command=self.update_selection)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
50 self.listbox.listbox.configure({'exportselection' : 0,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
51 'selectmode' : EXTENDED})
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 for c in self.cues:
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 self.listbox.listbox.insert(END, c.name)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
54 self.listbox.pack(side=LEFT)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
55 self.listbox.listbox.bind("<<ListboxSelect>>", self.update_selection,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
56 add=1)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
57 Button(buttonframe, text="Go", command=self.go, font=stdfont,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
58 bg='green').pack(side=LEFT)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
59 Button(buttonframe, text="Stop", command=self.stop, font=stdfont,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
60 bg='red').pack(side=LEFT)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
61 Button(buttonframe, text="Prev", command=self.prev,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
62 font=stdfont).pack(side=LEFT)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
63 nextbutton = Button(buttonframe, text="Next", command=self.next,
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
64 font=stdfont)
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
65 # Button(buttonframe, text="Load", command=self.mark_start, bg='grey80',
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
66 # font=stdfont).pack(side=LEFT)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
67
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 Label(infoframe, textvariable=self.cuename,
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
69 font=('Arial', 12), bg='lightBlue').grid(columnspan=4, sticky=NE+SW)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
70
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 Label(infoframe, text="Length", font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 bg='lightPink').grid(row=1, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 Label(infoframe, textvariable=self.cuelength,
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
74 font=stdfont).grid(row=1, column=1, columnspan=3, sticky=NE+SW)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
75
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 Label(infoframe, text="Target", font=stdfont,
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
77 bg='lightPink').grid(row=2, sticky=NE+SW)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
78 Label(infoframe, textvariable=self.cuetarget,
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
79 font=stdfont, wraplength=250).grid(row=2, column=1, columnspan=3,
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
80 sticky=NE+SW)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
81
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
82 Label(infoframe, text="Status", font=stdfont,
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
83 bg='lightPink').grid(row=3, sticky=NE+SW)
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
84 Label(infoframe, textvariable=self.cuestatus,
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
85 font=stdfont).grid(row=3, column=1, columnspan=3, sticky=NE+SW)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
86
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
87 Label(infoframe, text="Time Elapsed", font=stdfont,
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
88 bg='lightPink').grid(row=4, sticky=NE+SW)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
89 Label(infoframe, textvariable=self.cuetimeelapse,
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
90 font=stdfont).grid(row=4, column=1, sticky=NE+SW)
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
91
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
92 Label(infoframe, text="Time Remain", font=stdfont,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
93 bg='lightPink').grid(row=4, column=2, sticky=NE+SW)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
94 Label(infoframe, textvariable=self.cuetimeleft,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
95 font=stdfont).grid(row=4, column=3, sticky=NE+SW)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
96
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
97 Label(infoframe, text="Percent Complete", font=stdfont,
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
98 bg='lightPink').grid(row=5, column=0, sticky=NE+SW)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
99 self.percentlabel = Label(infoframe,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
100 font=stdfont)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
101 self.percentlabel.grid(row=5, column=1, columnspan=3, sticky=NE+SW)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
102
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
103 # s = Scale(infoframe, variable=self.cuepercent,
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
104 s = Scale(buttonframe, variable=self.cuepercent,
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
105 showvalue=0, length=220,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
106 width=18, sliderlength=30,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
107 to=100,res=.1,from_=0,bd=1, font=stdfont,
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
108 orient='horiz')
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
109 # s.grid(row=6, columnspan=4, sticky='ew')
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
110 nextbutton.pack(side=RIGHT)
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
111 s.pack(side=RIGHT, expand=1, fill=X)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
112
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 infoframe.pack(side=RIGHT, fill=BOTH, expand=1)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
114 buttonframe.pack(side=BOTTOM, expand=1, fill=X)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
115
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 self.listbox.listbox.select_set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 self.update_selection()
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
118 def mark_start(self):
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
119 self.time_start = time()
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
120 startlevels = dict([(k, v.get()) for k, v in self.scalelevels.items()])
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
121 # print "going to mark with", startlevels
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
122 self.current.start(startlevels, self.time_start)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
123 def update_percent(self, *args):
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
124 if self.cuestatus.get() != 'running':
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
125 self.cuestatus.set("running")
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
126 self.mark_start()
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
127
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
128 percent = self.cuepercent.get()
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
129 self.percentlabel.config(text='%.1f%%' % percent)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
130 percent /= 100
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
131
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
132 elapsed = percent * self.current.dur
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
133 self.cuetimeelapse.set('%.1fs' % elapsed)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
134 self.cuetimeleft.set('%.1fs' % (self.current.dur - elapsed))
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
135
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
136 newlevels = self.current.get_levels(self.time_start + elapsed)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
137 # print "newlevels", newlevels
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
138 for ch, lev in newlevels.items():
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
139 try:
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
140 self.scalelevels[ch].set(lev)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
141 except KeyError:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
142 pass
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
143
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
144 def update_selection(self, *args):
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
145 self.cuestatus.set('stopped')
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
146 selection = get_selection(self.listbox.listbox)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 self.current = self.cues[selection]
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 self.cuename.set(self.current.name)
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 self.cuelength.set(self.current.dur)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
150 target = ', '.join(['%s -> %.2f' % (n, lev)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
151 for n, lev in self.current.get_end_levels().items()])
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
152 self.cuetarget.set(target)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
153 self.cuetimeelapse.set('0s')
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
154 self.cuetimeleft.set('%.1fs' % self.current.dur)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
155 self.cuepercent.set(0)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
156 def go(self):
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
157 self.update_selection()
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
158 self.cuestatus.set("running")
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
159 self.mark_start()
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
160 self.running_loop()
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
161 def stop(self):
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
162 self.cuestatus.set('stopped')
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
163 def prev(self):
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
164 self.stop()
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
165 selection = get_selection(self.listbox.listbox)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
166 if selection != 0:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
167 self.listbox.listbox.select_clear(selection)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
168 self.listbox.listbox.select_set(selection - 1)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
169 self.update_selection()
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
170 self.mark_start()
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
171 def next(self):
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
172 self.stop()
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
173 selection = get_selection(self.listbox.listbox)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
174 if selection != self.listbox.listbox.size() - 1:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
175 self.listbox.listbox.select_clear(selection)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
176 self.listbox.listbox.select_set(selection + 1)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
177 self.update_selection()
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
178 self.mark_start()
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
179 def running_loop(self):
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
180 if self.cuestatus.get() == 'stopped':
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
181 return
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
182 curtime = time()
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
183 elapsed = (curtime - self.time_start)
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
184
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
185 if elapsed > self.current.dur:
54
3011c1028eb7 Cue math error fixed.
dmcc
parents: 53
diff changeset
186 self.cuestatus.set('stopped')
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
187 self.cuepercent.set(100)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
188
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
189 # advance cues if okay
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
190 self.next()
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
191 return
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
192
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 52
diff changeset
193 self.cuepercent.set(100 * elapsed / self.current.dur)
52
065896b0913c emergency commit
dmcc
parents: 51
diff changeset
194 self.after(30, self.running_loop)