blob: c42327dcfcff875c279134808e88c7314232dcc6 [file] [log] [blame]
Guido van Rossum2e449671990-11-05 19:44:36 +00001# HVSplit contains generic code for HSplit and VSplit.
2# HSplit and VSplit are specializations to either dimension.
3
Guido van Rossum52acae61991-01-23 13:41:53 +00004# XXX This does not yet stretch/shrink children if there is too much
5# XXX or too little space in the split dimension.
6# XXX (NB There is no interface to ask children for stretch preferences.)
7
Guido van Rossum2e449671990-11-05 19:44:36 +00008from Split import Split
9
Guido van Rossumce084481991-12-26 13:06:29 +000010class HVSplit(Split):
Guido van Rossum2e449671990-11-05 19:44:36 +000011 #
Guido van Rossum89a78691992-12-14 12:57:56 +000012 def create(self, parent, hv):
Guido van Rossumce272981991-08-16 13:17:07 +000013 # hv is 0 for HSplit, 1 for VSplit
Guido van Rossum2e449671990-11-05 19:44:36 +000014 self = Split.create(self, parent)
15 self.hv = hv
16 return self
17 #
Guido van Rossum89a78691992-12-14 12:57:56 +000018 def getminsize(self, m, sugg_size):
Guido van Rossum2e449671990-11-05 19:44:36 +000019 hv, vh = self.hv, 1 - self.hv
20 size = [0, 0]
Guido van Rossumce272981991-08-16 13:17:07 +000021 sugg_size = [sugg_size[0], sugg_size[1]]
22 sugg_size[hv] = 0
23 sugg_size = sugg_size[0], sugg_size[1] # Make a tuple
Guido van Rossum2e449671990-11-05 19:44:36 +000024 for c in self.children:
Guido van Rossumce272981991-08-16 13:17:07 +000025 csize = c.getminsize(m, sugg_size)
Guido van Rossum2e449671990-11-05 19:44:36 +000026 if csize[vh] > size[vh]: size[vh] = csize[vh]
27 size[hv] = size[hv] + csize[hv]
28 return size[0], size[1]
29 #
30 def getbounds(self):
31 return self.bounds
32 #
33 def setbounds(self, bounds):
34 self.bounds = bounds
35 hv, vh = self.hv, 1 - self.hv
36 mf = self.parent.beginmeasuring
Guido van Rossumce272981991-08-16 13:17:07 +000037 begin, end = bounds
38 sugg_size = end[0] - begin[0], end[1] - begin[1]
39 size = self.getminsize(mf(), sugg_size)
40 origin = [begin[0], begin[1]]
41 sugg_size = [sugg_size[0], sugg_size[1]] # Make a list
42 sugg_size[hv] = 0
43 sugg_size = sugg_size[0], sugg_size[1] # Make a tuple
Guido van Rossum2e449671990-11-05 19:44:36 +000044 for c in self.children:
Guido van Rossumce272981991-08-16 13:17:07 +000045 size = c.getminsize(mf(), sugg_size)
Guido van Rossum2e449671990-11-05 19:44:36 +000046 corner = [0, 0]
Guido van Rossumce272981991-08-16 13:17:07 +000047 corner[vh] = end[vh]
Guido van Rossum2e449671990-11-05 19:44:36 +000048 corner[hv] = origin[hv] + size[hv]
Guido van Rossum89a78691992-12-14 12:57:56 +000049 c.setbounds(((origin[0], origin[1]), \
50 (corner[0], corner[1])))
Guido van Rossum2e449671990-11-05 19:44:36 +000051 origin[hv] = corner[hv]
52 # XXX stretch
53 # XXX too-small
54 #
55
Guido van Rossumce084481991-12-26 13:06:29 +000056class HSplit(HVSplit):
Guido van Rossum2e449671990-11-05 19:44:36 +000057 def create(self, parent):
58 return HVSplit.create(self, (parent, 0))
59
Guido van Rossumce084481991-12-26 13:06:29 +000060class VSplit(HVSplit):
Guido van Rossum2e449671990-11-05 19:44:36 +000061 def create(self, parent):
62 return HVSplit.create(self, (parent, 1))