tuikit/pager.py
author Radek Brich <radek.brich@devl.cz>
Fri, 04 Jan 2013 00:13:59 +0100
changeset 45 43b2279b06e1
parent 42 0224ce40792f
child 46 2b43a7f38c34
permissions -rw-r--r--
Clean up Emitter class, simplify event handling. Fix Container.focusnext() method. Add events test (handler auto-registration, order).

# -*- coding: utf-8 -*-

import logging

from tuikit.container import Container
from tuikit.layout import VerticalLayout, HorizontalLayout
from tuikit.button import Button


class Pager(Container):
    '''Only one of children is visible at the time.

    Pages are switched using buttons at top (tabs).

    page_one = Container()
    pager.add(page_one, title="page one")
    pager.select(page_one)

    '''

    def __init__(self, width=20, height=20):
        Container.__init__(self, width, height)

        # selected child (only one visible)
        self.selected = None

        self.layout = VerticalLayout()

        self.buttons = Container(20, 1)
        self.buttons.sizereq.h = 1
        self.buttons.layout = HorizontalLayout(homogeneous=True, spacing=1)
        super().add(self.buttons)

    def add(self, widget, **kw):
        super().add(widget, expand=True, fill=True)

        if self.selected is None:
            self.selected = widget
            widget.hidden = False
        else:
            widget.hidden = True

        btn = Button(kw['title'])
        btn.add_handler('click', lambda: self.select(widget))
        self.buttons.add(btn, fill=True)

    def select(self, child):
        log = logging.getLogger('tuikit')
        log.debug('Pager: select %r', child)

        self.selected.hidden = True
        child.hidden = False
        self.selected = child

        self.emit('resize')