Add hooke.playlist.NoteIndexList._setup_item
authorW. Trevor King <wking@drexel.edu>
Wed, 2 Jun 2010 03:00:19 +0000 (23:00 -0400)
committerW. Trevor King <wking@drexel.edu>
Wed, 2 Jun 2010 03:00:19 +0000 (23:00 -0400)
This allows item initialization to occur in both .current() and
.filter().

Renamed Playlist._load -> ._setup_item for consistency.

hooke/playlist.py

index 963d93558cc28b2f4b590c94739a45343edf8bbf..59daa462c4525c1e7f209a75cfbed53c3d462629 100644 (file)
@@ -45,10 +45,17 @@ class NoteIndexList (list):
     def __str__(self):
         return '<%s %s>' % (self.__class__.__name__, self.name)
 
+    def _setup_item(self, item):
+        """Perform any required initialization before returning an item.
+        """
+        pass
+
     def current(self):
         if len(self) == 0:
             return None
-        return self[self._index]
+        item = self[self._index]
+        self._setup_item(item)
+        return item
 
     def jump(self, index):
         if len(self) == 0:
@@ -65,6 +72,7 @@ class NoteIndexList (list):
     def filter(self, keeper_fn=lambda item:True, *args, **kwargs):
         c = copy.deepcopy(self)
         for item in reversed(c):
+            c._setup_item(item)
             if keeper_fn(item, *args, **kwargs) != True:
                 c.remove(item)
         try: # attempt to maintain the same current item
@@ -81,7 +89,7 @@ class Playlist (NoteIndexList):
     def __init__(self, drivers, name=None):
         super(Playlist, self).__init__(name=name)
         self.drivers = drivers
-        self._loaded = [] # List of loaded curves, see :meth:`._load`.
+        self._loaded = [] # List of loaded curves, see :meth:`._setup_item`.
         self._max_loaded = 100 # curves to hold in memory simultaneously.
 
     def append_curve_by_path(self, path, info=None, identify=True):
@@ -94,12 +102,7 @@ class Playlist (NoteIndexList):
         self.append(c)
         return c
 
-    def current(self):
-        curve = super(Playlist, self).current()
-        self._load(curve)
-        return curve
-
-    def _load(self, curve):
+    def _setup_item(self, curve):
         if curve != None and curve not in self._loaded:
             if curve not in self:
                 self.append(curve)