Merge.
Due to my schizophrenia, I've accidentally forked my own code. The other set of changes were found in another computer.
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.
Parent of Window is always WindowManager.
"""
def __init__(self, buffer=None):
"""New buffer for the window will be created unless given existing
`buffer` as parameter."""
Container.__init__(self)
self.allow_focus = True
self.trap_focus = True
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):
self.buffer.reset_origin()
Container.draw(self, self.buffer)
self.buffer.puts('{0.w} {0.h}'.format(self.size), 10, 5)
self.buffer.frame()
def draw(self, buffer):
"""Draw this window into `buffer`."""
self.redraw()
buffer.draw(self.buffer)
class WindowManager(Container):
def __init__(self, timer):
Container.__init__(self)
self.timer = timer
def draw(self, buffer):
Container.draw(self, buffer)
self.log.debug('%s has focus.', self.get_focused_widget().name)
def resize(self, w, h):
Container.resize(self, w, h)
self._widgets[0].resize(w, h)
def keypress_event(self, ev):
self.log.debug('%s', ev)
return Container.keypress_event(self, ev)
def handle_event(self, event):
"""Handle input event to managed windows."""
self.log.debug('Handle event: %r', event)
handler = getattr(self, event.name + '_event', None)
if handler:
handler(event)
else:
raise Exception('Unknown event: %r' % event)
def get_focused_widget(self):
"""Traverse the widget hierarchy to bottom
and return actually focused Widget."""
node = self
while isinstance(node, Container) and node.focus_widget:
node = node.focus_widget
return node
def get_cursor_if_visible(self):
if self.cursor_visible:
return self.cursor