104 lines
3.7 KiB
Python
104 lines
3.7 KiB
Python
"""
|
|
Main Menu Screen
|
|
The primary menu interface for profile management
|
|
"""
|
|
|
|
from .base_screen import BaseScreen
|
|
|
|
|
|
class MainMenuScreen(BaseScreen):
|
|
"""Main menu screen implementation"""
|
|
|
|
def __init__(self, data_manager, ui_renderer, screen_manager):
|
|
super().__init__(data_manager, ui_renderer, screen_manager)
|
|
self.menu_items = [
|
|
"Create Profile",
|
|
"Select Profile",
|
|
"Edit Settings",
|
|
"Leaderboard",
|
|
"Profile Stats",
|
|
"Exit"
|
|
]
|
|
|
|
def render(self) -> None:
|
|
"""Render main menu screen"""
|
|
# Header
|
|
active_profile = self.data_manager.active_profile
|
|
subtitle = f"Active: {active_profile}" if active_profile else "No active profile"
|
|
self.ui_renderer.draw_header("Profile Manager", subtitle)
|
|
|
|
# API status
|
|
api_status = "API: Connected" if self.data_manager.api_enabled else "API: Offline"
|
|
api_color = 'light_green' if self.data_manager.api_enabled else 'red'
|
|
self.ui_renderer.draw_text(api_status, 320, 80, api_color, 'tiny', center=True)
|
|
|
|
# Device ID
|
|
device_text = f"Device: {self.data_manager.device_id}"
|
|
self.ui_renderer.draw_text(device_text, 320, 95, 'light_gray', 'tiny', center=True)
|
|
|
|
# Draw menu panel
|
|
self.ui_renderer.draw_panel(120, 120, 400, 240, 'dark_gray', 'gray')
|
|
|
|
# Draw menu buttons
|
|
for i, item in enumerate(self.menu_items):
|
|
button_y = 135 + i * 38
|
|
selected = (i == self.selected_index)
|
|
|
|
# Gray out unavailable options
|
|
disabled = False
|
|
display_text = item
|
|
|
|
if (item in ["Edit Settings", "Profile Stats"]) and not active_profile:
|
|
disabled = True
|
|
display_text = f"{item} (No Profile)"
|
|
elif item == "Leaderboard" and not self.data_manager.api_enabled:
|
|
disabled = True
|
|
display_text = f"{item} (Offline)"
|
|
|
|
self.ui_renderer.draw_button(display_text, 180, button_y, 280, 30,
|
|
selected, disabled)
|
|
|
|
# Help text
|
|
self.ui_renderer.draw_footer_help(self.get_help_text())
|
|
|
|
def handle_input(self, action: str) -> bool:
|
|
"""Handle main menu input"""
|
|
if action == 'up':
|
|
self.navigate_up()
|
|
return True
|
|
elif action == 'down':
|
|
self.navigate_down(len(self.menu_items) - 1)
|
|
return True
|
|
elif action == 'confirm':
|
|
self.handle_confirm()
|
|
return True
|
|
elif action == 'back':
|
|
# Exit application from main menu
|
|
return False
|
|
|
|
return False
|
|
|
|
def handle_confirm(self) -> None:
|
|
"""Handle main menu selections"""
|
|
index = self.selected_index
|
|
|
|
if index == 0: # Create Profile
|
|
self.screen_manager.set_screen("create_profile")
|
|
elif index == 1: # Select Profile
|
|
self.screen_manager.set_screen("profile_list")
|
|
elif index == 2: # Settings
|
|
if self.data_manager.active_profile:
|
|
self.screen_manager.set_screen("edit_profile")
|
|
elif index == 3: # Leaderboard
|
|
if self.data_manager.api_enabled:
|
|
self.screen_manager.set_screen("leaderboard")
|
|
elif index == 4: # Profile Stats
|
|
if self.data_manager.active_profile:
|
|
self.screen_manager.set_screen("profile_stats")
|
|
elif index == 5: # Exit
|
|
return False
|
|
|
|
def get_help_text(self) -> str:
|
|
"""Get help text for main menu"""
|
|
return "↑↓ Navigate • Enter Confirm • Escape Exit"
|