You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
3.7 KiB

"""
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"