def __init__(self, layout, text):
        """
        Used to display and control the position of text in a scrollable area.

        @param layout: Skin layout to use.
        @param text: This is the text to scroll.
        """
        self.layout = layout
        self.scrollable_text = ScrollableText(text)
    def __init__(self, layout, text):
        """
        Used to display and control the position of text in a scrollable area.

        @param layout: Skin layout to use.
        @param text: This is the text to scroll.
        """
        self.layout = layout
        self.scrollable_text = ScrollableText(text)
class ScrollableTextScreen:
    """
    A scrollable text screen
    """
    def __init__(self, layout, text):
        """
        Used to display and control the position of text in a scrollable area.

        @param layout: Skin layout to use.
        @param text: This is the text to scroll.
        """
        self.layout = layout
        self.scrollable_text = ScrollableText(text)

    def show(self, menuw):
        """
        Display the screen and make it the active 'menu'.

        @param menuw: The menu widget to push this screen onto.
        """
        self.menuw = menuw
        self.transition = skin.TRANSITION_IN
        menuw.pushmenu(self)
        self.transition = False
        if hasattr(self, 'event_context'):
            logger.log(9, 'scrollabletext_screen: setting context to %s',
                       self.event_context)
            rc.set_context(self.event_context)

    def refresh(self):
        """
        Redraw the screen.
        """
        if self.menuw.children:
            return
        skin_object.draw(self.layout, self, transition=self.transition)

    def eventhandler(self, event, menuw=None):
        """
        eventhandler to handle events that relate to scrolling the text
        in the scrollable_text area/object.
        Any events not directly handled here are passed to the registered
        client_eventhandler.

        @param event: The event to handle.
        @param menuw: The Menu Widget that called this handler.
        """
        event_consumed = False
        if event == MENU_UP:
            self.scrollable_text.scroll(True)
            self.refresh()
            event_consumed = True

        elif event == MENU_DOWN:
            self.scrollable_text.scroll(False)
            self.refresh()
            event_consumed = True

        elif event == MENU_SUBMENU:
            # open the submenu for this item
            if hasattr(self.menuw.menustack[-2], 'is_submenu'):
                # there is already a submenu, we can return to
                self.menuw.eventhandler('MENU_BACK_ONE_MENU')
                event_consumed = True
            else:
                # we have to create a new submenu
                self.menuw.delete_menu()
                self.menuw.eventhandler('MENU_SUBMENU')
                event_consumed = True

        elif event == MENU_SELECT:
            # just close this again
            self.menuw.eventhandler('MENU_BACK_ONE_MENU')
            event_consumed = True

        return event_consumed

    def getattr(self, attr):
        """
        Used by the skin to retrieve named details about this object.
        """
        return getattr(self, attr, u'')
class ScrollableTextScreen:
    """
    A scrollable text screen
    """
    def __init__(self, layout, text):
        """
        Used to display and control the position of text in a scrollable area.

        @param layout: Skin layout to use.
        @param text: This is the text to scroll.
        """
        self.layout = layout
        self.scrollable_text = ScrollableText(text)

    def show(self, menuw):
        """
        Display the screen and make it the active 'menu'.

        @param menuw: The menu widget to push this screen onto.
        """
        self.menuw = menuw
        self.transition = skin.TRANSITION_IN
        menuw.pushmenu(self)
        self.transition = False
        if hasattr(self, 'event_context'):
            logger.log( 9, 'scrollabletext_screen: setting context to %s', self.event_context)
            rc.set_context(self.event_context)

    def refresh(self):
        """
        Redraw the screen.
        """
        if self.menuw.children:
            return
        skin_object.draw(self.layout, self, transition=self.transition)

    def eventhandler(self, event, menuw=None):
        """
        eventhandler to handle events that relate to scrolling the text
        in the scrollable_text area/object.
        Any events not directly handled here are passed to the registered
        client_eventhandler.

        @param event: The event to handle.
        @param menuw: The Menu Widget that called this handler.
        """
        event_consumed = False
        if event == MENU_UP:
            self.scrollable_text.scroll(True)
            self.refresh()
            event_consumed = True

        elif event == MENU_DOWN:
            self.scrollable_text.scroll(False)
            self.refresh()
            event_consumed = True

        elif event == MENU_SUBMENU:
            # open the submenu for this item
            if hasattr(self.menuw.menustack[-2],'is_submenu'):
                # there is already a submenu, we can return to
                self.menuw.eventhandler('MENU_BACK_ONE_MENU')
                event_consumed = True
            else:
                # we have to create a new submenu
                self.menuw.delete_menu()
                self.menuw.eventhandler('MENU_SUBMENU')
                event_consumed = True

        elif event == MENU_SELECT:
            # just close this again
            self.menuw.eventhandler('MENU_BACK_ONE_MENU')
            event_consumed = True

        return event_consumed

    def getattr(self, attr):
        """
        Used by the skin to retrieve named details about this object.
        """
        return getattr(self, attr, u'')