# HG changeset patch # User David McClosky # Date 2007-06-15 23:05:21 # Node ID 551f067335592e4c8de75725f8e24289d7d764ae # Parent e6f5ffb6a1b4184065ab78c9b9b6c6990bb8f34c bcf2000 and kc: sliders can be turned off diff --git a/bcf2000.py b/bcf2000.py --- a/bcf2000.py +++ b/bcf2000.py @@ -42,7 +42,7 @@ class BCF2000(object): def poll(self): try: bytes = self.dev.read(3) - except IOError, e: + except (IOError, AttributeError): return if len(bytes) == 0: print "midi stall, reopen slider device" @@ -91,6 +91,9 @@ class BCF2000(object): def valueOut(self, name, value): """call this to send an event to the hardware""" + if self.dev is None: + return + value = int(value) if self.lastValue.get(name) == value: return @@ -101,7 +104,10 @@ class BCF2000(object): value = value * 127 #print "bcf: write %s %s" % (name, value) self.dev.write(chr(0xb0) + chr(which[0]) + chr(int(value))) - + + def close(self): + self.dev.close() + self.dev = None if __name__ == '__main__': b = BCF2000() diff --git a/bin/keyboardcomposer b/bin/keyboardcomposer --- a/bin/keyboardcomposer +++ b/bin/keyboardcomposer @@ -85,10 +85,10 @@ class KeyboardComposer(Frame, SubClient) pass self.connect_to_hw(hw_sliders) - self.draw_ui() + self.draw_ui(hw_sliders) self.send_levels_loop() - def draw_ui(self): + def draw_ui(self, hw_sliders): self.rows = [] # this holds Tk Frames for each row self.slider_vars = {} # this holds subname:sub Tk vars self.slider_table = {} # this holds coords:sub Tk vars @@ -111,10 +111,26 @@ class KeyboardComposer(Frame, SubClient) command=lambda: self.save_current_stage(self.sub_name.get()), bg='black', fg='white') self.save_stage_button.pack(side=LEFT) + self.sliders_status_var = IntVar() + self.sliders_status_var.set(hw_sliders) + self.sliders_checkbutton = Checkbutton(self.buttonframe, + text="Sliders", variable=self.sliders_status_var, + command=lambda: self.toggle_slider_connectedness(), + bg='black', fg='white') + self.sliders_checkbutton.pack(side=LEFT) + self.sub_name = Entry(self.buttonframe, bg='black', fg='white') self.sub_name.pack(side=LEFT) self.stop_frequent_update_time = 0 + def toggle_slider_connectedness(self): + state = self.sliders_status_var.get() + if state: + self.sliders.reopen() + else: + self.sliders.close() + self.change_row(self.current_row) + self.rows[self.current_row].focus() def connect_to_hw(self, hw_sliders): if hw_sliders: self.sliders = Sliders(self)