annotate flax/zoomcontrol.py @ 15:c76b62eccdec

put **kw back in, they now go to the scale and can override the defaults. put **kw back in, they now go to the scale and can override the defaults. for our purposes, we probably want to edit the defaults so we don't have them in every call.
author dmcc
date Sun, 07 Jul 2002 06:18:40 +0000
parents 45b12307c695
children 3905d3c92aaa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from __future__ import division
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 import Tkinter as tk
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 from dispatch import dispatcher
45b12307c695 Initial revision
drewp
parents:
diff changeset
4
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 class Zoomcontrol(object,tk.Canvas):
45b12307c695 Initial revision
drewp
parents:
diff changeset
6
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 def maxtime():
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 doc = "seconds at the right edge of the bar"
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 def fget(self): return self._maxtime
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 def fset(self, value):
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 self._maxtime = value
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 self.updatewidget()
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 maxtime = property(**maxtime())
45b12307c695 Initial revision
drewp
parents:
diff changeset
15
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 def start():
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 def fget(self): return self._start
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 def fset(self,v): self._start = max(0,v)
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 start = property(**start())
45b12307c695 Initial revision
drewp
parents:
diff changeset
21
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 def end():
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 def fget(self): return self._end
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 def fset(self,v): self._end = min(self.maxtime,v)
45b12307c695 Initial revision
drewp
parents:
diff changeset
25 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 end = property(**end())
45b12307c695 Initial revision
drewp
parents:
diff changeset
27
45b12307c695 Initial revision
drewp
parents:
diff changeset
28
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 def __init__(self,master,**kw):
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 self.maxtime=370
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 self.start=0
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 self.end=20
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 tk.Canvas.__init__(self,master,width=250,height=30,
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 relief='raised',bd=1,bg='gray60',**kw)
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 self.leftbrack = self.create_line(0,0,0,0,0,0,0,0,width=5)
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.rightbrack = self.create_line(0,0,0,0,0,0,0,0,width=5)
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 self.shade = self.create_rectangle(0,0,0,0,fill='gray70',outline=None)
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 self.time = self.create_line(0,0,0,0,fill='red',width=2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 self.updatewidget()
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 self.bind("<Configure>",self.updatewidget)
45b12307c695 Initial revision
drewp
parents:
diff changeset
41
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 self.bind("<ButtonPress-1>",lambda ev: setattr(self,'lastx',ev.x))
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 self.tag_bind(self.leftbrack,"<B1-Motion>",
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 lambda ev: self.adjust('start',ev))
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 self.tag_bind(self.rightbrack,"<B1-Motion>",
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 lambda ev: self.adjust('end',ev))
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 self.tag_bind(self.shade,"<B1-Motion>",
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 lambda ev: self.adjust('offset',ev))
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 dispatcher.connect(lambda: (self.start,self.end),"zoom area",weak=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 dispatcher.connect(self.input_time,"input time")
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 dispatcher.connect(lambda maxtime: (setattr(self,'maxtime',maxtime),
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 self.updatewidget()),"max time",weak=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 self.created=1
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 def input_time(self,val):
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 t=val
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 x=self.can_for_t(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 self.coords(self.time,x,0,x,self.winfo_height())
45b12307c695 Initial revision
drewp
parents:
diff changeset
58
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 def adjust(self,attr,ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 if not hasattr(self,'lastx'):
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 new = self.can_for_t(getattr(self,attr)) + (ev.x - self.lastx)
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 self.lastx = ev.x
45b12307c695 Initial revision
drewp
parents:
diff changeset
64 setattr(self,attr,self.t_for_can(new))
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 self.updatewidget()
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 dispatcher.send("zoom changed")
45b12307c695 Initial revision
drewp
parents:
diff changeset
67
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 def offset():
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 doc = "virtual attr that adjusts start and end together"
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 def fget(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 return self.start
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 def fset(self, value):
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 d = self.end-self.start
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 self.start = value
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 self.end = self.start+d
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 return locals()
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 offset = property(**offset())
45b12307c695 Initial revision
drewp
parents:
diff changeset
78
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 def can_for_t(self,t):
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 return t/self.maxtime*(self.winfo_width()-30)+20
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 def t_for_can(self,x):
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 return (x-20)/(self.winfo_width()-30)*self.maxtime
45b12307c695 Initial revision
drewp
parents:
diff changeset
83
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 def updatewidget(self,*args):
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 """redraw pieces based on start/end"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 if not hasattr(self,'created'): return
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 y1,y2=3,self.winfo_height()-3
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 lip = 6
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 scan = self.can_for_t(self.start)
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 ecan = self.can_for_t(self.end)
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 self.coords(self.leftbrack,scan+lip,y1,scan,y1,scan,y2,scan+lip,y2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 self.coords(self.rightbrack,ecan-lip,y1,ecan,y1,ecan,y2,ecan-lip,y2)
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 self.coords(self.shade,scan+3,y1+lip,ecan-3,y2-lip)
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 self.delete("tics")
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 lastx=-1000
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 for t in range(0,int(self.maxtime)):
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 x = self.can_for_t(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 if 0<x<self.winfo_width() and x-lastx>30:
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 txt=str(t)
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 if lastx==-1000:
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 txt=txt+"sec"
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 self.create_line(x,0,x,15,
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 tags=('tics',))
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 self.create_text(x,self.winfo_height()-1,anchor='s',
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 text=txt,tags=('tics',),font='6x13')
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 lastx = x