view light8/Xfader.py @ 59:001646cd5349

all mousewheel events everywhere will now pass up the tree to be caught by all mousewheel events everywhere will now pass up the tree to be caught by higher widgets. if things get slow, this might be the problem
author drewp
date Tue, 09 Jul 2002 07:36:29 +0000
parents 71489bb71528
children e04f7b552bcd
line wrap: on
line source

from Tix import *
from __future__ import division

class Xfader(Canvas):
    def __init__(self, scalelevelsIn):
        global scalelevels
        scalelevels=scalelevelsIn
        self.checkbuttons={}
        self.startcoord=None
    def sub2(self,a,b):
        return ( (a[0]-b[0]), (a[1]-b[1]))
    def down(self,ev):
        global scalelevels
        self.startcoord=(ev.x,-ev.y)
        self.startlevels = dict([(k,v.get()) for k,v in scalelevels.items()])
        # find the channel names of the selected subs
        self.onchannel = {
            'x':[x for x in scalelevels.keys() if self.checkbuttons[x]['x'].get()],
            'y':[x for x in scalelevels.keys() if self.checkbuttons[x]['y'].get()]
            }

        
        #self.create_line(0,0,100,100,tag='transient')
        
    def getoriglevel(self,subname):
        return self.startlevels[subname]
    def up(self,ev):
        self.startcoord=None
        self.delete('transient')
        # self.clearallbuttons()
    def moved(self,ev):
        if self.startcoord is None:
            return
        pos=(ev.x,-ev.y)
        deltas= self.sub2(pos,self.startcoord)
        for axis,delta in zip(('x','y'),deltas):
            onchan=self.onchannel[axis]
            for subn in onchan:
                newlev = self.getoriglevel(subn) + 1.0*delta/75
                newlev = int(newlev*1000)/1000.0
                newlev = min(1.0,max(newlev,0.0))
                scalelevels[subn].set( newlev )
    def width(self):
        return int(self['width'])
    def height(self):
        return int(self['height'])
    def setupwidget(self,parent):
        Canvas.__init__(self,parent,width=150,height=150,bg="#ff0000")
        self.pack(side='bottom')
        self.create_rectangle(5,5,self.width()-5,self.height()-5)
        self.create_line(0,self.height()/2,150,self.height()/2)
        self.create_line(self.width()/2,0,self.width()/2,self.height())
        self.bind("<ButtonPress-1>",self.down)
        self.bind("<ButtonRelease-1>",self.up)
        self.bind("<B1-Motion>",self.moved)

    def registerbutton(self,subname,axis,checkvar):
        if subname not in self.checkbuttons:
            self.checkbuttons[subname]={}
        self.checkbuttons[subname][axis]=checkvar
    def clearallbuttons(self, axis='both'):
        for cb in self.checkbuttons.values():
            if axis == 'both':
                for a in cb.values():
                    a.set(0)
            else:
                cb[axis].set(0)
    def grab(self,axis):
        self.clearallbuttons(axis)
        for n,sv in scalelevels.items():
            if sv.get() and n != 'blacklight':
                self.checkbuttons[n][axis].set(1)