annotate light8/Xfader.py @ 2405:69ca2b2fc133

overcomplicated attempt at persisting the pane layout in the rdf graph this was hard because we have to somehow wait for the graph to load before config'ing the panes
author drewp@bigasterisk.com
date Fri, 17 May 2024 16:58:26 -0700
parents e04f7b552bcd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
51
71489bb71528 - Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents: 4
diff changeset
1 from Tix import *
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from __future__ import division
45b12307c695 Initial revision
drewp
parents:
diff changeset
3
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 class Xfader(Canvas):
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 def __init__(self, scalelevelsIn):
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 global scalelevels
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 scalelevels=scalelevelsIn
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 self.checkbuttons={}
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 self.startcoord=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 def sub2(self,a,b):
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 return ( (a[0]-b[0]), (a[1]-b[1]))
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 def down(self,ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 global scalelevels
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 self.startcoord=(ev.x,-ev.y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 self.startlevels = dict([(k,v.get()) for k,v in scalelevels.items()])
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 # find the channel names of the selected subs
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 self.onchannel = {
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 'x':[x for x in scalelevels.keys() if self.checkbuttons[x]['x'].get()],
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 'y':[x for x in scalelevels.keys() if self.checkbuttons[x]['y'].get()]
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 }
45b12307c695 Initial revision
drewp
parents:
diff changeset
21
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 #self.create_line(0,0,100,100,tag='transient')
45b12307c695 Initial revision
drewp
parents:
diff changeset
24
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 def getoriglevel(self,subname):
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 return self.startlevels[subname]
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 def up(self,ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 self.startcoord=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.delete('transient')
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 # self.clearallbuttons()
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 def moved(self,ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 if self.startcoord is None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 pos=(ev.x,-ev.y)
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 deltas= self.sub2(pos,self.startcoord)
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 for axis,delta in zip(('x','y'),deltas):
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 onchan=self.onchannel[axis]
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 for subn in onchan:
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 newlev = self.getoriglevel(subn) + 1.0*delta/75
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 newlev = int(newlev*1000)/1000.0
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 newlev = min(1.0,max(newlev,0.0))
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 scalelevels[subn].set( newlev )
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 def width(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 return int(self['width'])
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 def height(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 return int(self['height'])
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 def setupwidget(self,parent):
102
e04f7b552bcd - scroll wheel works everywhere
dmcc
parents: 51
diff changeset
48 Canvas.__init__(self,parent,width=150,height=150,bg="grey40")
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.pack(side='bottom')
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.create_rectangle(5,5,self.width()-5,self.height()-5)
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 self.create_line(0,self.height()/2,150,self.height()/2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 self.create_line(self.width()/2,0,self.width()/2,self.height())
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 self.bind("<ButtonPress-1>",self.down)
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 self.bind("<ButtonRelease-1>",self.up)
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 self.bind("<B1-Motion>",self.moved)
45b12307c695 Initial revision
drewp
parents:
diff changeset
56
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 def registerbutton(self,subname,axis,checkvar):
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 if subname not in self.checkbuttons:
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 self.checkbuttons[subname]={}
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 self.checkbuttons[subname][axis]=checkvar
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 def clearallbuttons(self, axis='both'):
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 for cb in self.checkbuttons.values():
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 if axis == 'both':
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 for a in cb.values():
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 a.set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 cb[axis].set(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 def grab(self,axis):
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 self.clearallbuttons(axis)
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 for n,sv in scalelevels.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 if sv.get() and n != 'blacklight':
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 self.checkbuttons[n][axis].set(1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
73
45b12307c695 Initial revision
drewp
parents:
diff changeset
74