tuikit/core/window.py
changeset 86 0978fb755d31
child 87 ee5ea9671f28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tuikit/core/window.py	Mon Mar 17 20:40:04 2014 +0100
@@ -0,0 +1,46 @@
+from tuikit.core.buffer import Buffer
+from tuikit.core.signal import Signal
+
+
+class Window:
+
+    """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."""
+        self._buffer = None
+        self._size = None
+        self.sig_resized = Signal()
+        self.buffer = buffer or Buffer()
+
+    @property
+    def buffer(self):
+        return self._buffer
+
+    @buffer.setter
+    def buffer(self, buffer):
+        # disconnect signals from old buffer
+        if self._buffer:
+            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()
+
+    def resize(self, w, h):
+        self._buffer.resize(w, h)
+        self.sig_resized(w, h)
+
+    def draw(self, buffer, x=0, y=0):
+        """Draw this window into buffer at x, y coords."""
+        buffer.draw(self.buffer, x, y)