--- a/tuikit/core/window.py Mon Mar 17 23:44:18 2014 +0100
+++ b/tuikit/core/window.py Tue Mar 18 22:39:21 2014 +0100
@@ -1,6 +1,7 @@
from tuikit.core.buffer import Buffer
from tuikit.core.signal import Signal
from tuikit.core.container import Container
+from tuikit.core.coords import Point
class Window(Container):
@@ -15,12 +16,20 @@
"""New buffer for the window will be created unless given existing
`buffer` as parameter."""
Container.__init__(self)
+ self.pos = Point()
self._buffer = None
- self._size = None
self.sig_resized = Signal()
self.buffer = buffer or Buffer()
@property
+ def x(self):
+ return self.pos.x
+
+ @property
+ def y(self):
+ return self.pos.y
+
+ @property
def buffer(self):
return self._buffer
@@ -31,19 +40,49 @@
self.sig_resized.disconnect(self._buffer.resize)
# replace the buffer
self._buffer = buffer
- self._size = buffer.size
# resize buffer when window gets resized
self.sig_resized.connect(buffer.resize)
@property
def size(self):
- return self._size.readonly()
+ return self.buffer.size.readonly()
def resize(self, w, h):
- self._buffer.resize(w, h)
+ self.buffer.resize(w, h)
self.sig_resized(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."""
- Container.draw(self, self.buffer)
+ """Draw this window into `buffer` at x/y coords."""
buffer.draw(self.buffer, x, y)
+
+
+class WindowManager:
+
+ def __init__(self):
+ self.windows = []
+
+ def add(self, window):
+ self.windows.append(window)
+
+ def resize(self, w, h):
+ self.windows[0].resize(w, h)
+
+ def draw(self, buffer, x=0, y=0):
+ for window in self.windows:
+ window.draw(buffer,
+ x + window.x,
+ y + window.y)
+
+ 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))