Changeset - 2dfae9ed1cda
[Not reviewed]
default
0 2 0
dmcc - 22 years ago 2002-07-11 15:54:24

jostle feature, use it to shake levels mildly
2 files changed with 17 insertions and 29 deletions:
0 comments (0 inline, 0 general)
light8/Lightboard.py
Show inline comments
 
from __future__ import nested_scopes
 

	
 
from Tix import *
 
from time import sleep
 
import random
 
from signal import signal, SIGINT
 
import sys, cPickle
 
# import shelve
 

	
 
import io
 
from uihelpers import *
 
from panels import *
 
from Xfader import *
 
from subediting import Subediting
 
@@ -25,21 +24,20 @@ class Pickles:
 

	
 
class Lightboard:
 
    def __init__(self, master, parportdmx, DUMMY):
 
        self.master = master
 
        self.parportdmx = parportdmx
 
        self.DUMMY = DUMMY
 
        self.jostle_mode = 0
 

	
 
        self.channel_levels = []
 
        self.scalelevels = {}
 
        self.xfader = Xfader(self.scalelevels) # doesn't draw any UI yet-- look for self.xfader.setupwidget()
 
        self.oldlevels = [None] * 68 # never replace this; just clear it
 
        self.subediting = Subediting(currentoutputlevels=self.oldlevels)
 

	
 
        # self.shelf = shelve.open('/tmp/light9.newprefs')
 
        # self.windowpos = self.shelf.get('window', {})
 
        self.windowpos = 0
 
        self.get_data()
 
        self.buildinterface()
 
        self.load()
 
        self.backgroundloop()
 
        self.updatestagelevels()
 
@@ -71,13 +69,14 @@ class Lightboard:
 
            self.channel_levels[i].config(text=self.oldlevels[i])
 
            colorlabel(self.channel_levels[i])
 

	
 
        Console(self)
 

	
 
        # root frame
 
        controlpanel = Controlpanel(self.master, self.xfader, self.refresh, self.quit)
 
        controlpanel = Controlpanel(self.master, self.xfader, self.refresh, 
 
            self.quit, self.toggle_jostle)
 
        
 
        xf=Frame(self.master)
 
        xf.pack(side='right')
 

	
 
        self.master.bind('<q>', self.quit)
 
        self.master.bind('<r>', self.refresh)
 
@@ -147,13 +146,13 @@ class Lightboard:
 
        for name, s in Subs.subs.items():
 
            newlevels = s.get_levels(level=self.scalelevels[name].get())
 
            for (ch, fadelev) in newlevels.items():
 
                levels[ch-1] = max(levels[ch-1], fadelev)
 

	
 
        levels = [int(l) for l in levels]
 

	
 
        
 
        for lev,lab,oldlev,numlab in zip(levels, self.channel_levels, 
 
                                         self.oldlevels, 
 
                                         self.leveldisplay.number_labels):
 
            if lev != oldlev:
 
                lab.config(text="%d" % lev) # update labels in lev display
 
                colorlabel(lab)             # recolor labels
 
@@ -163,12 +162,18 @@ class Lightboard:
 
                    numlab['bg'] = 'red'
 
            else:
 
                numlab['bg'] = 'lightPink'
 

	
 
        self.oldlevels[:] = levels[:] # replace the elements in oldlevels - don't make a new list (Subediting is watching it)
 
            
 
        if self.jostle_mode:
 
            delta = random.randrange(-1, 2, 1) # (-1, 0, or 1)
 
            # print "delta", delta
 
            levels = [min(100, max(x + delta, 0)) for x in levels]
 
            # print "jostled", levels
 

	
 
        self.parportdmx.sendlevels(levels)
 

	
 
    def updatestagelevels(self):
 
        self.master.after(100, self.updatestagelevels)
 
        for lev, idx in zip(self.oldlevels, xrange(0, 68 + 1)):
 
            self.stage.updatelightlevel(Patch.get_channel_name(idx + 1), lev)
 
@@ -203,38 +208,18 @@ class Lightboard:
 
        self.changelevel()
 
    def quit(self, *args):
 
        self.save()
 
        self.master.destroy()
 
        sys.exit()
 
    def save(self, *args):
 

	
 

	
 
        filename = '/tmp/light9.prefs'
 
        if self.DUMMY:
 
            filename += '.dummy'
 
        print "Saving to", filename
 
        file = open(filename, 'w')
 

	
 
        '''
 
        # {name : (tkname, geom)}
 
        windowitems = self.windowpos.items()
 
        windowmapping = dict([(pair[0], name) for name, pair in windowitems])
 
        # print "windowmapping", windowmapping
 
        # print "windowpos", self.windowpos
 

	
 
        for w in self.master.winfo_children():
 
            tkname, geom = str(w), w.winfo_geometry()
 
            try:
 
                name = windowmapping[tkname]
 
                self.windowpos[name] = (tkname, geom)
 
                # print name, "geom is", geom
 
            except:
 
                # print "failed to save windowpos"
 
                pass
 
        # self.shelf['window'] = self.windowpos
 
        # self.shelf.close()
 
        '''
 

	
 
        try:
 
            cPickle.dump(Pickles(self.scalelevels, Subs.subs.items()), file)
 
        except cPickle.UnpickleableError:
 
            print "UnpickleableError!  There's yer problem."
 
    def toggle_jostle(self, *args):
 
        self.jostle_mode = not self.jostle_mode
light8/panels.py
Show inline comments
 
@@ -8,25 +8,28 @@ from FlyingFader import FlyingFader
 
import Pmw
 

	
 
stdfont = ('Arial', 8)
 
monofont = ('Courier', 8)
 

	
 
class Controlpanel(Frame):
 
    def __init__(self, parent, xfader, refresh_cb, quit_cb):
 
    def __init__(self, parent, xfader, refresh_cb, quit_cb, jostle_cb):
 
        Frame.__init__(self,parent)
 
        controlpanel = self
 
        for txt,cmd in (
 
            ('Quit',       quit_cb),
 
            ('Refresh',    refresh_cb),
 
            ('Clear all', xfader.clearallbuttons),
 
            ('On -> X',     lambda: xfader.grab('x')),
 
            ('Clear X',     lambda: xfader.clearallbuttons('x')),
 
            ('On -> Y',     lambda: xfader.grab('y')),
 
            ('Clear Y',     lambda: xfader.clearallbuttons('y'))):
 
            # ('Jostle',     jostle_cb)):
 
            Button(controlpanel, text=txt, command=cmd).pack(side='top', 
 
                fill='x')
 
        Checkbutton(controlpanel, text="Jostle", 
 
            command=jostle_cb).pack(side=TOP, fill=X)
 

	
 
class Console:
 
    def __init__(self,lightboard):
 
        print "Light 8: Everything's under control"
 
        t=toplevelat('console', lightboard.windowpos)
 
        self.frame = Frame(t)
0 comments (0 inline, 0 general)