Mercurial > code > home > repos > light9
changeset 28:b0342f9ee328
attempts to save params, better loading behavior
author | dmcc |
---|---|
date | Sun, 07 Jul 2002 10:17:00 +0000 |
parents | bee0862f4436 |
children | f595fdd4c548 |
files | light8/Subs.py light8/rsn.py |
diffstat | 2 files changed, 50 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/light8/Subs.py Sun Jul 07 08:36:21 2002 +0000 +++ b/light8/Subs.py Sun Jul 07 10:17:00 2002 +0000 @@ -8,10 +8,17 @@ 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): @@ -84,6 +91,8 @@ 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) @@ -143,15 +152,23 @@ 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: @@ -166,7 +183,14 @@ 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: @@ -194,7 +218,7 @@ if type(name) == TupleType: name, color = name else: - color=None + color = None subs[name] = Sub(levels, color=color)
--- a/light8/rsn.py Sun Jul 07 08:36:21 2002 +0000 +++ b/light8/rsn.py Sun Jul 07 10:17:00 2002 +0000 @@ -127,8 +127,15 @@ 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 @@ -161,19 +168,26 @@ 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)