tuikit/core/widget.py
changeset 113 6796adfdc7eb
parent 112 ce2e67e7bbb8
parent 107 1822c37b2688
child 114 26c02bd94bd9
--- a/tuikit/core/widget.py	Wed Sep 03 19:17:04 2014 +0200
+++ b/tuikit/core/widget.py	Wed Sep 03 21:56:20 2014 +0200
@@ -1,4 +1,4 @@
-from tuikit.core.coords import Point, Size
+from tuikit.core.coords import Point, Size, Rect
 from tuikit.core.theme import default_theme
 from tuikit.core.signal import Signal
 
@@ -15,9 +15,7 @@
         self._num_instances += 1
 
         #: Widget name is used for logging etc. Not visible anywhere.
-        self.name = '{}{}'.format(
-            self.__class__.__name__,
-            self._num_instances)
+        self.name = '%s#%s' % (self.__class__.__name__, self._num_instances)
 
         #: Parent Widget
         self.parent = None
@@ -40,8 +38,9 @@
         self.sizemax = Size(None, None)
 
         #: Cursor is position where text input will occur.
+        #: The cursor coordinates are relative to widget.
         self._cursor = Point()
-        #: Cursor is displayed on screen only if the widget is focused.
+        #: Cursor is displayed on screen only when the widget is focused.
         self._cursor_visible = False
 
         #: Hidden widget does not affect layout.
@@ -71,11 +70,15 @@
 
     @property
     def size(self):
-        return self._size.readonly()
+        return self._size.immutable()
 
     def resize(self, w, h):
         self._size.update(w, h)
 
+    @property
+    def boundaries(self):
+        return Rect._make(self.pos, self._size)
+
     ## drawing, looks ##
 
     def draw(self, buffer):
@@ -100,7 +103,13 @@
 
     @property
     def cursor(self):
-        return self._cursor
+        """Return cursor coordinates.
+        
+        Returns None if cursor is set outside of widget boundaries.
+        
+        """
+        if self._cursor in Rect._make((0, 0), self._size):
+            return self._cursor
 
     @property
     def cursor_visible(self):
@@ -126,6 +135,18 @@
             return True
         self.log.debug('Not consumed: %s', ev)
 
+    def mousedown(self, button, pos):
+        self._log.debug('mousedown(btn=%r, pos=%r)',
+                        button, pos)
+
+    def mouseup(self, button, pos):
+        self._log.debug('mouseup(btn=%r, pos=%r)',
+                        button, pos)
+
+    def mousemove(self, button, pos, relpos):
+        self._log.debug('mousemove(btn=%r, pos=%r, relpos=%r)',
+                        button, pos, relpos)
+
     ## timeouts ##
 
     def add_timeout(self, delay, callback, *args):
@@ -155,4 +176,9 @@
 
     @property
     def log(self):
-        return logging.getLogger('tuikit.' + self.name)
+        """Logger for widget debugging.
+        
+        Logger name contains full module name, class name and instance number.
+        
+        """
+        return logging.getLogger('%s.%s' % (self.__module__, self.name))