""" EU-Utility - System Tray Icon (Simplified) ========================================== Simple, responsive system tray icon. """ from PyQt6.QtWidgets import QSystemTrayIcon, QMenu, QApplication, QWidget from PyQt6.QtGui import QAction, QIcon, QColor, QPainter, QFont, QPixmap from PyQt6.QtCore import pyqtSignal, Qt class TrayIcon(QWidget): """Simple system tray icon for EU-Utility.""" show_dashboard = pyqtSignal() toggle_activity_bar = pyqtSignal() open_settings = pyqtSignal() quit_app = pyqtSignal() def __init__(self, app: QApplication, parent=None): super().__init__(parent) self.app = app # Create icon self._create_icon() # Create menu (but don't set it yet) self._create_menu() # Connect signals self.tray_icon.activated.connect(self._on_activated) def _create_icon(self): """Create tray icon.""" # Create simple icon px = QPixmap(64, 64) px.fill(QColor(255, 140, 66)) # Orange painter = QPainter(px) painter.setPen(QColor(255, 255, 255)) font = QFont("Segoe UI", 24, QFont.Weight.Bold) painter.setFont(font) painter.drawText(px.rect(), 0x84, "EU") # AlignCenter painter.end() self.tray_icon = QSystemTrayIcon(self) self.tray_icon.setIcon(QIcon(px)) self.tray_icon.setToolTip("EU-Utility") self.tray_icon.show() def _create_menu(self): """Create simple context menu.""" self.menu = QMenu() # Simple actions (no emojis to avoid encoding issues) self.dashboard_action = QAction("Dashboard", self) self.dashboard_action.triggered.connect(self.show_dashboard.emit) self.menu.addAction(self.dashboard_action) self.activity_bar_action = QAction("Activity Bar", self) self.activity_bar_action.setCheckable(True) self.activity_bar_action.triggered.connect(self.toggle_activity_bar.emit) self.menu.addAction(self.activity_bar_action) self.menu.addSeparator() self.quit_action = QAction("Quit", self) self.quit_action.triggered.connect(self.quit_app.emit) self.menu.addAction(self.quit_action) # Set context menu self.tray_icon.setContextMenu(self.menu) def show(self): """Show the tray icon.""" if self.tray_icon: self.tray_icon.show() def hide(self): """Hide the tray icon.""" if self.tray_icon: self.tray_icon.hide() def isVisible(self): """Check if tray icon is visible.""" return self.tray_icon.isVisible() if self.tray_icon else False def _on_activated(self, reason): """Handle double-click.""" if reason == QSystemTrayIcon.ActivationReason.DoubleClick: self.show_dashboard.emit() def set_activity_bar_checked(self, checked: bool): """Update checkbox.""" self.activity_bar_action.setChecked(checked)