2026-01-27 11:49:37 +01:00
|
|
|
from enum import StrEnum
|
2026-01-28 16:25:40 +01:00
|
|
|
from enum import Enum, auto
|
2026-02-12 15:12:28 +01:00
|
|
|
from pathlib import Path
|
2026-01-27 11:49:37 +01:00
|
|
|
|
|
|
|
|
from PyQt6.QtCore import Qt
|
2026-02-12 15:12:28 +01:00
|
|
|
from PyQt6.QtGui import QIcon
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Paths
|
|
|
|
|
PACKAGE_ROOT = Path(__file__).resolve().parent
|
|
|
|
|
VIEW_ROOT = PACKAGE_ROOT / "view"
|
|
|
|
|
RESOURCES_DIR = VIEW_ROOT / "resources"
|
2026-01-27 11:49:37 +01:00
|
|
|
|
|
|
|
|
ROLE_TYPE = Qt.ItemDataRole.UserRole
|
|
|
|
|
ROLE_ID = Qt.ItemDataRole.UserRole + 1
|
|
|
|
|
|
2026-02-02 10:41:16 +01:00
|
|
|
|
2026-02-12 15:12:28 +01:00
|
|
|
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]
|
|
|
|
|
|
|
|
|
|
|
2026-01-27 11:49:37 +01:00
|
|
|
class ItemType(StrEnum):
|
|
|
|
|
PLAYER = "player"
|
|
|
|
|
WAR = "war"
|
|
|
|
|
CAMPAIGN = "campaign"
|
|
|
|
|
ROUND = "round"
|
2026-01-28 16:25:40 +01:00
|
|
|
OBJECTIVE = "objective"
|
|
|
|
|
WAR_PARTICIPANT = "war_participant"
|
2026-01-30 00:34:22 +01:00
|
|
|
SECTOR = "sector"
|
|
|
|
|
CAMPAIGN_PARTICIPANT = "campaign_participant"
|
2026-01-30 10:52:19 +01:00
|
|
|
CHOICE = "choice"
|
|
|
|
|
BATTLE = "battle"
|
2026-01-28 16:25:40 +01:00
|
|
|
|
2026-02-02 10:41:16 +01:00
|
|
|
|
2026-01-28 16:25:40 +01:00
|
|
|
class RefreshScope(Enum):
|
|
|
|
|
NONE = auto()
|
|
|
|
|
PLAYERS_LIST = auto()
|
|
|
|
|
WARS_TREE = auto()
|
|
|
|
|
WAR_DETAILS = auto()
|
|
|
|
|
CAMPAIGN_DETAILS = auto()
|
|
|
|
|
ROUND_DETAILS = auto()
|
2026-02-10 11:09:58 +01:00
|
|
|
CURRENT_SELECTION_DETAILS = auto()
|
2026-02-11 19:22:43 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class ContextType(StrEnum):
|
|
|
|
|
WAR = "war"
|
|
|
|
|
CAMPAIGN = "campaign"
|
|
|
|
|
CHOICE = "choice"
|
|
|
|
|
BATTLE = "battle"
|