tuikit/core/window.py
changeset 88 90d00354dc70
parent 87 ee5ea9671f28
child 89 94f5baef19ac
--- 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))