Changeset - f595fdd4c548
[Not reviewed]
default
0 3 0
dmcc - 22 years ago 2002-07-07 10:41:06

minor cleanups, convert parallel port controller to a class
3 files changed with 18 insertions and 29 deletions:
0 comments (0 inline, 0 general)
light8/Subs.py
Show inline comments
 
@@ -4,28 +4,26 @@ from Tkinter import *
 
from types import TupleType
 

	
 
stdfont = ('Arial', 8)
 

	
 
class Param: # abstract
 
    def get_value(self):
 
        pass
 
    def set_value(self, v):
 
        pass
 
    def draw_tk(self, frame):
 
        pass
 
    def __getstate__(self):
 
        print "get_state:", self.get_value()
 
        return {'value' : self.get_value()}
 
    def __setstate__(self, dict):
 
        print "set_state to", dict
 
        self.value = StringVar()
 
        self.set_value(dict['value'])
 

	
 
class CheckboxParam(Param):
 
    def __init__(self, initial=0):
 
        self.value = IntVar()
 
        self.value.set(initial)
 
    def get_value(self):
 
        return self.value.get()
 
    def draw_tk(self, frame):
 
        self.c = Checkbutton(frame, variable=self.value)
 
        self.c.pack()
 
@@ -187,25 +185,25 @@ class Sub:
 
        if self.is_effect:
 
            del state['levels']
 
            del state['generator']
 

	
 
        return state
 
    def set_state(self, statedict):
 
        self.__dict__.update(statedict)
 
    def get_levels(self, level):
 
        d = {}
 
        if level == 0: 
 
            self.slideradjuster.atzero = 1
 
            return d
 
        if self.is_effect:
 
        if self.is_effect: # effect
 
            d = self.generator.next()
 
            self.slideradjuster.atzero = 0
 
        else: # dictionary (standard)
 
            d = self.levels
 
        return dict([(get_dmx_channel(ch), float(lev) * float(level)) 
 
            for ch, lev in d.items()])
 

	
 
def reload_data(dummy):
 
    global subs
 
    if dummy:
 
        import ConfigDummy as Config
 
    else:
light8/io.py
Show inline comments
 

	
 

	
 
from parport import *
 

	
 
DUMMY=1
 

	
 
def init(DUMMY_in):
 
    global DUMMY
 
    if not DUMMY_in:
 
        
 
        getparport()
 
        DUMMY=0
 

	
 
def sendlevels(levels):
 
    if DUMMY: return
 
    levels = list(levels) + [0]
 
    if levels[14] > 0: levels[14] = 100
 
    # print "levels", ' '.join(["%3.1f" % l for l in levels])
 
    outstart()
 
    for p in range(1,70):
 
        outbyte(levels[p-1]*255/100)
 
class ParportDMX:
 
    def __init__(self, dummy=1, dimmers=68):
 
        self.dummy = dummy
 
        if not dummy:
 
            getparport()
 
    def sendlevels(self, levels):
 
        if self.dummy: return
 
        levels = list(levels) + [0]
 
        # if levels[14] > 0: levels[14] = 100 # non-dim
 
        outstart()
 
        for p in range(1, dimmers + 2):
 
            outbyte(levels[p-1]*255 / 100)
light8/rsn.py
Show inline comments
 
@@ -27,25 +27,25 @@ 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)
 
parportdmx = io.ParportDMX(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()
 
@@ -103,52 +103,52 @@ class Lightboard:
 
            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)
 
        parportdmx.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
 

	
 
        except:
 
            print "BigTrouble: 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 = ''
 

	
 
@@ -179,22 +179,20 @@ class Lightboard:
 
        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])
 
        # print "substate", self.substate
 

	
 
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
0 comments (0 inline, 0 general)