Mercurial > code > home > repos > light9
annotate bin/subcomposer @ 802:5442f5d8979a
reformat
Ignore-this: 366fc5043cae2df6da62c8704cf81e57
author | drewp@bigasterisk.com |
---|---|
date | Mon, 16 Jul 2012 22:32:51 +0000 |
parents | b5efddd80dad |
children | ce4fffe8e413 |
rev | line source |
---|---|
729
b5efddd80dad
update more shbang lines
Drew Perttula <drewp@bigasterisk.com>
parents:
577
diff
changeset
|
1 #!bin/python |
0 | 2 |
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 | 6 import Tkinter as tk |
802 | 7 import louie as dispatcher |
0 | 8 |
209
1a84c5e83d3e
dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents:
201
diff
changeset
|
9 import run_local |
1a84c5e83d3e
dmxserver and subcomposer work in new layout
drewp@bigasterisk.com
parents:
201
diff
changeset
|
10 from light9.dmxchanedit import Levelbox |
577 | 11 from light9 import dmxclient, Patch, Submaster, showconfig |
455
9dd2baa41cca
subcomposer remembers window position
drewp@bigasterisk.com
parents:
450
diff
changeset
|
12 from light9.uihelpers import toplevelat |
0 | 13 |
14 class Subcomposer(tk.Frame): | |
450 | 15 def __init__(self, master, levelboxopts=None, dmxdummy=0, numchannels=72, |
149 | 16 use_persistentlevels=0): |
0 | 17 tk.Frame.__init__(self, master, bg='black') |
18 self.dmxdummy = dmxdummy | |
19 self.numchannels = numchannels | |
20 | |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
21 self.levels = [0]*numchannels # levels should never get overwritten, just edited |
0 | 22 |
334
42e4c4728a66
ascoltami, subcomposer, keyboardcomposer use rdf show data; raise channel count to 270
drewp@bigasterisk.com
parents:
228
diff
changeset
|
23 self.levelbox = Levelbox(self, num_channels=numchannels) |
0 | 24 self.levelbox.pack(side='top') |
25 # the dmx levels we edit and output, range is 0..1 (dmx chan 1 is | |
26 # the 0 element) | |
27 self.levelbox.setlevels(self.levels) | |
28 | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
29 self.savebox = EntryCommand(self, cmd=self.savenewsub) |
0 | 30 self.savebox.pack(side='top') |
31 | |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
32 self.loadbox = EntryCommand(self, verb="Load", cmd=self.loadsub) |
0 | 33 self.loadbox.pack(side='top') |
34 | |
35 def alltozero(): | |
36 self.set_levels([0] * self.numchannels) | |
37 dispatcher.send("levelchanged") | |
38 | |
149 | 39 tk.Button(self, text="all to zero", command=alltozero).pack(side='top') |
0 | 40 |
41 dispatcher.connect(self.levelchanged,"levelchanged") | |
42 dispatcher.connect(self.sendupdate,"levelchanged") | |
43 | |
149 | 44 if use_persistentlevels: |
45 self.persistentlevels() | |
0 | 46 |
47 self.lastupdate=0 # time we last sent to dmx | |
48 | |
49 self.lastsent=[] # copy of levels | |
50 | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
51 def fill_both_boxes(self, subname): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
52 for box in [self.savebox, self.loadbox]: |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
53 box.set(subname) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
54 |
0 | 55 def persistentlevels(self): |
56 """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
|
57 arranges to save the levels in that file upon exit""" |
0 | 58 self.load_levels() |
59 atexit.register(self.save_levels) | |
802 | 60 |
0 | 61 def save_levels(self, *args): |
62 levelfile = file("subcomposer.savedlevels","w") | |
63 levelfile.write(" ".join(map(str, self.levels))) | |
802 | 64 |
0 | 65 def load_levels(self): |
66 try: | |
67 levelfile = file("subcomposer.savedlevels","r") | |
68 levels = map(float, levelfile.read().split()) | |
69 self.set_levels(levels) | |
70 except IOError: | |
71 pass | |
802 | 72 |
0 | 73 def levelchanged(self, channel=None, newlevel=None): |
74 if channel is not None and newlevel is not None: | |
75 if channel>len(self.levels): | |
76 return | |
77 self.levels[channel-1]=max(0,min(1,float(newlevel))) | |
78 self.levelbox.setlevels(self.levels) | |
802 | 79 |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
80 def savenewsub(self, subname): |
0 | 81 leveldict={} |
82 for i,lev in zip(range(len(self.levels)),self.levels): | |
83 if lev!=0: | |
84 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
|
85 |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
86 s=Submaster.Submaster(subname,leveldict=leveldict) |
0 | 87 s.save() |
802 | 88 |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
89 def loadsub(self, subname): |
0 | 90 """puts a sub into the levels, replacing old level values""" |
577 | 91 s=Submaster.Submasters(showconfig.getGraph()).get_sub_by_name(subname) |
380
a13f2caf6f25
fix SC dragging after you load a sub
Drew Perttula <drewp@bigasterisk.com>
parents:
351
diff
changeset
|
92 self.set_levels(s.get_dmx_list()) |
0 | 93 dispatcher.send("levelchanged") |
802 | 94 |
0 | 95 def sendupdate(self): |
96 if not self.dmxdummy: | |
97 dmxclient.outputlevels(self.levels) | |
98 self.lastupdate = time.time() | |
99 self.lastsent = self.levels[:] | |
802 | 100 |
0 | 101 def considersendupdate(self, use_after_loop=0): |
102 """If use_after_loop is true, it is the period of the after loop.""" | |
103 if self.lastsent != self.levels or time.time() > self.lastupdate + 1: | |
104 self.sendupdate() | |
105 if use_after_loop: | |
106 self.after(use_after_loop, self.considersendupdate, use_after_loop) | |
802 | 107 |
0 | 108 def set_levels(self, levels): |
380
a13f2caf6f25
fix SC dragging after you load a sub
Drew Perttula <drewp@bigasterisk.com>
parents:
351
diff
changeset
|
109 oldLen = len(self.levels) |
a13f2caf6f25
fix SC dragging after you load a sub
Drew Perttula <drewp@bigasterisk.com>
parents:
351
diff
changeset
|
110 self.levels[:] = levels + [0] * (oldLen - len(levels)) |
0 | 111 dispatcher.send("levelchanged") |
112 | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
113 class EntryCommand(tk.Frame): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
114 def __init__(self, master, verb="Save", cmd=None): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
115 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
|
116 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
|
117 self.cmd = cmd |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
118 self.entry = tk.Entry(self) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
119 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
|
120 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
121 self.entry.bind("<Return>", self.action) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
122 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
|
123 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
124 def action(self, *args): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
125 subname = self.entry.get() |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
126 self.cmd(subname) |
351
a6662d61ebcd
SC, KC, CC now run and seem to load and save ok. CC does not have any rdf for its data files
Drew Perttula <drewp@bigasterisk.com>
parents:
342
diff
changeset
|
127 print "sub", self.cmd, subname |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
128 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
129 def set(self, text): |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
130 self.entry.delete(0, 'end') |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
131 self.entry.insert(0, text) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
132 |
149 | 133 |
134 def open_sub_editing_window(subname, use_mainloop=1, dmxdummy=0): | |
135 if use_mainloop: | |
136 toplevel = tk.Tk() | |
137 else: | |
138 toplevel = tk.Toplevel() | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
139 if dmxdummy: |
149 | 140 dummy_str = ' (dummy)' |
141 else: | |
142 dummy_str = '' | |
143 toplevel.title("Subcomposer: %s%s" % (subname, dummy_str)) | |
144 sc = Subcomposer(toplevel, use_persistentlevels=0, dmxdummy=dmxdummy) | |
145 sc.pack(fill='both', expand=1) | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
146 sc.loadsub(subname) |
149 | 147 sc.considersendupdate(use_after_loop=10) |
148 if use_mainloop: | |
149 tk.mainloop() | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
150 |
0 | 151 ############################# |
152 | |
153 if __name__ == "__main__": | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
154 parser = OptionParser(usage="%prog [subname]") |
458
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
155 parser.add_option('--no-geometry', action='store_true', |
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
156 help="don't save/restore window geometry") |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
157 opts, args = parser.parse_args() |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
158 |
0 | 159 root=tk.Tk() |
160 root.config(bg='black') | |
147 | 161 root.tk_setPalette("#004633") |
458
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
162 if not opts.no_geometry: |
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
163 toplevelat("subcomposer", root) |
0 | 164 |
401 | 165 sc = Subcomposer(root, dmxdummy=0, |
426
cd75a12ad66d
adjust dmx dimmer count back to PHS theater levels
drewp@bigasterisk.com
parents:
401
diff
changeset
|
166 #numchannels=276 # use this to see all the skyline dims |
401 | 167 #numchannels=118 |
168 ) | |
0 | 169 sc.pack() |
170 | |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
171 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
|
172 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
|
173 |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
174 if len(args) == 1: |
458
8b307310cc1b
when KC launches SC to edit a sub, don't place the window right on the main SC window
drewp@bigasterisk.com
parents:
455
diff
changeset
|
175 root.config(bg='green') # trying to make these look distinctive |
342
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
176 sc.loadsub(args[0]) |
2c782ca93e73
subcomposer takes sub name on cmdline
Drew Perttula <drewp@bigasterisk.com>
parents:
334
diff
changeset
|
177 sc.fill_both_boxes(args[0]) |
228
9827df597f86
added help texts to subcomposer, curvecalc
drewp@bigasterisk.com
parents:
209
diff
changeset
|
178 |
0 | 179 while 1: |
557
4e558643c952
subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents:
458
diff
changeset
|
180 try: |
4e558643c952
subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents:
458
diff
changeset
|
181 root.update() |
4e558643c952
subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents:
458
diff
changeset
|
182 except tk.TclError: |
4e558643c952
subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents:
458
diff
changeset
|
183 break |
4e558643c952
subcomposer: squelch the exception we got every time we exited
David McClosky <dmcc@bigasterisk.com>
parents:
458
diff
changeset
|
184 |
0 | 185 sc.considersendupdate() |
186 time.sleep(.01) |