--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tuikit/container.py Wed Feb 16 23:51:30 2011 +0100
@@ -0,0 +1,139 @@
+# -*- coding: utf-8 -*-
+
+from .widget import Widget
+
+
+class Container(Widget):
+ def __init__(self, width = 10, height = 10):
+ Widget.__init__(self, width, height)
+
+ self.children = []
+ self.focuschild = None
+ self.mousechild = None
+
+ self.borders = (0, 0, 0, 0) # left, top, right, bottom
+ self.widthrequest = (None, None)
+ self.heightrequest = (None, None)
+
+
+ def add(self, widget):
+ self.children.append(widget)
+ widget.parent = self
+ widget.settop(self.top)
+
+
+ def layout(self, layout):
+ self.layout = layout
+ layout.container = self
+ self.connect('resize', layout.resize)
+
+
+ def settop(self, top):
+ self.top = top
+ for child in self.children:
+ child.settop(top)
+
+
+ ### focus
+
+
+ def canfocus(self):
+ return True
+
+
+ def setfocus(self):
+ self.focus = True
+ if self.focuschild is None and len(self.children) > 0:
+ for child in self.children:
+ if self.focuschild is None:
+ if child.canfocus():
+ self.focuschild = child
+ child.setfocus()
+ else:
+ if child.focus:
+ child.unfocus()
+
+ def unfocus(self):
+ self.focus = False
+ for child in self.children:
+ child.unfocus()
+
+
+ ###
+
+
+ def draw(self, screen, x=0, y=0):
+ #if self._redraw:
+ #self.fill(screen, self.y, self.x, self.height, self.width)
+ self.handle('draw', screen, x, y)
+
+ l, t, r, b = self.borders
+ screen.pushclip(x + l, y + t, self.width - l - r, self.height - t - b)
+
+ for child in self.children:
+ #if self._redraw:
+ # child._redraw = True
+ child.draw(screen, x + child.x, y + child.y)
+
+ screen.popclip()
+
+ #self._redraw = False
+
+
+ def keypress(self, keyname, char):
+ # always relay key event to some child
+ if self.focus:
+ self.handle('keypress', keyname, char)
+ if self.focuschild:
+ self.focuschild.keypress(keyname, char)
+
+
+ def mousedown(self, ev):
+ handled = False
+ for child in reversed(self.children):
+ if child.enclose(ev.wx, ev.wy):
+ childev = ev.childevent(child)
+ child.mousedown(childev)
+ self.mousechild = child
+ handled = True
+ break
+ if not handled:
+ self.handle('mousedown', ev)
+
+
+ def mouseup(self, ev):
+ if self.mousechild:
+ childev = ev.childevent(self.mousechild)
+ self.mousechild.mouseup(childev)
+ self.mousechild = None
+ else:
+ self.handle('mouseup', ev)
+ #handled = False
+ #for child in self.children:
+ #if child.enclose(ev.wx, ev.wy):
+ #childev = ev.childevent(child)
+ #child.mouseup(childev)
+ #self.mousechild = child
+ #handled = True
+ #if not handled:
+ #self.handle('mouseup', ev)
+
+
+ def mousemove(self, ev):
+ if self.mousechild:
+ childev = ev.childevent(self.mousechild)
+ self.mousechild.mousemove(childev)
+ else:
+ self.handle('mousemove', ev)
+
+
+ def mousewheel(self, ev):
+ handled = False
+ for child in reversed(self.children):
+ if child.enclose(ev.wx, ev.wy):
+ childev = ev.childevent(child)
+ child.mousewheel(childev)
+ handled = True
+ break
+ if not handled:
+ self.handle('mousewheel', ev)