@@ -377,7 +377,7 @@ def _collect_events(self, enum_: type[EventEnum]):
377377 ins_events .append (events )
378378
379379 ins_dict : DefaultDict [int , list [AnyEvent ]] = collections .defaultdict (list )
380- for i in range (max (counter )):
380+ for i in range (max (counter , default = 0 )):
381381 for sublist in ins_events :
382382 try :
383383 event = sublist [i ]
@@ -441,26 +441,25 @@ def __getitem__(self, index: SupportsIndex) -> Arrangement:
441441 # parse; it contains ArrangementID.New event followed by TimeMarker events
442442 # followed by 500 TrackID events. TimeMarkers occured before new arrangement
443443 # event in initial versions of FL20, making them harder to group.
444+ # TODO This logic might not work on older versions of FL.
444445 def __iter__ (self ) -> Iterator [Arrangement ]:
445- first = True
446- events : list [AnyEvent ] = []
447-
448- def make_arr ():
449- return Arrangement (* events , version = self ._kw ["version" ])
446+ """Provides an iterator over :class:`Arrangement`s found in the project.
450447
448+ Raises:
449+ NoModelsFound: When no arrangements are found.
450+ """
451+ arrs_evs : list [list [AnyEvent ]] = [[] for _ in range (len (self ))]
452+ idx = 0
451453 for event in self ._events_tuple :
452454 if event .id == ArrangementID .New :
453- if not first :
454- yield make_arr ()
455- events = []
456- first = not first
457- elif event .id == ArrangementsID .Current :
458- return make_arr () # last arrangement
455+ idx = event .value
459456
460457 for enum_ in (ArrangementID , TimeMarkerID , TrackID ):
461458 if event .id in enum_ :
462- events .append (event )
463- break
459+ arrs_evs [idx ].append (event )
460+
461+ for arr_evs in arrs_evs :
462+ yield Arrangement (* arr_evs , version = self ._kw ["version" ])
464463
465464 def __len__ (self ):
466465 """The number of arrangements present in the project.
@@ -488,8 +487,8 @@ def current(self) -> Arrangement | None:
488487 index = event .value
489488 try :
490489 return list (self )[index ]
491- except IndexError :
492- raise ModelNotFound (index )
490+ except IndexError as exc :
491+ raise ModelNotFound (index ) from exc
493492
494493 height = EventProp [int ](ArrangementsID .WindowHeight )
495494 """Window height / track width used by the interface."""
0 commit comments