Add Layout, FixedLayout.
from tuikit.core.buffer import Buffer
from tuikit.core.signal import Signal
from tuikit.core.container import Container
class Window(Container):
"""Window is rectangular part of screen containing widgets.
Widgets are drawn into window, events are routed to widgets through window.
"""
def __init__(self, buffer=None):
"""New buffer for the window will be created unless given existing
`buffer` as parameter."""
Container.__init__(self)
self._buffer = None
self.buffer = buffer or Buffer()
@property
def buffer(self):
return self._buffer
@buffer.setter
def buffer(self, buffer):
# replace the buffer
self._buffer = buffer
@property
def size(self):
return self.buffer.size
def resize(self, w, h):
"""Resize buffer when window gets resized."""
Container.resize(self, w, h)
self.buffer.resize(w, h)
self.redraw()
def redraw(self):
Container.draw(self, self.buffer)
self.buffer.puts(10, 5, '{0.w} {0.h}'.format(self.size))
self.buffer.frame()
def draw(self, buffer, x=0, y=0):
"""Draw this window into `buffer` at x/y coords."""
buffer.draw(self.buffer, x, y)
class WindowManager(Container):
def __init__(self, timer):
Container.__init__(self)
self.timer = timer
def resize(self, w, h):
self.children[0].resize(w, h)
# def keypress(self, keyname, char, mod=0):
def handle_event(self, event_name, *args):
"""Handle input event to managed windows."""
handler = getattr(self, event_name, None)
if handler:
handler(*args)
else:
raise Exception('Unknown event: %r %r' % (event_name, args))