annotate engine/extensions/pychan/widgets/layout.py @ 329:aca5744f017a

Added fast path for Widget.findChild(name=name). Roughly 10x faster.
author phoku@33b003aa-7bff-0310-803a-e67f0ece8222
date Mon, 24 Aug 2009 10:01:06 +0000
parents d8bcff5f7222
children 48c99636453e
rev   line source
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
2
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
3 from pychan.attrs import IntAttr
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
4
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
5 AlignTop, AlignBottom, AlignLeft, AlignRight, AlignCenter = range(5)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
6 def isLayouted(widget):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
7 return isinstance(widget,LayoutBase)
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
8
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
9 class LayoutBase(object):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
10 """
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
11 This class is at the core of the layout engine. The two MixIn classes L{VBoxLayoutMixin}
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
12 and L{HBoxLayoutMixin} specialise on this by reimplementing the C{resizeToContent} and
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
13 the C{expandContent} methods.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
14
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
15 Dynamic Layouting
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
16 -----------------
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
17
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
18 The layout is calculated in the L{Widget.show} method. Thus if you modify the layout,
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
19 by adding or removing child widgets for example, you have to call L{widgets.Widget.adaptLayout}
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
20 so that the changes ripple through the widget hierachy.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
21
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
22 Internals
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
23 ---------
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
24
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
25 At the core the layout engine works in two passes:
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
26
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
27 Before a root widget loaded by the XML code is shown, its resizeToContent method
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
28 is called recursively (walking the widget containment relation in post order).
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
29 This shrinks all HBoxes and VBoxes to their minimum heigt and width.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
30 After that the expandContent method is called recursively in the same order,
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
31 which will re-align the widgets if there is space left AND if a Spacer is contained.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
32
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
33 Inside bare Container instances (without a Layout MixIn) absolute positioning
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
34 can be used.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
35 """
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
36 def __init__(self,align = (AlignLeft,AlignTop), **kwargs):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
37 self.align = align
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
38 self.spacer = []
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
39 super(LayoutBase,self).__init__(**kwargs)
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
40
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
41 def addSpacer(self,spacer):
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
42 self.spacer.append(spacer)
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
43 spacer.index = len(self.children)
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
44
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
45 def xdelta(self,widget):return 0
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
46 def ydelta(self,widget):return 0
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
47
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
48 def _applyHeight(self, spacers = []):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
49 y = self.border_size + self.margins[1]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
50 ydelta = map(self.ydelta,self.children)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
51 for index, child in enumerate(self.children):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
52 while spacers and spacers[0].index == index:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
53 y += spacers.pop(0).size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
54 child.y = y
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
55 y += ydelta.pop(0)
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
56
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
57 def _adjustHeightWithSpacer(self):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
58 pass
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
59
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
60 def _applyWidth(self, spacers = []):
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
61 x = self.border_size + self.margins[0]
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
62 xdelta = map(self.xdelta,self.children)
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
63 for index, child in enumerate(self.children):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
64 while spacers and spacers[0].index == index:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
65 x += spacers.pop(0).size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
66 child.x = x
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
67 x += xdelta.pop(0)
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
68
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
69 def _expandWidthSpacer(self):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
70 xdelta = map(self.xdelta,self.children)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
71 xdelta += [spacer.min_size for spacer in self.spacer]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
72
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
73 available_space = self.width - 2*self.margins[0] - 2*self.border_size - self._extra_border[0]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
74
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
75 used_space = sum(xdelta)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
76 if self.children:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
77 used_space -= self.padding
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
78 if used_space >= available_space:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
79 return
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
80
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
81 expandable_items = self._getExpanders(vertical=False)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
82 #print "AS/US - before",self,[o.width for o in expandable_items]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
83 #print "SPACERS",self.spacer
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
84
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
85 index = 0
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
86 n = len(expandable_items)
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
87 while used_space < available_space and expandable_items:
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
88 index = index % n
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
89 delta = (available_space - used_space) / n
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
90 if delta == 0:
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
91 delta = 1
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
92
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
93 expander = expandable_items[index]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
94 old_width = expander.width
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
95 expander.width += delta
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
96 delta = expander.width - old_width
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
97 if delta == 0:
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
98 expandable_items.pop(index)
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
99 n -= 1
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
100 else:
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
101 used_space += delta
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
102 index += 1
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
103 #print "AS/US - after",self,[o.width for o in expandable_items]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
104 #print "SPACERS",self.spacer
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
105 self._applyWidth(spacers = self.spacer[:])
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
106
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
107 def _expandHeightSpacer(self):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
108 ydelta = map(self.ydelta,self.children)
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
109 ydelta += [spacer.min_size for spacer in self.spacer]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
110
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
111 available_space = self.height - 2*self.margins[1] - 2*self.border_size - self._extra_border[1]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
112
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
113 used_space = sum(ydelta)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
114 if self.children:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
115 used_space -= self.padding
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
116
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
117 if used_space >= available_space:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
118 return
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
119
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
120 expandable_items = self._getExpanders(vertical=True)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
121 #print "AS/US - before",self,[o.height for o in expandable_items]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
122
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
123 index = 0
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
124 n = len(expandable_items)
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
125 while used_space < available_space and expandable_items:
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
126 index = index % n
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
127 delta = (available_space - used_space) / n
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
128 if delta == 0:
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
129 delta = 1
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
130
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
131 expander = expandable_items[index]
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
132 old_height = expander.height
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
133 expander.height += delta
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
134 delta = expander.height - old_height
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
135 if delta == 0:
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
136 expandable_items.pop(index)
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
137 n -= 1
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
138 else:
328
d8bcff5f7222 PyChan: adaptLayout performance fix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 255
diff changeset
139 used_space += delta
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
140 index += 1
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
141
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
142 #print "AS/US - after",self,[o.height for o in expandable_items]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
143 self._applyHeight(spacers = self.spacer[:])
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
144
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
145
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
146 def _getExpanders(self,vertical=True):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
147 expanders = []
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
148 spacers = self.spacer[:]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
149 for index, child in enumerate(self.children):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
150 if spacers and spacers[0].index == index:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
151 expanders.append( spacers.pop(0) )
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
152 if child.vexpand and vertical:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
153 expanders += [child]*child.vexpand
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
154 if child.hexpand and not vertical:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
155 expanders += [child]*child.hexpand
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
156 return expanders + spacers
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
157
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
158 def _resetSpacers(self):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
159 for spacer in self.spacer:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
160 spacer.size = 0
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
161
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
162 class VBoxLayoutMixin(LayoutBase):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
163 """
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
164 A mixin class for a vertical layout. Do not use directly.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
165 """
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
166 def __init__(self,**kwargs):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
167 super(VBoxLayoutMixin,self).__init__(**kwargs)
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
168
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
169 def resizeToContent(self, recurse = True):
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
170 self._resetSpacers()
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
171
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
172 max_w = self.getMaxChildrenWidth()
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
173 x = self.margins[0] + self.border_size
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
174 y = self.margins[1] + self.border_size
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
175 for widget in self.children:
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
176 widget.width = max_w
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
177 y += widget.height + self.padding
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
178
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
179 if self.children:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
180 y -= self.padding
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
181
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
182 y += sum([spacer.min_size for spacer in self.spacer])
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
183
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
184 self.height = y + self.margins[1] + self.border_size + self._extra_border[1]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
185 self.width = max_w + 2*x + self._extra_border[0]
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
186
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
187 self._applyHeight(spacers = self.spacer[:])
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
188 self._applyWidth()
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
189
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
190 def expandContent(self):
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
191 self._expandHeightSpacer()
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
192 if not self.hexpand and self.parent:return
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
193 for widget in self.children:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
194 widget.width = self.width - 2*self.margins[0] - 2*self.border_size - self._extra_border[0]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
195
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
196
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
197 def ydelta(self,widget):return widget.height + self.padding
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
198
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
199 class HBoxLayoutMixin(LayoutBase):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
200 """
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
201 A mixin class for a horizontal layout. Do not use directly.
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
202 """
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
203 def __init__(self,**kwargs):
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
204 super(HBoxLayoutMixin,self).__init__(**kwargs)
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
205
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
206 def resizeToContent(self, recurse = True):
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
207 self._resetSpacers()
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
208
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
209 max_h = self.getMaxChildrenHeight()
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
210 x = self.margins[0] + self.border_size
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
211 y = self.margins[1] + self.border_size
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
212 for widget in self.children:
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
213 widget.height = max_h
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
214 x += widget.width + self.padding
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
215 if self.children:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
216 x -= self.padding
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
217 x += sum([spacer.min_size for spacer in self.spacer])
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
218
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
219 self.width = x + self.margins[0] + self._extra_border[0]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
220 self.height = max_h + 2*y + self._extra_border[1]
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
221
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
222 self._applyHeight()
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
223 self._applyWidth(spacers = self.spacer[:])
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
224
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
225 def expandContent(self):
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
226 self._expandWidthSpacer()
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
227 if not self.vexpand and self.parent:return
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
228 for widget in self.children:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
229 widget.height = self.height - 2*self.margins[1] - 2*self.border_size - self._extra_border[1]
249
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
230
1cc51d145af9 Further split up the containers.py; bugfix.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff changeset
231 def xdelta(self,widget):return widget.width + self.padding
255
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
232
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
233 class Spacer(object):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
234 """ A spacer represents expandable or fixed 'whitespace' in the GUI.
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
235
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
236 In a XML file you can get this by adding a <Spacer /> inside a VBox or
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
237 HBox element (Windows implicitly are VBox elements).
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
238
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
239 Attributes
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
240 ----------
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
241
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
242 As with widgets a number of attributes can be set on a spacer (inside the XML definition).
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
243
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
244 - min_size: Int: The minimal size this Spacer is allowed to have.
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
245 - max_size: Int: The maximal size this Spacer is allowed to have.
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
246 - fixed_size: Int: Set min_size and max_size to the same vale - effectively a Fixed size spacer.
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
247
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
248 """
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
249
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
250 ATTRIBUTES = [
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
251 IntAttr('min_size'), IntAttr('size'), IntAttr('max_size'),
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
252 IntAttr('fixed_size'),
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
253 ]
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
254
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
255 def __init__(self,parent=None,**kwargs):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
256 self.parent = parent
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
257 self.min_size = 0
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
258 self.max_size = 1000
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
259 self.size = 0
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
260
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
261 def __str__(self):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
262 return "Spacer(parent.name='%s')" % getattr(self.__parent,'name','None')
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
263
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
264 def __repr__(self):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
265 return "<Spacer(parent.name='%s') at %x>" % (getattr(self.__parent,'name','None'),id(self))
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
266
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
267 def _getSize(self):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
268 self.size = self._size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
269 return self._size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
270 def _setSize(self,size):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
271 self._size = max(self.min_size, min(self.max_size,size))
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
272 size = property(_getSize,_setSize)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
273
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
274 # Alias for size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
275 width = property(_getSize,_setSize)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
276 height = property(_getSize,_setSize)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
277
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
278 def _setFixedSize(self,size):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
279 self.min_size = self.max_size = size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
280 self.size = size
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
281 fixed_size = property(fset=_setFixedSize)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
282
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
283 def _isExpanding(self):
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
284 if self.min_size < self.max_size:
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
285 return 1
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
286 return 0
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
287 vexpand = property(_isExpanding)
51cc05d862f2 Merged editor_rewrite branch to trunk.
cheesesucker@33b003aa-7bff-0310-803a-e67f0ece8222
parents: 249
diff changeset
288 hexpand = property(_isExpanding)