Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class LineItem(urwid.WidgetWrap):
- def __init__(self, user, content):
- self.user = urwid.Text(user)
- self.content = urwid.Text(content)
- self.item = [
- ('fixed', 10, urwid.Padding(
- urwid.AttrMap(self.user, 'text'), left=2)),
- urwid.AttrMap(self.content, 'text')
- ]
- self.info = '%s: %s' % (user, content)
- w = urwid.Columns(self.item)
- self.__super.__init__(w)
- def selectable(self):
- return True
- def keypress(self, size, key):
- return key
- class ExtenedEdit(urwid.Edit):
- __metaclass = urwid.signals.MetaSignals
- signals = ['done']
- def keypress(self, size, key):
- if key is 'enter':
- urwid.emit_signal(self, 'done', self, self.get_edit_text())
- super(ExtenedEdit, self).set_edit_text('')
- return
- elif key is 'esc':
- urwid.emit_signal(self, 'done', None)
- super(ExtenedEdit, self).set_edit_text('')
- return
- urwid.Edit.keypress(self, size, key)
- def selectable(self):
- return True
- class MainWindow(object):
- """
- -------context-------
- | --inner context---- |
- || HEADER ||
- || ||
- || BODY ||
- || ||
- || DIVIDER ||
- | ------------------- |
- | FOOTER |
- ---------------------
- """
- _palette = [
- ('divider', 'black', 'dark cyan', 'standout'),
- ('text', 'light gray', 'default'),
- ('body', 'text'),
- ('footer', 'text'),
- ('header', 'text'), ]
- def __init__(self):
- self.items = []
- def input_cb(key):
- if key is 'f8':
- raise urwid.ExitMainLoop()
- if key is 'enter':
- text = self.txt_footer.get_edit_text()
- self.items.append(LineItem('user:', text))
- def run(self):
- self.build_interface()
- self.main_loop = urwid.MainLoop(
- self.context,
- palette=self._palette,
- handle_mouse=False,
- unhandled_input=self.input_cb,
- )
- self.main_loop.run()
- def _create_widget(self):
- """ create the UI widgets """
- self.header = urwid.Text("HEADER")
- self.txt_footer = ExtenedEdit(">> ")
- self.divider = urwid.Text("Initializing.")
- item = LineItem('bavan', 'Hello')
- self.items.append(item)
- self.generic_output_walker = urwid.SimpleListWalker(self.items)
- self.lst_body = urwid.ListBox(
- self.generic_output_walker)
- def _setup_widgets(self):
- self.header = urwid.AttrMap(self.header, 'divider')
- self.footer = urwid.AttrMap(self.txt_footer, 'footer')
- self.divider = urwid.AttrMap(self.divider, 'divider')
- self.body = urwid.AttrMap(self.lst_body, 'body')
- def _setup_context(self):
- self.context = urwid.Frame(self.body, header=self.header,
- footer=self.divider)
- self.context = urwid.Frame(self.context, footer=self.footer)
- self.context.set_focus('footer')
- def build_interface(self):
- self._create_widget()
- self._setup_widgets()
- self._setup_context()
- if __name__ == '__main__':
- import sys
- try:
- main_win = MainWindow()
- main_win.run()
- except KeyboardInterrupt:
- sys.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement