Shorter hints, which mean more space for actions in the tutorial
[naja.git] / naja / widgets / base.py
index c82026179c9856b4812f6937d433881a8321fddc..815d1d3a3f1cf23fedcc776ff980b5d4b727b051 100644 (file)
@@ -7,6 +7,8 @@ from naja.events import InvalidateTheWorld, SelectEvent
 
 
 class Widget(object):
+    _is_selectable_func = None
+
     def __init__(self, pos, size=None):
         self.pos = pos
         self.size = size or (0, 0)
@@ -39,7 +41,7 @@ class Widget(object):
             self._prepared = False
             return False
         if SelectEvent.matches(ev) or ev.type == pgl.MOUSEBUTTONDOWN:
-            self.callback('click')
+            return self.callback('click')
         return False
 
     def add_callback(self, event, callback):
@@ -48,6 +50,17 @@ class Widget(object):
     def callback(self, event):
         for callback in self.callbacks[event]:
             callback(event)
+        return bool(self.callbacks[event])
+
+    def set_selectable_callback(self, func):
+        self._is_selectable_func = func
+
+    def is_selectable(self):
+        """Return False if this widget isn't selectable by SelectorWidget."""
+        if self._is_selectable_func is not None:
+            return self._is_selectable_func()
+        else:
+            return True
 
 
 class Container(object):