annotate Lib/lib-stdwin/StripChart.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 1d06b1499eb9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # Module 'StripChart'
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 import rect
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
4 from Buttons import LabelAppearance, NoReactivity
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
6 # A StripChart doesn't really look like a label but it needs a base class.
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
7 # LabelAppearance allows it to be disabled and hilited.
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 245
diff changeset
9 class StripChart(LabelAppearance, NoReactivity):
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
11 def define(self, parent, scale):
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
12 self.parent = parent
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
13 parent.addchild(self)
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
14 self.init_appearance()
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 self.init_reactivity()
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 self.ydata = []
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 self.scale = scale
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
18 self.resetbounds()
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 return self
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 #
211
83f0a724a87c Add destrpy() method.
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
21 def destroy(self):
83f0a724a87c Add destrpy() method.
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
22 self.parent = 0
83f0a724a87c Add destrpy() method.
Guido van Rossum <guido@python.org>
parents: 63
diff changeset
23 #
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 def setbounds(self, bounds):
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 LabelAppearance.setbounds(self, bounds)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 self.resetbounds()
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 #
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 def resetbounds(self):
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 (left, top), (right, bottom) = self.bounds
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 self.width = right-left
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 self.height = bottom-top
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 excess = len(self.ydata) - self.width
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 if excess > 0:
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 del self.ydata[:excess]
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 elif excess < 0:
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 while len(self.ydata) < self.width:
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 self.ydata.insert(0, 0)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 #
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def append(self, y):
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 self.ydata.append(y)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 excess = len(self.ydata) - self.width
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 if excess > 0:
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 del self.ydata[:excess]
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
44 if self.bounds <> rect.empty:
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
45 self.parent.scroll(self.bounds, (-excess, 0))
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
46 if self.bounds <> rect.empty:
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 (left, top), (right, bottom) = self.bounds
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 i = len(self.ydata)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 area = (left+i-1, top), (left+i, bottom)
63
61311506f2cd *** empty log message ***
Guido van Rossum <guido@python.org>
parents: 55
diff changeset
50 self.draw(self.parent.begindrawing(), area)
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 #
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
52 def draw(self, d, area):
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
53 area = rect.intersect([area, self.bounds])
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
54 if area == rect.empty:
55
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 return
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 d.cliprect(area)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 d.erase(self.bounds)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 (a_left, a_top), (a_right, a_bottom) = area
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 (left, top), (right, bottom) = self.bounds
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 height = bottom - top
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 i1 = a_left - left
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 i2 = a_right - left
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 for i in range(max(0, i1), min(len(self.ydata), i2)):
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 split = bottom-self.ydata[i]*height/self.scale
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 d.paint((left+i, split), (left+i+1, bottom))
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 if not self.enabled:
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 self.flipenable(d)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 if self.hilited:
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 self.fliphilite(d)
7a01dbcee9bc Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 d.noclip()