changeset 371:058f2f508504

curve: hw slider buttons make new keys for their curve
author David McClosky <dmcc@bigasterisk.com>
date Fri, 15 Jun 2007 18:58:05 +0000
parents 10e4f755beca
children b2469273289e
files light9/curve.py
diffstat 1 files changed, 23 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/light9/curve.py	Fri Jun 15 18:46:16 2007 +0000
+++ b/light9/curve.py	Fri Jun 15 18:58:05 2007 +0000
@@ -162,7 +162,7 @@
         dispatcher.connect(self.select_between,"select between")
         if self.knobEnabled:
             dispatcher.connect(self.knob_in, "knob in")
-            dispatcher.connect(self.slider_in, "slider in")
+            dispatcher.connect(self.slider_in, "set key")
         self.bind("<Configure>",self.update_curve)
         for x in range(1, 6):
             def add_kb_marker_point(evt, x=x):
@@ -224,11 +224,15 @@
             self.curve.points[idx] = (pos[0], value)
             self.update_curve()
 
-    def slider_in(self, curve, value):
-        """user pushed on a slider. make a new key"""
+    def slider_in(self, curve, value=None):
+        """user pushed on a slider. make a new key.  if value is None,
+        the value will be the same as the last."""
         if curve != self.curve:
             return
 
+        if value is None:
+            value = self.curve.eval(self.current_time())
+
         self.curve.insert_pt((self.current_time(), value))
         self.update_curve()
 
@@ -546,15 +550,18 @@
         self.dragging_dots = False
 
 class Sliders(BCF2000):
-    def __init__(self, cb, knobCallback):
+    def __init__(self, cb, knobCallback, knobButtonCallback):
         BCF2000.__init__(self)
         self.cb = cb
         self.knobCallback = knobCallback
+        self.knobButtonCallback = knobButtonCallback
     def valueIn(self, name, value):
         if name.startswith("slider"):
             self.cb(int(name[6:]), value / 127)
         if name.startswith("knob"):
             self.knobCallback(int(name[4:]), value / 127)
+        if name.startswith("button-knob"):
+            self.knobButtonCallback(int(name[11:]))
 
         
 class Curveset:
@@ -566,7 +573,8 @@
         self.sliderCurve = {} # slider number (1 based) : curve name
         self.sliderNum = {} # reverse
         if sliders:
-            self.sliders = Sliders(self.hw_slider_in, self.hw_knob_in)
+            self.sliders = Sliders(self.hw_slider_in, self.hw_knob_in, 
+                                   self.hw_knob_button)
             dispatcher.connect(self.curvesToSliders, "curves to sliders")
             dispatcher.connect(self.knobOut, "knob out")
             self.lastSliderTime = {} # num : time
@@ -642,7 +650,7 @@
         # bigger than the ignore time above.
         self.sliderSuppressOutputUntil[num] = now + .2
         
-        dispatcher.send("slider in", curve=curve, value=value)
+        dispatcher.send("set key", curve=curve, value=value)
 
     def hw_knob_in(self, num, value):
         try:
@@ -651,6 +659,15 @@
             return
         dispatcher.send("knob in", curve=curve, value=value)
 
+    def hw_knob_button(self, num):
+        try:
+            curve = self.curves[self.sliderCurve[num]]
+        except KeyError:
+            return
+
+        dispatcher.send("set key", curve=curve)
+        
+
     def curvesToSliders(self, t):
         now = time.time()
         for num, name in self.sliderCurve.items():