Mercurial > code > home > repos > light9
changeset 696:929ccd4ec800
live reloading of curveview.py, very nice
Ignore-this: f7362d3c4f5215c1fe060fe8f06ebfe5
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Sat, 09 Jun 2012 10:03:36 +0000 |
parents | 0b8fc64a896c |
children | 6e9b5ed1e863 |
files | bin/curvecalc light9/curvecalc/curveview.py |
diffstat | 2 files changed, 49 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/bin/curvecalc Fri Jun 08 07:54:32 2012 +0000 +++ b/bin/curvecalc Sat Jun 09 10:03:36 2012 +0000 @@ -28,7 +28,7 @@ from light9 import showconfig, prof from light9.curvecalc.zoomcontrol import Zoomcontrol from light9.curvecalc.curve import Curveset -from light9.curvecalc.curveview import Curvesetview +from light9.curvecalc import curveview from light9.curvecalc.musicaccess import Music, currentlyPlayingSong from light9.wavelength import wavelength from light9.uihelpers import toplevelat @@ -62,20 +62,32 @@ wtree.get_object("subterms") ) + def refreshCurveView(): + m = os.path.getmtime(curveview.__file__.replace('.pyc', '.py')) - curvesetView = Curvesetview(wtree.get_object("curves"), curveset) - self.curvesetView = curvesetView # mem problem; don't let this get lost - - # curvesetview must already exist, since this makes 'add_curve' - # signals for all the initial curves - curveset.load(basename=os.path.join( - showconfig.curvesDir(), - showconfig.songFilenameFromURI(song)), - skipMusic=opts.skip_music) - # this is scheduled after some tk shuffling, to try to minimize - # the number of times we redraw the curve at startup. If tk is - # very slow, it's ok. You'll just get some wasted redraws. - curvesetView.goLive() + if not hasattr(self, 'curvesetView') or self.curvesetView._mtime != m: + print "reload curveview.py" + curvesVBox = wtree.get_object("curves") + [curvesVBox.remove(c) for c in curvesVBox.get_children()] + reload(curveview) + # mem problem somewhere; need to hold a ref to this + self.curvesetView = curveview.Curvesetview( + curvesVBox, curveset) + self.curvesetView._mtime = m + + # curvesetview must already exist, since this makes 'add_curve' + # signals for all the initial curves + curveset.load(basename=os.path.join( + showconfig.curvesDir(), + showconfig.songFilenameFromURI(song)), + skipMusic=opts.skip_music) + # this is scheduled after some tk shuffling, to try to minimize + # the number of times we redraw the curve at startup. If tk is + # very slow, it's ok. You'll just get some wasted redraws. + self.curvesetView.goLive() + + reactor.callLater(1, refreshCurveView) + refreshCurveView() self.makeStatusLines(wtree.get_object("status"))
--- a/light9/curvecalc/curveview.py Fri Jun 08 07:54:32 2012 +0000 +++ b/light9/curvecalc/curveview.py Sat Jun 09 10:03:36 2012 +0000 @@ -75,7 +75,7 @@ """knobEnabled=True highlights the previous key and ties it to a hardware knob""" self.widget = goocanvas.Canvas() - self.widget.set_property("background-color", "black") + self.widget.set_property("background-color", "gray20") self.widget.set_size_request(-1, 130) self.root = self.widget.get_root_item() @@ -423,22 +423,31 @@ def _draw_handle_points(self,visible_idxs,visible_points): - return for i,p in zip(visible_idxs,visible_points): rad=3 worldp = p p = self.screen_from_world(p) - dot = self.create_rectangle(p[0]-rad,p[1]-rad,p[0]+rad,p[1]+rad, - outline='black',fill='blue', - tags=('curve','point', 'handle%d' % i)) + dot = goocanvas.Rect(parent=self.curveGroup, + x=p[0] - rad, y=p[1] - rad, + width=rad * 2, height=rad * 2, + stroke_color='gray20', + fill_color='blue', + line_width=1, + #tags=('curve','point', 'handle%d' % i) + ) if worldp[1] == 0: rad += 3 - dot2 = self.create_oval(p[0]-rad,p[1]-rad, - p[0]+rad,p[1]+rad, - outline='darkgreen', - tags=('curve','point', 'handle%d' % i)) - self.tag_bind('handle%d' % i,"<ButtonPress-1>", - lambda ev,i=i: self.dotpress(ev,i)) + dot2 = goocanvas.Ellipse(parent=self.curveGroup, + center_x=p[0], + center_y=p[1], + radius_x=rad, + radius_y=rad, + line_width=.8, + stroke_color='darkgreen', + #tags=('curve','point', 'handle%d' % i) + ) + #self.tag_bind('handle%d' % i,"<ButtonPress-1>", + # lambda ev,i=i: self.dotpress(ev,i)) #self.tag_bind('handle%d' % i, "<Key-d>", # lambda ev, i=i: self.remove_point_idx(i)) @@ -450,7 +459,7 @@ # are multiple pts selected) if self.selected_points: self.remove_point_idx(*self.selected_points) - self.bind("<Key-Delete>", delpoint) + #self.bind("<Key-Delete>", delpoint) self.highlight_selected_dots() @@ -501,6 +510,7 @@ self.update_curve() def highlight_selected_dots(self): + return for i,d in self.dots.items(): if i in self.selected_points: self.itemconfigure(d,fill='red') @@ -572,6 +582,7 @@ def __init__(self, name, curve, slider, knobEnabled): self.box = gtk.HandleBox() + self.box.set_border_width(1) cols = gtk.HBox() self.box.add(cols)