b501d2f4 |
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) )
|