Mercurial > code > home > repos > light9
comparison flax/KeyboardComposer.py @ 146:4041eefed719
many changes from the theater. mostly color effects
author | drewp |
---|---|
date | Sun, 06 Jul 2003 13:42:35 +0000 |
parents | 83e2c4ceb79a |
children | d6252880a6fc |
comparison
equal
deleted
inserted
replaced
145:a5515960d476 | 146:4041eefed719 |
---|---|
18 class SubScale(Scale, Fadable): | 18 class SubScale(Scale, Fadable): |
19 def __init__(self, master, *args, **kw): | 19 def __init__(self, master, *args, **kw): |
20 self.scale_var = kw.get('variable') or DoubleVar() | 20 self.scale_var = kw.get('variable') or DoubleVar() |
21 kw.update({'variable' : self.scale_var, | 21 kw.update({'variable' : self.scale_var, |
22 'from' : 1, 'to' : 0, 'showvalue' : 0, | 22 'from' : 1, 'to' : 0, 'showvalue' : 0, |
23 'sliderlength' : 30, 'res' : 0.01, | 23 'sliderlength' : 15, 'res' : 0.01, |
24 'width' : 50}) | 24 'width' : 40, 'troughcolor' : 'black', 'bg' : 'grey40', |
25 'highlightthickness' : 1, 'bd' : 1, | |
26 'highlightcolor' : 'red', 'highlightbackground' : 'black', | |
27 'activebackground' : 'red'}) | |
25 Scale.__init__(self, master, *args, **kw) | 28 Scale.__init__(self, master, *args, **kw) |
26 Fadable.__init__(self, var=self.scale_var, wheel_step=0.05) | 29 Fadable.__init__(self, var=self.scale_var, wheel_step=0.05) |
30 self.draw_indicator_colors() | |
31 def draw_indicator_colors(self): | |
32 if self.scale_var.get() == 0: | |
33 self['troughcolor'] = 'black' | |
34 else: | |
35 self['troughcolor'] = 'blue' | |
27 | 36 |
28 class SubmasterTk(Frame): | 37 class SubmasterTk(Frame): |
29 def __init__(self, master, name, current_level): | 38 def __init__(self, master, name, current_level): |
30 Frame.__init__(self, master, bd=1, relief='raised') | 39 Frame.__init__(self, master, bd=1, relief='raised', bg='black') |
31 self.slider_var = DoubleVar() | 40 self.slider_var = DoubleVar() |
32 self.slider_var.set(current_level) | 41 self.slider_var.set(current_level) |
33 self.scale = SubScale(self, variable=self.slider_var, width=20) | 42 self.scale = SubScale(self, variable=self.slider_var, width=20) |
34 textlabel = Label(self, text=name) | 43 namelabel = Label(self, text=name, font="Arial 8", bg='black', |
35 textlabel.pack(side=TOP) | 44 fg='white') |
45 namelabel.pack(side=TOP) | |
46 levellabel = Label(self, textvariable=self.slider_var, font="Arial 8", | |
47 bg='black', fg='white') | |
48 levellabel.pack(side=TOP) | |
36 self.scale.pack(side=BOTTOM, expand=1, fill=BOTH) | 49 self.scale.pack(side=BOTTOM, expand=1, fill=BOTH) |
37 | 50 |
38 class KeyboardComposer(Frame): | 51 class KeyboardComposer(Frame): |
39 def __init__(self, root, submasters, current_sub_levels=None): | 52 def __init__(self, root, submasters, current_sub_levels=None): |
40 Frame.__init__(self, root) | 53 Frame.__init__(self, root, bg='black') |
41 self.submasters = submasters | 54 self.submasters = submasters |
42 self.current_sub_levels = {} | 55 self.current_sub_levels = {} |
43 if current_sub_levels: | 56 if current_sub_levels: |
44 self.current_sub_levels = current_sub_levels | 57 self.current_sub_levels = current_sub_levels |
45 else: | 58 else: |
60 self.make_key_hints() | 73 self.make_key_hints() |
61 self.draw_sliders() | 74 self.draw_sliders() |
62 self.highlight_row(self.current_row) | 75 self.highlight_row(self.current_row) |
63 self.rows[self.current_row].focus() | 76 self.rows[self.current_row].focus() |
64 | 77 |
65 self.refreshbutton = Button(self, text="Refresh", command=self.refresh) | 78 self.buttonframe = Frame(self, bg='black') |
66 self.refreshbutton.pack(side=BOTTOM) | 79 self.buttonframe.pack(side=BOTTOM) |
80 self.refreshbutton = Button(self.buttonframe, text="Refresh", | |
81 command=self.refresh, bg='black', fg='white') | |
82 self.refreshbutton.pack(side=LEFT) | |
83 self.save_stage_button = Button(self.buttonframe, text="Save", | |
84 command=lambda: self.save_current_stage(self.sub_name.get()), | |
85 bg='black', fg='white') | |
86 self.save_stage_button.pack(side=LEFT) | |
87 self.sub_name = Entry(self.buttonframe, bg='black', fg='white') | |
88 self.sub_name.pack(side=LEFT) | |
67 self.stop_frequent_update_time = 0 | 89 self.stop_frequent_update_time = 0 |
68 def make_key_hints(self): | 90 def make_key_hints(self): |
69 keyhintrow = Frame(self) | 91 keyhintrow = Frame(self) |
70 | 92 |
71 col = 0 | 93 col = 0 |
75 downkey = downkey.replace('semicolon', ';') | 97 downkey = downkey.replace('semicolon', ';') |
76 upkey, downkey = (upkey.upper(), downkey.upper()) | 98 upkey, downkey = (upkey.upper(), downkey.upper()) |
77 | 99 |
78 # another what a hack! | 100 # another what a hack! |
79 keylabel = Label(keyhintrow, text='%s\n%s' % (upkey, downkey), | 101 keylabel = Label(keyhintrow, text='%s\n%s' % (upkey, downkey), |
80 width=8, font=('Arial', 12), bg='red', fg='white', anchor='c') | 102 width=1, font=('Arial', 10), bg='red', fg='white', anchor='c') |
81 keylabel.pack(side=LEFT, expand=1, fill=X) | 103 keylabel.pack(side=LEFT, expand=1, fill=X) |
82 col += 1 | 104 col += 1 |
83 | 105 |
84 keyhintrow.pack(fill=X, expand=0) | 106 keyhintrow.pack(fill=X, expand=0) |
85 self.keyhints = keyhintrow | 107 self.keyhints = keyhintrow |
103 for key in '<Prior> <Next> <Control-n> <Control-p>'.split(): | 125 for key in '<Prior> <Next> <Control-n> <Control-p>'.split(): |
104 tkobject.bind(key, self.change_row) | 126 tkobject.bind(key, self.change_row) |
105 | 127 |
106 def change_row(self, event): | 128 def change_row(self, event): |
107 diff = 1 | 129 diff = 1 |
108 if event.keysym in ('Prior', '<Control-p>'): | 130 if event.keysym in ('Prior', 'p'): |
109 diff = -1 | 131 diff = -1 |
110 old_row = self.current_row | 132 old_row = self.current_row |
111 self.current_row += diff | 133 self.current_row += diff |
112 self.current_row = max(0, self.current_row) | 134 self.current_row = max(0, self.current_row) |
113 self.current_row = min(len(self.rows) - 1, self.current_row) | 135 self.current_row = min(len(self.rows) - 1, self.current_row) |
125 else: | 147 else: |
126 if full: | 148 if full: |
127 subtk.scale.fade(0) | 149 subtk.scale.fade(0) |
128 else: | 150 else: |
129 subtk.scale.decrease() | 151 subtk.scale.decrease() |
130 # self.maybe_update() | |
131 def maybe_update(self, dur=1.05): | |
132 now = time.time() | |
133 if now > self.stop_frequent_update_time: | |
134 self.stop_frequent_update_time = now + dur | |
135 self.send_frequent_updates() | |
136 else: | |
137 self.stop_frequent_update_time = now + dur | |
138 def draw_sliders(self): | 152 def draw_sliders(self): |
139 self.tk_focusFollowsMouse() | 153 self.tk_focusFollowsMouse() |
140 | 154 |
141 rowcount = -1 | 155 rowcount = -1 |
142 col = 0 | 156 col = 0 |
148 subtk = self.draw_sub_slider(row, col, sub.name, current_level) | 162 subtk = self.draw_sub_slider(row, col, sub.name, current_level) |
149 self.slider_table[(rowcount, col)] = subtk | 163 self.slider_table[(rowcount, col)] = subtk |
150 col += 1 | 164 col += 1 |
151 col %= 10 | 165 col %= 10 |
152 | 166 |
153 subtk.slider_var.trace('w', lambda x, y, z: self.send_levels()) | 167 def slider_changed(x, y, z, subtk=subtk): |
168 subtk.scale.draw_indicator_colors() | |
169 self.send_levels() | |
170 | |
171 subtk.slider_var.trace('w', slider_changed) | |
154 def make_row(self): | 172 def make_row(self): |
155 row = Frame(self, bd=2) | 173 row = Frame(self, bd=2, bg='black') |
156 row.pack(expand=1, fill=BOTH) | 174 row.pack(expand=1, fill=BOTH) |
157 self.setup_key_nudgers(row) | 175 self.setup_key_nudgers(row) |
158 self.rows.append(row) | 176 self.rows.append(row) |
159 return row | 177 return row |
160 def draw_sub_slider(self, row, col, name, current_level): | 178 def draw_sub_slider(self, row, col, name, current_level): |
167 def highlight_row(self, row): | 185 def highlight_row(self, row): |
168 row = self.rows[row] | 186 row = self.rows[row] |
169 row['bg'] = 'red' | 187 row['bg'] = 'red' |
170 def unhighlight_row(self, row): | 188 def unhighlight_row(self, row): |
171 row = self.rows[row] | 189 row = self.rows[row] |
172 row['bg'] = '#d9d9d9' | 190 row['bg'] = 'black' |
173 def get_levels(self): | 191 def get_levels(self): |
174 return dict([(name, slidervar.get()) | 192 return dict([(name, slidervar.get()) |
175 for name, slidervar in self.slider_vars.items()]) | 193 for name, slidervar in self.slider_vars.items()]) |
176 def get_dmx_list(self): | 194 def get_levels_as_sub(self): |
177 scaledsubs = [self.submasters.get_sub_by_name(sub) * level \ | 195 scaledsubs = [self.submasters.get_sub_by_name(sub) * level \ |
178 for sub, level in self.get_levels().items()] | 196 for sub, level in self.get_levels().items()] |
179 | 197 |
180 maxes = sub_maxes(*scaledsubs) | 198 maxes = sub_maxes(*scaledsubs) |
181 return maxes.get_dmx_list() | 199 return maxes |
200 def save_current_stage(self, subname): | |
201 print "saving current levels as", subname | |
202 sub = self.get_levels_as_sub() | |
203 sub.name = subname | |
204 sub.save() | |
205 | |
182 def save(self): | 206 def save(self): |
183 pickle.dump(self.get_levels(), | 207 pickle.dump(self.get_levels(), |
184 file('.keyboardcomposer.savedlevels', 'w')) | 208 file('.keyboardcomposer.savedlevels', 'w')) |
185 def send_frequent_updates(self): | 209 def send_frequent_updates(self): |
186 """called when we get a fade -- send events as quickly as possible""" | 210 """called when we get a fade -- send events as quickly as possible""" |
187 if time.time() <= self.stop_frequent_update_time: | 211 if time.time() <= self.stop_frequent_update_time: |
188 self.send_levels() | 212 self.send_levels() |
189 self.after(10, self.send_frequent_updates) | 213 self.after(10, self.send_frequent_updates) |
214 | |
215 def get_dmx_list(self): | |
216 maxes = self.get_levels_as_sub() | |
217 return maxes.get_dmx_list() | |
190 def send_levels(self): | 218 def send_levels(self): |
191 levels = self.get_dmx_list() | 219 levels = self.get_dmx_list() |
192 dmxclient.outputlevels(levels) | 220 dmxclient.outputlevels(levels) |
193 # print "sending levels", levels | 221 # print "sending levels", levels |
194 def send_levels_loop(self): | 222 def send_levels_loop(self): |
200 self.current_sub_levels = \ | 228 self.current_sub_levels = \ |
201 pickle.load(file('.keyboardcomposer.savedlevels')) | 229 pickle.load(file('.keyboardcomposer.savedlevels')) |
202 for r in self.rows: | 230 for r in self.rows: |
203 r.destroy() | 231 r.destroy() |
204 self.keyhints.destroy() | 232 self.keyhints.destroy() |
205 self.refreshbutton.destroy() | 233 self.buttonframe.destroy() |
206 self.draw_ui() | 234 self.draw_ui() |
207 | 235 |
208 if __name__ == "__main__": | 236 if __name__ == "__main__": |
209 s = Submasters() | 237 s = Submasters() |
210 | 238 |