def _find_by_id(self, obj_id):
     ret = InteractiveObject._find_by_id(self, obj_id)
     if not ret:
         for c in self._children:
             ret = c._find_by_id(obj_id)
             if ret is not None:
                 break
     return ret
 def _broadcast(self, e):
     if self._children:
         chcopy = self._children[:]
         for c in chcopy:
             c._broadcast(e)
     InteractiveObject._broadcast(self, e)
 def __init__(self, name=None):
     InteractiveObject.__init__(self, name)
     self._children = []
 def clear(self):
     InteractiveObject.clear(self)
     self.removeAllChildren()        
 def _on_removed(self, obj, wasonstage):
     InteractiveObject._on_removed(self, obj, wasonstage)
     for c in self._children:
         c._on_removed(obj, wasonstage)
 def _on_added(self, obj, isonstage):
     InteractiveObject._on_added(self, obj, isonstage)
     for c in self._children:
         c._on_added(obj, isonstage)
 def _get_objects_under_point(self, p, result):
     InteractiveObject._get_objects_under_point(self, p, result)
     for c in self._children:
         c._get_objects_under_point(p, result)