diff --git a/bin/keyboardcomposer b/bin/keyboardcomposer --- a/bin/keyboardcomposer +++ b/bin/keyboardcomposer @@ -140,9 +140,8 @@ class KeyboardComposer(Frame, SubClient) self.sub_name = Entry(self.buttonframe, bg='black', fg='white') self.sub_name.pack(side=LEFT) - def redraw_sliders(self): - self.slider_vars = {} # this holds subname:sub Tk vars + self.slider_vars = {} # this holds suburi : sub Tk vars self.slider_table = {} # this holds coords:sub Tk vars self.name_to_subtk.clear() # subname : SubmasterTk instance @@ -219,7 +218,7 @@ class KeyboardComposer(Frame, SubClient) subtk.place(relx=col / 8, rely=0, relwidth=1 / 8, relheight=1) self.setup_key_nudgers(subtk.scale) - self.slider_vars[sub.name] = subtk.slider_var + self.slider_vars[sub.uri] = subtk.slider_var return subtk def toggle_slider_connectedness(self): @@ -337,11 +336,11 @@ class KeyboardComposer(Frame, SubClient) return # no slider assigned at that column subtk.scale.set(value) - def send_to_hw(self, subName, hwNum): + def send_to_hw(self, subUri, hwNum): if isinstance(self.sliders, DummySliders): return - v = round(127 * self.slider_vars[subName].get()) + v = round(127 * self.slider_vars[subUri].get()) chan = "slider%s" % hwNum # workaround for some rounding issue, where we receive one @@ -368,13 +367,12 @@ class KeyboardComposer(Frame, SubClient) row['bg'] = 'black' def get_levels(self): - return dict([(name, slidervar.get()) - for name, slidervar in self.slider_vars.items()]) + return dict([(uri, slidervar.get()) + for uri, slidervar in self.slider_vars.items()]) def get_levels_as_sub(self): - scaledsubs = [self.submasters.get_sub_by_name(sub) * level \ + scaledsubs = [self.submasters.get_sub_by_uri(sub) * level for sub, level in self.get_levels().items() if level > 0.0] - maxes = sub_maxes(*scaledsubs) return maxes diff --git a/bin/rdfdb b/bin/rdfdb --- a/bin/rdfdb +++ b/bin/rdfdb @@ -132,6 +132,7 @@ class Db(object): notifier.startReading() for inFile in [#"show/dance2012/config.n3", + "show/dance2012/patch.n3", "show/dance2012/subs/bcools", "show/dance2012/subs/bwarm", "show/dance2012/subs/house", diff --git a/light9/Submaster.py b/light9/Submaster.py --- a/light9/Submaster.py +++ b/light9/Submaster.py @@ -160,7 +160,7 @@ class PersistentSubmaster(Submaster): val = self.graph.value(lev, L9['level']) name = patchGraph.label(chan) if not name: - #log.error("sub %r has channel %r with no name- leaving out that channel" % (self.name, chan)) + log.error("sub %r has channel %r with no name- leaving out that channel" % (self.name, chan)) continue self.levels[name] = float(val) @@ -253,14 +253,9 @@ class Submasters: combined = notsongs + songs return combined - def get_all_sub_names(self): - return [s.name for s in self.get_all_subs()] - def get_sub_by_name(self, name): - "Makes a new sub if there isn't one." - if name in self.submasters: - return self.submasters[name] - return Submaster(name) - __getitem__ = get_sub_by_name + + def get_sub_by_uri(self, uri): + return self.submasters[uri] def fullsub(*chans): """Make a submaster with chans at full.""" diff --git a/light9/subclient.py b/light9/subclient.py --- a/light9/subclient.py +++ b/light9/subclient.py @@ -4,6 +4,7 @@ from light9.Submaster import Submaster # later, this stuff will talk to a SubServer class SubClient: def __init__(self): + """assumed that your init saves self.graph""" pass # we may later need init code for network setup def get_levels_as_sub(self): @@ -19,13 +20,16 @@ class SubClient: dmxclient.outputlevels(levels) def send_levels(self): + self.graph.addHandler(self._send_levels_handler) + + def _send_levels_handler(self): levels = self.get_dmx_list() dmxclient.outputlevels(levels) def send_levels_loop(self, delay=1000): """This function assumes that we are an instance of a Tk object (or at least that we have an 'after' method)""" - self.send_levels() + self.graph.addHandler(self.send_levels) self.after(delay, self.send_levels_loop, delay) def send_zeroes(self):