File: container.py

package info (click to toggle)
soya 0.12-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 13,580 kB
  • ctags: 20,171
  • sloc: cpp: 45,252; python: 7,241; ansic: 5,226; perl: 273; makefile: 227; sh: 65
file content (111 lines) | stat: -rw-r--r-- 2,639 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# -*- indent-tabs-mode: t -*-

""" containers for pudding """

from soya.pudding      import EXPAND_VERT, EXPAND_HORIZ, CENTER_HORIZ, CENTER_VERT
from soya.pudding.core import Container, TestContainer

__revision__ = "$Revision: 1.1 $"

__doc_classes__ = [ 'VerticalContainer', 
										'HorizontalContainer',
										]

__doc_functions__ = []

# we should be able to merge these two classes but i cant think how atm

class VerticalContainer(Container):
	""" class to resize all children in a column"""

	def on_resize(self):
		""" resize all children into a column """

		self.do_anchoring()
		
		unchangable = 0 
		unchangable_count = 0
	
		for y, child in enumerate(self.children):
			if not child._container_flags & EXPAND_VERT:
				unchangable += child.height
				unchangable_count += 1

		try:
			height = (self.height - unchangable) / (len(self.children) - \
																										unchangable_count)

		except ZeroDivisionError:
			# this happens if none of the children are resizable
			height = 0

		y = 0

		for child in self.children:
			child.top = y 
			child.left = 0

			if not  child._container_flags & EXPAND_HORIZ and \
							child._container_flags & CENTER_HORIZ:
				child.left = (self.width / 2) - (child.width / 2)

			elif child._container_flags & EXPAND_HORIZ:
				child.width = self.width
				
			if child._container_flags & EXPAND_VERT:
				child.height = height

			y += child.height + self._padding

			child.on_resize()

class TestVerticalContainer(TestContainer):
	klass = VerticalContainer


class HorizontalContainer(Container):
	""" class to resize all children in a row"""

	def on_resize(self):
		""" resize all children into a row """

		self.do_anchoring()

		unchangable = 0 
		unchangable_count = 0
	
		for x, child in enumerate(self.children):
			if not child._container_flags & EXPAND_HORIZ:
				unchangable += child.width
				unchangable_count += 1
			
		try:
			width = (self.width - unchangable) / (len(self.children) - \
																									unchangable_count)
		except ZeroDivisionError:
			# this happens if none of the children are resizable
			width = 0

		x = 0

		for child in self.children:
			child.top = 0 
			child.left = x

			if not  child._container_flags & EXPAND_VERT and \
							child._container_flags & CENTER_VERT:
				child.top = (self.height / 2) - (child.height / 2)
				
			elif child._container_flags & EXPAND_VERT:
				child.height = self.height
				
			if child._container_flags & EXPAND_HORIZ:
				child.width = width

			x += child.width + self._padding

			child.on_resize()

class TestHorizontalContainer(TestContainer):
	klass = HorizontalContainer