a REAL em dash
[naja.git] / naja / widgets / base.py
index 81f11b649df9734371017f34891fa3ec6b360505..815d1d3a3f1cf23fedcc776ff980b5d4b727b051 100644 (file)
@@ -3,10 +3,12 @@ from collections import defaultdict
 import pygame
 from pygame import locals as pgl
 
-from naja.events import InvalidateTheWorld
+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)
@@ -38,8 +40,8 @@ class Widget(object):
             # True for for this event
             self._prepared = False
             return False
-        if ev.type == pgl.MOUSEBUTTONDOWN:
-            self.callback('click')
+        if SelectEvent.matches(ev) or ev.type == pgl.MOUSEBUTTONDOWN:
+            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):