git.fiddlerwoaroof.com
gui/text_display.py
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) )