Changeset - 929ccd4ec800
[Not reviewed]
default
0 2 0
Drew Perttula - 13 years ago 2012-06-09 10:03:36
drewp@bigasterisk.com
live reloading of curveview.py, very nice
Ignore-this: f7362d3c4f5215c1fe060fe8f06ebfe5
2 files changed with 49 insertions and 26 deletions:
0 comments (0 inline, 0 general)
bin/curvecalc
Show inline comments
 
@@ -25,13 +25,13 @@ import logging
 
log = logging.getLogger()
 

	
 
import run_local
 
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
 
from light9.namespaces import L9
 
from light9.curvecalc.subterm import read_all_subs, savekey, graphPathForSubterms
 
from light9.curvecalc.subtermview import add_one_subterm
 
@@ -59,26 +59,38 @@ class Main(object):
 
        mainwin.set_title("curvecalc - %s" % graph.label(song))
 
        
 
        self.add_subterms_for_song(song, curveset, subterms,
 
                                   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"))
 

	
 
        #zc = Zoomcontrol(root)
 

	
 
    def onSave(self, *args):
light9/curvecalc/curveview.py
Show inline comments
 
@@ -72,13 +72,13 @@ class Curveview(object):
 
    graphical curve widget only. Please pack .widget
 
    """
 
    def __init__(self, curve, knobEnabled=False, isMusic=False, **kw):
 
        """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()
 

	
 
        self.redrawsEnabled = False
 
        self.curve = curve
 
        self.knobEnabled = knobEnabled
 
@@ -420,40 +420,49 @@ class Curveview(object):
 
        #        self.bind("<KeyRelease-Control_L>",lambda ev: curs(0))
 
        if 0:
 
            self.tag_bind(line,"<Control-ButtonPress-1>",self.new_point_at_mouse)
 

	
 

	
 
    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))
 
                      
 
            self.dots[i]=dot
 

	
 
        def delpoint(ev):
 
            # had a hard time tag_binding to the points, so i trap at
 
            # the widget level (which might be nice anyway when there
 
            # 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()
 

	
 
    def find_index_near(self,x,y):
 
        tags = self.gettags(self.find_closest(x, y))
 
        try:
 
@@ -498,12 +507,13 @@ class Curveview(object):
 
            self.selected_points[:] = newsel
 
            idxs[:] = newidxs
 
            
 
        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')
 
            else:
 
                self.itemconfigure(d,fill='blue')
 
        
 
@@ -569,12 +579,13 @@ class CurveRow(object):
 

	
 
    please pack self.box
 
    """
 
    def __init__(self, name, curve, slider, knobEnabled):
 

	
 
        self.box = gtk.HandleBox()
 
        self.box.set_border_width(1)
 

	
 
        cols = gtk.HBox()
 
        self.box.add(cols)
 
        
 
        controls = gtk.Frame()
 
        controls.set_size_request(115, -1)
0 comments (0 inline, 0 general)