tuikit/core/widget.py
author Radek Brich <radek.brich@devl.cz>
Wed, 26 Mar 2014 21:26:39 +0100
changeset 92 b97c4e25ed6d
parent 90 781774a8d568
child 93 c1e79acb9fcb
permissions -rw-r--r--
Configure logging for demos.

from tuikit.core.coords import Point, Size
from tuikit.core.theme import default_theme


class Widget:

    """Base class for all widgets."""

    _num_instances = 0

    def __init__(self):
        #: Widget name is used for logging etc. Not visible anywhere.
        self._num_instances += 1
        self.name = '{}{}'.format(
            self.__class__.__name__,
            self._num_instances)

        #: Parent Widget
        self.parent = None
        #: Window owning this Widget
        self.window = None
        #: Theme
        self.theme = default_theme

        #: Position inside parent widget. Modified by layout manager.
        self.pos = Point()
        #: Actual size. Modified by layout manager.
        self.size = Size(10, 10)

        #: Requested size. Layout manager will use this when placing the widget.
        self.sizereq = Size(1, 1)
        #: Minimal size of widget. Widget will never be sized smaller than this.
        self.sizemin = Size(1, 1)
        #: Maximum size of widget. Widget will never be sized bigger than this.
        #: None means no maximum size (infinite).
        self.sizemax = Size(None, None)

    ## position and size ##

    @property
    def x(self):
        return self.pos.x

    @property
    def y(self):
        return self.pos.y

    @property
    def width(self):
        return self.size.w

    @property
    def height(self):
        return self.size.h

    ## appearance ##

    def draw(self, buffer, x, y):
        pass

    def set_theme(self, theme):
        self.theme = theme

    ## timeouts ##

    def add_timeout(self, delay, callback, *args):
        """Register `callback` to be called after `delay` seconds."""
        self.parent.add_timeout(self, delay, callback, *args)

    def remove_timeout(self, callback, *args):
        """Unregister callback previously registered with add_timeout.

        Removes all timeouts with the `callback` and `args`.

        """
        self.parent.remove_timeout(self, callback, *args)