Files
ManimML/manim_ml/list_group.py
2023-01-01 23:24:59 -05:00

85 lines
2.2 KiB
Python

from manim import *
class ListGroup(Mobject):
"""Indexable Group with traditional list operations"""
def __init__(self, *layers):
super().__init__()
self.items = [*layers]
def __getitem__(self, indices):
"""Traditional list indexing"""
return self.items[indices]
def insert(self, index, item):
"""Inserts item at index"""
self.items.insert(index, item)
self.submobjects = self.items
def remove_at_index(self, index):
"""Removes item at index"""
if index > len(self.items):
raise Exception(f"ListGroup index out of range: {index}")
item = self.items[index]
del self.items[index]
self.submobjects = self.items
return item
def remove_at_indices(self, indices):
"""Removes items at indices"""
items = []
for index in indices:
item = self.remove_at_index(index)
items.append(item)
return items
def remove(self, item):
"""Removes first instance of item"""
self.items.remove(item)
self.submobjects = self.items
return item
def get(self, index):
"""Gets item at index"""
return self.items[index]
def add(self, item):
"""Adds to end"""
self.items.append(item)
self.submobjects = self.items
def replace(self, index, item):
"""Replaces item at index"""
self.items[index] = item
self.submobjects = self.items
def index_of(self, item):
"""Returns index of item if it exists"""
for index, obj in enumerate(self.items):
if item is obj:
return index
return -1
def __len__(self):
"""Length of items"""
return len(self.items)
def set_z_index(self, z_index_value, family=True):
"""Sets z index of all values in ListGroup"""
for item in self.items:
item.set_z_index(z_index_value, family=True)
def __iter__(self):
self.current_index = -1
return self
def __next__(self): # Python 2: def next(self)
self.current_index += 1
if self.current_index < len(self.items):
return self.items[self.current_index]
raise StopIteration