Files @ b0342f9ee328
Branch filter:

Location: light9/light8/rsn.py - annotation

dmcc
attempts to save params, better loading behavior
f974a462133f
45b12307c695
45b12307c695
f974a462133f
f974a462133f
f974a462133f
f974a462133f
f974a462133f
7adc65771676
7adc65771676
7adc65771676
f974a462133f
7adc65771676
45b12307c695
45b12307c695
45b12307c695
f974a462133f
45b12307c695
45b12307c695
45b12307c695
f974a462133f
45b12307c695
45b12307c695
45b12307c695
45b12307c695
f974a462133f
6284a812da50
f974a462133f
f974a462133f
45b12307c695
f974a462133f
f974a462133f
f974a462133f
f974a462133f
f974a462133f
f974a462133f
f974a462133f
45b12307c695
7adc65771676
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
45b12307c695
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
7dbe8067acea
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
45b12307c695
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
7adc65771676
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
f974a462133f
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
45b12307c695
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
45b12307c695
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
219d6fcbc28d
b0342f9ee328
b0342f9ee328
b0342f9ee328
b0342f9ee328
f974a462133f
f974a462133f
b0342f9ee328
f974a462133f
b0342f9ee328
b0342f9ee328
b0342f9ee328
f974a462133f
219d6fcbc28d
f974a462133f
219d6fcbc28d
219d6fcbc28d
f974a462133f
7adc65771676
7adc65771676
7adc65771676
f974a462133f
#!/usr/bin/env python
from __future__ import nested_scopes

from Tkinter import *
from time import sleep
from signal import *
import sys, thread, cPickle

import io
from uihelpers import *
from panels import *
from Xfader import *
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('+447+373')
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()

io.init(DUMMY)

class Lightboard:
    def __init__(self, master):
        self.master = master

        self.channel_levels = []
        self.scalelevels = {}
        self.oldlevels = [None] * 68

        self.buildinterface()
        self.load()
        self.backgroundloop()
    def buildinterface(self):
        for w in self.master.winfo_children():
            w.destroy()

        stage_tl = toplevelat(165,90)
        s = stage.Stage(stage_tl)
        stage.createlights(s)
        s.pack()

        sub_tl = toplevelat(0,0)
        effect_tl = toplevelat(0,352)

        self.xfader = Xfader(self.scalelevels)

        self.subpanels = Subpanels(sub_tl, effect_tl, self.scalelevels, Subs, 
            self.xfader, self.changelevel)

        leveldisplay_tl = toplevelat(873,400)
        leveldisplay_tl.bind('<Escape>', sys.exit)

        leveldisplay = Leveldisplay(leveldisplay_tl, self.channel_levels)

        Console()

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

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

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

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

    # this is called on a loop, and ALSO by the Scales
    def changelevel(self, *args):
        'Amp trims slider'

        levels = [0] * 68
        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 in zip(levels, self.channel_levels, self.oldlevels):
            if lev != oldlev:
                lab.config(text="%d" % lev)
                colorlabel(lab)

        self.oldlevels = levels[:]
            
        io.sendlevels(levels)

    def load(self):
        try:
            filename = '/tmp/light9.prefs'
            if DUMMY:
                filename += '.dummy'
            print "Loading from", filename
            file = open(filename, 'r')
            p = cPickle.load(file)
            for s, v in p.scalelevels.items():
                try:
                    self.scalelevels[s].set(v)
                except:
                    print "Couldn't set %s -> %s" % (s, v)
            for name, substate in p.substate.items():
                try:
                    Subs.subs[name].set_state(substate)
                except:
                    print "Couldn't set sub %s state" % name
        except IOError:
            print "IOError: Couldn't load prefs (%s)" % filename
        except EOFError:
            print "EOFrror: Couldn't load prefs (%s)" % filename

    def make_sub(self, name):
        i = 1
        # name = console_entry.get() # read from console
        if not name:
            print "Enter sub name in console."
            return

        st = ''
        linebuf = 'subs["%s"] = {' % name
        for l in self.oldlevels:
            if l:
                if len(linebuf) > 60: 
                    st += linebuf + '\n   '
                    linebuf = ''

                linebuf += ' "%s" : %d,' % (Patch.get_channel_name(i), l)
            i += 1
        st += linebuf + '}\n'
        if DUMMY:
            filename = 'ConfigDummy.py'
        else:
            filename = 'Config.py'
        f = open(filename, 'a')
        f.write(st)
        f.close()
        print 'Added sub:', st
        self.refresh()
    def backgroundloop(self, *args):
        self.master.after(50, self.backgroundloop, ())
        self.changelevel()
    def quit(self, *args):
        self.save()
        root.destroy()
        sys.exit()
    def save(self, *args):
        filename = '/tmp/light9.prefs'
        if DUMMY:
            filename += '.dummy'
        print "Saving to", filename
        file = open(filename, 'w')
        try:
            cPickle.dump(Pickles(self.scalelevels, Subs.subs.items()), file)
        except cPickle.UnpickleableError:
            print "UnpickleableError!  There's yer problem."

class Pickles:
    def __init__(self, scalelevels, subs=None):
        self.scalelevels = dict([(name, lev.get()) 
            for name, lev in scalelevels.items()])
        self.substate = dict([(name, subobj.get_state())
            for name, subobj in subs])

mr_lightboard = Lightboard(root)

signal(SIGINT, mr_lightboard.quit)
bindkeys(root,'<Escape>', mr_lightboard.quit)

# bindkeys(root,'<q>', quit)
# bindkeys(root,'<r>', refresh)
# bindkeys(root,'<s>', make_sub)
root.mainloop() # Receiver switches main