Changeset - ff914126f3ea
[Not reviewed]
default
0 2 0
Drew Perttula - 18 years ago 2007-06-15 04:29:44
drewp@bigasterisk.com
fix CC selection bindings
2 files changed with 33 insertions and 7 deletions:
0 comments (0 inline, 0 general)
bin/curvecalc
Show inline comments
 
@@ -405,25 +405,25 @@ def savekey(*args):
 
    print "saving",song
 
    g = createSubtermGraph(song, subterms)
 
    g.serialize(graphPathForSubterms(song), format="nt")
 

	
 
    curveset.save(basename=os.path.join(showconfig.curvesDir(), showconfig.songFilenameFromURI(song)))
 
    print "saved"
 
    
 
root.bind("<Control-Key-s>",savekey)
 
root.bind("<Control-Key-r>", lambda evt: dispatcher.send('reload all subs'))
 

	
 
create_status_lines(root)
 
for helpline in ["Bindings: C-s save subterms;  Esc see current time; S-Esc see curtime to end; Mousewheel zoom; C-p play/pause music at mouse",
 
                 "Curve point bindings: B1 drag point; C-B1 curve add point; S-B1 sketch points; Del selected points; 1..5 add point at time; Alt-Shift-B1 drag select points",
 
                 "Curve point bindings: B1 drag point; C-B1 curve add point; S-B1 sketch points; Del selected points; 1..5 add point at time; B1 drag select points",
 
                 "Available in functions: nsin/ncos period=amp=1; within(a,b) bef(x) aft(x) compare to time; smoove(x) cubic smoothstep; curvename(t) eval curve"]:
 
    tk.Label(root,text=helpline, font="Helvetica -12 italic",
 
             anchor='w').pack(side='top',fill='x')
 

	
 
#def logprint(msg):
 
#    print "log",msg
 
#twisted.python.log.addObserver(logprint)
 

	
 
root.bind("<Control-Key-q>",lambda ev: reactor.stop)
 
root.bind("<Destroy>",lambda ev: reactor.stop)
 
root.protocol('WM_DELETE_WINDOW', reactor.stop)
 
tksupport.install(root,ms=20)
light9/curve.py
Show inline comments
 
@@ -172,57 +172,74 @@ class Curveview(tk.Canvas):
 

	
 

	
 
        # this binds on c-a-b1, etc
 
        self.regionzoom = RegionZoom(self, self.world_from_screen,
 
                                     self.screen_from_world)
 

	
 
        self.sketch = None # an in-progress sketch
 
        self.bind("<Shift-ButtonPress-1>", self.sketch_press)
 
        self.bind("<Shift-B1-Motion>", self.sketch_motion)
 
        self.bind("<Shift-ButtonRelease-1>", self.sketch_release)
 

	
 

	
 
        # hold alt-shift to select, since i had a hard time detecting
 
        # other combos right
 
        self.dragging_dots = False
 
        self.selecting = False
 
        self.bind("<Alt-Key>", self.select_press)
 
        self.bind("<ButtonPress-1>",#"<Alt-Key>",
 
                  self.select_press)
 
        self.bind("<Motion>", self.select_motion, add=True)
 
        self.bind("<Alt-KeyRelease>", self.select_release)
 
        self.bind("<ButtonRelease-1>", #"<Alt-KeyRelease>",
 
                  self.select_release)
 

	
 
        self.bind("<ButtonPress-1>", self.check_deselect, add=True)
 

	
 
    def print_state(self, msg=""):
 
        if 0:
 
            print "%s: dragging_dots=%s selecting=%s" % (
 
                msg, self.dragging_dots, self.selecting)
 

	
 
    def check_deselect(self,ev):
 
        try:
 
            self.find_index_near(ev.x, ev.y)
 
        except ValueError:
 
            self.selected_points[:] = []
 
            self.highlight_selected_dots()
 

	
 
    def select_press(self,ev):
 
        self.print_state("select_press")
 
        if self.dragging_dots:
 
            return
 
        if not self.selecting:
 
            self.selecting = True
 
            self.select_start = self.world_from_screen(ev.x,0)[0]
 
            cursors.push(self,"gumby")
 
        
 
    def select_motion(self,ev):
 
        if not self.selecting:
 
            return
 
        start = self.select_start
 
        cur = self.world_from_screen(ev.x, 0)[0]
 
        self.select_between(start, cur)
 
        
 
    def select_release(self,ev):
 
        self.print_state("select_release")
 

	
 
        # dotrelease never gets called, but I can clear that state here
 
        self.dragging_dots = False
 
        
 
        if not self.selecting:
 
            return
 
        cursors.pop(self)
 
        self.selecting = False
 
        s,e = (self.select_start, self.world_from_screen(ev.x,0)[0])
 
        self.select_between(min(s,e), max(s,e))
 
        self.select_between(self.select_start,
 
                            self.world_from_screen(ev.x,0)[0])
 

	
 
    def sketch_press(self,ev):
 
        self.sketch = Sketch(self,ev)
 

	
 
    def sketch_motion(self,ev):
 
        if self.sketch:
 
            self.sketch.motion(ev)
 

	
 
    def sketch_release(self,ev):
 
        if self.sketch:
 
            self.sketch.release(ev)
 
            self.sketch = None
 
@@ -406,34 +423,40 @@ class Curveview(tk.Canvas):
 
            idxs[:] = newidxs
 
            
 
        self.update_curve()
 

	
 
    def highlight_selected_dots(self):
 
        for i,d in self.dots.items():
 
            if i in self.selected_points:
 
                self.itemconfigure(d,fill='red')
 
            else:
 
                self.itemconfigure(d,fill='blue')
 
        
 
    def dotpress(self,ev,dotidx):
 
        self.print_state("dotpress")
 
        if dotidx not in self.selected_points:
 
            self.selected_points=[dotidx]
 
        self.highlight_selected_dots()
 
        self.last_mouse_world = self.world_from_screen(ev.x, ev.y)
 
        self.dragging_dots = True
 

	
 
    def select_between(self,start,end):
 
        if start > end:
 
            start, end = end, start
 
        self.selected_points = self.curve.indices_between(start,end)
 
        self.highlight_selected_dots()
 

	
 
    def dotmotion(self,ev):
 
        if not self.dragging_dots:
 
            return
 
        if not ev.state & 256:
 
            return # not lmb-down
 
        cp = self.curve.points
 
        moved=0
 

	
 
        cur = self.world_from_screen(ev.x, ev.y)
 
        if self.last_mouse_world:
 
            delta = (cur[0] - self.last_mouse_world[0],
 
                     cur[1] - self.last_mouse_world[1])
 
        else:
 
            delta = 0,0
 
        self.last_mouse_world = cur
 
@@ -449,24 +472,27 @@ class Curveview(tk.Canvas):
 
            if idx<len(cp)-1 and newp[0] >= cp[idx+1][0]:
 
                continue
 
            moved=1
 
            cp[idx] = tuple(newp)
 
        if moved:
 
            self.update_curve()
 

	
 
    def unselect(self):
 
        self.selected_points=[]
 
        self.highlight_selected_dots()
 
        
 
    def dotrelease(self,ev):
 
        self.print_state("dotrelease")
 
        if not self.dragging_dots:
 
            return
 
        self.last_mouse_world = None
 
        
 
class Curveset:
 
    curves = None # curvename : curve
 
    def __init__(self):
 
        self.curves = {}
 
    def load(self,basename):
 
        """find all files that look like basename-curvename and add
 
        curves with their contents"""
 
        for filename in glob.glob("%s-*"%basename):
 
            curvename = filename[filename.rfind('-')+1:]
 
            c=Curve()
0 comments (0 inline, 0 general)