feat: menu demo
This commit is contained in:
76
menu.py
Normal file
76
menu.py
Normal file
@@ -0,0 +1,76 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user