Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2014
264
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class LineItem(urwid.WidgetWrap):
  2.  
  3.     def __init__(self, user, content):
  4.         self.user = urwid.Text(user)
  5.         self.content = urwid.Text(content)
  6.         self.item = [
  7.             ('fixed', 10, urwid.Padding(
  8.                 urwid.AttrMap(self.user, 'text'), left=2)),
  9.             urwid.AttrMap(self.content, 'text')
  10.         ]
  11.         self.info = '%s: %s' % (user, content)
  12.         w = urwid.Columns(self.item)
  13.         self.__super.__init__(w)
  14.  
  15.     def selectable(self):
  16.         return True
  17.     def keypress(self, size, key):
  18.         return key
  19.  
  20. class ExtenedEdit(urwid.Edit):
  21.     __metaclass = urwid.signals.MetaSignals
  22.     signals = ['done']
  23.  
  24.     def keypress(self, size, key):
  25.  
  26.         if key is 'enter':
  27.             urwid.emit_signal(self, 'done', self, self.get_edit_text())
  28.             super(ExtenedEdit, self).set_edit_text('')
  29.             return
  30.         elif key is 'esc':
  31.             urwid.emit_signal(self, 'done', None)
  32.             super(ExtenedEdit, self).set_edit_text('')
  33.             return
  34.         urwid.Edit.keypress(self, size, key)
  35.  
  36.     def selectable(self):
  37.         return True
  38.  
  39. class MainWindow(object):
  40.  
  41.     """
  42.     -------context-------
  43.    | --inner context---- |
  44.    || HEADER            ||
  45.    ||                   ||
  46.    || BODY              ||
  47.    ||                   ||
  48.    || DIVIDER           ||
  49.    | ------------------- |
  50.    | FOOTER              |
  51.     ---------------------
  52.    """
  53.     _palette = [
  54.         ('divider', 'black', 'dark cyan', 'standout'),
  55.         ('text', 'light gray', 'default'),
  56.         ('body', 'text'),
  57.         ('footer', 'text'),
  58.         ('header', 'text'), ]
  59.  
  60.     def __init__(self):
  61.         self.items = []
  62.  
  63.     def input_cb(key):
  64.         if key is 'f8':
  65.             raise urwid.ExitMainLoop()
  66.         if key is 'enter':
  67.             text = self.txt_footer.get_edit_text()
  68.             self.items.append(LineItem('user:', text))
  69.  
  70.     def run(self):
  71.         self.build_interface()
  72.  
  73.         self.main_loop = urwid.MainLoop(
  74.             self.context,
  75.             palette=self._palette,
  76.             handle_mouse=False,
  77.             unhandled_input=self.input_cb,
  78.         )
  79.  
  80.         self.main_loop.run()
  81.  
  82.     def _create_widget(self):
  83.         """ create the UI widgets """
  84.         self.header = urwid.Text("HEADER")
  85.         self.txt_footer = ExtenedEdit(">> ")
  86.         self.divider = urwid.Text("Initializing.")
  87.         item = LineItem('bavan', 'Hello')
  88.         self.items.append(item)
  89.         self.generic_output_walker = urwid.SimpleListWalker(self.items)
  90.         self.lst_body = urwid.ListBox(
  91.             self.generic_output_walker)
  92.  
  93.     def _setup_widgets(self):
  94.         self.header = urwid.AttrMap(self.header, 'divider')
  95.         self.footer = urwid.AttrMap(self.txt_footer, 'footer')
  96.         self.divider = urwid.AttrMap(self.divider, 'divider')
  97.         self.body = urwid.AttrMap(self.lst_body, 'body')
  98.  
  99.     def _setup_context(self):
  100.         self.context = urwid.Frame(self.body, header=self.header,
  101.                                    footer=self.divider)
  102.         self.context = urwid.Frame(self.context, footer=self.footer)
  103.         self.context.set_focus('footer')
  104.  
  105.     def build_interface(self):
  106.         self._create_widget()
  107.         self._setup_widgets()
  108.         self._setup_context()
  109.  
  110. if __name__ == '__main__':
  111.     import sys
  112.     try:
  113.         main_win = MainWindow()
  114.         main_win.run()
  115.     except KeyboardInterrupt:
  116.         sys.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement