annotate flax/Subcomposer.py @ 166:7ccf1d10804b

lots more notes
author drewp
date Tue, 08 Jul 2003 09:19:10 +0000
parents c31601504358
children e2c9919b3797
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 #!/usr/bin/python
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 from __future__ import division, nested_scopes
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 import Tkinter as tk
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 from dmxchanedit import Levelbox
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 import sys,os,time,atexit
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 sys.path.append("../light8")
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 import dmxclient
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 import Patch
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 import Submaster
45b12307c695 Initial revision
drewp
parents:
diff changeset
11
144
f433e95f2e42 subcomposer is now a module. You can still run it from the command
dmcc
parents: 0
diff changeset
12 import dispatcher
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
13
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 class Subcomposer(tk.Frame):
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
15 def __init__(self, master, levelboxopts=None, dmxdummy=0, numchannels=68,
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
16 use_persistentlevels=0):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 tk.Frame.__init__(self, master, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 self.dmxdummy = dmxdummy
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 self.numchannels = numchannels
45b12307c695 Initial revision
drewp
parents:
diff changeset
20
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.levels = [0]*68 # levels should never get overwritten, just edited
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 self.levelbox = Levelbox(self)
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 self.levelbox.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 # the dmx levels we edit and output, range is 0..1 (dmx chan 1 is
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 # the 0 element)
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 self.levelbox.setlevels(self.levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
28
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.savebox = Savebox(self, self.levels, cmd=self.savenewsub)
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.savebox.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
31
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.loadbox = Savebox(self, self.levels, verb="Load", cmd=self.loadsub)
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 self.loadbox.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
34
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 def alltozero():
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.set_levels([0] * self.numchannels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 dispatcher.send("levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
38
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
39 tk.Button(self, text="all to zero", command=alltozero).pack(side='top')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
40
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 dispatcher.connect(self.levelchanged,"levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 dispatcher.connect(self.sendupdate,"levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
43
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
44 if use_persistentlevels:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
45 self.persistentlevels()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
46
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 self.lastupdate=0 # time we last sent to dmx
45b12307c695 Initial revision
drewp
parents:
diff changeset
48
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.lastsent=[] # copy of levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
50
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 def persistentlevels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 """adjusts levels from subcomposer.savedlevels, if possible; and
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 arranges to save the levels in that file upon exit"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 self.load_levels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 atexit.register(self.save_levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 def save_levels(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 levelfile = file("subcomposer.savedlevels","w")
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 levelfile.write(" ".join(map(str, self.levels)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 def load_levels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 levelfile = file("subcomposer.savedlevels","r")
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 levels = map(float, levelfile.read().split())
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 self.set_levels(levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 except IOError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 def levelchanged(self, channel=None, newlevel=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 if channel is not None and newlevel is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 if channel>len(self.levels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 self.levels[channel-1]=max(0,min(1,float(newlevel)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 self.levelbox.setlevels(self.levels)
144
f433e95f2e42 subcomposer is now a module. You can still run it from the command
dmcc
parents: 0
diff changeset
72 def savenewsub(self, subname):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 leveldict={}
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 for i,lev in zip(range(len(self.levels)),self.levels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 if lev!=0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 leveldict[Patch.get_channel_name(i+1)]=lev
45b12307c695 Initial revision
drewp
parents:
diff changeset
77
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 s=Submaster.Submaster(subname,leveldict)
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 s.save()
144
f433e95f2e42 subcomposer is now a module. You can still run it from the command
dmcc
parents: 0
diff changeset
80 def loadsub(self, subname):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 """puts a sub into the levels, replacing old level values"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 s=Submaster.Submasters().get_sub_by_name(subname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 self.levels[:]=[0]*68
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 self.levels[:]=s.get_dmx_list()
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 dispatcher.send("levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 def sendupdate(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 if not self.dmxdummy:
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 dmxclient.outputlevels(self.levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 self.lastupdate = time.time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 self.lastsent = self.levels[:]
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 def considersendupdate(self, use_after_loop=0):
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 """If use_after_loop is true, it is the period of the after loop."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 if self.lastsent != self.levels or time.time() > self.lastupdate + 1:
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 self.sendupdate()
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 if use_after_loop:
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 self.after(use_after_loop, self.considersendupdate, use_after_loop)
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 def set_levels(self, levels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 self.levels[:] = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 dispatcher.send("levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
100
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 def Savebox(master, levels, verb="Save", cmd=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 f=tk.Frame(master,bd=2,relief='raised')
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
103 tk.Label(f,text="Sub name:").pack(side='left')
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
104 e=tk.Entry(f)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 e.pack(side='left',exp=1,fill='x')
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 def cb(*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 subname=e.get()
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 cmd(levels,subname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 print "sub",verb,subname
45b12307c695 Initial revision
drewp
parents:
diff changeset
110 e.bind("<Return>",cb)
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
111 tk.Button(f,text=verb,command=cb).pack(side='left')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 return f
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
113
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
114 def open_sub_editing_window(subname, use_mainloop=1, dmxdummy=0):
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
115 if use_mainloop:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
116 toplevel = tk.Tk()
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
117 else:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
118 toplevel = tk.Toplevel()
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
119 if dmxdummy:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
120 dummy_str = ' (dummy)'
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
121 else:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
122 dummy_str = ''
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
123 toplevel.title("Subcomposer: %s%s" % (subname, dummy_str))
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
124 sc = Subcomposer(toplevel, use_persistentlevels=0, dmxdummy=dmxdummy)
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
125 sc.pack(fill='both', expand=1)
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
126 sc.loadsub(subname)
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
127 sc.considersendupdate(use_after_loop=10)
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
128 if use_mainloop:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
129 tk.mainloop()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
130
45b12307c695 Initial revision
drewp
parents:
diff changeset
131 #############################
45b12307c695 Initial revision
drewp
parents:
diff changeset
132
45b12307c695 Initial revision
drewp
parents:
diff changeset
133 if __name__ == "__main__":
45b12307c695 Initial revision
drewp
parents:
diff changeset
134 root=tk.Tk()
45b12307c695 Initial revision
drewp
parents:
diff changeset
135 root.config(bg='black')
147
6a1f4becb1db merged some late color change edits from the theater
drewp
parents: 144
diff changeset
136 root.tk_setPalette("#004633")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
137
144
f433e95f2e42 subcomposer is now a module. You can still run it from the command
dmcc
parents: 0
diff changeset
138 sc = Subcomposer(root, dmxdummy=1)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
139 sc.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
140
45b12307c695 Initial revision
drewp
parents:
diff changeset
141 while 1:
45b12307c695 Initial revision
drewp
parents:
diff changeset
142 if 0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
143 for i in range(20): # don't let Tk take all the time
45b12307c695 Initial revision
drewp
parents:
diff changeset
144 tk._tkinter.dooneevent()
45b12307c695 Initial revision
drewp
parents:
diff changeset
145 print "loop"
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
147 root.update()
45b12307c695 Initial revision
drewp
parents:
diff changeset
148
45b12307c695 Initial revision
drewp
parents:
diff changeset
149 sc.considersendupdate()
45b12307c695 Initial revision
drewp
parents:
diff changeset
150 time.sleep(.01)