annotate flax/KeyboardComposer.py @ 119:6f9898f00c9c

now uses dmxclient to talk to dmxserver
author drewp
date Fri, 13 Jun 2003 13:59:32 +0000
parents 0c619695d6c6
children 2ed9bfd1dd0e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from __future__ import nested_scopes
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
2 import sys
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 sys.path.append('..')
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 from Widgets.Fadable import Fadable
45b12307c695 Initial revision
drewp
parents:
diff changeset
5
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 from Tix import *
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
7 import math
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
8 from Timeline import LevelFrame
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
9
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
10 Submaster = LevelFrame
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
11
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 nudge_keys = {
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 'up' : list('qwertyuiop'),
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 'down' : list('asdfghjkl')
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 }
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 nudge_keys['down'].append('semicolon')
45b12307c695 Initial revision
drewp
parents:
diff changeset
17
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 class SubScale(Scale, Fadable):
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 def __init__(self, master, *args, **kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 self.scale_var = kw.get('variable') or DoubleVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 kw.update({'variable' : self.scale_var,
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
22 'from' : 100, 'to' : 0, 'showvalue' : 0,
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
23 'sliderlength' : 10})
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 Scale.__init__(self, master, *args, **kw)
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
25 Fadable.__init__(self, var=self.scale_var)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
26
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 class SubmasterTk(Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 def __init__(self, master, name, current_level):
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
29 Frame.__init__(self, master)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.slider_var = DoubleVar()
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 self.slider_var.set(current_level)
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.scale = SubScale(self, variable=self.slider_var, width=20)
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
33 textlabel = Label(self, text=name)
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
34 textlabel.pack(side=TOP)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 self.scale.pack(side=BOTTOM, expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
36
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 class KeyboardComposer(Frame):
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
38 def __init__(self, root, submasters, current_sub_levels=None):
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
39 Frame.__init__(self, root)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 self.submasters = submasters
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
41 self.current_sub_levels = current_sub_levels or {}
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
42
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 self.rows = [] # this holds Tk Frames for each row
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 self.slider_vars = {} # this holds subname:sub Tk vars
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 self.slider_table = {} # this holds coords:sub Tk vars
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 self.current_row = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 self.make_key_hints()
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.draw_sliders()
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.highlight_row(self.current_row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 self.rows[self.current_row].focus()
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 def make_key_hints(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 keyhintrow = Frame(self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
54
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 col = 0
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 for upkey, downkey in zip(nudge_keys['up'],
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 nudge_keys['down']):
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 # what a hack!
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 downkey = downkey.replace('semicolon', ';')
45b12307c695 Initial revision
drewp
parents:
diff changeset
60
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 # another what a hack!
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 keylabel = Label(keyhintrow, text='%s\n%s' % (upkey, downkey),
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
63 width=3, font=('Arial Bold', 12), bg='red', fg='white')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 keylabel.pack(side=LEFT, expand=1, fill=X)
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 col += 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
66
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 keyhintrow.pack(fill=X, expand=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 self.keyhints = keyhintrow
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 def setup_key_nudgers(self, tkobject):
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 for d, keys in nudge_keys.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 for key in keys:
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 # lowercase makes full=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 keysym = "<KeyPress-%s>" % key
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 tkobject.bind(keysym, \
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 lambda evt, num=keys.index(key), d=d: \
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 self.got_nudger(num, d))
45b12307c695 Initial revision
drewp
parents:
diff changeset
77
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 # uppercase makes full=1
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 keysym = "<KeyPress-%s>" % key.upper()
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 keysym = keysym.replace('SEMICOLON', 'colon')
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 tkobject.bind(keysym, \
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 lambda evt, num=keys.index(key), d=d: \
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 self.got_nudger(num, d, full=1))
45b12307c695 Initial revision
drewp
parents:
diff changeset
84
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 # page up and page down change the row
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 for key in '<Prior> <Next> <Control-n> <Control-p>'.split():
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 tkobject.bind(key, self.change_row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
88
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 def change_row(self, event):
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 diff = 1
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
91 if event.keysym in ('Prior', '<Control-p>'):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 diff = -1
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 old_row = self.current_row
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 self.current_row += diff
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 self.current_row = max(0, self.current_row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 self.current_row = min(len(self.rows) - 1, self.current_row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 self.unhighlight_row(old_row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 self.highlight_row(self.current_row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 row = self.rows[self.current_row]
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 self.keyhints.pack_configure(before=row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 def got_nudger(self, number, direction, full=0):
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
102 print "got_nudger", number, direction, full
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 subtk = self.slider_table[(self.current_row, number)]
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 if direction == 'up':
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 if full:
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
106 subtk.scale.fade(100)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 subtk.scale.increase()
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 if full:
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 subtk.scale.fade(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 subtk.scale.decrease()
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 def draw_sliders(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 self.tk_focusFollowsMouse()
45b12307c695 Initial revision
drewp
parents:
diff changeset
116
45b12307c695 Initial revision
drewp
parents:
diff changeset
117 rowcount = -1
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 col = 0
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
119 for sub in self.submasters:
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
120 if col == 0: # make new row
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 row = self.make_row()
45b12307c695 Initial revision
drewp
parents:
diff changeset
122 rowcount += 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
123 current_level = self.current_sub_levels.get(sub.name, 0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 subtk = self.draw_sub_slider(row, col, sub.name, current_level)
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 self.slider_table[(rowcount, col)] = subtk
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 col += 1
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 col %= 10
45b12307c695 Initial revision
drewp
parents:
diff changeset
128 def make_row(self):
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
129 row = Frame(self, bd=2)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
130 row.pack(expand=1, fill=BOTH)
45b12307c695 Initial revision
drewp
parents:
diff changeset
131 self.setup_key_nudgers(row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
132 self.rows.append(row)
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 return row
45b12307c695 Initial revision
drewp
parents:
diff changeset
134 def draw_sub_slider(self, row, col, name, current_level):
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 subtk = SubmasterTk(row, name, current_level)
45b12307c695 Initial revision
drewp
parents:
diff changeset
136 subtk.place(relx=col * 0.1, rely=0, relwidth=0.1, relheight=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
137 self.setup_key_nudgers(subtk.scale)
45b12307c695 Initial revision
drewp
parents:
diff changeset
138
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 self.slider_vars[name] = subtk.slider_var
45b12307c695 Initial revision
drewp
parents:
diff changeset
140 return subtk
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 def highlight_row(self, row):
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 row = self.rows[row]
45b12307c695 Initial revision
drewp
parents:
diff changeset
143 row['bg'] = 'red'
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 def unhighlight_row(self, row):
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 row = self.rows[row]
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
146 row['bg'] = '#d9d9d9'
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 def get_levels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 return dict([(name, slidervar.get())
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 for name, slidervar in self.slider_vars.items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
150
45b12307c695 Initial revision
drewp
parents:
diff changeset
151 if __name__ == "__main__":
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
152 reds = Submaster('reds', {'red1' : 20, 'red2' : 30, 'red3' : 80})
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
153 blues = Submaster('blues', {'blue1' : 60, 'blue2' : 80, 'blue3' : 20})
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
154
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
155 subs = []
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
156 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():
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
157 subs.append(Submaster(scenename, {'dummy' : 20}))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
158
45b12307c695 Initial revision
drewp
parents:
diff changeset
159 root = Tk()
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
160 root.wm_geometry('400x400')
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
161 kc = KeyboardComposer(root, subs)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
162 kc.pack(fill=BOTH, expand=1)
111
0c619695d6c6 all in a days work
dmcc
parents: 0
diff changeset
163 mainloop()