changeset 128:6dfe10a54fc4

new program to adjust indiv dmx channels and save the settings as new submasters
author drewp
date Sat, 14 Jun 2003 14:50:31 +0000
parents fae7751d9760
children f2eb20a52555
files flax/dmxchanedit.py flax/subcomposer
diffstat 2 files changed, 101 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/flax/dmxchanedit.py	Sat Jun 14 14:49:04 2003 +0000
+++ b/flax/dmxchanedit.py	Sat Jun 14 14:50:31 2003 +0000
@@ -10,7 +10,7 @@
 sys.path.append("../light8")
 import Patch
 from uihelpers import make_frame, colorlabel, eventtoparent
-from dispatch import dispatcher
+import dispatcher
 
 stdfont = ('Arial', 10)
 
@@ -34,7 +34,7 @@
 
         # text description of channel
         self.desc_lab=tk.Label(self, text=Patch.get_channel_name(channelnum),
-                               width=14, font=stdfont, anchor='w',
+                               width=8, font=stdfont, anchor='w',
                                padx=0, pady=0, bd=0, 
                  height=1, bg='black', fg='white')
         self.desc_lab.pack(side='left')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flax/subcomposer	Sat Jun 14 14:50:31 2003 +0000
@@ -0,0 +1,99 @@
+#!/usr/bin/python
+
+from __future__ import division, nested_scopes
+import Tkinter as tk
+from dmxchanedit import Levelbox
+import sys,os,time,atexit
+sys.path.append("../light8")
+import dmxclient
+import Patch
+import Submaster
+
+import dispatcher
+
+def persistentlevels():
+    """adjusts levels from subcomposer.savedlevels, if possible; and
+    arranges to save the levels in that file upon exit"""    
+    global levels
+    try:
+        levels[:]=map(float,file("subcomposer.savedlevels","r").read().split())
+    except IOError:
+        pass
+
+    atexit.register(lambda: file("subcomposer.savedlevels","w").
+                    write(" ".join(map(str,levels))))
+
+def levelchanged(channel,newlevel):
+    global lb, levels
+    if channel>len(levels):
+        return
+    levels[channel-1]=max(0,min(1,float(newlevel)))
+    lb.setlevels(levels)
+
+def savenewsub(levels,subname):
+    leveldict={}
+    for i,lev in zip(range(len(levels)),levels):
+        if lev!=0:
+            leveldict[Patch.get_channel_name(i+1)]=lev
+        
+    s=Submaster.Submaster(subname,leveldict)
+    s.save()
+def Savebox(master,levels):
+    f=tk.Frame(master,bd=2,relief='raised')
+    tk.Label(f,text="Save this as:").pack(side='left')
+    e=tk.Entry(f)
+    e.pack(side='left',exp=1,fill='x')
+    def cmd():
+        subname=e.get()
+        savenewsub(levels,subname)
+        print "saved new sub",subname
+    tk.Button(f,text="Save",command=cmd).pack(side='left')
+    return f
+    
+#############################
+
+levels=[0]*68 # levels should never get overwritten, just edited
+persistentlevels()
+    
+root=tk.Tk()
+root.config(bg='black')
+
+lb=Levelbox(root)
+lb.pack(side='top')
+
+savebox=Savebox(root,levels)
+savebox.pack(side='top')
+
+# the dmx levels we edit and output, range is 0..1 (dmx chan 1 is
+# the 0 element)
+lb.setlevels(levels)
+
+dispatcher.connect(levelchanged,"levelchanged")
+
+lastupdate=0 # time we last sent to dmx
+
+root.update() # get the windows drawn
+
+lastsent=[] # copy of levels
+
+def sendupdate():
+    global levels,lastupdate,lastsent
+    dmxclient.outputlevels(levels)
+    lastupdate=time.time()
+    lastsent=levels[:]
+
+dispatcher.connect(sendupdate,"levelchanged")
+
+while 1:
+
+    if 0:
+        for i in range(20): # don't let Tk take all the time
+            tk._tkinter.dooneevent()
+        print "loop"
+    else:
+        root.update()
+        
+    if lastsent!=levels or time.time()>lastupdate+1:
+        sendupdate()
+
+    time.sleep(.01)