Mercurial > code > home > repos > light9
diff flax/KeyboardComposer.py @ 136:7e91c49fb2d6
whoops, forgot this one
author | dmcc |
---|---|
date | Sat, 14 Jun 2003 15:02:38 +0000 |
parents | 2ed9bfd1dd0e |
children | 304152488ed7 |
line wrap: on
line diff
--- a/flax/KeyboardComposer.py Sat Jun 14 15:00:47 2003 +0000 +++ b/flax/KeyboardComposer.py Sat Jun 14 15:02:38 2003 +0000 @@ -1,13 +1,13 @@ from __future__ import nested_scopes -import sys +import sys, time sys.path.append('..') from Widgets.Fadable import Fadable from Tix import * -import math -from Timeline import LevelFrame - -Submaster = LevelFrame +import math, atexit, pickle +from Submaster import Submasters, sub_maxes +import dmxclient +from uihelpers import toplevelat nudge_keys = { 'up' : list('qwertyuiop'), @@ -19,14 +19,15 @@ def __init__(self, master, *args, **kw): self.scale_var = kw.get('variable') or DoubleVar() kw.update({'variable' : self.scale_var, - 'from' : 100, 'to' : 0, 'showvalue' : 0, - 'sliderlength' : 10}) + 'from' : 1, 'to' : 0, 'showvalue' : 0, + 'sliderlength' : 30, 'res' : 0.01, + 'width' : 50}) Scale.__init__(self, master, *args, **kw) - Fadable.__init__(self, var=self.scale_var) + Fadable.__init__(self, var=self.scale_var, wheel_step=0.05) class SubmasterTk(Frame): def __init__(self, master, name, current_level): - Frame.__init__(self, master) + Frame.__init__(self, master, bd=1, relief='raised') self.slider_var = DoubleVar() self.slider_var.set(current_level) self.scale = SubScale(self, variable=self.slider_var, width=20) @@ -38,8 +39,19 @@ def __init__(self, root, submasters, current_sub_levels=None): Frame.__init__(self, root) self.submasters = submasters - self.current_sub_levels = current_sub_levels or {} + self.current_sub_levels = {} + if current_sub_levels: + self.current_sub_levels = current_sub_levels + else: + try: + self.current_sub_levels = \ + pickle.load(file('.keyboardcomposer.savedlevels')) + except IOError: + pass + self.draw_ui() + self.send_levels_loop() + def draw_ui(self): self.rows = [] # this holds Tk Frames for each row self.slider_vars = {} # this holds subname:sub Tk vars self.slider_table = {} # this holds coords:sub Tk vars @@ -49,6 +61,10 @@ self.draw_sliders() self.highlight_row(self.current_row) self.rows[self.current_row].focus() + + self.refreshbutton = Button(self, text="Refresh", command=self.refresh) + self.refreshbutton.pack(side=BOTTOM) + self.stop_frequent_update_time = 0 def make_key_hints(self): keyhintrow = Frame(self) @@ -57,10 +73,11 @@ nudge_keys['down']): # what a hack! downkey = downkey.replace('semicolon', ';') + upkey, downkey = (upkey.upper(), downkey.upper()) # another what a hack! keylabel = Label(keyhintrow, text='%s\n%s' % (upkey, downkey), - width=3, font=('Arial', 12), bg='red', fg='white') + width=8, font=('Arial', 12), bg='red', fg='white', anchor='c') keylabel.pack(side=LEFT, expand=1, fill=X) col += 1 @@ -99,11 +116,10 @@ row = self.rows[self.current_row] self.keyhints.pack_configure(before=row) def got_nudger(self, number, direction, full=0): - print "got_nudger", number, direction, full subtk = self.slider_table[(self.current_row, number)] if direction == 'up': if full: - subtk.scale.fade(100) + subtk.scale.fade(1) else: subtk.scale.increase() else: @@ -111,12 +127,20 @@ subtk.scale.fade(0) else: subtk.scale.decrease() + # self.maybe_update() + def maybe_update(self, dur=1.05): + now = time.time() + if now > self.stop_frequent_update_time: + self.stop_frequent_update_time = now + dur + self.send_frequent_updates() + else: + self.stop_frequent_update_time = now + dur def draw_sliders(self): self.tk_focusFollowsMouse() rowcount = -1 col = 0 - for sub in self.submasters: + for sub in self.submasters.get_all_subs(): if col == 0: # make new row row = self.make_row() rowcount += 1 @@ -125,6 +149,8 @@ self.slider_table[(rowcount, col)] = subtk col += 1 col %= 10 + + subtk.slider_var.trace('w', lambda x, y, z: self.send_levels()) def make_row(self): row = Frame(self, bd=2) row.pack(expand=1, fill=BOTH) @@ -147,17 +173,48 @@ def get_levels(self): return dict([(name, slidervar.get()) for name, slidervar in self.slider_vars.items()]) + def get_dmx_list(self): + scaledsubs = [self.submasters.get_sub_by_name(sub) * level \ + for sub, level in self.get_levels().items()] + + maxes = sub_maxes(*scaledsubs) + return maxes.get_dmx_list() + def save(self): + pickle.dump(self.get_levels(), + file('.keyboardcomposer.savedlevels', 'w')) + def send_frequent_updates(self): + """called when we get a fade -- send events as quickly as possible""" + if time.time() <= self.stop_frequent_update_time: + self.send_levels() + self.after(10, self.send_frequent_updates) + def send_levels(self): + print self.submasters.get_sub_by_name('frontwhite') + levels = self.get_dmx_list() + dmxclient.outputlevels(levels) + def send_levels_loop(self): + self.send_levels() + self.after(1000, self.send_levels_loop) + def refresh(self): + self.save() + self.submasters = Submasters() + self.current_sub_levels = \ + pickle.load(file('.keyboardcomposer.savedlevels')) + for r in self.rows: + r.destroy() + self.keyhints.destroy() + self.refreshbutton.destroy() + self.draw_ui() if __name__ == "__main__": - reds = Submaster('reds', {'red1' : 20, 'red2' : 30, 'red3' : 80}) - blues = Submaster('blues', {'blue1' : 60, 'blue2' : 80, 'blue3' : 20}) - - subs = [] - for scenename in 'warmers house god spot explosion booth stageleft stageright donkey elvis sun fiddler satan lola bed treehouse motel6 deadmics suck burninggels firelights sodacan lighting homestar strongbad coachz pompom marzipan bubs thecheat'.split(): - subs.append(Submaster(scenename, {'dummy' : 20})) + s = Submasters() root = Tk() - root.wm_geometry('400x400') - kc = KeyboardComposer(root, subs) + tl = toplevelat("Keyboard Composer", existingtoplevel=root) + kc = KeyboardComposer(tl, s) kc.pack(fill=BOTH, expand=1) - mainloop() + atexit.register(kc.save) + try: + mainloop() + except KeyboardInterrupt: + tl.destroy() + sys.exit()