import urwid.raw_display
import urwid
import sys


class TextField(urwid.WidgetWrap):
    def __init__(self, text):
        self.widget = urwid.Text(text)
        self.w = urwid.AttrWrap(self.widget,'body','focus')
        urwid.WidgetWrap.__init__(self, self.w)
        self.selected = False

    def keypress(self, size, key):
        return key

    def selectable(self):
        return True



def run():
    some_text_list = urwid.SimpleListWalker(map(TextField, (("this is some content of list long content"*20).split())))
    listbox = urwid.ListBox(some_text_list)

    inner_foot = urwid.Text("inner_foot")
    inner_head = urwid.Text("inner_head")
    
    inner_frame = urwid.Frame(body=listbox, footer=inner_foot, header=inner_head)

    outer_foot = urwid.Text("outer_foot")
    outer_head = urwid.Text("outer_head")
    outer_frame = urwid.Frame(body=inner_frame, footer=outer_foot, header=outer_head)

    size = ui.get_cols_rows()
    canvas = outer_frame.render(size, focus=1)
    ui.draw_screen(size, canvas)

    while True:
        size = ui.get_cols_rows()
        key = ui.get_input()
        for k in key:
            if k == 'j' or k=='down':
                outer_frame.keypress(size, 'down')
                inner_foot.set_text(listbox.get_focus()[0].widget.text)
            elif k == 'k' or k=='up':
                outer_frame.keypress(size, 'up')
                inner_foot.set_text(listbox.get_focus()[0].widget.text)

        canvas = outer_frame.render(size, focus=1)
        ui.draw_screen(size, canvas)


palette = [
    ('body', 'black', 'light gray'),
    ('focus', 'dark gray', 'dark blue', 'standout')]

ui = urwid.raw_display.Screen()
ui.register_palette(palette)
ui.run_wrapper(run)
