Exemplo n.º 1
0
class DexterInterface(object):
    def __init__(self, filename = None, terminal = None):
        self.filename = filename
        self.data     = {}
        self.commands = DexterCommands(self)
        self.prompt   = DexterPrompt(self)
        self.init_views()
        self.init_terminal(terminal)

    def init_terminal(self, terminal = None):
        self.terminal = terminal or Terminal()
        signal.signal(signal.SIGWINCH, self.on_resize)
        self.redraw()

    def init_views(self):
        self.views    = {}
        self.cur_view = 'msglog'
        for name, desc in INITIAL_VIEWS.items():
            self.views[name] = DexterView(self, desc)

    def on_resize(self, *args):
        self.terminal.on_resize()
        self.redraw()

    def redraw(self):
        self.view.draw()
        self.prompt.draw()
        self.terminal.stdscr.refresh()

    def do_command(self, command):
        self.output(self.prompt.pstring + command)
        self.commands.do(command)
        self.redraw()

    def output(self, text, name=None):
        name = name or self.cur_view
        self.get_view(name).append(text)

    def repl(self):
        with self.terminal:
            while True:
                cmd = self.prompt.wait()
                self.do_command(cmd)

    def get_view(self, name):
        if not name in self.views:
            self.views[name] = DexterView(self)
        return self.views[name]

    @property
    def view(self):
        return self.get_view(self.cur_view)
Exemplo n.º 2
0
 def __init__(self, filename = None, terminal = None):
     self.filename = filename
     self.data     = {}
     self.commands = DexterCommands(self)
     self.prompt   = DexterPrompt(self)
     self.init_views()
     self.init_terminal(terminal)