Changeset - 2c782ca93e73
[Not reviewed]
default
0 1 0
Drew Perttula - 19 years ago 2006-06-19 02:19:51
drewp@bigasterisk.com
subcomposer takes sub name on cmdline
1 file changed with 36 insertions and 22 deletions:
0 comments (0 inline, 0 general)
bin/subcomposer
Show inline comments
 
#!/usr/bin/python
 

	
 
from __future__ import division, nested_scopes
 
import sys,os,time,atexit
 
from optparse import OptionParser
 
import Tkinter as tk
 
try:
 
    from dispatch import dispatcher
 
except ImportError:
 
    import louie as dispatcher
 

	
 
@@ -24,16 +25,17 @@ class Subcomposer(tk.Frame):
 
        self.levelbox = Levelbox(self, num_channels=numchannels)
 
        self.levelbox.pack(side='top')
 
        # the dmx levels we edit and output, range is 0..1 (dmx chan 1 is
 
        # the 0 element)
 
        self.levelbox.setlevels(self.levels)
 

	
 
        self.savebox = Savebox(self, self.levels, cmd=self.savenewsub)
 
        self.savebox = EntryCommand(self, cmd=self.savenewsub)
 
        self.savebox.pack(side='top')
 

	
 
        self.loadbox = Savebox(self, self.levels, verb="Load", cmd=self.loadsub)
 
        self.loadbox = EntryCommand(self, verb="Load",
 
                               cmd=lambda x: self.loadsub(self.levels, x))
 
        self.loadbox.pack(side='top')
 

	
 
        def alltozero():
 
            self.set_levels([0] * self.numchannels)
 
            dispatcher.send("levelchanged")
 

	
 
@@ -46,12 +48,16 @@ class Subcomposer(tk.Frame):
 
            self.persistentlevels()
 

	
 
        self.lastupdate=0 # time we last sent to dmx
 

	
 
        self.lastsent=[] # copy of levels
 

	
 
    def fill_both_boxes(self, subname):
 
        for box in [self.savebox, self.loadbox]:
 
            box.set(subname)
 

	
 
    def persistentlevels(self):
 
        """adjusts levels from subcomposer.savedlevels, if possible; and
 
        arranges to save the levels in that file upon exit"""    
 
        self.load_levels()
 
        atexit.register(self.save_levels)
 
    def save_levels(self, *args):
 
@@ -75,13 +81,13 @@ class Subcomposer(tk.Frame):
 
        for i,lev in zip(range(len(self.levels)),self.levels):
 
            if lev!=0:
 
                leveldict[Patch.get_channel_name(i+1)]=lev
 
        
 
        s=Submaster.Submaster(subname,leveldict)
 
        s.save()
 
    def loadsub(self, levels, subname):
 
    def loadsub(self, subname):
 
        """puts a sub into the levels, replacing old level values"""
 
        s=Submaster.Submasters().get_sub_by_name(subname)
 
        self.levels[:]=[0]*68
 
        self.levels[:]=s.get_dmx_list()
 
        dispatcher.send("levelchanged")
 
    def sendupdate(self):
 
@@ -96,24 +102,32 @@ class Subcomposer(tk.Frame):
 
        if use_after_loop:
 
            self.after(use_after_loop, self.considersendupdate, use_after_loop)
 
    def set_levels(self, levels):
 
        self.levels[:] = levels
 
        dispatcher.send("levelchanged")
 

	
 
def Savebox(master, levels, verb="Save", cmd=None):
 
    f=tk.Frame(master,bd=2,relief='raised')
 
    tk.Label(f,text="Sub name:").pack(side='left')
 
    e=tk.Entry(f)
 
    e.pack(side='left',exp=1,fill='x')
 
    def cb(*args):
 
        subname=e.get()
 
        cmd(levels,subname)
 
class EntryCommand(tk.Frame):
 
    def __init__(self, master, verb="Save", cmd=None):
 
        tk.Frame.__init__(self, master, bd=2, relief='raised')
 
        tk.Label(self, text="Sub name:").pack(side='left')
 
        self.cmd = cmd
 
        self.entry = tk.Entry(self)
 
        self.entry.pack(side='left', expand=True, fill='x')
 
        
 
        self.entry.bind("<Return>", self.action)
 
        tk.Button(self, text=verb, command=self.action).pack(side='left')
 

	
 
    def action(self, *args):
 
        subname = self.entry.get()
 
        self.cmd(subname)
 
        print "sub",verb,subname
 
    e.bind("<Return>",cb)
 
    tk.Button(f,text=verb,command=cb).pack(side='left')
 
    return f
 

	
 
    def set(self, text):
 
        self.entry.delete(0, 'end')
 
        self.entry.insert(0, text)
 

	
 

	
 
def open_sub_editing_window(subname, use_mainloop=1, dmxdummy=0):
 
    if use_mainloop:
 
        toplevel = tk.Tk()
 
    else:
 
        toplevel = tk.Toplevel()
 
@@ -121,36 +135,36 @@ def open_sub_editing_window(subname, use
 
        dummy_str = ' (dummy)'
 
    else:
 
        dummy_str = ''
 
    toplevel.title("Subcomposer: %s%s" % (subname, dummy_str))
 
    sc = Subcomposer(toplevel, use_persistentlevels=0, dmxdummy=dmxdummy)
 
    sc.pack(fill='both', expand=1)
 
    sc.loadsub(None, subname) # don't ask
 
    sc.loadsub(subname)
 
    sc.considersendupdate(use_after_loop=10)
 
    if use_mainloop:
 
        tk.mainloop()
 
    
 
#############################
 

	
 
if __name__ == "__main__":
 
    parser = OptionParser(usage="%prog [subname]")
 
    opts, args = parser.parse_args()
 

	
 
    root=tk.Tk()
 
    root.config(bg='black')
 
    root.wm_title("subcomposer")
 
    root.tk_setPalette("#004633")
 

	
 
    sc = Subcomposer(root, dmxdummy=0, numchannels=276)
 
    sc.pack()
 

	
 
    tk.Label(root,text="Bindings: B1 adjust level; B3 instant bump",
 
    tk.Label(root,text="Bindings: B1 adjust level; B2 set full; B3 instant bump",
 
             font="Helvetica -12 italic",anchor='w').pack(side='top',fill='x')
 
    
 
    if len(args) == 1:
 
        sc.loadsub(args[0])
 
        sc.fill_both_boxes(args[0])
 

	
 
    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()
 
        
 
        sc.considersendupdate()
 
        time.sleep(.01)
0 comments (0 inline, 0 general)