Source code for lookatme.widgets.scroll_monitor

import urwid


from lookatme.widgets.scrollbar import Scrollbar
from lookatme.tutorial import tutor


[docs]@tutor( "general", "scrolling", r""" The scrollbar that kkjjj Scroll with: | amount | up key | down key | |-------:|----------|------------| | line | up arrow | down arrow | | page | page up | page down | Try scrolling through the numbers 0-49 below: {numbers} """.format( numbers="\n\n ".join(str(n) for n in range(50)) ), order=0.2, ) class ScrollMonitor(urwid.Frame): def __init__(self, main_widget: urwid.Widget, scrollbar: Scrollbar): self.main_widget = main_widget self.scrollbar = scrollbar super().__init__(self.main_widget)
[docs] def render(self, size, focus: bool = True): if not self.scrollbar.should_display((size[0] - 1, size[1])): return super().render(size, focus) width, height = size main_canvas = super().render((width - 1, height), focus) if not isinstance(main_canvas, urwid.CompositeCanvas): main_canvas = urwid.CompositeCanvas(main_canvas) scroll_canvas = self.scrollbar.render((1, height), focus) if not isinstance(scroll_canvas, urwid.CompositeCanvas): scroll_canvas = urwid.CompositeCanvas(scroll_canvas) return urwid.CanvasJoin( [ (main_canvas, None, True, main_canvas.cols()), (scroll_canvas, None, False, scroll_canvas.cols()), ] )