from enum import StrEnum from enum import Enum, auto from pathlib import Path from typing import Dict from PyQt6.QtCore import Qt from PyQt6.QtGui import QIcon # Paths PACKAGE_ROOT = Path(__file__).resolve().parent VIEW_ROOT = PACKAGE_ROOT / "view" RESOURCES_DIR = VIEW_ROOT / "resources" ROLE_TYPE = Qt.ItemDataRole.UserRole ROLE_ID = Qt.ItemDataRole.UserRole + 1 class IconName(str, Enum): UNDO = ("undo",) REDO = ("redo",) PAIRING = ("pairing",) DRAW = ("draw",) DELETE = ("delete",) SAVE_AS = ("save_as",) SAVE = ("save",) NEW = ("new",) EXIT = ("exit",) END = ("end",) OPEN = ("load",) ONGOING = ("ongoing",) EXPORT = ("export",) EDIT = ("edit",) ADD = ("add",) ABOUT = ("about",) WARS = ("wars",) DONE = ("done",) WIN = ("win",) PLAYERS = ("players",) WARCHRON = "warchron" class Icons: _cache: Dict[str, QIcon] = {} _paths = { IconName.UNDO: "arrow-curve-180-left", IconName.REDO: "arrow-curve", IconName.PAIRING: "arrow-switch", IconName.DRAW: "balance.png", IconName.DELETE: "cross.png", IconName.SAVE_AS: "disk--pencil.png", IconName.SAVE: "disk.png", IconName.NEW: "document.png", IconName.EXIT: "door--arrow.png", IconName.END: "flag-white.png", IconName.OPEN: "folder.png", IconName.ONGOING: "hourglass.png", IconName.EXPORT: "notebook--arrow.png", IconName.EDIT: "pencil.png", IconName.ADD: "plus.png", IconName.ABOUT: "question.png", IconName.WARS: "swords-small.png", IconName.DONE: "tick.png", IconName.WIN: "trophy.png", IconName.PLAYERS: "users.png", IconName.WARCHRON: "warchron_logo.png", } @classmethod def get(cls, name: IconName) -> QIcon: if name not in cls._cache: path = RESOURCES_DIR / cls._paths[name] cls._cache[name] = QIcon(str(path)) return cls._cache[name] class ItemType(StrEnum): PLAYER = "player" WAR = "war" CAMPAIGN = "campaign" ROUND = "round" OBJECTIVE = "objective" WAR_PARTICIPANT = "war_participant" SECTOR = "sector" CAMPAIGN_PARTICIPANT = "campaign_participant" CHOICE = "choice" BATTLE = "battle" class RefreshScope(Enum): NONE = auto() PLAYERS_LIST = auto() WARS_TREE = auto() WAR_DETAILS = auto() CAMPAIGN_DETAILS = auto() ROUND_DETAILS = auto() CURRENT_SELECTION_DETAILS = auto() class ContextType(StrEnum): WAR = "war" CAMPAIGN = "campaign" CHOICE = "choice" BATTLE = "battle"