Implement main menu, profile list, and profile stats screens; add screen manager and user profile integration
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
"""
|
||||
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"
|
||||
Reference in New Issue
Block a user