Files
art/modules/styles/icons.py
T
2025-03-15 09:36:28 +07:00

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)