230 lines
7.7 KiB
Markdown
230 lines
7.7 KiB
Markdown
# Window Management & System Tray Guide
|
||
|
||
Your rmtPocketWatcher application now includes comprehensive window management and system tray functionality for a professional desktop experience.
|
||
|
||
## 🪟 Window Controls
|
||
|
||
### Title Bar Features
|
||
- **Draggable Area**: Click and drag anywhere on the title bar to move the window
|
||
- **Double-click**: Double-click the title bar to maximize/restore the window
|
||
- **Custom Controls**: Professional-looking minimize, maximize, and close buttons
|
||
|
||
### Window Control Buttons
|
||
|
||
| Button | Icon | Function | Tooltip |
|
||
|--------|------|----------|---------|
|
||
| **Minimize** | `−` | Minimizes to system tray | "Minimize to system tray" |
|
||
| **Maximize** | `⛶`/`⧉` | Toggle maximize/restore | "Maximize window" / "Restore window" |
|
||
| **Close** | `×` | Closes to system tray | "Close to system tray" |
|
||
|
||
### Key Behaviors
|
||
- **Close button** minimizes to tray instead of exiting the application
|
||
- **Minimize button** sends the window directly to the system tray
|
||
- **Window dragging** works from anywhere on the title bar
|
||
- **Maximize toggle** remembers window state
|
||
|
||
## 🔔 System Tray Integration
|
||
|
||
### Tray Icon Features
|
||
- **Dynamic Tooltip**: Shows current connection status
|
||
- **Single Click**: Toggle window visibility (show/hide)
|
||
- **Right Click**: Opens context menu with options
|
||
- **Visual Indicator**: Icon represents the application state
|
||
|
||
### System Tray Menu
|
||
|
||
| Menu Item | Function |
|
||
|-----------|----------|
|
||
| **Show rmtPocketWatcher** | Restores window from tray |
|
||
| **Check for Updates** | Shows window and triggers update check |
|
||
| **🔄 Update Available!** | Appears when updates are detected |
|
||
| **About** | Shows application information dialog |
|
||
| **Exit** | Completely closes the application |
|
||
|
||
### Dynamic Status Updates
|
||
- **Tooltip Updates**: Reflects connection status ("Connected", "Disconnecting", etc.)
|
||
- **Menu Updates**: Shows update availability in real-time
|
||
- **Status Integration**: Syncs with price provider and update provider
|
||
|
||
## 🎛️ User Experience
|
||
|
||
### Window Lifecycle
|
||
1. **Startup**: Window appears normally
|
||
2. **Minimize**: Window hides to system tray
|
||
3. **Tray Click**: Window restores and focuses
|
||
4. **Close**: Window hides to tray (doesn't exit)
|
||
5. **Exit**: Only via tray menu "Exit" option
|
||
|
||
### Professional Features
|
||
- **No Taskbar Clutter**: Minimized windows don't show in taskbar
|
||
- **Background Operation**: App continues running when minimized
|
||
- **Quick Access**: Single click to restore from tray
|
||
- **Status Awareness**: Tray shows current application state
|
||
|
||
## 🔧 Technical Implementation
|
||
|
||
### Core Components
|
||
|
||
#### WindowService (`lib/services/window_service.dart`)
|
||
- Manages all window operations
|
||
- Handles system tray integration
|
||
- Provides event listeners for window and tray events
|
||
- Integrates with application providers
|
||
|
||
#### Key Methods
|
||
```dart
|
||
WindowService().minimizeToTray() // Hide to system tray
|
||
WindowService().showWindow() // Restore from tray
|
||
WindowService().maximizeWindow() // Toggle maximize state
|
||
WindowService().closeWindow() // Close to tray
|
||
WindowService().exitApp() // Complete application exit
|
||
```
|
||
|
||
#### Provider Integration
|
||
- **PriceProvider**: Updates tray tooltip with connection status
|
||
- **UpdateProvider**: Updates tray menu with update availability
|
||
- **Real-time Sync**: Tray reflects current application state
|
||
|
||
### Event Handling
|
||
|
||
#### Window Events
|
||
- `onWindowClose()`: Intercepts close and minimizes to tray
|
||
- `onWindowMinimize()`: Handles minimize operations
|
||
- `onWindowRestore()`: Manages window restoration
|
||
- `onWindowMaximize()`/`onWindowUnmaximize()`: Toggle states
|
||
|
||
#### Tray Events
|
||
- `onTrayIconMouseDown()`: Single click to toggle visibility
|
||
- `onTrayIconRightMouseDown()`: Right click for context menu
|
||
- `onTrayMenuItemClick()`: Handle menu item selections
|
||
|
||
## 🎨 Visual Design
|
||
|
||
### Title Bar Styling
|
||
- **Background**: Dark theme (`#1A1F3A`)
|
||
- **Text**: White application name and organization
|
||
- **Buttons**: Consistent with application theme
|
||
- **Height**: 40px for comfortable interaction
|
||
|
||
### System Tray
|
||
- **Icon**: Application logo (falls back to analytics icon)
|
||
- **Tooltip**: Dynamic status information
|
||
- **Menu**: Consistent with application theme
|
||
|
||
## 🚀 Usage Examples
|
||
|
||
### For End Users
|
||
|
||
#### Basic Window Management
|
||
```
|
||
• Drag title bar to move window
|
||
• Double-click title bar to maximize
|
||
• Click minimize (−) to hide to tray
|
||
• Click close (×) to hide to tray
|
||
• Right-click tray icon for menu
|
||
• Click "Exit" in tray menu to quit
|
||
```
|
||
|
||
#### System Tray Operations
|
||
```
|
||
• Single-click tray icon: Show/hide window
|
||
• Right-click tray icon: Open context menu
|
||
• Menu → "Show rmtPocketWatcher": Restore window
|
||
• Menu → "Check for Updates": Check for new versions
|
||
• Menu → "About": View application information
|
||
• Menu → "Exit": Completely close application
|
||
```
|
||
|
||
### For Developers
|
||
|
||
#### Integrating with Providers
|
||
```dart
|
||
// Update tray status based on connection
|
||
WindowService().updateTrayTooltip('Connected to servers');
|
||
|
||
// Update menu with update availability
|
||
WindowService().updateTrayMenu(hasUpdate: true);
|
||
|
||
// Show about dialog from tray
|
||
WindowService()._showAboutDialog();
|
||
```
|
||
|
||
## 🔒 Security & Privacy
|
||
|
||
### Safe Operations
|
||
- **No Data Collection**: Window management doesn't collect user data
|
||
- **Local Storage**: All preferences stored locally
|
||
- **Secure Minimize**: Sensitive data hidden when minimized
|
||
- **Clean Exit**: Proper cleanup on application exit
|
||
|
||
### User Control
|
||
- **Explicit Actions**: All operations require user interaction
|
||
- **Clear Feedback**: Visual and tooltip feedback for all actions
|
||
- **Reversible**: All window states can be restored
|
||
- **Transparent**: Clear indication of application status
|
||
|
||
## 🛠️ Troubleshooting
|
||
|
||
### Common Issues
|
||
|
||
#### System Tray Icon Not Appearing
|
||
- **Cause**: System tray initialization failed
|
||
- **Solution**: Check Windows notification area settings
|
||
- **Workaround**: Use window controls instead of tray
|
||
|
||
#### Window Won't Restore
|
||
- **Cause**: Window service not initialized
|
||
- **Solution**: Restart application
|
||
- **Debug**: Check console for initialization errors
|
||
|
||
#### Tray Menu Not Working
|
||
- **Cause**: Context menu creation failed
|
||
- **Solution**: Update tray manager package
|
||
- **Workaround**: Use window controls
|
||
|
||
### Debug Information
|
||
```dart
|
||
// Check window service status
|
||
print('Window service initialized: ${WindowService().isInitialized}');
|
||
print('Minimized to tray: ${WindowService().isMinimizedToTray}');
|
||
```
|
||
|
||
## 📈 Future Enhancements
|
||
|
||
### Planned Features
|
||
- **Tray Notifications**: Show price alerts in tray
|
||
- **Quick Actions**: Direct price check from tray menu
|
||
- **Status Icons**: Different icons for different connection states
|
||
- **Keyboard Shortcuts**: Global hotkeys for window operations
|
||
|
||
### Customization Options
|
||
- **Tray Behavior**: Option to minimize to taskbar instead
|
||
- **Close Behavior**: Option to exit instead of minimize
|
||
- **Startup Options**: Start minimized to tray
|
||
- **Theme Integration**: Tray menu theme matching
|
||
|
||
## 📋 Summary
|
||
|
||
Your rmtPocketWatcher application now provides:
|
||
|
||
✅ **Professional Window Management**
|
||
- Draggable title bar with custom controls
|
||
- Proper minimize, maximize, and close operations
|
||
- Seamless window state management
|
||
|
||
✅ **Complete System Tray Integration**
|
||
- Hide to tray instead of taskbar clutter
|
||
- Dynamic status updates in tooltip
|
||
- Full-featured context menu
|
||
|
||
✅ **User-Friendly Experience**
|
||
- Intuitive window operations
|
||
- Clear visual feedback
|
||
- Professional desktop application behavior
|
||
|
||
✅ **Developer-Friendly Architecture**
|
||
- Clean service-based implementation
|
||
- Provider integration for real-time updates
|
||
- Extensible for future enhancements
|
||
|
||
The application now behaves like a professional desktop application with proper window management and system tray integration, providing users with a seamless and intuitive experience for monitoring AUEC prices. |