Changeset - b0342f9ee328
[Not reviewed]
default
0 2 0
dmcc - 23 years ago 2002-07-07 10:17:00

attempts to save params, better loading behavior
2 files changed with 50 insertions and 12 deletions:
0 comments (0 inline, 0 general)
light8/Subs.py
Show inline comments
 
from Patch import *
 
from time import time
 
from Tkinter import *
 
from types import TupleType
 

	
 
stdfont = ('Arial', 8)
 

	
 
class Param: # abstract
 
    def get_value(self):
 
        pass
 
    def set_value(self):
 
    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()
 

	
 
class SliderParam(Param):
 
@@ -75,24 +82,26 @@ class ListParam(Param):
 
                         height=len(self.options), exportselection=0)
 
        for o in self.options:
 
            self.l.insert(END, o)
 
        self.l.pack()
 

	
 
class LabelParam(Param):
 
    def __init__(self, initial=''):
 
        self.value = StringVar()
 
        self.value.set(initial)
 
    def get_value(self):
 
        return self.value.get()
 
    def set_value(self, v):
 
        if 'value' not in self.__dict__:
 
            self.value = StringVar()
 
        self.value.set(v)
 
    def draw_tk(self, frame):
 
        l = Label(frame, textvariable=self.value, font=stdfont)
 
        l.pack()
 

	
 
class ButtonParam(Param):
 
    def __init__(self, text, **options):
 
        self.options = {'text' : text}
 
        self.options.update(options)
 
        self.pressed = 0
 
        self.unread = 0 # unread button presses
 
    def draw_tk(self, frame):
 
@@ -134,48 +143,63 @@ class Params:
 
            f.pack()
 

	
 
class SliderAdjuster:
 
    def __init__(self):
 
        self.var = None
 
        self.atzero = 0
 
    def set(self, level):
 
        if self.var is not None:
 
            self.var.set(level)
 
    def get(self, level):
 
        if self.var is not None:
 
            return self.var.get()
 

	
 
        return None
 
    def justturnedon(self):
 
        return self.atzero
 
    def __getstate__(self):
 
        state = self.__dict__.copy()
 
        # remove var (non-pickleable)
 
        try:
 
            del state['var']
 
        except KeyError:
 
            pass
 
        return state
 
    # no setstate needed
 

	
 
class Sub:
 
    def __init__(self, levels, dimmers=68, color=None):
 
        self.levels = levels
 
        self.dimmers = dimmers
 
        self.dimmers = dimmers # needed?
 
        self.is_effect = callable(self.levels)
 
        self.slideradjuster = SliderAdjuster()
 
        if self.is_effect:
 
            self.params = Params()
 
            self.generator = self.levels(self.params, self.slideradjuster)
 
            self.generator.next()
 
        self.color = color
 
    def set_slider_var(self, slidervar):
 
        if self.is_effect:
 
            self.slideradjuster.var = slidervar
 
    def draw_tk(self, frame):
 
        if self.is_effect:
 
            self.params.draw_tk(frame)
 
    def get_state(self):
 
        pass
 
        state = self.__dict__.copy()
 
        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:
 
            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()])
 
@@ -185,17 +209,17 @@ def reload_data(dummy):
 
    if dummy:
 
        import ConfigDummy as Config
 
    else:
 
        import Config
 

	
 
    reload(Config)
 

	
 
    subs = {}
 
    for name, levels in Config.subs.items():
 
        if type(name) == TupleType:
 
            name, color = name
 
        else:
 
            color=None
 
            color = None
 

	
 
        subs[name] = Sub(levels, color=color)
 

	
 
    # subs = dict([(name, Sub(levels)) for name, levels in Config.subs.items()])
light8/rsn.py
Show inline comments
 
@@ -118,26 +118,33 @@ class Lightboard:
 
        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)
 
        except:
 
            print "Couldn't load prefs (%s)" % filename
 
            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:
 
@@ -152,35 +159,42 @@ class Lightboard:
 
            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')
 
        cPickle.dump(Pickles(self.scalelevels), file)
 
        root.destroy()
 
        sys.exit()
 
        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):
 
    def __init__(self, scalelevels, subs=None):
 
        self.scalelevels = dict([(name, lev.get()) 
 
            for name,lev in scalelevels.items()])
 
            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
0 comments (0 inline, 0 general)