Files
mice/profile_manager/screens/README.md
T

181 lines
4.3 KiB
Markdown

# Profile Manager Screen Modules
This folder contains individual screen modules for the Profile Manager, providing a clean separation of concerns and modular architecture.
## Structure
```
screens/
├── __init__.py # Module exports
├── base_screen.py # Abstract base class for all screens
├── screen_manager.py # Manages screen modules and navigation
├── main_menu_screen.py # Main menu interface
├── profile_list_screen.py # Profile selection and management
├── create_profile_screen.py # Profile creation with virtual keyboard
├── edit_profile_screen.py # Profile settings editing
├── leaderboard_screen.py # Leaderboard display (device/global)
├── profile_stats_screen.py # Detailed profile statistics
└── README.md # This file
```
## Architecture
### BaseScreen
- Abstract base class providing common interface
- Standard navigation methods (up, down, left, right)
- Input handling framework
- State management utilities
### Screen Modules
Each screen is a self-contained module with:
- **Rendering**: Complete screen display logic
- **Input Handling**: Screen-specific input processing
- **State Management**: Internal state tracking
- **Navigation**: Transitions to other screens
### ModularScreenManager
- Manages all screen module instances
- Handles screen transitions
- Provides error dialog overlay
- Maintains current screen state
## Usage
### Adding New Screens
1. **Create Screen Module**:
```python
from .base_screen import BaseScreen
class NewScreen(BaseScreen):
def render(self) -> None:
# Implement rendering logic
pass
def handle_input(self, action: str) -> bool:
# Implement input handling
pass
```
2. **Register in ScreenManager**:
```python
# In screen_manager.py _initialize_screens()
"new_screen": NewScreen(self.data_manager, self.ui_renderer, self)
```
3. **Add to Exports**:
```python
# In __init__.py
from .new_screen import NewScreen
```
### Screen Integration
To integrate with the main Profile Manager:
```python
from screens import ModularScreenManager
# Replace existing screen manager
self.screen_manager = ModularScreenManager(self.data_manager, self.ui_renderer)
# Handle input
result = self.screen_manager.handle_input(action)
# Render
self.screen_manager.render()
```
## Screen Responsibilities
### MainMenuScreen
- Primary navigation hub
- Profile status display
- API connection status
- Menu option availability
### ProfileListScreen
- Display existing profiles
- Profile selection
- Profile deletion
- Active profile indication
### CreateProfileScreen
- Virtual keyboard interface
- Profile name input
- Input validation
- Profile creation
### EditProfileScreen
- Settings adjustment interface
- Real-time value display
- Setting validation
- Changes persistence
### LeaderboardScreen
- Leaderboard data display
- Device/Global toggle
- Data refresh functionality
- User highlighting
### ProfileStatsScreen
- Comprehensive statistics
- Server sync status
- Settings summary
- Achievements display
## Benefits
### Modularity
- Each screen is independent and testable
- Clear separation of concerns
- Easy to add/remove/modify screens
### Maintainability
- Isolated screen logic
- Consistent interface pattern
- Reduced coupling between screens
### Extensibility
- Simple to add new screens
- Common functionality in base class
- Flexible navigation system
### Testability
- Individual screen unit tests
- Mock dependencies easily
- Isolated functionality testing
## Navigation Flow
```
Main Menu ─┬─ Create Profile
├─ Profile List
├─ Edit Profile (if profile active)
├─ Leaderboard (if API enabled)
├─ Profile Stats (if profile active)
└─ Exit
All screens ─→ Back to Main Menu (ESC)
```
## Input Actions
Standard actions handled by screens:
- `up`: Navigate selection up
- `down`: Navigate selection down
- `left`: Navigate left / Adjust setting
- `right`: Navigate right / Adjust setting
- `confirm`: Confirm selection / Enter
- `back`: Return to previous screen / ESC
- `delete`: Delete item / Backspace
## Error Handling
Screens can show error messages via:
```python
self.show_error("Error message")
```
The ModularScreenManager handles error dialog display and auto-dismissal.