import urwid
import urwid.raw_display

view = None
listbox = None
ui = None
size = None

def start():
   buildDialog()
   draw()
   handleInput()

def buildDialog():
   global view, listbox

   l = []
   for i in xrange(5):
       w = urwid.AttrWrap(urwid.Text('text' + str(i)), 'text','focus')
       l.append(w)

   listbox = urwid.ListBox(l)
   view = urwid.Frame(listbox, header=None, footer=None)

def draw():
      global ui, size, vendor, listbox, view
      cols, rows = ui.get_cols_rows()
      size = (cols, rows)
      canvas = view.render( size )
      ui.clear()
      ui.draw_screen( size, canvas )

      (w, pos) = listbox.get_focus()
      print pos

def handleInput():
   global ui, size, listbox
   while True:
      draw()
      keys = ui.get_input()
      for key in keys:
         if key == 'up':
            (w, pos) = listbox.get_focus()
            if pos > 0:
               listbox.set_focus(pos - 1)
            else:
               listbox.set_focus(0)
         elif key == 'down':
            (w, pos) = listbox.get_focus()
            if pos < len(listbox.body.contents):
               listbox.set_focus(pos + 1)
            else:
               listbox.set_focus(len(listbox.body.contents) - 1)
         else:
            return key

         if key == 'esc':
            import sys
            sys.exit(0)

if __name__ == '__main__':
   ui = urwid.raw_display.Screen()
   palette = [
      ('text', 'black', 'light gray'),
      ('focus', 'dark red', 'dark blue'),
   ]

   ui.register_palette(palette)

   ui.run_wrapper(start)

