annotate Lib/stdwin/CSplit.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
124
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # A CSplit is a Clock-shaped split: the children are grouped in a circle.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2 # The numbering is a little different from a real clock: the 12 o'clock
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 # position is called 0, not 12. This is a little easier since Python
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
4 # usually counts from zero. (BTW, there needn't be exactly 12 children.)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 from math import pi, sin, cos
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 from Split import Split
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
531
8331076cfe15 New class syntax.
Guido van Rossum <guido@python.org>
parents: 346
diff changeset
10 class CSplit(Split):
124
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 #
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
12 def getminsize(self, m, (width, height)):
124
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # Since things look best if the children are spaced evenly
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 # along the circle (and often all children have the same
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 # size anyway) we compute the max child size and assume
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 # this is each child's size.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 for child in self.children:
346
4817ae40a4e2 minsize --> getminsize
Guido van Rossum <guido@python.org>
parents: 124
diff changeset
18 wi, he = child.getminsize(m, (0, 0))
124
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 width = max(width, wi)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 height = max(height, he)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # In approximation, the diameter of the circle we need is
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 # (diameter of box) * (#children) / pi.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 # We approximate pi by 3 (so we slightly overestimate
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 # our minimal size requirements -- not so bad).
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 # Because the boxes stick out of the circle we add the
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 # box size to each dimension.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 # Because we really deal with ellipses, do everything
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 # separate in each dimension.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 n = len(self.children)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
30 return width + (width*n + 2)/3, height + (height*n + 2)/3
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 #
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 def getbounds(self):
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
33 return self.bounds
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 #
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 def setbounds(self, bounds):
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 self.bounds = bounds
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 # Place the children. This involves some math.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 # Compute center positions for children as if they were
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 # ellipses with a diameter about 1/N times the
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 # circumference of the big ellipse.
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
41 # (There is some rounding involved to make it look
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42 # reasonable for small and large N alike.)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 # XXX One day Python will have automatic conversions...
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 n = len(self.children)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 fn = float(n)
559
683edb0c4463 New == syntax
Guido van Rossum <guido@python.org>
parents: 531
diff changeset
46 if n == 0: return
124
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
47 (left, top), (right, bottom) = bounds
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 width, height = right-left, bottom-top
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 child_width, child_height = width*3/(n+4), height*3/(n+4)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
50 half_width, half_height = \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 float(width-child_width)/2.0, \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 float(height-child_height)/2.0
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
53 center_h, center_v = center = (left+right)/2, (top+bottom)/2
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 fch, fcv = float(center_h), float(center_v)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 alpha = 2.0 * pi / fn
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
56 for i in range(n):
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 child = self.children[i]
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 fi = float(i)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 fh, fv = \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 fch + half_width*sin(fi*alpha), \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
61 fcv - half_height*cos(fi*alpha)
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 left, top = \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 int(fh) - child_width/2, \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 int(fv) - child_height/2
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 right, bottom = \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
66 left + child_width, \
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 top + child_height
1110
1d06b1499eb9 * Got entirely rid of path.py.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
68 child.setbounds(((left, top), (right, bottom)))
124
a8d033c6fb54 Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 #