changeset 386:551f06733559

bcf2000 and kc: sliders can be turned off
author David McClosky <dmcc@bigasterisk.com>
date Fri, 15 Jun 2007 23:05:21 +0000
parents e6f5ffb6a1b4
children 48af0ea86ff4
files bcf2000.py bin/keyboardcomposer
diffstat 2 files changed, 26 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/bcf2000.py	Fri Jun 15 22:08:09 2007 +0000
+++ b/bcf2000.py	Fri Jun 15 23:05:21 2007 +0000
@@ -42,7 +42,7 @@
     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 @@
 
     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 @@
             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()
--- a/bin/keyboardcomposer	Fri Jun 15 22:08:09 2007 +0000
+++ b/bin/keyboardcomposer	Fri Jun 15 23:05:21 2007 +0000
@@ -85,10 +85,10 @@
                 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 @@
             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)