102 lines
2.8 KiB
Python
102 lines
2.8 KiB
Python
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) |