tuikit/core/container.py
author Radek Brich <radek.brich@devl.cz>
Fri, 28 Mar 2014 10:44:29 +0100
changeset 94 e50dae408fe9
parent 93 c1e79acb9fcb
child 97 0c2e0c09ba5c
permissions -rw-r--r--
Add origin to Buffer. Use it to simplify hierarchical drawing.

from tuikit.core.widget import Widget
from tuikit.layouts.fixed import FixedLayout


class Container(Widget):

    """Container widget.

    Can contain other widgets to create hierarchical structure.

    """

    def __init__(self, layout_class=FixedLayout):
        Widget.__init__(self)
        #: List of child widgets.
        self.children = []
        self.layout = layout_class()

    def add(self, widget):
        """Add widget into container."""
        self.children.append(widget)
        widget.parent = self
        widget.window = self.window
        widget.set_theme(self.theme)
        self.layout.add(widget)

    def resize(self, w, h):
        Widget.resize(self, w, h)
        self.layout.resize()

    def draw(self, buffer):
        """Draw child widgets."""
        Widget.draw(self, buffer)
        for child in self.children:
            with buffer.moved_origin(child.x, child.y):
                with buffer.clip(buffer.origin.x, buffer.origin.y,
                                 child.width, child.height):
                    child.draw(buffer)

    def set_theme(self, theme):
        Widget.set_theme(self, theme)
        for child in self.children:
            child.set_theme(theme)