annotate bin/subcomposer @ 342:2c782ca93e73

subcomposer takes sub name on cmdline
author Drew Perttula <drewp@bigasterisk.com>
date Mon, 19 Jun 2006 02:19:51 +0000
parents 42e4c4728a66
children a6662d61ebcd
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
209
1a84c5e83d3e dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents: 201
diff changeset
4 import sys,os,time,atexit
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
5 from optparse import OptionParser
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 import Tkinter as tk
334
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
7 try:
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
8 from dispatch import dispatcher
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
9 except ImportError:
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
10 import louie as dispatcher
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
11
209
1a84c5e83d3e dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents: 201
diff changeset
12 import run_local
1a84c5e83d3e dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents: 201
diff changeset
13 from light9.dmxchanedit import Levelbox
1a84c5e83d3e dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents: 201
diff changeset
14 from light9 import dmxclient, Patch, Submaster
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
15
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 class Subcomposer(tk.Frame):
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
17 def __init__(self, master, levelboxopts=None, dmxdummy=0, numchannels=68,
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
18 use_persistentlevels=0):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 tk.Frame.__init__(self, master, bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 self.dmxdummy = dmxdummy
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 self.numchannels = numchannels
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
334
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
23 self.levels = [0]*512 # levels should never get overwritten, just edited
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
24
334
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
25 self.levelbox = Levelbox(self, num_channels=numchannels)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 self.levelbox.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 # the dmx levels we edit and output, range is 0..1 (dmx chan 1 is
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 # the 0 element)
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.levelbox.setlevels(self.levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
30
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
31 self.savebox = EntryCommand(self, cmd=self.savenewsub)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.savebox.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
33
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
34 self.loadbox = EntryCommand(self, verb="Load",
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
35 cmd=lambda x: self.loadsub(self.levels, x))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.loadbox.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
37
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 def alltozero():
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 self.set_levels([0] * self.numchannels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 dispatcher.send("levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
41
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
42 tk.Button(self, text="all to zero", command=alltozero).pack(side='top')
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
43
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 dispatcher.connect(self.levelchanged,"levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 dispatcher.connect(self.sendupdate,"levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
46
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
47 if use_persistentlevels:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
48 self.persistentlevels()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
49
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.lastupdate=0 # time we last sent to dmx
45b12307c695 Initial revision
drewp
parents:
diff changeset
51
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 self.lastsent=[] # copy of levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
53
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
54 def fill_both_boxes(self, subname):
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
55 for box in [self.savebox, self.loadbox]:
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
56 box.set(subname)
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
57
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 def persistentlevels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 """adjusts levels from subcomposer.savedlevels, if possible; and
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
60 arranges to save the levels in that file upon exit"""
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 self.load_levels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 atexit.register(self.save_levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 def save_levels(self, *args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 levelfile = file("subcomposer.savedlevels","w")
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 levelfile.write(" ".join(map(str, self.levels)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 def load_levels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 levelfile = file("subcomposer.savedlevels","r")
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 levels = map(float, levelfile.read().split())
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 self.set_levels(levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 except IOError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 pass
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 def levelchanged(self, channel=None, newlevel=None):
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 if channel is not None and newlevel is not None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 if channel>len(self.levels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 self.levels[channel-1]=max(0,min(1,float(newlevel)))
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 self.levelbox.setlevels(self.levels)
173
e2c9919b3797 Subcomposer: fix load / save bugs (hopefuly)
dmcc
parents: 149
diff changeset
79 def savenewsub(self, levels, subname):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 leveldict={}
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 for i,lev in zip(range(len(self.levels)),self.levels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 if lev!=0:
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 leveldict[Patch.get_channel_name(i+1)]=lev
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
84
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 s=Submaster.Submaster(subname,leveldict)
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 s.save()
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
87 def loadsub(self, subname):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 """puts a sub into the levels, replacing old level values"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 s=Submaster.Submasters().get_sub_by_name(subname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 self.levels[:]=[0]*68
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 self.levels[:]=s.get_dmx_list()
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 dispatcher.send("levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 def sendupdate(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 if not self.dmxdummy:
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 dmxclient.outputlevels(self.levels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 self.lastupdate = time.time()
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 self.lastsent = self.levels[:]
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 def considersendupdate(self, use_after_loop=0):
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 """If use_after_loop is true, it is the period of the after loop."""
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 if self.lastsent != self.levels or time.time() > self.lastupdate + 1:
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 self.sendupdate()
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 if use_after_loop:
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 self.after(use_after_loop, self.considersendupdate, use_after_loop)
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 def set_levels(self, levels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 self.levels[:] = levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 dispatcher.send("levelchanged")
45b12307c695 Initial revision
drewp
parents:
diff changeset
107
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
108 class EntryCommand(tk.Frame):
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
109 def __init__(self, master, verb="Save", cmd=None):
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
110 tk.Frame.__init__(self, master, bd=2, relief='raised')
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
111 tk.Label(self, text="Sub name:").pack(side='left')
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
112 self.cmd = cmd
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
113 self.entry = tk.Entry(self)
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
114 self.entry.pack(side='left', expand=True, fill='x')
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
115
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
116 self.entry.bind("<Return>", self.action)
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
117 tk.Button(self, text=verb, command=self.action).pack(side='left')
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
118
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
119 def action(self, *args):
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
120 subname = self.entry.get()
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
121 self.cmd(subname)
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
122 print "sub", verb, subname
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
123
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
124 def set(self, text):
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
125 self.entry.delete(0, 'end')
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
126 self.entry.insert(0, text)
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
127
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
128
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
129 def open_sub_editing_window(subname, use_mainloop=1, dmxdummy=0):
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
130 if use_mainloop:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
131 toplevel = tk.Tk()
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
132 else:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
133 toplevel = tk.Toplevel()
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
134 if dmxdummy:
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
135 dummy_str = ' (dummy)'
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
136 else:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
137 dummy_str = ''
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
138 toplevel.title("Subcomposer: %s%s" % (subname, dummy_str))
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
139 sc = Subcomposer(toplevel, use_persistentlevels=0, dmxdummy=dmxdummy)
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
140 sc.pack(fill='both', expand=1)
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
141 sc.loadsub(subname)
149
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
142 sc.considersendupdate(use_after_loop=10)
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
143 if use_mainloop:
c31601504358 now with Subcomposer.open_sub_editing_window.
dmcc
parents: 147
diff changeset
144 tk.mainloop()
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
145
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
146 #############################
45b12307c695 Initial revision
drewp
parents:
diff changeset
147
45b12307c695 Initial revision
drewp
parents:
diff changeset
148 if __name__ == "__main__":
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
149 parser = OptionParser(usage="%prog [subname]")
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
150 opts, args = parser.parse_args()
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
151
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
152 root=tk.Tk()
45b12307c695 Initial revision
drewp
parents:
diff changeset
153 root.config(bg='black')
228
9827df597f86 added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents: 209
diff changeset
154 root.wm_title("subcomposer")
147
6a1f4becb1db merged some late color change edits from the theater
drewp
parents: 144
diff changeset
155 root.tk_setPalette("#004633")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
156
334
42e4c4728a66 ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents: 228
diff changeset
157 sc = Subcomposer(root, dmxdummy=0, numchannels=276)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
158 sc.pack()
45b12307c695 Initial revision
drewp
parents:
diff changeset
159
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
160 tk.Label(root,text="Bindings: B1 adjust level; B2 set full; B3 instant bump",
228
9827df597f86 added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents: 209
diff changeset
161 font="Helvetica -12 italic",anchor='w').pack(side='top',fill='x')
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
162
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
163 if len(args) == 1:
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
164 sc.loadsub(args[0])
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
165 sc.fill_both_boxes(args[0])
228
9827df597f86 added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents: 209
diff changeset
166
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
167 while 1:
342
2c782ca93e73 subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents: 334
diff changeset
168 root.update()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
169 sc.considersendupdate()
45b12307c695 Initial revision
drewp
parents:
diff changeset
170 time.sleep(.01)