from enum import Enum, auto from PyQt6.QtGui import QIcon from pathlib import Path import requests import os class IconType(Enum): """Типы иконок""" HOME = auto() MODELS = auto() SETTINGS = auto() GENERATE = auto() ADD = auto() DELETE = auto() REFRESH = auto() SAVE = auto() CLOSE = auto() SUCCESS = auto() # Навигация MENU = "menu" BACK = "arrow-back" FORWARD = "arrow-forward" # Действия REMOVE = "remove" EDIT = "edit" SEARCH = "search" # Медиа IMAGE = auto() VIDEO = "video" AUDIO = "audio" PLAY = "play" PAUSE = "pause" STOP = "stop" # Статусы WARNING = "warning" ERROR = "error" INFO = "info" # Интерфейс MINIMIZE = "minimize" MAXIMIZE = "maximize" RESTORE = "restore" # Тема LIGHT_MODE = "light-mode" DARK_MODE = "dark-mode" class IconManager: """Менеджер иконок""" _instance = None def __init__(self): self.icons = {} self.load_icons() @classmethod def get_instance(cls): """Получить экземпляр менеджера иконок (Singleton)""" if cls._instance is None: cls._instance = IconManager() return cls._instance def load_icons(self): """Загрузка иконок""" icons_dir = Path("resources/icons") # Сопоставление типов иконок с файлами icon_files = { IconType.HOME: "home.svg", IconType.MODELS: "models.svg", IconType.SETTINGS: "settings.svg", IconType.GENERATE: "generate.svg", IconType.ADD: "add.svg", IconType.DELETE: "delete.svg", IconType.REFRESH: "refresh.svg", IconType.SAVE: "save.svg", IconType.CLOSE: "close.svg", IconType.SUCCESS: "success.svg", } # Загружаем иконки for icon_type, filename in icon_files.items(): icon_path = icons_dir / filename if icon_path.exists(): self.icons[icon_type] = QIcon(str(icon_path)) else: print(f"Иконка не найдена: {icon_path}") def get_icon(self, icon_type: IconType) -> QIcon: """Получить иконку по типу""" return self.icons.get(icon_type, QIcon()) def get_themed_icon(self, icon_type: IconType, theme: str) -> QIcon: """Получение иконки с учетом темы""" icon_file = Path("resources/icons") / theme / f"{icon_type.value}.svg" if icon_file.exists(): return QIcon(str(icon_file)) return self.get_icon(icon_type)