import src.console import collections class MessageBox(object): def __init__(self, console, num, pos, event=None): self.console = console self.pos = x,y = pos self.messages = collections.deque([], num) self.maxlen = -float('inf') if event is not None: import src.events src.events.EventHandler().handle_event(event, self.msg) def msg(self, msg, *a): msg %= a self.messages.append(msg) self.maxlen = max(self.maxlen, len(msg)) x,y = self.pos for idx, msg in enumerate(self.messages): self.console.print_( (x,y+idx), msg.ljust(self.maxlen) ) return False class TextBox(object): def __init__(self, console, num, pos, event=None): self.console = console self.pos = x,y = pos self.lines = [''] * num self.maxlen = -float('inf') if event is not None: import src.events src.events.EventHandler().handle_event(event, self.set_line) def set_line(self, line, msg, *a): msg = msg % a self.maxlen = max(self.maxlen, len(msg)) self.lines[line] = msg x,y = self.pos self.console.print_( (x,y+line), msg.ljust(self.maxlen) ) return False class Label(object): def __init__(self, console, pos, event=None): self.console = console self.pos = x,y = pos self.line = '' self.maxlen = -float('inf') if event is not None: import src.events src.events.EventHandler().handle_event(event, self.set_text) def set_text(self, msg, *a): msg = msg % a self.maxlen = max(self.maxlen, len(msg)) self.line = msg x,y = self.pos self.console.print_( (x,y), msg.ljust(self.maxlen) ) return False class Array2DDisplay(object): def __init__(self, console, pos, event=None): self.console = console self.pos = x,y = pos self.maxlen = -float('inf') self.array = None if event is not None: import src.events src.events.EventHandler().handle_event(event, self.update) def associate(self, arr): self.array = arr return self def update(self): ox,oy = self.pos for x, row in enumerate(self.array): for y, cell in enumerate(row): self.console.print_( (ox+x,oy+y), str(cell) )