annotate light8/Fader.py @ 15:c76b62eccdec

put **kw back in, they now go to the scale and can override the defaults. put **kw back in, they now go to the scale and can override the defaults. for our purposes, we probably want to edit the defaults so we don't have them in every call.
author dmcc
date Sun, 07 Jul 2002 06:18:40 +0000
parents 45b12307c695
children 71489bb71528
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 *
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from time import time # time is on my side
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 from util import subsetdict
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 from FlyingFader import FlyingFader
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 from uihelpers import get_selection
45b12307c695 Initial revision
drewp
parents:
diff changeset
6
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 # statuses are:
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 # stopped - no cue is loaded or cue is stopped
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 # running - cue is running, not complete
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 # finished - cue is finished, next is loaded
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 self.time_start = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.init_layout()
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 self.stop()
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
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 # info variables
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.cuename = StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 self.cuelength = DoubleVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.cuetarget = StringVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
30
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 # info about a running cue
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.cuestatus = StringVar() # text description
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 self.cuestatus.set("stopped")
45b12307c695 Initial revision
drewp
parents:
diff changeset
34
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 self.cuepercent = DoubleVar() # percent complete
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.cuepercent.set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 self.cuepercent.trace('w', self.update_percent)
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 self.cuetimeelapse = StringVar() # time elapsed
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 self.cuetimeelapse.set('0s')
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 self.cuetimeleft = StringVar() # time left
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 self.cuetimeleft.set('0s')
45b12307c695 Initial revision
drewp
parents:
diff changeset
42
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 buttonframe = Frame(self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 topframe = Frame(self) # to contain cue list and infoframe
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 infoframe = Frame(topframe)
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 topframe.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 self.listbox = ScrolledListBox(topframe,
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 command=self.update_selection)
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.listbox.listbox.configure({'exportselection' : 0,
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 'selectmode' : EXTENDED})
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)
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 self.listbox.pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 self.listbox.listbox.bind("<<ListboxSelect>>", self.update_selection,
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 add=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 Button(buttonframe, text="Go", command=self.go, font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 bg='green').pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 Button(buttonframe, text="Stop", command=self.stop, font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 bg='red').pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 Button(buttonframe, text="Prev", command=self.prev,
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 font=stdfont).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 nextbutton = Button(buttonframe, text="Next", command=self.next,
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 # Button(buttonframe, text="Load", command=self.mark_start, bg='grey80',
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 # font=stdfont).pack(side=LEFT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
67
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 Label(infoframe, textvariable=self.cuename,
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 font=('Arial', 12), bg='lightBlue').grid(columnspan=4, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
70
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,
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 font=stdfont).grid(row=1, column=1, columnspan=3, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
75
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 Label(infoframe, text="Target", font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 bg='lightPink').grid(row=2, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 Label(infoframe, textvariable=self.cuetarget,
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 font=stdfont, wraplength=250).grid(row=2, column=1, columnspan=3,
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
81
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 Label(infoframe, text="Status", font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 bg='lightPink').grid(row=3, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 Label(infoframe, textvariable=self.cuestatus,
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 font=stdfont).grid(row=3, column=1, columnspan=3, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
86
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 Label(infoframe, text="Time Elapsed", font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 bg='lightPink').grid(row=4, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 Label(infoframe, textvariable=self.cuetimeelapse,
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 font=stdfont).grid(row=4, column=1, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
91
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 Label(infoframe, text="Time Remain", font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 bg='lightPink').grid(row=4, column=2, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 Label(infoframe, textvariable=self.cuetimeleft,
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 font=stdfont).grid(row=4, column=3, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
96
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 Label(infoframe, text="Percent Complete", font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 bg='lightPink').grid(row=5, column=0, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 self.percentlabel = Label(infoframe,
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 font=stdfont)
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 self.percentlabel.grid(row=5, column=1, columnspan=3, sticky=NE+SW)
45b12307c695 Initial revision
drewp
parents:
diff changeset
102
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 # s = Scale(infoframe, variable=self.cuepercent,
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 s = Scale(buttonframe, variable=self.cuepercent,
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 showvalue=0, length=220,
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 width=18, sliderlength=30,
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 to=100,res=.1,from_=0,bd=1, font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 orient='horiz')
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 # s.grid(row=6, columnspan=4, sticky='ew')
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 nextbutton.pack(side=RIGHT)
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 s.pack(side=RIGHT, expand=1, fill=X)
45b12307c695 Initial revision
drewp
parents:
diff changeset
112
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 infoframe.pack(side=RIGHT, fill=BOTH, expand=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 buttonframe.pack(side=BOTTOM, expand=1, fill=X)
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()
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 def mark_start(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 self.time_start = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
120 startlevels = dict([(k, v.get()) for k, v in self.scalelevels.items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 # print "going to mark with", startlevels
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 self.current.start(startlevels, self.time_start)
45b12307c695 Initial revision
drewp
parents:
diff changeset
123 def update_percent(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 if self.cuestatus.get() != 'running':
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 self.cuestatus.set("running")
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 self.mark_start()
45b12307c695 Initial revision
drewp
parents:
diff changeset
127
45b12307c695 Initial revision
drewp
parents:
diff changeset
128 percent = self.cuepercent.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
129 self.percentlabel.config(text='%.1f%%' % percent)
45b12307c695 Initial revision
drewp
parents:
diff changeset
130 percent /= 100
45b12307c695 Initial revision
drewp
parents:
diff changeset
131
45b12307c695 Initial revision
drewp
parents:
diff changeset
132 elapsed = percent * self.current.dur
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 self.cuetimeelapse.set('%.1fs' % elapsed)
45b12307c695 Initial revision
drewp
parents:
diff changeset
134 self.cuetimeleft.set('%.1fs' % (self.current.dur - elapsed))
45b12307c695 Initial revision
drewp
parents:
diff changeset
135
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 newlevels = self.current.get_levels(self.time_start + elapsed)
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 # print "newlevels", newlevels
45b12307c695 Initial revision
drewp
parents:
diff changeset
138 for ch, lev in newlevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 self.scalelevels[ch].set(lev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 except KeyError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
143
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 def update_selection(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 self.cuestatus.set('stopped')
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 selection = get_selection(self.listbox.listbox)
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)
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 target = ', '.join(['%s -> %.2f' % (n, lev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 for n, lev in self.current.get_end_levels().items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 self.cuetarget.set(target)
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 self.cuetimeelapse.set('0s')
45b12307c695 Initial revision
drewp
parents:
diff changeset
154 self.cuetimeleft.set('%.1fs' % self.current.dur)
45b12307c695 Initial revision
drewp
parents:
diff changeset
155 self.cuepercent.set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
156 def go(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
157 self.update_selection()
45b12307c695 Initial revision
drewp
parents:
diff changeset
158 self.cuestatus.set("running")
45b12307c695 Initial revision
drewp
parents:
diff changeset
159 self.mark_start()
45b12307c695 Initial revision
drewp
parents:
diff changeset
160 self.running_loop()
45b12307c695 Initial revision
drewp
parents:
diff changeset
161 def stop(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
162 self.cuestatus.set('stopped')
45b12307c695 Initial revision
drewp
parents:
diff changeset
163 def prev(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
164 self.stop()
45b12307c695 Initial revision
drewp
parents:
diff changeset
165 selection = get_selection(self.listbox.listbox)
45b12307c695 Initial revision
drewp
parents:
diff changeset
166 if selection != 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
167 self.listbox.listbox.select_clear(selection)
45b12307c695 Initial revision
drewp
parents:
diff changeset
168 self.listbox.listbox.select_set(selection - 1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
169 self.update_selection()
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 self.mark_start()
45b12307c695 Initial revision
drewp
parents:
diff changeset
171 def next(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
172 self.stop()
45b12307c695 Initial revision
drewp
parents:
diff changeset
173 selection = get_selection(self.listbox.listbox)
45b12307c695 Initial revision
drewp
parents:
diff changeset
174 if selection != self.listbox.listbox.size() - 1:
45b12307c695 Initial revision
drewp
parents:
diff changeset
175 self.listbox.listbox.select_clear(selection)
45b12307c695 Initial revision
drewp
parents:
diff changeset
176 self.listbox.listbox.select_set(selection + 1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
177 self.update_selection()
45b12307c695 Initial revision
drewp
parents:
diff changeset
178 self.mark_start()
45b12307c695 Initial revision
drewp
parents:
diff changeset
179 def running_loop(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
180 if self.cuestatus.get() == 'stopped':
45b12307c695 Initial revision
drewp
parents:
diff changeset
181 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
182 curtime = time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
183 elapsed = (curtime - self.time_start)
45b12307c695 Initial revision
drewp
parents:
diff changeset
184
45b12307c695 Initial revision
drewp
parents:
diff changeset
185 if elapsed > self.current.dur:
45b12307c695 Initial revision
drewp
parents:
diff changeset
186 self.cuestatus.set('stopped')
45b12307c695 Initial revision
drewp
parents:
diff changeset
187 self.cuepercent.set(100)
45b12307c695 Initial revision
drewp
parents:
diff changeset
188
45b12307c695 Initial revision
drewp
parents:
diff changeset
189 # advance cues if okay
45b12307c695 Initial revision
drewp
parents:
diff changeset
190 self.next()
45b12307c695 Initial revision
drewp
parents:
diff changeset
191 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
192
45b12307c695 Initial revision
drewp
parents:
diff changeset
193 self.cuepercent.set(100 * elapsed / self.current.dur)
45b12307c695 Initial revision
drewp
parents:
diff changeset
194 self.after(30, self.running_loop)