from this import d from ili9341 import Display, color565 class MenuItem: def __init__(self, name: str, navigate: str): self.name = name self.navigate = navigate class MenuPage: UP = 0 DOWN = 1 def __init__(self, title: str, item: list[MenuItem]): self.title = title self.items = item self.items.append(MenuItem("Back", "Root")) self.cursor = 0 def size(self) -> int: return len(self.items) def move(self, direction: int): match direction: case self.UP: self.cursor = (self.cursor + 1) % self.size() case self.DOWN: self.cursor = (self.cursor - 1) % self.size() def draw(self) -> str: lines: list[str] = [] for i, item in enumerate(self.items): if i == self.cursor: lines.append("> {item.name}\n") else: lines.append(" {item.name}\n") return "\n".join(lines) def current_at_cursor(self, cursor: int) -> MenuItem: return self.items[cursor] class DisplayMenu: def __init__(self, display: Display, pages: list[MenuPage]): self.display = display self.pages = pages self.cursor = 0 self.current_page = self.pages[0] self.update() def __draw_display_line(self, line: str, offset: int): self.display.draw_text8x8( 10, 10 + (offset * 8), line, color565(255, 255, 255), color565(0, 0, 0), ) def move_up(self): self.current_page.move(MenuPage.UP) def move_down(self): self.current_page.move(MenuPage.DOWN) def select(self): pass def update(self): self.__draw_display_line(self.current_page.title, 0) self.__draw_display_line(self.current_page.draw(), 2)