83 lines
2.7 KiB
Python
83 lines
2.7 KiB
Python
"""
|
|
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
|
|
from PyQt6.QtCore import pyqtSignal
|
|
|
|
|
|
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 _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)
|