Changeset - 3011c1028eb7
[Not reviewed]
default
0 4 0
dmcc - 22 years ago 2002-07-08 15:50:00

Cue math error fixed.
Cue math error fixed.
Bad cues in ConfigDummy fixed, not fixed in Config yet.
Cue fader back in rsn. Oh yeah.
4 files changed with 384 insertions and 58 deletions:
0 comments (0 inline, 0 general)
light8/ConfigDummy.py
Show inline comments
 
from random import randrange
 
from time import time
 
from __future__ import generators,division
 
from Subs import *
 
from Cue import *
 

	
 
f1 = Fade('red', 0, 2, 100)
 
f2 = Fade('green', 1, 3, 50)
 
f3 = Fade('blue', 0, 4, 0)
 
f4 = Fade('clear', 0, 8, 75) 
 
c1 = Cue("Color shift", 0, 10, f1, f2, f3, f4)
 
f1 = Fade('col blue', 0, 2, 1)
 
f2 = Fade('col gree', 1, 3, .50)
 
f3 = Fade('col oran', 0, 4, 0)
 
f4 = Fade('col red', 0, 8, .75) 
 

	
 
g1 = Fade('col blue', 1, 2, .20)
 
g2 = Fade('col gree', 0, 4, .10)
 
g3 = Fade('cyc', 1, 5, .20)
 
g4 = Fade('god', 0, 4, .15) 
 

	
 
cues = [c1]
 
r1 = Fade('col blue', 0, 2, 0)
 
r2 = Fade('col gree', 1, 3, .10)
 
r3 = Fade('col oran', 0, 4, .6)
 
r4 = Fade('col red', 0, 8, .15) 
 
r5 = Fade('cyc', 1, 5, .90)
 
r6 = Fade('god', 0, 8, .75) 
 

	
 
cues = [
 
    Cue("This", 0, 10, f1, f2, f3, f4),
 
    Cue("That", 0, 5, g1, g2, g3, g4),
 
    Cue("The other", 1, 7, f1, g2, g3, f4),
 
    Cue("Reset", 1, 9, r1, r2, r3, r4, r5, r6),
 
]
 

	
 
patch = {
 
    
 
    'side l' : 45, # posts
 
    'side r' : 46,
 
    ('side l','sidepost1') : 45, # posts
 
    ('side r','sidepost2') : 46,
 
    
 
    'sidefill1' : 13,
 
    'sidefill2' : 14,
 

	
 
    ('patio1','main 1',) : 1,
 
    ('main 2',) : 2,
 
    ('main 3',) : 3,
 
    ('main 4',) : 4,
 
    ('main 5',) : 5,
 
    ('god','main 6') : 6,
 
    ('main 7',) : 7,
 
    ('main 8',) : 8,
 
    ('main 9',) : 9,
 
    ('main 10',) : 10,
 
    ('main 11',):11,
 
    ('patio2','main 12',):12,
 
    'hotback':19,
 

	
 
    'cycleft' : 43,
 
    'cycright' : 44, # ? might be a different circuit
 
    'cycright' : 42,
 
    
 
    'house':68,
 
    ('desk1' ,'b11'):54, # left bank over house
 
    ('marry1' ,'b12'):53,
 
    ('b13',):52,
 
    ('hotbox1' ,'b14'):51,
 
    ('edge' ,'b15'):50,
 
    ('phone','b16'):49,
 
    ('cuba1'   ,'b21'):55, # mid bank
 
    ('b22',):56,
 
    ('b23',):57,
 
    ('b24'):58,
 
    ('b25'):59,
 
    ('desk2'   ,'b26'):60,
 
    ('rock','b31'):61, # right bank
 
    ('b32',):62,
 
    ('hotbox2' ,'b33'):63,
 
    ('b34',):64,
 
    ('marry2' ,'b35'):65,
 
    ('cuba2' ,'b36'):66,
 
    'oran1':21,    'oran2':25,    'oran3':29,    'oran4':33,
 
    'gree1':22,    'gree2':26,    'gree3':30,    'gree4':34,
 
    'blue1':23,    'blue2':27,    'blue3':31,    'blue4':35,
 
    'red1' :24,    'red2' :28,    'red3' :32,    'red4' :36,
 
    'upfill1' : 40,
 
    'upfill2' : 38,
 
    'upfill3' : 37,
 
    'upfill4' : 39,
 
}
 

	
 
from util import maxes,scaledict
 
FL=100
 
def fulls(chans):
 
    # pass a list or multiple args
 
    return dict([(c,FL) for c in chans])
 
def levs(chans,levs):
 
    return dict([(c,v) for c,v in zip(chans,levs)])
 

	
 
def strobe(params, slideradjuster):
 
    patterns = {
 
        'blue' : fulls((23,27,31,35,'b0 4 b','b2 3 b')),
 
        'cyc' : {42:FL,43:FL},
 
        'scp all' : fulls((13,16,18,19,39)),
 
        '1-5' : fulls(range(1, 6)),
 
    }
 
    params.add_param('offtime',SliderParam(range=(0.1,0.3), res=0.001,
 
                                           initial=0.11, length=100))
 
    params.add_param('ontime',SliderParam(range=(0.0,0.8), res=0.001, 
 
                                          length=100))
 
    params.add_param('pattern',ListParam(patterns.keys()))
 
    params.add_param('current',LabelParam('none'))
 
    params.add_param('count',SliderParam(range=(0, 10), res=1, initial=0))
 
@@ -228,54 +252,335 @@ b23 29 22 35 30 b24 33 36 """).split()])
 
        else:
 
            queued=keepers
 
            
 
            
 
#        pos=(time()%params['steptime'])/params['steptime'] # 0..1 animated variable
 
#        shiftedsteps=[]
 
#        for i,s in zip(range(0,len(steps)),steps):
 
#            shiftedsteps.append( scaledict(s, stepbrightness(i,len(steps),params['overlap'],pos)) )
 
        yield maxes(shiftedsteps)
 

	
 
    
 
def randomdimmer(params, slideradjuster):
 
    params.add_param('magic', CheckboxParam())
 
    params.add_param('cheese', TextParam())
 
    params.add_param('stuff', ListParam(('a', 'b', 'c')))
 

	
 
    curtime = time()
 
    dim = 1
 
    while 4:
 
        if time() - curtime > 1:
 
            dim = randrange(1, 64)
 
            curtime = time()
 
        yield {dim : 100, 20 : params.get_param_value('magic')}
 

	
 

	
 
subs = {
 
    'over pit sm' : levs(range(1, 13),(100,0,0,91,77,79,86,55,92,77,59,0)),
 
    'over pit lg' : fulls(range(1, 13)),
 
    ('house', 'black') : { 68:100 },
 
    ('cyc', 'lightBlue'):{42:FL,43:FL},
 
    ('scp hot ctr', 'yellow'):{18:FL},
 
    ('scp more', '#AAAA00'):{18:FL,14:FL},
 
    ('scp all', '#AAAA00'):fulls((13,16,18,19,39)),
 
    ('col oran', '#EEEE99'):fulls('oran1 oran2 oran3 oran4'.split()),
 
    ('col red', 'red'):fulls('red1 red2 red3 red4'.split()),
 
    ('col blue', 'blue'):fulls('blue1 blue2 blue3 blue4'.split()),
 
    ('col gree', 'green'):fulls('gree1 gree2 gree3 gree4'.split()),
 
    'sidepost':fulls((45,46)),
 
    'edges':fulls((55,60,49,54,61,66)),
 
    'bank1ctr':fulls(('b22','b23','b24','b25')),
 
    'god' : fulls((6,)),
 
    ('strobe', 'grey'):strobe,
 
#    ('strobe', 'grey'):strobe,
 
#    'chase' : chase,
 
#    'chase2' : chase,
 
    'cyc' : fulls(('cycleft','cycright')),
 
    'sidefill' : fulls(('sidefill1','sidefill2')),
 
    'patio left' : { 'patio1':FL },
 
    'patio right' : { 'patio2':FL },
 
    'upfill sides' : fulls(('upfill1','upfill4')),
 
    '*broadway open':{},
 
    '*int mission':{},
 
    '*phone booth':{},
 
    '*off broadway':{},
 
    '*cuba left':{},
 
    '*cuba right':{},
 
    '*cuba dance':{},
 
    '*cuba sky':{},
 
    '*cuba love':{},
 
    '*ext mission':{},
 
    '*hotbox dance':{},
 
    '*hotbox table':{},
 
    '*sewer':{},
 
    '*marry':{},
 
    
 
#    'midstage' : dict([(r, 100) for r in range(11, 21)]),
 
#    'backstage' : dict([(r, 100) for r in range(21, 31)]),
 
#    'frontchase' : mr_effect,
 
    'chase' : chase,
 
    # 'chase2' : chase,
 
#    'random' : randomdimmer,
 
    
 
}
 

	
 
subs["ba outrs"] = fulls("b11 b12 b13 b14 b15 b16 b31 b32 b33 b34 b35 b36".split())
 
subs["ba some"] = {'b12':40,'b13':FL,'b14':FL,'b15':40,
 
                   'b32':40,'b33':FL,'b34':FL,'b35':40,}
 
subs['*curtain'] = subs['ba some'].copy()
 
subs["*marry"] = { "hotbox1" : 100,}
 
subs["*phone booth"] = { "phone" : 100,}
 
subs["*broadway open"] = { "sidefill2" : 100, "sidefill1" : 100,
 
    "main 11" : 100, "main 10" : 100, "b34" : 100, "b25" : 100, "b24" : 100,
 
    "b22" : 100, "desk2" : 78, "phone" : 46, "upfill3" : 69, "upfill2" : 100,
 
    "main 3" : 68, "main 2" : 100, "main 5" : 100, "main 4" : 100,
 
    "main 7" : 100, "main 9" : 100, "main 8" : 100, "edge" : 46,
 
    "sidepost1" : 100, "sidepost2" : 100, "marry2" : 100, "marry1" : 100,}
 
subs["*int mission"] = { "sidefill1" : 100, "main 4" : 100, "main 9" : 100,
 
    "main 8" : 100, "b24" : 100, "b23" : 100, "desk1" : 100, "desk2" : 100,
 
    "b22" : 100, "rock" : 100, "marry1" : 100, "cuba1" : 25, "cuba2" : 51,
 
    "main 10" : 100,}
 
subs["*broadway open"] = { "sidefill2" : 100, "sidefill1" : 100,
 
    "main 11" : 100, "main 10" : 100, "b34" : 100, "b25" : 100, "b24" : 100,
 
    "b22" : 100, "desk2" : 78, "phone" : 46, "hotbox1" : 100, "upfill3" : 69,
 
    "upfill2" : 100, "main 3" : 68, "main 2" : 100, "main 5" : 100,
 
    "main 4" : 100, "main 7" : 100, "hotbox2" : 100, "main 9" : 100,
 
    "main 8" : 100, "edge" : 46, "sidepost1" : 100, "sidepost2" : 100,
 
    "marry2" : 100, "marry1" : 100,}
 
subs["*broadway open"] = { "sidefill2" : 100, "sidefill1" : 100,
 
    "cycright" : 41, "upfill3" : 69, "upfill2" : 100, "upfill1" : 56,
 
    "side l" : 100, "b25" : 100, "cycleft" : 41, "b22" : 100, "desk2" : 78,
 
    "phone" : 46, "hotbox1" : 100, "upfill4" : 56, "b24" : 100, "side r" : 100,
 
    "main 11" : 100, "main 10" : 100, "main 3" : 68, "main 2" : 100,
 
    "main 5" : 100, "main 4" : 100, "main 7" : 100, "hotbox2" : 100,
 
    "main 9" : 100, "main 8" : 100, "b34" : 100, "edge" : 46, "god" : 100,
 
    "marry2" : 100, "marry1" : 100,}
 
subs["*broadway open"] = { "sidefill2" : 100, "sidefill1" : 100,
 
    "cycright" : 41, "upfill3" : 69, "upfill2" : 100, "upfill1" : 56,
 
    "b34" : 100, "b25" : 100, "side l" : 100, "b22" : 100, "desk2" : 78,
 
    "phone" : 80, "hotbox1" : 100, "upfill4" : 56, "b24" : 100, "side r" : 100,
 
    "main 11" : 100, "main 10" : 100, "main 3" : 100, "main 2" : 100,
 
    "main 5" : 100, "main 4" : 100, "main 7" : 100, "hotbox2" : 100,
 
    "main 9" : 100, "main 8" : 100, "cycleft" : 41, "edge" : 80,
 
    "god" : 100, "marry2" : 100, "marry1" : 100,}
 
subs["*int mission"] = { "sidefill2" : 51, "sidefill1" : 0, "upfill4" : 0,
 
    "main 11" : 100, "main 10" : 100, "b34" : 0, "b25" : 0, "b24" : 100,
 
    "b23" : 100, "desk1" : 53, "desk2" : 100, "b22" : 100, "hotbox2" : 85,
 
    "hotbox1" : 25, "b32" : 62, "upfill3" : 37, "upfill2" : 66, "main 3" : 0,
 
    "main 5" : 70, "main 4" : 100, "main 7" : 100, "main 9" : 100,
 
    "main 8" : 100, "rock" : 52, "marry2" : 100, "marry1" : 61, "cuba1" : 0,
 
    "cuba2" : 78,}
 
subs["*int mission"] = { "sidefill2" : 51, "sidefill1" : 0, "upfill4" : 0,
 
    "main 11" : 100, "main 10" : 100, "b34" : 0, "b25" : 0, "b24" : 100,
 
    "b23" : 100, "desk1" : 53, "desk2" : 100, "b22" : 100, "hotbox2" : 85,
 
    "hotbox1" : 25, "cycright" : 66, "b32" : 62, "upfill3" : 37,
 
    "upfill2" : 66, "main 3" : 57, "main 2" : 0, "main 5" : 70, "main 4" : 100,
 
    "main 7" : 100, "main 9" : 100, "main 8" : 100, "rock" : 52,
 
    "marry2" : 100, "marry1" : 61, "cuba1" : 0, "cuba2" : 78,}
 
subs["*hotbox dance"] = { "red3" : 100, "sidefill2" : 46, "red1" : 100,
 
    "cycright" : 19, "upfill3" : 32, "upfill2" : 46, "upfill1" : 26,
 
    "red2" : 100, "side l" : 46, "b25" : 46, "cycleft" : 19, "sidefill1" : 46,
 
    "desk2" : 36, "b22" : 46, "phone" : 37, "hotbox1" : 46, "upfill4" : 26,
 
    "b24" : 46, "side r" : 46, "main 11" : 46, "main 10" : 46, "main 3" : 46,
 
    "main 2" : 46, "main 5" : 46, "main 4" : 46, "main 7" : 46, "hotbox2" : 46,
 
    "main 9" : 46, "main 8" : 46, "red4" : 100, "b34" : 46, "edge" : 37,
 
    "god" : 100, "marry2" : 46, "marry1" : 46,}
 
subs["*hotbox dance"] = { "cycright" : 19, "upfill3" : 32, "upfill2" : 46,
 
    "upfill1" : 26, "sidefill2" : 0, "b25" : 0, "side l" : 46, "b23" : 0,
 
    "desk1" : 0, "desk2" : 0, "upfill4" : 26, "side r" : 46, "main 11" : 46,
 
    "main 10" : 46, "god" : 100, "edge" : 0, "sidepost1" : 0, "sidepost2" : 0,
 
    "marry2" : 0, "marry1" : 0, "cuba1" : 0, "cuba2" : 0, "b13" : 0,
 
    "red3" : 100, "red2" : 100, "sidefill1" : 0, "b24" : 0, "red4" : 100,
 
    "b34" : 30, "cycleft" : 19, "b32" : 43, "b22" : 0, "phone" : 0,
 
    "hotbox1" : 42, "main 3" : 46, "main 2" : 46, "main 5" : 46,
 
    "main 4" : 46, "main 7" : 100, "hotbox2" : 78, "main 9" : 46,
 
    "main 8" : 46, "hotback" : 100, "rock" : 0, "red1" : 100,}
 
subs["*hotbox dance"] = { "cycright" : 19, "upfill3" : 32, "upfill2" : 46,
 
    "upfill1" : 26, "sidefill2" : 0, "b25" : 0, "side l" : 46, "b23" : 0,
 
    "desk1" : 0, "desk2" : 24, "upfill4" : 26, "side r" : 46, "main 11" : 46,
 
    "main 10" : 100, "god" : 100, "edge" : 0, "sidepost1" : 0, "sidepost2" : 0,
 
    "marry2" : 0, "marry1" : 0, "cuba1" : 0, "cuba2" : 0, "b13" : 0,
 
    "red3" : 100, "red2" : 100, "sidefill1" : 0, "b24" : 0, "red4" : 100,
 
    "b34" : 30, "cycleft" : 19, "b32" : 43, "b22" : 0, "phone" : 0,
 
    "hotbox1" : 42, "main 3" : 46, "main 2" : 46, "main 5" : 100,
 
    "main 4" : 46, "main 7" : 100, "hotbox2" : 78, "main 9" : 46,
 
    "main 8" : 46, "hotback" : 100, "rock" : 0, "red1" : 100,}
 
subs["*hotbox table"] = { "sidefill2" : 0, "main 3" : 80, "main 2" : 62,
 
    "main 11" : 0, "main 4" : 29, "main 7" : 10, "main 9" : 64, "main 8" : 10,
 
    "b25" : 0, "b22" : 100, "phone" : 0, "edge" : 0, "b13" : 0, "marry2" : 0,
 
    "main 5" : 34, "marry1" : 0, "hotback" : 0, "cuba1" : 22, "cuba2" : 0,}
 
subs["*hotbox table"] = { "sidefill2" : 0, "main 11" : 0, "b25" : 0,
 
    "b22" : 100, "desk2" : 58, "phone" : 0, "main 3" : 80, "main 2" : 62,
 
    "main 5" : 34, "main 4" : 100, "main 7" : 10, "hotbox2" : 46,
 
    "main 9" : 64, "main 8" : 10, "edge" : 0, "b13" : 0, "rock" : 22,
 
    "marry2" : 0, "marry1" : 0, "hotback" : 0, "cuba1" : 22, "cuba2" : 0,}
 
subs["*hotbox small table"] = { "red3" : 100, "red2" : 100, "main 3" : 80,
 
    "main 2" : 62, "main 5" : 34, "main 4" : 100, "main 7" : 10,
 
    "red4" : 100, "main 9" : 64, "main 8" : 10, "rock" : 22, "red1" : 100,
 
    "desk2" : 58, "b22" : 100, "hotbox2" : 46, "upfill4" : 62, "god" : 100,
 
    "upfill1" : 62, "cuba1" : 22,}
 
subs["*hotbox small table"] = { "red3" : 100, "red2" : 100, "red1" : 100,
 
    "upfill4" : 62, "main 11" : 0, "main 10" : 0, "upfill1" : 62,
 
    "red4" : 100, "b25" : 5, "b22" : 100, "desk2" : 58, "desk1" : 52,
 
    "hotbox2" : 0, "sidefill2" : 0, "main 3" : 47, "main 2" : 0,
 
    "main 5" : 0, "main 4" : 0, "main 7" : 0, "phone" : 0, "main 9" : 11,
 
    "main 8" : 0, "god" : 100, "edge" : 0, "rock" : 0, "marry2" : 0,
 
    "marry1" : 0, "hotback" : 0, "cuba1" : 0, "cuba2" : 0,}
 
subs["*ext mission"] = { "sidefill2" : 100, "sidefill1" : 100,
 
    "cycright" : 41, "upfill3" : 69, "upfill2" : 100, "upfill1" : 56,
 
    "side l" : 100, "b25" : 100, "cycleft" : 41, "b22" : 100, "desk2" : 78,
 
    "phone" : 80, "hotbox1" : 100, "upfill4" : 56, "b24" : 100, "side r" : 100,
 
    "main 11" : 100, "main 10" : 100, "main 3" : 100, "main 2" : 100,
 
    "main 5" : 100, "main 4" : 100, "main 7" : 100, "hotbox2" : 100,
 
    "main 9" : 100, "main 8" : 100, "b34" : 100, "edge" : 80, "god" : 100,
 
    "marry2" : 100, "marry1" : 100,}
 
subs["*ext mission"] = { "sidefill2" : 100, "sidefill1" : 59,
 
    "cycright" : 53, "upfill3" : 0, "upfill2" : 0, "upfill1" : 0,
 
    "b34" : 100, "b25" : 100, "side l" : 100, "b23" : 100, "b22" : 49,
 
    "b32" : 80, "phone" : 0, "hotbox1" : 0, "upfill4" : 0, "b24" : 100,
 
    "desk2" : 78, "main 11" : 100, "main 10" : 100, "main 3" : 0,
 
    "main 2" : 100, "main 5" : 100, "main 4" : 0, "main 7" : 100,
 
    "hotbox2" : 100, "main 9" : 100, "main 8" : 100, "god" : 100,
 
    "cycleft" : 0, "edge" : 0, "b13" : 0, "rock" : 60, "marry2" : 100,
 
    "marry1" : 0, "side r" : 100,}
 
subs["*broadway night 1-7"] = { "sidefill2" : 37, "sidefill1" : 37,
 
    "cycright" : 15, "upfill3" : 25, "upfill2" : 37, "upfill1" : 20,
 
    "side l" : 37, "b25" : 37, "cycleft" : 15, "b22" : 37, "desk2" : 28,
 
    "phone" : 29, "hotbox1" : 37, "upfill4" : 20, "b24" : 37, "side r" : 37,
 
    "main 11" : 37, "main 10" : 37, "main 3" : 37, "main 2" : 37,
 
    "main 5" : 37, "main 4" : 37, "main 7" : 37, "hotbox2" : 37,
 
    "main 9" : 37, "main 8" : 37, "b34" : 37, "edge" : 29, "god" : 100,
 
    "marry2" : 37, "marry1" : 37,}
 
subs["*broadway night 1-7"] = { "sidefill2" : 37, "sidefill1" : 37,
 
    "upfill3" : 11, "upfill2" : 23, "b34" : 37, "b25" : 37, "b24" : 94,
 
    "b23" : 100, "b22" : 61, "desk2" : 28, "hotbox2" : 37, "hotbox1" : 37,
 
    "blue1" : 93, "main 11" : 37, "blue3" : 93, "blue2" : 93, "blue4" : 93,
 
    "main 10" : 37, "main 3" : 25, "main 2" : 37, "main 5" : 37,
 
    "main 4" : 37, "main 7" : 37, "main 9" : 37, "main 8" : 37, "edge" : 12,
 
    "god" : 100, "marry2" : 37, "marry1" : 37,}
 
subs["*broadway night 1-7"] = { "sidefill2" : 37, "sidefill1" : 37,
 
    "upfill3" : 11, "upfill2" : 23, "b34" : 37, "b25" : 37, "b24" : 94,
 
    "b23" : 100, "b22" : 61, "desk2" : 0, "desk1" : 0, "hotbox2" : 37,
 
    "hotbox1" : 0, "blue1" : 93, "main 11" : 37, "blue3" : 93, "blue2" : 93,
 
    "blue4" : 93, "main 10" : 37, "main 3" : 25, "main 2" : 37, "main 5" : 37,
 
    "main 4" : 37, "main 7" : 37, "main 9" : 37, "main 8" : 37, "edge" : 12,
 
    "god" : 100, "marry2" : 37, "marry1" : 37,}
 
subs["*broadway night 1-7"] = { "sidefill2" : 37, "sidefill1" : 37,
 
    "upfill3" : 11, "upfill2" : 23, "b34" : 28, "b25" : 37, "b24" : 94,
 
    "b23" : 100, "b22" : 82, "desk2" : 0, "desk1" : 0, "hotbox2" : 11,
 
    "hotbox1" : 0, "blue1" : 93, "main 11" : 37, "blue3" : 93, "blue2" : 93,
 
    "blue4" : 93, "main 10" : 37, "main 3" : 25, "main 2" : 37, "main 5" : 37,
 
    "main 4" : 37, "main 7" : 37, "main 9" : 37, "main 8" : 37, "edge" : 12,
 
    "god" : 100, "marry2" : 0, "marry1" : 37,}
 
subs["*cuba right"] = { "main 3" : 31, "main 2" : 0, "main 10" : 100,
 
    "b34" : 100, "b22" : 31, "desk2" : 85, "desk1" : 39, "edge" : 31,
 
    "sidefill1" : 7, "cuba1" : 100, "cuba2" : 100,}
 
subs["*cuba dance"] = { "sidefill2" : 100, "sidefill1" : 100,
 
    "upfill4" : 100, "upfill3" : 81, "upfill2" : 100, "upfill1" : 100,
 
    "b34" : 100, "b25" : 100, "b24" : 100, "b23" : 100, "desk1" : 100,
 
    "desk2" : 100, "b22" : 100, "phone" : 100, "main 11" : 100, "main 10" : 100,
 
    "main 3" : 100, "main 2" : 100, "main 5" : 100, "main 4" : 100,
 
    "main 7" : 100, "main 9" : 100, "main 8" : 100, "edge" : 100,
 
    "god" : 100, "marry2" : 100, "marry1" : 100, "hotback" : 100,
 
    "cuba1" : 100, "cuba2" : 100,}
 
subs["*cuba love"] = { "sidefill2" : 0, "sidefill1" : 0, "upfill4" : 61,
 
    "main 11" : 100, "main 10" : 100, "upfill1" : 61, "b25" : 100,
 
    "b24" : 100, "b23" : 100, "b22" : 100, "desk2" : 0, "desk1" : 0,
 
    "phone" : 0, "hotbox1" : 0, "upfill3" : 61, "upfill2" : 61, "main 3" : 0,
 
    "main 2" : 100, "main 5" : 100, "main 4" : 100, "main 7" : 100,
 
    "main 9" : 73, "main 8" : 100, "edge" : 0, "hotback" : 0, "marry2" : 0,
 
    "marry1" : 0, "cuba1" : 0, "cuba2" : 0,}
 
subs["*cuba love"] = { "sidefill2" : 0, "sidefill1" : 0, "upfill4" : 0,
 
    "main 11" : 28, "main 10" : 28, "upfill1" : 0, "b34" : 9, "b25" : 100,
 
    "b24" : 59, "b23" : 59, "b22" : 100, "desk2" : 0, "desk1" : 0,
 
    "phone" : 0, "hotbox1" : 0, "upfill3" : 43, "upfill2" : 43, "main 3" : 0,
 
    "main 2" : 100, "main 5" : 16, "main 4" : 16, "main 7" : 0, "main 9" : 73,
 
    "main 8" : 100, "edge" : 0, "marry2" : 9, "marry1" : 0, "hotback" : 0,
 
    "cuba1" : 0, "cuba2" : 0,}
 
subs["*cuba love"] = { "sidefill2" : 0, "sidefill1" : 0, "upfill4" : 0,
 
    "main 11" : 28, "main 10" : 28, "upfill1" : 0, "b34" : 9, "b25" : 100,
 
    "b24" : 59, "b23" : 59, "b22" : 100, "desk2" : 0, "desk1" : 0,
 
    "phone" : 0, "hotbox1" : 0, "upfill3" : 43, "upfill2" : 43, "main 3" : 0,
 
    "main 2" : 100, "main 5" : 16, "main 4" : 16, "main 7" : 0, "main 9" : 65,
 
    "main 8" : 74, "edge" : 0, "marry2" : 9, "marry1" : 0, "hotback" : 0,
 
    "cuba1" : 0, "cuba2" : 0,}
 
subs["*cuba love"] = { "sidefill2" : 0, "sidefill1" : 0, "upfill4" : 0,
 
    "main 11" : 28, "main 10" : 28, "upfill1" : 0, "b34" : 9, "b25" : 100,
 
    "b24" : 59, "b23" : 59, "b22" : 100, "desk2" : 16, "desk1" : 0,
 
    "phone" : 0, "hotbox1" : 0, "upfill3" : 43, "upfill2" : 43, "main 3" : 28,
 
    "main 2" : 100, "main 5" : 16, "main 4" : 16, "main 7" : 0, "main 9" : 65,
 
    "main 8" : 74, "edge" : 0, "marry2" : 9, "marry1" : 0, "hotback" : 0,
 
    "cuba1" : 0, "cuba2" : 0,}
 
subs["*ext mission night"] = { "sidefill2" : 39, "sidefill1" : 23,
 
    "cycright" : 20, "main 11" : 29, "main 10" : 29, "upfill1" : 8,
 
    "b34" : 39, "b25" : 39, "side l" : 39, "b23" : 39, "b22" : 19,
 
    "b32" : 31, "upfill4" : 8, "b24" : 39, "side r" : 39, "desk2" : 18,
 
    "main 2" : 39, "main 5" : 39, "main 9" : 39, "main 8" : 39, "god" : 100,
 
    "marry2" : 39,}
 
subs["*ext mission night"] = { "sidefill2" : 39, "sidefill1" : 23,
 
    "cycright" : 20, "main 11" : 29, "main 10" : 29, "upfill1" : 8,
 
    "b34" : 39, "b25" : 39, "side l" : 39, "b23" : 39, "b22" : 19,
 
    "b32" : 31, "upfill4" : 8, "b24" : 39, "side r" : 39, "desk2" : 18,
 
    "main 2" : 39, "main 5" : 39, "main 9" : 39, "main 8" : 39, "god" : 100,
 
    "marry2" : 39,}
 
subs["*ext mission night"] = { "cycright" : 6, "main 11" : 15,
 
    "main 10" : 15, "upfill1" : 0, "b25" : 25, "side l" : 39, "b23" : 25,
 
    "b22" : 5, "desk2" : 4, "upfill4" : 0, "side r" : 39, "upfill3" : 0,
 
    "upfill2" : 0, "patio1" : 0, "god" : 86, "edge" : 0, "b13" : 0,
 
    "sidepost2" : 0, "marry2" : 25, "marry1" : 0, "cuba1" : 5, "cuba2" : 0,
 
    "sidepost1" : 0, "sidefill2" : 25, "sidefill1" : 9, "b24" : 25,
 
    "b34" : 25, "cycleft" : 0, "b32" : 17, "desk1" : 0, "hotbox2" : 25,
 
    "hotbox1" : 0, "main 3" : 0, "main 2" : 25, "main 5" : 25, "main 4" : 25,
 
    "main 7" : 25, "phone" : 0, "main 9" : 25, "main 8" : 25, "patio2" : 0,
 
    "hotback" : 0, "rock" : 17,}
 
subs["*ext mission night"] = { "b32" : 27, "sidefill2" : 34, "sidefill1" : 20,
 
    "cycright" : 18, "main 11" : 34, "main 10" : 34, "upfill1" : 8,
 
    "b34" : 34, "b25" : 34, "side l" : 34, "b23" : 34, "b22" : 16,
 
    "desk2" : 26, "hotbox2" : 34, "upfill4" : 8, "b24" : 34, "side r" : 34,
 
    "main 2" : 34, "main 5" : 34, "main 4" : 25, "main 7" : 34, "main 9" : 34,
 
    "main 8" : 34, "rock" : 20, "god" : 100, "marry2" : 34, "cuba1" : 5,}
 
subs["*2-2"] = { "b32" : 27, "sidefill2" : 34, "sidefill1" : 20,
 
    "cycright" : 18, "main 11" : 34, "main 10" : 34, "upfill1" : 70,
 
    "b34" : 34, "b25" : 34, "side l" : 34, "b23" : 34, "b22" : 16,
 
    "desk2" : 26, "hotbox2" : 34, "upfill4" : 70, "b24" : 34, "side r" : 34,
 
    "main 2" : 34, "main 5" : 34, "main 4" : 25, "main 7" : 34, "main 9" : 34,
 
    "main 8" : 34, "rock" : 20, "god" : 100, "marry2" : 34, "cuba1" : 5,}
 
subs["*2-2"] = { "sidefill2" : 0, "sidefill1" : 0, "cycright" : 18,
 
    "main 11" : 5, "main 10" : 5, "upfill1" : 70, "b34" : 34, "b25" : 71,
 
    "side l" : 34, "b23" : 67, "b22" : 50, "b32" : 57, "desk1" : 0,
 
    "hotbox2" : 59, "upfill4" : 70, "b24" : 67, "desk2" : 26, "main 3" : 0,
 
    "main 2" : 5, "main 5" : 5, "main 4" : 0, "main 7" : 5, "main 9" : 5,
 
    "main 8" : 5, "rock" : 20, "edge" : 0, "sidepost1" : 0, "sidepost2" : 0,
 
    "god" : 100, "marry2" : 50, "cuba1" : 0, "side r" : 34,}
 
subs["*sewer"] = { "main 10" : 71, "upfill4" : 100, "main 11" : 66,
 
    "main 4" : 71, "upfill1" : 88, "main 8" : 71, "main 7" : 71,
 
    "main 5" : 100, "hotbox1" : 88, "hotback" : 66, "marry2" : 66,
 
    "upfill3" : 88, "marry1" : 66, "upfill2" : 100,}
 
subs["*2-2"] = { "sidefill2" : 0, "sidefill1" : 0, "cycright" : 18,
 
    "main 11" : 5, "main 10" : 5, "upfill1" : 70, "b34" : 34, "b25" : 71,
 
    "side l" : 34, "b23" : 67, "b22" : 50, "b32" : 57, "desk1" : 0,
 
    "hotbox2" : 59, "upfill4" : 70, "b24" : 67, "desk2" : 26, "main 3" : 0,
 
    "main 2" : 5, "main 5" : 56, "main 4" : 0, "main 7" : 5, "main 9" : 5,
 
    "main 8" : 5, "rock" : 20, "edge" : 0, "sidepost1" : 0, "sidepost2" : 0,
 
    "god" : 100, "marry2" : 50, "cuba1" : 0, "side r" : 34,}
 
subs["*sewer"] = { "sidefill2" : 33, "sidefill1" : 33, "upfill4" : 10,
 
    "upfill3" : 22, "main 10" : 48, "upfill1" : 14, "b25" : 16, "b24" : 19,
 
    "b23" : 46, "b22" : 50, "hotbox1" : 0, "main 11" : 40, "upfill2" : 61,
 
    "main 2" : 54, "main 5" : 20, "main 4" : 45, "main 7" : 0, "main 9" : 84,
 
    "main 8" : 45, "hotback" : 40, "marry2" : 0, "marry1" : 0,}
 
subs["*sewer"] = { "sidefill2" : 33, "sidefill1" : 33, "upfill4" : 10,
 
    "upfill3" : 22, "main 10" : 48, "upfill1" : 14, "b25" : 16, "b24" : 19,
 
    "b23" : 64, "b22" : 50, "hotbox1" : 0, "main 11" : 40, "upfill2" : 61,
 
    "main 2" : 54, "main 5" : 20, "main 4" : 45, "main 7" : 0, "main 9" : 84,
 
    "main 8" : 45, "hotback" : 40, "sidepost1" : 31, "sidepost2" : 31,
 
    "marry2" : 0, "marry1" : 0,}
 
subs["*sewer"] = { "sidefill2" : 33, "sidefill1" : 33, "upfill4" : 10,
 
    "upfill3" : 22, "main 10" : 48, "upfill1" : 14, "b25" : 16, "b24" : 19,
 
    "b23" : 64, "b22" : 50, "hotbox1" : 0, "main 11" : 40, "upfill2" : 61,
 
    "main 2" : 54, "main 5" : 20, "main 4" : 45, "main 7" : 0, "main 9" : 84,
 
    "main 8" : 45, "hotback" : 40, "sidepost1" : 31, "sidepost2" : 31,
 
    "marry2" : 0, "marry1" : 0, "cuba1" : 59,}
 
subs["*marry"] = { "b32" : 23, "sidefill2" : 30, "sidefill1" : 17,
 
    "cycright" : 15, "main 11" : 30, "main 10" : 30, "upfill1" : 48,
 
    "b34" : 30, "b25" : 30, "side l" : 30, "b23" : 30, "b22" : 14,
 
    "desk2" : 23, "hotbox2" : 30, "upfill4" : 48, "b24" : 30, "side r" : 30,
 
    "main 3" : 30, "main 2" : 30, "main 5" : 30, "main 4" : 22, "main 7" : 30,
 
    "main 9" : 30, "main 8" : 30, "rock" : 17, "edge" : 15, "god" : 100,
 
    "marry2" : 30, "cuba1" : 4,}
 
subs["*marry"] = { "sidefill2" : 0, "sidefill1" : 0, "cycright" : 100,
 
    "main 11" : 55, "main 10" : 55, "upfill1" : 48, "b34" : 30, "b25" : 0,
 
    "side l" : 30, "b23" : 100, "b22" : 14, "b32" : 23, "main 4" : 0,
 
    "hotbox2" : 43, "hotbox1" : 49, "upfill4" : 48, "b24" : 100,
 
    "desk2" : 23, "patio2" : 0, "main 3" : 0, "main 2" : 30, "main 5" : 0,
 
    "patio1" : 0, "main 7" : 30, "phone" : 0, "main 9" : 30, "main 8" : 0,
 
    "rock" : 17, "edge" : 0, "sidepost1" : 0, "sidepost2" : 0, "god" : 100,
 
    "marry2" : 34, "marry1" : 69, "cuba1" : 0, "cuba2" : 0, "side r" : 30,}
 
subs["*marry"] = { "sidefill2" : 0, "sidefill1" : 0, "cycright" : 100,
 
    "main 11" : 55, "main 10" : 55, "upfill1" : 48, "b34" : 30, "patio1" : 0,
 
    "b25" : 0, "side l" : 30, "b23" : 100, "b22" : 14, "b32" : 23,
 
    "hotbox2" : 43, "hotbox1" : 49, "upfill4" : 48, "b24" : 100,
 
    "desk2" : 23, "patio2" : 0, "main 3" : 0, "main 2" : 30, "main 5" : 0,
 
    "main 4" : 0, "main 7" : 30, "phone" : 0, "main 9" : 30, "main 8" : 0,
 
    "rock" : 17, "edge" : 0, "sidepost1" : 0, "sidepost2" : 0, "god" : 100,
 
    "marry2" : 34, "marry1" : 69, "cuba1" : 0, "cuba2" : 0, "side r" : 30,}
light8/Cue.py
Show inline comments
 
@@ -8,91 +8,94 @@ class Cue:
 
    meaning that Cues can contain Cues.  This is similar to the Light9 concept
 
    of Cues and Fades, but without all the Nodes."""
 
    def __init__(self, name, starttime, dur, *fades):
 
        'Create a cue'
 

	
 
        endtime = starttime + dur
 
        dur = endtime - starttime
 

	
 
        self.name = name
 
        self.starttime = starttime
 
        self.dur = dur
 
        self.endtime = endtime
 
        self.fades = fades
 
        self.cuestart = None
 
        self.init_levels = None
 
    def channels_involved(self):
 
        'Return which channels are involved.  This is important for marking.'
 
        c = {}
 
        for fade in self.fades:
 
            for f_chan in fade.channels_involved():
 
                c[f_chan] = 1
 
        return c.keys()
 
    def start(self, levels, time):
 
        'Mark the beginning of a cue'
 
        # print "cue marked with", levels
 
        self.init_levels = levels
 
        self.init_time = time
 

	
 
        for fade in self.fades:
 
            subdict = subsetdict(levels, fade.channels_involved())
 
            fade.start(subdict, time)
 
    def get_levels(self, curtime):
 
        'Returns the current levels'
 
        d = {}
 
        for fade in self.fades:
 
            fade_d = fade.get_levels(curtime)
 
            for ch, lev in fade_d.items():
 
                d[ch] = max(lev, d.get(ch, 0))
 
        return d
 
    def get_end_levels(self):
 
        'Returns the final levels'
 
        d = {}
 
        for fade in self.fades:
 
            fade_d = fade.get_end_levels()
 
            for ch, lev in fade_d.items():
 
                d[ch] = max(lev, d.get(ch, 0))
 
        return d
 

	
 
class Fade(Cue):
 
    'See Cue.__doc__'
 
    def __init__(self, channel, starttime, dur=None, endlevel=0, param=None):
 
        'Fades are simple Cues'
 
        Cue.__init__(self, "%s -> %f" % (channel, endlevel), starttime, dur)
 
        Cue.__init__(self, "%s -> %.1f" % (channel, endlevel), starttime, dur)
 
        self.channel = channel
 
        self.endlevel = endlevel
 
        self.dur = dur
 
        self.param = param
 
    def start(self, levels, time):
 
        'Mark the beginning of the fade'
 
        # print "fade", self.name, "marked with", levels
 
        self.init_levels = levels
 
        self.init_level = levels[self.channel]
 
        self.init_time = time
 
    def channels_involved(self):
 
        'Speaks for itself, I hope'
 
        return [self.channel]
 
    def get_levels(self, curtime):
 
        elapsed = curtime - self.init_time
 
        if elapsed <= self.starttime:
 
            return self.init_levels
 
        elif elapsed >= self.endtime:
 
            return {self.channel : self.endlevel}
 
        else:
 
            percent = float(elapsed) / self.dur
 
            percent = float((curtime - self.init_time) - self.starttime) / \
 
                        self.dur
 
            return {self.channel : self.init_level + 
 
                percent * (self.endlevel - self.init_level)}
 
    def get_end_levels(self):
 
        return {self.channel : self.endlevel}
 

	
 
if __name__ == '__main__':
 
    f1 = Fade('red', 0, 2, 100)
 
    f2 = Fade('green', 1, 3, 50)
 
    f3 = Fade('blue', 0, 4, 0)
 
    f4 = Fade('clear', 0, 8, 75) 
 
    c = Cue("Color shift", 0, 10, f1, f2, f3, f4)
 
    tstart = time()
 
    # note how green is not mentioned -- it goes to 0
 
    c.start({'red' : 0, 'blue' : 100, 'clear' : 25}, tstart)
 
    while time() - tstart < 15:
 
        curtime = time()
 
        levs = c.get_levels(curtime)
 
        s = '\t'.join(["%s: %d" % (k[0], v) for k, v, in levs.items()])
 
        print "%.1f" % (curtime - tstart), s
light8/Fader.py
Show inline comments
 
from Tix import *
 
from time import time # time is on my side
 
from util import subsetdict
 
from FlyingFader import FlyingFader
 

	
 
# statuses are:
 
# stopped - no cue is loaded or cue is stopped
 
# running - cue is running, not complete
 
# finished - cue is finished, next is loaded
 

	
 
stdfont = ('Arial', 10)
 

	
 
def get_selection(listbox):
 
    'Given a listbox, returns first selection as integer'
 
    selection = int(listbox.curselection()[0]) # blech
 
    return selection
 

	
 
class Fader(Frame):
 
    'User interface for cue fader'
 
    def __init__(self, master, cues, scalelevels):
 
        self.master = master
 
        self.cues = cues
 
        self.scalelevels = scalelevels
 
        self.time_start = 0
 
        self.init_layout()
 
        self.stop()
 
    def init_layout(self):
 
        Frame.__init__(self, self.master)
 

	
 
        # info variables
 
        self.cuename = StringVar()
 
        self.cuelength = DoubleVar()
 
        self.cuetarget = StringVar()
 

	
 
        # info about a running cue
 
        self.cuestatus = StringVar() # text description
 
        self.cuestatus.set("stopped")
 
        
 
        self.cuepercent = DoubleVar() # percent complete
 
        self.cuepercent.set(0)
 
        self.cuepercent.trace('w', self.update_percent)
 
        self.cuetimeelapse = StringVar() # time elapsed
 
        self.cuetimeelapse.set('0s')
 
        self.cuetimeleft = StringVar() # time left
 
        self.cuetimeleft.set('0s')
 

	
 
        buttonframe = Frame(self)
 
        topframe = Frame(self) # to contain cue list and infoframe
 
        infoframe = Frame(topframe)
 
        topframe.pack()
 

	
 
        self.listbox = ScrolledListBox(buttonframe, 
 
        self.listbox = ScrolledListBox(topframe, 
 
            command=self.update_selection)
 
        self.listbox.listbox.configure({'exportselection' : 0, 
 
            'selectmode' : EXTENDED})
 
        for c in self.cues:
 
            self.listbox.listbox.insert(END, c.name)
 
        self.listbox.pack(side=TOP)
 
        self.listbox.pack(side=LEFT)
 
        self.listbox.listbox.bind("<<ListboxSelect>>", self.update_selection, 
 
            add=1)
 
        Button(buttonframe, text="Go", command=self.go, font=stdfont,
 
            bg='green').pack(side=LEFT)
 
        Button(buttonframe, text="Stop", command=self.stop, font=stdfont,
 
            bg='red').pack(side=LEFT)
 
        Button(buttonframe, text="Prev", command=self.prev, 
 
            font=stdfont).pack(side=LEFT)
 
        Button(buttonframe, text="Next", command=self.next, 
 
            font=stdfont).pack(side=LEFT)
 
        nextbutton = Button(buttonframe, text="Next", command=self.next, 
 
            font=stdfont)
 
        # Button(buttonframe, text="Load", command=self.mark_start, bg='grey80',
 
            # font=stdfont).pack(side=LEFT)
 

	
 
        infoframe = Frame(self)
 
        Label(infoframe, textvariable=self.cuename, 
 
            font=('Arial', 12), bg='lightBlue').grid(columnspan=4, sticky=NE+SW)
 

	
 
        Label(infoframe, text="Length", font=stdfont, 
 
            bg='lightPink').grid(row=1, sticky=NE+SW)
 
        Label(infoframe, textvariable=self.cuelength, 
 
            font=stdfont).grid(row=1, column=1, columnspan=3, sticky=NE+SW)
 

	
 
        Label(infoframe, text="Target", font=stdfont,
 
            bg='lightPink', wraplength=50).grid(row=2, sticky=NE+SW)
 
            bg='lightPink').grid(row=2, sticky=NE+SW)
 
        Label(infoframe, textvariable=self.cuetarget, 
 
            font=stdfont).grid(row=2, column=1, columnspan=3, sticky=NE+SW)
 
            font=stdfont, wraplength=250).grid(row=2, column=1, columnspan=3, 
 
                sticky=NE+SW)
 

	
 
        Label(infoframe, text="Status", font=stdfont,
 
            bg='lightPink').grid(row=3, sticky=NE+SW)
 
        Label(infoframe, textvariable=self.cuestatus, 
 
            font=stdfont).grid(row=3, column=1, columnspan=3, sticky=NE+SW)
 

	
 
        Label(infoframe, text="Time Elapsed", font=stdfont,
 
            bg='lightPink').grid(row=4, sticky=NE+SW)
 
        Label(infoframe, textvariable=self.cuetimeelapse, 
 
            font=stdfont).grid(row=4, column=1, sticky=NE+SW)
 

	
 
        Label(infoframe, text="Time Remain", font=stdfont,
 
            bg='lightPink').grid(row=4, column=2, sticky=NE+SW)
 
        Label(infoframe, textvariable=self.cuetimeleft, 
 
            font=stdfont).grid(row=4, column=3, sticky=NE+SW)
 

	
 
        Label(infoframe, text="Percent Complete", font=stdfont,
 
            bg='lightPink').grid(row=5, column=0, sticky=NE+SW)
 
        self.percentlabel = Label(infoframe, 
 
            font=stdfont)
 
        self.percentlabel.grid(row=5, column=1, columnspan=3, sticky=NE+SW)
 

	
 
        s = Scale(infoframe, variable=self.cuepercent,
 
        # s = Scale(infoframe, variable=self.cuepercent,
 
        s = Scale(buttonframe, variable=self.cuepercent,
 
                        showvalue=0, length=220,
 
                        width=18, sliderlength=30,
 
                        to=100,res=.1,from_=0,bd=1, font=stdfont,
 
                        orient='horiz')
 
        s.grid(row=6, columnspan=4, sticky='ew')
 
        # s.grid(row=6, columnspan=4, sticky='ew')
 
        nextbutton.pack(side=RIGHT)
 
        s.pack(side=RIGHT, expand=1, fill=X)
 

	
 
        infoframe.pack(side=RIGHT, fill=BOTH, expand=1)
 
        buttonframe.pack(side=BOTTOM)
 
        buttonframe.pack(side=BOTTOM, expand=1, fill=X)
 

	
 
        self.listbox.listbox.select_set(0)
 
        self.update_selection()
 
    def mark_start(self):
 
        self.time_start = time()
 
        startlevels = dict([(k, v.get()) for k, v in self.scalelevels.items()])
 
        # print "going to mark with", startlevels
 
        self.current.start(startlevels, self.time_start)
 
    def update_percent(self, *args):
 
        if self.cuestatus.get() != 'running':
 
            self.cuestatus.set("running")
 
            self.time_start = time()
 
            startlevels = dict([(k, v.get()) 
 
                for k, v in self.scalelevels.items()])
 
            self.current.start(startlevels, self.time_start)
 
            self.mark_start()
 

	
 
        percent = self.cuepercent.get()
 
        self.percentlabel.config(text='%.1f%%' % percent)
 
        percent /= 100
 

	
 
        elapsed = percent * self.current.dur
 
        self.cuetimeelapse.set('%.1fs' % elapsed)
 
        self.cuetimeleft.set('%.1fs' % (self.current.dur - elapsed))
 

	
 
        newlevels = self.current.get_levels(self.time_start + elapsed)
 
        # print "newlevels", newlevels
 
        for ch, lev in newlevels.items():
 
            try:
 
                self.scalelevels[ch].set(lev / 100.0)
 
                self.scalelevels[ch].set(lev)
 
            except KeyError:
 
                pass
 

	
 
    def update_selection(self, *args):
 
        selection = int(self.listbox.listbox.curselection()[0]) # blech
 
        self.cuestatus.set('stopped')
 
        selection = get_selection(self.listbox.listbox)
 
        self.current = self.cues[selection]
 
        self.cuename.set(self.current.name)
 
        self.cuelength.set(self.current.dur)
 
        target = ', '.join(['%s -> %.1f' % (n, lev) 
 
        target = ', '.join(['%s -> %.2f' % (n, lev) 
 
            for n, lev in self.current.get_end_levels().items()])
 
        self.cuetarget.set(target)
 
        self.cuetimeelapse.set('0s')
 
        self.cuetimeleft.set('%.1fs' % self.current.dur)
 
        self.cuepercent.set(0)
 
    def go(self):
 
        self.update_selection()
 
        self.cuestatus.set("running")
 
        self.time_start = time()
 
        startlevels = dict([(k, v.get()) for k, v in self.scalelevels.items()])
 
        self.current.start(startlevels, self.time_start)
 
        self.mark_start()
 
        self.running_loop()
 
    def stop(self):
 
        self.cuestatus.set('stopped')
 
    def prev(self):
 
        self.cuestatus.set('stopped')
 
        selection = int(self.listbox.listbox.curselection()[0]) # blech
 
        self.stop()
 
        selection = get_selection(self.listbox.listbox)
 
        if selection != 0:
 
            self.listbox.listbox.select_clear(selection)
 
            self.listbox.listbox.select_set(selection - 1)
 
            self.update_selection()
 
            self.mark_start()
 
    def next(self):
 
        self.cuestatus.set('stopped')
 
        selection = int(self.listbox.listbox.curselection()[0]) # blech
 
        self.stop()
 
        selection = get_selection(self.listbox.listbox)
 
        if selection != self.listbox.listbox.size() - 1:
 
            self.listbox.listbox.select_clear(selection)
 
            self.listbox.listbox.select_set(selection + 1)
 
            self.update_selection()
 
            self.mark_start()
 
    def running_loop(self):
 
        if self.cuestatus.get() == 'stopped':
 
            return
 
        curtime = time()
 
        elapsed = (curtime - self.time_start)
 

	
 
        if elapsed > self.current.dur:
 
            self.cuestatus.set('finished')
 
            self.cuestatus.set('stopped')
 
            self.cuepercent.set(100)
 

	
 
            # advance cues if okay
 
            self.next()
 
            return
 

	
 
        self.cuepercent.set(100 * elapsed / self.current.dur)
 
        self.after(30, self.running_loop)
light8/rsn.py
Show inline comments
 
#!/usr/bin/env python
 
from __future__ import nested_scopes
 

	
 
from Tix import *
 
from time import sleep
 
from signal import signal, SIGINT
 
import sys, cPickle
 

	
 
import io
 
from uihelpers import *
 
from panels import *
 
from Xfader import *
 
from subediting import Subediting
 
from Fader import Fader
 
import stage
 

	
 

	
 
if len(sys.argv) >= 2:
 
    DUMMY = 0
 
    print "This is the real thing, baby"
 
    window_title = "Light 8.8 (On Air)"
 
else:
 
    DUMMY = 1
 
    print "Dummy mode"
 
    window_title = "Light 8.8 (Bogus)"
 

	
 
root = Tk()
 
root.wm_title(window_title)
 
root.wm_geometry('+462+470')
 
root.tk_focusFollowsMouse()
 

	
 
import Subs, Patch
 

	
 
def get_data(*args):
 
    Subs.reload_data(DUMMY)
 
    Patch.reload_data(DUMMY)
 
    print "Patch:", Patch.patch
 
    print "Subs:", ', '.join(Subs.subs.keys())
 

	
 
get_data()
 

	
 
@@ -76,51 +75,51 @@ class Lightboard:
 
        leveldisplay_tl = toplevelat(873,400)
 
        leveldisplay_tl.bind('<Escape>', sys.exit)
 

	
 
        self.leveldisplay = Leveldisplay(leveldisplay_tl, self.channel_levels)
 
        for i in range(0,len(self.channel_levels)):
 
            self.channel_levels[i].config(text=self.oldlevels[i])
 
            colorlabel(self.channel_levels[i])
 

	
 
        Console(self)
 

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

	
 
        root.bind('<q>', self.quit)
 
        root.bind('<r>', self.refresh)
 
        leveldisplay_tl.bind('<q>', self.quit)
 
        leveldisplay_tl.bind('<r>', self.refresh)
 

	
 
        self.xfader.setupwidget(xf)
 
        controlpanel.pack()
 

	
 
        # cuefader_tl = toplevelat(98, 480)
 
        # cuefader = Fader(cuefader_tl, Subs.cues, self.scalelevels)
 
        # cuefader.pack()
 
        cuefader_tl = toplevelat(78, 480)
 
        cuefader = Fader(cuefader_tl, Subs.cues, self.scalelevels)
 
        cuefader.pack()
 

	
 
    def refresh(self, *args):
 
        'rebuild interface, reload data'
 
        get_data()
 
        self.subediting.refresh()
 
        self.buildinterface()
 
        bindkeys(root,'<Escape>', self.quit)
 

	
 
    def stageassub(self):
 
        """returns the current onstage lighting as a levels
 
        dictionary, skipping the zeros, and using names where
 
        possible"""
 
        levs=self.oldlevels
 
        
 
        return dict([(Patch.get_channel_name(i),l) for i,l
 
                     in zip(range(1,len(levs)+1),levs)
 
                     if l>0])
 
    def save_sub(self, name, levels):
 
        if not name:
 
            print "Enter sub name in console."
 
            return
 

	
 
        st = ''
 
        linebuf = 'subs["%s"] = {' % name
0 comments (0 inline, 0 general)