annotate light8/Fader.py @ 271:97c08a1c4351

gyrocontroller: remap buttons, fix keep mode Also, solo mode is now default, colors are brighter, numeric names for subs are converted to subs with only that channel up, send zeroes when exiting
author David McClosky <dmcc@bigasterisk.com>
date Fri, 17 Jun 2005 04:23:07 +0000
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)