changeset 287:5322639d61e9

refactoring and little fixes in curvecalc and keyboardcomposer font change in KC, cleanup of CC's main section, maybe some little fixes that i can't remember because darcs doesn't show the changes at the same time i'm writing this message
author Drew Perttula <drewp@bigasterisk.com>
date Sat, 18 Jun 2005 02:14:45 +0000
parents 2848cf5e14c5
children 22529016c4f2
files bin/curvecalc bin/keyboardcomposer
diffstat 2 files changed, 67 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/bin/curvecalc	Sat Jun 18 01:37:23 2005 +0000
+++ b/bin/curvecalc	Sat Jun 18 02:14:45 2005 +0000
@@ -25,6 +25,11 @@
     def __init__(self):
         self.player=None # xmlrpc Proxy to player
         self.recenttime=0
+
+        dispatcher.connect(self.seekplay_or_pause,"music seek")
+
+    def seekplay_or_pause(self,t):
+        self.music.seekplay_or_pause(t)
         
     def current_time(self):
         """return deferred which gets called with the current time"""
@@ -155,10 +160,41 @@
 class Output:
     lastsendtime=0
     lastsendlevs=None
-    def __init__(self,subterms):
-        make_attributes_from_args('subterms')
+    def __init__(self,subterms,music):
+        make_attributes_from_args('subterms','music')
+
+        self.recent_t=[]
+        self.later = None
+
+        self.update()
+        
+    def update(self):
+        d = music.current_time()
+        d.addCallback(self.update2)
+        d.addErrback(self.updateerr)
+        
+    def updateerr(self,e):
+
+        print e.getTraceback()
+        dispatcher.send("update status",val=e.getErrorMessage())
+        if self.later and not self.later.cancelled and not self.later.called:
+            self.later.cancel()
+        self.later = reactor.callLater(1,self.update)
+        
+    def update2(self,t):
+        dispatcher.send("update status",
+                        val="ok: receiving time from music player")
+        if self.later and not self.later.cancelled and not self.later.called:
+            self.later.cancel()
+
+        self.later = reactor.callLater(.05, self.update)
+
+        self.recent_t = self.recent_t[-50:]+[t]
+        period = (self.recent_t[-1] - self.recent_t[0]) / len(self.recent_t)
+        dispatcher.send("update period", val=period)
+        self.send_dmx(t)
+        
     def send_dmx(self,t):
-
         scaledsubs=[]
         for st in self.subterms:
             scl = st.scaled(t)
@@ -212,8 +248,10 @@
         if self.cur_col == 0:
             self.cur_row += 1
 
-def add_one_subterm(subname, curveset, subterms, root, ssv, expr=''):
-    expr = expr or '%s(t)' % subname
+def add_one_subterm(subname, curveset, subterms, root, ssv, expr=None):
+    if expr is None:
+        expr = '%s(t)' % subname
+
     term = Subterm(Submaster.Submaster(subname), Subexpr(curveset,expr))
     subterms.append(term)
 
@@ -243,7 +281,20 @@
     entry.bind("<Key-Return>", lambda evt: add_cmd())
 
     return f
-    
+
+def add_subterms_from_file(filename, curveset, subterms, root, ssv):
+    for line in file(filename):
+        try:
+            subname,expr = line.strip().split(" ",1)
+        except ValueError:
+            subname = line.strip()
+            expr = ""
+
+        term = add_one_subterm(subname, curveset, subterms, root, ssv, expr)
+
+        # stv=Subtermview(root,term)
+        # stv.pack(side='top',fill='x')
+
 #######################################################################
 root=tk.Tk()
 root.tk_setPalette("gray50")
@@ -259,7 +310,6 @@
     raise SystemExit("song name is required, e.g. '05-mix'")
 
 music=Music()
-dispatcher.connect(lambda t: music.seekplay_or_pause(t),"music seek")
 
 zc = Zoomcontrol(root)
 zc.pack(side='top',fill='x')
@@ -282,19 +332,10 @@
 subterms = []
 sub_commands_tk(root, curveset, subterms, root, ssv).pack(side='top',fill='x')
 
-for line in file(showconfig.subtermsForSong(song)):
-    try:
-        subname,expr = line.strip().split(" ",1)
-    except ValueError:
-        subname = line.strip()
-        expr = ""
+add_subterms_from_file(showconfig.subtermsForSong(song),
+                       curveset, subterms, root, ssv)
 
-    term = add_one_subterm(subname, curveset, subterms, root, ssv, expr)
-    
-    # stv=Subtermview(root,term)
-    # stv.pack(side='top',fill='x')
-
-out = Output(subterms)
+out = Output(subterms, music)
 
 def savekey(*args):
     print "saving",song
@@ -311,32 +352,6 @@
     tk.Label(root,text=helpline, font="Helvetica -12 italic",
              anchor='w').pack(side='top',fill='x')
 
-recent_t=[]
-later = None
-def update():
-    global later
-    d = music.current_time()
-    d.addCallback(update2)
-    d.addErrback(updateerr)
-def updateerr(e):
-    global later
-    dispatcher.send("update status",val=e.getErrorMessage())
-    if later and not later.cancelled and not later.called: later.cancel()
-    later = reactor.callLater(1,update)
-def update2(t):
-    global recent_t,later
-    dispatcher.send("update status",
-                    val="ok: receiving time from music player")
-    if later and not later.cancelled and not later.called: later.cancel()
-    
-    later = reactor.callLater(.05,update)
-
-    recent_t = recent_t[-50:]+[t]
-    period = (recent_t[-1]-recent_t[0])/len(recent_t)
-    dispatcher.send("update period",val=period)
-    out.send_dmx(t)
-update()
-
 #def logprint(msg):
 #    print "log",msg
 #twisted.python.log.addObserver(logprint)
--- a/bin/keyboardcomposer	Sat Jun 18 01:37:23 2005 +0000
+++ b/bin/keyboardcomposer	Sat Jun 18 02:14:45 2005 +0000
@@ -46,7 +46,7 @@
         self.slider_var = DoubleVar()
         self.slider_var.set(current_level)
         self.scale = SubScale(self, variable=self.slider_var, width=20)
-        namelabel = Label(self, text=name, font="Arial 11", bg='black',
+        namelabel = Label(self, text=name, font="Arial 9", bg='black',
             fg='white')
         namelabel.pack(side=TOP)
         levellabel = Label(self, textvariable=self.slider_var, font="Arial 11",
@@ -279,4 +279,9 @@
     reactor.addSystemEventTrigger('after', 'shutdown', kc.save)
     
     tksupport.install(root,ms=10)
-    reactor.run()
+    if 0:
+        sys.path.append("/home/drewp/projects/cuisine/pour")
+        from utils import runstats
+        runstats("reactor.run()")
+    else:
+        reactor.run()